From 0f0b9eab1f0f2b605a12ba1fb2d1ba443270f356 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 12 Apr 2016 18:09:27 +0200 Subject: [PATCH 001/371] Create filter has different layout than rollout and the other widgets --> fixed In addition I add a constant for the header caption Signed-off-by: Melanie Retter --- .../ui/filtermanagement/TargetFilterHeader.java | 15 ++++++++++----- .../hawkbit/ui/utils/SPUIComponetIdProvider.java | 5 +++++ .../eclipse/hawkbit/ui/utils/SPUIDefinitions.java | 6 +++++- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java index 08592f20c..12b4311f1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java @@ -13,7 +13,6 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmall; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; @@ -79,7 +78,7 @@ public class TargetFilterHeader extends VerticalLayout { } private Label createHeaderCaption() { - final Label captionLabel = SPUIComponentProvider.getLabel("Custom Filters", + final Label captionLabel = SPUIComponentProvider.getLabel(getHeaderCaption(), SPUILabelDefinitions.SP_WIDGET_CAPTION); return captionLabel; } @@ -110,10 +109,9 @@ public class TargetFilterHeader extends VerticalLayout { } private Button createAddButton() { - final Button button = SPUIComponentProvider.getButton("camp.search.add.Id", "Create Filter", "Create Filter", - "", false, null, SPUIButtonStyleSmall.class); + final Button button = SPUIComponentProvider.getButton(getAddIconId(), "", "", null, false, FontAwesome.PLUS, + SPUIButtonStyleSmallNoBorder.class); button.addClickListener(event -> addNewFilter()); - button.addStyleName("on-focus-no-border link"); return button; } @@ -187,4 +185,11 @@ public class TargetFilterHeader extends VerticalLayout { eventBus.publish(this, CustomFilterUIEvent.FILTER_BY_CUST_FILTER_TEXT_REMOVE); } + protected String getAddIconId() { + return SPUIComponetIdProvider.TARGET_FILTER_ADD_ICON_ID; + } + + protected String getHeaderCaption() { + return SPUIDefinitions.TARGET_FILTER_LIST_HEADER_CAPTION; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java index 48e501e1d..f2f94ce59 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java @@ -75,6 +75,11 @@ public final class SPUIComponetIdProvider { */ public static final String TARGET_TEXT_FIELD = "target.search.textfield"; + /** + * ID for add target filter icon + */ + public static final String TARGET_FILTER_ADD_ICON_ID = "target.filter.add.id"; + /** * ID-Dist. */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java index b29283ef8..75ea912a9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java @@ -922,6 +922,11 @@ public final class SPUIDefinitions { */ public static final String CUSTOM_FILTER_ASSIGNED_DS = "Assigned DS"; + /** + * TARGET_FILTER_MANAGEMENT - header caption . + */ + public static final String TARGET_FILTER_LIST_HEADER_CAPTION = "Custom Filters"; + /** * CUSTOM_FILTER_STATUS. */ @@ -1001,7 +1006,6 @@ public final class SPUIDefinitions { */ public static final String ROLLOUT_GROUP_STARTED_DATE = "Started date"; - /** * Rollout group status column property. */ From 22f4d9ffcf9a84e6287f1be5ad8316ad1bf53638 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Fri, 15 Apr 2016 12:37:40 +0200 Subject: [PATCH 002/371] Created hawkbit-ddi-api maven module and resource interfaces for the module Signed-off-by: Jonathan Philip Knoblauch --- hawkbit-ddi-api/pom.xml | 38 +++ .../hawkbit/ddi}/ControllerConstants.java | 15 +- .../api/ArtifactStoreControllerDdiApi.java | 70 ++++++ .../hawkbit/ddi/api/RootControllerDdiApi.java | 218 ++++++++++++++++++ .../hawkbit/ddi}/model/ActionFeedback.java | 25 +- .../eclipse/hawkbit/ddi}/model/Artifact.java | 24 +- .../eclipse/hawkbit/ddi}/model/Cancel.java | 15 +- .../ddi}/model/CancelActionToStop.java | 13 +- .../org/eclipse/hawkbit/ddi}/model/Chunk.java | 10 +- .../eclipse/hawkbit/ddi}/model/Config.java | 3 +- .../hawkbit/ddi}/model/ConfigData.java | 12 +- .../hawkbit/ddi}/model/ControllerBase.java | 6 +- .../hawkbit/ddi}/model/Deployment.java | 15 +- .../hawkbit/ddi}/model/DeploymentBase.java | 8 +- .../eclipse/hawkbit/ddi}/model/Polling.java | 3 +- .../eclipse/hawkbit/ddi}/model/Progress.java | 8 +- .../eclipse/hawkbit/ddi}/model/Result.java | 13 +- .../eclipse/hawkbit/ddi}/model/Status.java | 11 +- hawkbit-rest-resource/pom.xml | 20 +- .../controller/ArtifactStoreController.java | 108 +++------ .../controller/DataConversionHelper.java | 11 +- .../controller/EnableDirectDeviceApi.java | 3 - .../FileSteamingFailedException.java | 12 +- .../hawkbit/controller/RootController.java | 198 +++------------- pom.xml | 14 +- 25 files changed, 447 insertions(+), 426 deletions(-) create mode 100644 hawkbit-ddi-api/pom.xml rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/ControllerConstants.java (80%) create mode 100644 hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/ArtifactStoreControllerDdiApi.java create mode 100644 hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/ActionFeedback.java (70%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/Artifact.java (76%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/Cancel.java (84%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/CancelActionToStop.java (80%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/Chunk.java (90%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/Config.java (93%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/ConfigData.java (89%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/ControllerBase.java (89%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/Deployment.java (89%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/DeploymentBase.java (90%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/Polling.java (93%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/Progress.java (90%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/Result.java (91%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi}/model/Status.java (93%) diff --git a/hawkbit-ddi-api/pom.xml b/hawkbit-ddi-api/pom.xml new file mode 100644 index 000000000..6dd30fdf9 --- /dev/null +++ b/hawkbit-ddi-api/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-parent + 0.2.0-SNAPSHOT + + hawkbit-ddi-api + hawkBit :: DDI API + + + + org.eclipse.hawkbit + hawkbit-rest-api + ${project.version} + + + javax.servlet + javax.servlet-api + provided + + + commons-io + commons-io + 2.4 + + + org.springframework.security + spring-security-web + + + org.hibernate + hibernate-validator + + + diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ControllerConstants.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/ControllerConstants.java similarity index 80% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ControllerConstants.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/ControllerConstants.java index fd7f125c5..959f8488b 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ControllerConstants.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/ControllerConstants.java @@ -6,14 +6,13 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi; /** - * - * - * + * Constants for the direct device integration rest resources. */ public final class ControllerConstants { + /** * The base URL mapping of the direct device integration rest resources. */ @@ -37,7 +36,7 @@ public final class ControllerConstants { /** * Feedback channel. */ - static final String FEEDBACK = "feedback"; + public static final String FEEDBACK = "feedback"; /** * Config data action resources. @@ -47,17 +46,17 @@ public final class ControllerConstants { /** * The artifact URL mapping rest resource. */ - static final String ARTIFACT_DOWNLOAD = "artifact"; + public static final String ARTIFACT_DOWNLOAD = "artifact"; /** * The artifact by filename URL mapping rest resource. */ - static final String ARTIFACT_DOWNLOAD_BY_FILENAME = "/filename"; + public static final String ARTIFACT_DOWNLOAD_BY_FILENAME = "/filename"; /** * File suffix for MDH hash download (see Linux md5sum). */ - static final String ARTIFACT_MD5_DWNL_SUFFIX = ".MD5SUM"; + public static final String ARTIFACT_MD5_DWNL_SUFFIX = ".MD5SUM"; // constant class, private constructor. private ControllerConstants() { diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/ArtifactStoreControllerDdiApi.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/ArtifactStoreControllerDdiApi.java new file mode 100644 index 000000000..5df63b1b5 --- /dev/null +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/ArtifactStoreControllerDdiApi.java @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.api; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.hawkbit.ddi.ControllerConstants; +import org.eclipse.hawkbit.ddi.model.Artifact; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.web.bind.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * REST resource handling for artifact download operations. + */ +@RequestMapping(ControllerConstants.ARTIFACTS_V1_REQUEST_MAPPING) +public interface ArtifactStoreControllerDdiApi { + + /** + * Handles GET {@link Artifact} download request. This could be full or + * partial download request. + * + * @param fileName + * to search for + * @param response + * to write to + * @param request + * from the client + * @param targetid + * of authenticated target + * + * @return response of the servlet which in case of success is status code + * {@link HttpStatus#OK} or in case of partial download + * {@link HttpStatus#PARTIAL_CONTENT}. + */ + @RequestMapping(method = RequestMethod.GET, value = ControllerConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + + "/{fileName}") + @ResponseBody + public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, + final HttpServletResponse response, final HttpServletRequest request, + @AuthenticationPrincipal final String targetid); + + /** + * Handles GET {@link Artifact} MD5 checksum file download request. + * + * @param fileName + * to search for + * @param response + * to write to + * + * @return response of the servlet + */ + @RequestMapping(method = RequestMethod.GET, value = ControllerConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + + "/{fileName}" + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX) + @ResponseBody + public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName, + final HttpServletResponse response); + +} diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java new file mode 100644 index 000000000..8e51e0b86 --- /dev/null +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java @@ -0,0 +1,218 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ddi.api; + +import java.lang.annotation.Target; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +import org.eclipse.hawkbit.ddi.ControllerConstants; +import org.eclipse.hawkbit.ddi.model.ActionFeedback; +import org.eclipse.hawkbit.ddi.model.Artifact; +import org.eclipse.hawkbit.ddi.model.Cancel; +import org.eclipse.hawkbit.ddi.model.ConfigData; +import org.eclipse.hawkbit.ddi.model.ControllerBase; +import org.eclipse.hawkbit.ddi.model.DeploymentBase; +import org.hibernate.validator.constraints.NotEmpty; +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; + +/** + * REST resource handling for root controller CRUD operations. + */ +@RequestMapping(ControllerConstants.BASE_V1_REQUEST_MAPPING) +public interface RootControllerDdiApi { + + /** + * Returns all artifacts of a given software module and target. + * + * @param targetid + * of the {@link Target} that matches to + * {@link Target#getControllerId()} + * @param softwareModuleId + * of the {@link SoftwareModule} + * @return the response + */ + @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts", produces = { + "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) + public ResponseEntity> getSoftwareModulesArtifacts( + @PathVariable("targetid") final String targetid, + @PathVariable("softwareModuleId") final Long softwareModuleId); + + /** + * Root resource for an individual {@link Target}. + * + * @param targetid + * of the {@link Target} that matches to + * {@link Target#getControllerId()} + * @param request + * the HTTP request injected by spring + * @return the response + */ + @RequestMapping(method = RequestMethod.GET, value = "/{targetid}", produces = { "application/hal+json", + MediaType.APPLICATION_JSON_VALUE }) + public ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid, + final HttpServletRequest request); + + /** + * Handles GET {@link Artifact} download request. This could be full or + * partial (as specified by RFC7233 (Range Requests)) download request. + * + * @param targetid + * of the related + * @param softwareModuleId + * of the parent {@link SoftwareModule} + * @param fileName + * of the related {@link LocalArtifact} + * @param response + * of the servlet + * @param request + * from the client + * + * @return response of the servlet which in case of success is status code + * {@link HttpStatus#OK} or in case of partial download + * {@link HttpStatus#PARTIAL_CONTENT}. + */ + @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}") + public ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, + @PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("fileName") final String fileName, final HttpServletResponse response, + final HttpServletRequest request); + + /** + * Handles GET {@link Artifact} MD5 checksum file download request. + * + * @param targetid + * of the related + * @param softwareModuleId + * of the parent {@link SoftwareModule} + * @param fileName + * of the related {@link LocalArtifact} + * @param response + * of the servlet + * @param request + * the HTTP request injected by spring + * + * @return {@link ResponseEntity} with status {@link HttpStatus#OK} if + * successful + */ + @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}" + + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX, produces = MediaType.TEXT_PLAIN_VALUE) + public ResponseEntity downloadArtifactMd5(@PathVariable("targetid") final String targetid, + @PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("fileName") final String fileName, final HttpServletResponse response, + final HttpServletRequest request); + + /** + * Resource for {@link SoftwareModule} {@link UpdateAction}s. + * + * @param targetid + * of the {@link Target} that matches to + * {@link Target#getControllerId()} + * @param actionId + * of the {@link DeploymentBase} that matches to + * {@link Target#getActiveActions()} + * @param resource + * an hashcode of the resource which indicates if the action has + * been changed, e.g. from 'soft' to 'force' and the eTag needs + * to be re-generated + * @param request + * the HTTP request injected by spring + * @return the response + */ + @RequestMapping(value = "/{targetid}/" + ControllerConstants.DEPLOYMENT_BASE_ACTION + + "/{actionId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getControllerBasedeploymentAction( + @PathVariable("targetid") @NotEmpty final String targetid, + @PathVariable("actionId") @NotEmpty final Long actionId, + @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource, + final HttpServletRequest request); + + /** + * This is the feedback channel for the {@link DeploymentBase} action. + * + * @param feedback + * to provide + * @param targetid + * of the {@link Target} that matches to + * {@link Target#getControllerId()} + * @param actionId + * of the action we have feedback for + * @param request + * the HTTP request injected by spring + * + * @return the response + */ + @RequestMapping(value = "/{targetid}/" + ControllerConstants.DEPLOYMENT_BASE_ACTION + "/{actionId}/" + + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final ActionFeedback feedback, + @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, + final HttpServletRequest request); + + /** + * This is the feedback channel for the config data action. + * + * @param configData + * as body + * @param targetid + * to provide data for + * @param request + * the HTTP request injected by spring + * + * @return status of the request + */ + @RequestMapping(value = "/{targetid}/" + + ControllerConstants.CONFIG_DATA_ACTION, method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity putConfigData(@Valid @RequestBody final ConfigData configData, + @PathVariable("targetid") final String targetid, final HttpServletRequest request); + + /** + * {@link RequestMethod.GET} method for the {@link Cancel} action. + * + * @param targetid + * ID of the calling target + * @param actionId + * of the action + * @param request + * the HTTP request injected by spring + * + * @return the {@link Cancel} response + */ + @RequestMapping(value = "/{targetid}/" + ControllerConstants.CANCEL_ACTION + + "/{actionId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getControllerCancelAction(@PathVariable("targetid") @NotEmpty final String targetid, + @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request); + + /** + * {@link RequestMethod.POST} method receiving the {@link ActionFeedback} + * from the target. + * + * @param feedback + * the {@link ActionFeedback} from the target. + * @param targetid + * the ID of the calling target + * @param actionId + * of the action we have feedback for + * @param request + * the HTTP request injected by spring + * + * @return the {@link ActionFeedback} response + */ + + @RequestMapping(value = "/{targetid}/" + ControllerConstants.CANCEL_ACTION + "/{actionId}/" + + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity postCancelActionFeedback(@Valid @RequestBody final ActionFeedback feedback, + @PathVariable("targetid") @NotEmpty final String targetid, + @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request); + +} diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/ActionFeedback.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ActionFeedback.java similarity index 70% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/ActionFeedback.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ActionFeedback.java index 3fe511e49..19ef0c0a9 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/ActionFeedback.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ActionFeedback.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import javax.validation.constraints.NotNull; @@ -15,16 +15,16 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; /** - * *

- * After the SP Target has executed an action, received by a GET(URL) request it - * reports the completion of it to the SP Server with a action status message, - * i.e. with a PUT message to the feedback channel, i.e. PUT URL/feedback. This - * message could be used not only at the end of execution but also as status - * updates during a longer lasting execution period. The format of each action - * answer message is defined below at each action. But it is expected, that the - * contents of the message answers have all a similar structure: The content - * starts with a generic header and additional elements. * + * After the HawkBit Target has executed an action, received by a GET(URL) + * request it reports the completion of it to the HawkBit Server with a action + * status message, i.e. with a PUT message to the feedback channel, i.e. PUT + * URL/feedback. This message could be used not only at the end of execution but + * also as status updates during a longer lasting execution period. The format + * of each action answer message is defined below at each action. But it is + * expected, that the contents of the message answers have all a similar + * structure: The content starts with a generic header and additional elements. + * * *

* *

@@ -72,11 +72,6 @@ public class ActionFeedback { return status; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "ActionFeedback [id=" + id + ", time=" + time + ", status=" + status + "]"; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Artifact.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Artifact.java similarity index 76% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Artifact.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Artifact.java index b995491d9..1eac01bbe 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Artifact.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Artifact.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import javax.validation.constraints.NotNull; @@ -17,7 +17,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * Download information for all artifacts related to a specific {@link Chunk}. - * */ public class Artifact extends ResourceSupport { @@ -31,47 +30,26 @@ public class Artifact extends ResourceSupport { @JsonProperty private Long size; - /** - * @return the hashes - */ public ArtifactHash getHashes() { return hashes; } - /** - * @param hashes - * the hashes to set - */ public void setHashes(final ArtifactHash hashes) { this.hashes = hashes; } - /** - * @return the fileName - */ public String getFilename() { return filename; } - /** - * @param fileName - * the fileName to set - */ public void setFilename(final String fileName) { filename = fileName; } - /** - * @return the size - */ public Long getSize() { return size; } - /** - * @param size - * the size to set - */ public void setSize(final Long size) { this.size = size; } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Cancel.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Cancel.java similarity index 84% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Cancel.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Cancel.java index 77055828f..f4312d964 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Cancel.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Cancel.java @@ -6,15 +6,15 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import javax.validation.constraints.NotNull; /** * Cancel action to be provided to the target. - * */ public class Cancel { + private final String id; @NotNull @@ -34,25 +34,14 @@ public class Cancel { this.cancelAction = cancelAction; } - /** - * @return the id - */ public String getId() { return id; } - /** - * @return the cancelAction - */ public CancelActionToStop getCancelAction() { return cancelAction; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "Cancel [id=" + id + ", cancelAction=" + cancelAction + "]"; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/CancelActionToStop.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/CancelActionToStop.java similarity index 80% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/CancelActionToStop.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/CancelActionToStop.java index 9b954aa57..c0348a210 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/CancelActionToStop.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/CancelActionToStop.java @@ -6,15 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.repository.model.Action; - /** * The {@link Action} that has to be stopped by the target. - * */ public class CancelActionToStop { @@ -32,18 +29,10 @@ public class CancelActionToStop { this.stopId = stopId; } - /** - * @return the stopId - */ public String getStopId() { return stopId; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "CancelAction [stopId=" + stopId + "]"; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Chunk.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Chunk.java similarity index 90% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Chunk.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Chunk.java index 66809bfbb..0282bc4ea 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Chunk.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Chunk.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import java.util.List; @@ -14,7 +14,6 @@ import javax.validation.constraints.NotNull; /** * Deployment chunks. - * */ public class Chunk { @@ -40,7 +39,6 @@ public class Chunk { * of the artifact * @param artifacts * download information - * */ public Chunk(final String part, final String version, final String name, final List artifacts) { super(); @@ -58,16 +56,10 @@ public class Chunk { return version; } - /** - * @return the name - */ public String getName() { return name; } - /** - * @return the artifacts - */ public List getArtifacts() { return artifacts; } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Config.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Config.java similarity index 93% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Config.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Config.java index 62907b26d..4809d2c09 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Config.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Config.java @@ -6,11 +6,10 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; /** * Standard configuration for the target. - * */ public class Config { diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/ConfigData.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ConfigData.java similarity index 89% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/ConfigData.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ConfigData.java index b7c330167..bd9a10520 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/ConfigData.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ConfigData.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import java.util.Map; @@ -17,7 +17,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * Feedback channel for ConfigData action. - * */ public class ConfigData extends ActionFeedback { @@ -35,7 +34,6 @@ public class ConfigData extends ActionFeedback { * is the feedback itself * @param data * contains the attributes. - * */ @JsonCreator public ConfigData(@JsonProperty(value = "id") final Long id, @JsonProperty(value = "time") final String time, @@ -45,18 +43,10 @@ public class ConfigData extends ActionFeedback { this.data = data; } - /** - * @return the data - */ public Map getData() { return data; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "ConfigData [data=" + data + ", toString()=" + super.toString() + "]"; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/ControllerBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ControllerBase.java similarity index 89% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/ControllerBase.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ControllerBase.java index d319bcf11..ff282935d 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/ControllerBase.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ControllerBase.java @@ -6,13 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import org.springframework.hateoas.ResourceSupport; /** * {@link ControllerBase} resource content. - * */ public class ControllerBase extends ResourceSupport { @@ -29,9 +28,6 @@ public class ControllerBase extends ResourceSupport { this.config = config; } - /** - * @return the config - */ public Config getConfig() { return config; } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Deployment.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Deployment.java similarity index 89% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Deployment.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Deployment.java index 57ead963c..05cd730a0 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Deployment.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Deployment.java @@ -6,17 +6,14 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import java.util.List; -import org.eclipse.hawkbit.repository.model.Action; - import com.fasterxml.jackson.annotation.JsonValue; /** * Detailed {@link UpdateAction} information. - * */ public class Deployment { @@ -57,9 +54,9 @@ public class Deployment { /** * The handling type for the update {@link Action}. - * */ public enum HandlingType { + /** * Not necessary for the command. */ @@ -81,20 +78,12 @@ public class Deployment { this.name = name; } - /** - * @return the name - */ @JsonValue public String getName() { return name; } } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "Deployment [download=" + download + ", update=" + update + ", chunks=" + chunks + "]"; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/DeploymentBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/DeploymentBase.java similarity index 90% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/DeploymentBase.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/DeploymentBase.java index ea3e1caa5..aa30c2c63 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/DeploymentBase.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/DeploymentBase.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import javax.validation.constraints.NotNull; @@ -16,7 +16,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * {@link UpdateAction} resource. - * */ public class DeploymentBase extends ResourceSupport { @@ -44,11 +43,6 @@ public class DeploymentBase extends ResourceSupport { return deployment; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "DeploymentBase [id=" + deplyomentId + ", deployment=" + deployment + "]"; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Polling.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Polling.java similarity index 93% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Polling.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Polling.java index 4e0854d98..b0471bc21 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Polling.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Polling.java @@ -6,11 +6,10 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; /** * Polling interval for the SP target. - * */ public class Polling { diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Progress.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Progress.java similarity index 90% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Progress.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Progress.java index 096231c7b..a3e441f31 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Progress.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Progress.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import javax.validation.constraints.NotNull; @@ -16,7 +16,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * Action fulfillment progress by means of gives the achieved amount of maximal * of possible levels. - * */ public class Progress { @@ -48,11 +47,6 @@ public class Progress { return of; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "Progress [cnt=" + cnt + ", of=" + of + "]"; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Result.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Result.java similarity index 91% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Result.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Result.java index b5dd22aaa..f4b790b5d 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Result.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Result.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import org.hibernate.validator.constraints.NotEmpty; @@ -17,8 +17,6 @@ import com.fasterxml.jackson.annotation.JsonValue; /** * Result information of the action progress which can by an intermediate or * final update. - * - * */ public class Result { @@ -77,21 +75,12 @@ public class Result { this.name = name; } - /** - * @return the name - */ @JsonValue public String getName() { return name; } - } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "Result [finished=" + finished + ", progress=" + progress + "]"; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Status.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Status.java similarity index 93% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Status.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Status.java index df1622e31..80351e41f 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/model/Status.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Status.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller.model; +package org.eclipse.hawkbit.ddi.model; import java.util.List; @@ -18,7 +18,6 @@ import com.fasterxml.jackson.annotation.JsonValue; /** * Details status information concerning the action processing. - * */ public class Status { @@ -103,20 +102,12 @@ public class Status { this.name = name; } - /** - * @return the name - */ @JsonValue public String getName() { return name; } } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "Status [execution=" + execution + ", result=" + result + ", details=" + details + "]"; diff --git a/hawkbit-rest-resource/pom.xml b/hawkbit-rest-resource/pom.xml index 0be5d20f5..45d104963 100644 --- a/hawkbit-rest-resource/pom.xml +++ b/hawkbit-rest-resource/pom.xml @@ -1,13 +1,6 @@ - + 4.0.0 @@ -26,7 +19,7 @@ hawkbit-repository ${project.version} - + org.eclipse.hawkbit hawkbit-core ${project.version} @@ -36,6 +29,11 @@ hawkbit-rest-api ${project.version} + + org.eclipse.hawkbit + hawkbit-ddi-api + ${project.version} + javax.servlet javax.servlet-api diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java index c2dbd3ba5..020592d60 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java @@ -16,12 +16,12 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheWriteNotify; +import org.eclipse.hawkbit.ddi.api.ArtifactStoreControllerDdiApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.rest.resource.helper.RestResourceConversionHelper; @@ -32,28 +32,20 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.web.bind.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** - * The {@link ArtifactStoreController} of the SP server controller API that is - * queried by the SP target in order to download artifacts independent of their - * own individual resource. This is offered in addition to the + * The {@link ArtifactStoreController} of the Rollouts server controller API + * that is queried by the SP target in order to download artifacts independent + * of their own individual resource. This is offered in addition to the * {@link RootController#downloadArtifact(String, Long, Long, javax.servlet.http.HttpServletResponse)} * for legacy controllers that can not be fed with a download URI at runtime. * - * - * - * - * + * TODO */ @RestController -@RequestMapping(ControllerConstants.ARTIFACTS_V1_REQUEST_MAPPING) -public class ArtifactStoreController { +public class ArtifactStoreController implements ArtifactStoreControllerDdiApi { + private static final Logger LOG = LoggerFactory.getLogger(ArtifactStoreController.class); @Autowired @@ -68,29 +60,9 @@ public class ArtifactStoreController { @Autowired private HawkbitSecurityProperties securityProperties; - /** - * Handles GET {@link Artifact} download request. This could be full or - * partial download request. - * - * @param fileName - * to search for - * @param response - * to write to - * @param request - * from the client - * @param targetid - * of authenticated target - * - * @return response of the servlet which in case of success is status code - * {@link HttpStatus#OK} or in case of partial download - * {@link HttpStatus#PARTIAL_CONTENT}. - */ - @RequestMapping(method = RequestMethod.GET, value = ControllerConstants.ARTIFACT_DOWNLOAD_BY_FILENAME - + "/{fileName}") - @ResponseBody - public ResponseEntity downloadArtifactByFilename(@PathVariable final String fileName, - final HttpServletResponse response, final HttpServletRequest request, - @AuthenticationPrincipal final String targetid) { + @Override + public ResponseEntity downloadArtifactByFilename(final String fileName, final HttpServletResponse response, + final HttpServletRequest request, final String targetid) { ResponseEntity result; final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); @@ -112,8 +84,7 @@ public class ArtifactStoreController { final DbArtifact file = artifactManagement.loadLocalArtifactBinary(artifact); // we set a download status only if we are aware of the - // targetid, i.e. - // authenticated and not anonymous + // targetid, i.e. authenticated and not anonymous if (targetid != null && !"anonymous".equals(targetid)) { final Action action = checkAndReportDownloadByTarget(request, targetid, artifact); result = RestResourceConversionHelper.writeFileResponse(artifact, response, request, file, @@ -124,10 +95,31 @@ public class ArtifactStoreController { } } - return result; } + @Override + public ResponseEntity downloadArtifactMD5ByFilename(final String fileName, + final HttpServletResponse response) { + final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); + + if (foundArtifacts.isEmpty()) { + LOG.warn("Softeare artifact with name {} could not be found.", fileName); + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } else if (foundArtifacts.size() > 1) { + LOG.error("Softeare artifact name {} is not unique.", fileName); + } + + try { + DataConversionHelper.writeMD5FileResponse(fileName, response, foundArtifacts.get(0)); + } catch (final IOException e) { + LOG.error("Failed to stream MD5 File", e); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + + return new ResponseEntity<>(HttpStatus.OK); + } + private Action checkAndReportDownloadByTarget(final HttpServletRequest request, final String targetid, final LocalArtifact artifact) { final Target target = controllerManagement.updateLastTargetQuery(targetid, @@ -151,38 +143,4 @@ public class ArtifactStoreController { return action; } - /** - * Handles GET {@link Artifact} MD5 checksum file download request. - * - * @param fileName - * to search for - * @param response - * to write to - * - * @return response of the servlet - */ - @RequestMapping(method = RequestMethod.GET, value = ControllerConstants.ARTIFACT_DOWNLOAD_BY_FILENAME - + "/{fileName}" + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX) - @ResponseBody - public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable final String fileName, - final HttpServletResponse response) { - final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); - - if (foundArtifacts.isEmpty()) { - LOG.warn("Softeare artifact with name {} could not be found.", fileName); - return new ResponseEntity<>(HttpStatus.NOT_FOUND); - } else if (foundArtifacts.size() > 1) { - LOG.error("Softeare artifact name {} is not unique.", fileName); - } - - try { - DataConversionHelper.writeMD5FileResponse(fileName, response, foundArtifacts.get(0)); - } catch (final IOException e) { - LOG.error("Failed to stream MD5 File", e); - return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); - } - - return new ResponseEntity<>(HttpStatus.OK); - } - } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/DataConversionHelper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/DataConversionHelper.java index e035c47ee..8c43a91ba 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/DataConversionHelper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/DataConversionHelper.java @@ -20,11 +20,12 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.api.UrlProtocol; -import org.eclipse.hawkbit.controller.model.Artifact; -import org.eclipse.hawkbit.controller.model.Chunk; -import org.eclipse.hawkbit.controller.model.Config; -import org.eclipse.hawkbit.controller.model.ControllerBase; -import org.eclipse.hawkbit.controller.model.Polling; +import org.eclipse.hawkbit.ddi.ControllerConstants; +import org.eclipse.hawkbit.ddi.model.Artifact; +import org.eclipse.hawkbit.ddi.model.Chunk; +import org.eclipse.hawkbit.ddi.model.Config; +import org.eclipse.hawkbit.ddi.model.ControllerBase; +import org.eclipse.hawkbit.ddi.model.Polling; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.LocalArtifact; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/EnableDirectDeviceApi.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/EnableDirectDeviceApi.java index 846e1e8d2..daee203bf 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/EnableDirectDeviceApi.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/EnableDirectDeviceApi.java @@ -20,9 +20,6 @@ import org.springframework.stereotype.Controller; /** * Annotation to enable {@link ComponentScan} in the resource package to setup * all {@link Controller} annotated classes and setup the Direct Device API. - * - * - * */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/FileSteamingFailedException.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/FileSteamingFailedException.java index b4dae3b88..b59bd5efc 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/FileSteamingFailedException.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/FileSteamingFailedException.java @@ -13,15 +13,9 @@ import org.eclipse.hawkbit.exception.SpServerRtException; /** * Thrown if artifact content streaming to client failed. - * - * - * - * */ public final class FileSteamingFailedException extends SpServerRtException { - /** - * - */ + private static final long serialVersionUID = 1L; /** @@ -33,6 +27,8 @@ public final class FileSteamingFailedException extends SpServerRtException { } /** + * Constructor with Throwable. + * * @param cause * for the exception */ @@ -41,6 +37,8 @@ public final class FileSteamingFailedException extends SpServerRtException { } /** + * Constructor with error string. + * * @param message * of the error */ diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java index f704acd5e..e630339d5 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java @@ -18,16 +18,17 @@ import javax.validation.Valid; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheWriteNotify; -import org.eclipse.hawkbit.controller.model.ActionFeedback; -import org.eclipse.hawkbit.controller.model.Cancel; -import org.eclipse.hawkbit.controller.model.CancelActionToStop; -import org.eclipse.hawkbit.controller.model.Chunk; -import org.eclipse.hawkbit.controller.model.ConfigData; -import org.eclipse.hawkbit.controller.model.ControllerBase; -import org.eclipse.hawkbit.controller.model.Deployment; -import org.eclipse.hawkbit.controller.model.Deployment.HandlingType; -import org.eclipse.hawkbit.controller.model.DeploymentBase; -import org.eclipse.hawkbit.controller.model.Result.FinalResult; +import org.eclipse.hawkbit.ddi.api.RootControllerDdiApi; +import org.eclipse.hawkbit.ddi.model.ActionFeedback; +import org.eclipse.hawkbit.ddi.model.Cancel; +import org.eclipse.hawkbit.ddi.model.CancelActionToStop; +import org.eclipse.hawkbit.ddi.model.Chunk; +import org.eclipse.hawkbit.ddi.model.ConfigData; +import org.eclipse.hawkbit.ddi.model.ControllerBase; +import org.eclipse.hawkbit.ddi.model.Deployment; +import org.eclipse.hawkbit.ddi.model.Deployment.HandlingType; +import org.eclipse.hawkbit.ddi.model.DeploymentBase; +import org.eclipse.hawkbit.ddi.model.Result.FinalResult; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -35,7 +36,6 @@ import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; @@ -49,26 +49,23 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; 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; import org.springframework.web.bind.annotation.RestController; /** - * The {@link RootController} of the SP server controller API that is queried by - * the SP controller in order to pull {@link Action}s that have to be fullfilled - * and report status updates concerning the {@link Action} processing. + * The {@link RootController} of the hawkBit server controller API that is + * queried by the hawkBit controller in order to pull {@link Action}s that have + * to be fulfilled and report status updates concerning the {@link Action} + * processing. * * Transactional (read-write) as all queries at least update the last poll time. * */ @RestController -@RequestMapping(ControllerConstants.BASE_V1_REQUEST_MAPPING) -public class RootController { +public class RootController implements RootControllerDdiApi { private static final Logger LOG = LoggerFactory.getLogger(RootController.class); private static final String GIVEN_ACTION_IS_NOT_ASSIGNED_TO_GIVEN_TARGET = "given action ({}) is not assigned to given target ({})."; @@ -94,19 +91,8 @@ public class RootController { @Autowired private ArtifactUrlHandler artifactUrlHandler; - /** - * Returns all artifacts of a given software module and target. - * - * @param targetid - * of the {@link Target} that matches to - * {@link Target#getControllerId()} - * @param softwareModuleId - * of the {@link SoftwareModule} - * @return the response - */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts", produces = { - "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getSoftwareModulesArtifacts( + @Override + public ResponseEntity> getSoftwareModulesArtifacts( @PathVariable final String targetid, @PathVariable final Long softwareModuleId) { LOG.debug("getSoftwareModulesArtifacts({})", targetid); @@ -122,18 +108,7 @@ public class RootController { HttpStatus.OK); } - /** - * Root resource for an individual {@link Target}. - * - * @param targetid - * of the {@link Target} that matches to - * {@link Target#getControllerId()} - * @param request - * the HTTP request injected by spring - * @return the response - */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetid}", produces = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }) + @Override public ResponseEntity getControllerBase(@PathVariable final String targetid, final HttpServletRequest request) { LOG.debug("getControllerBase({})", targetid); @@ -154,26 +129,7 @@ public class RootController { HttpStatus.OK); } - /** - * Handles GET {@link Artifact} download request. This could be full or - * partial (as specified by RFC7233 (Range Requests)) download request. - * - * @param targetid - * of the related - * @param softwareModuleId - * of the parent {@link SoftwareModule} - * @param fileName - * of the related {@link LocalArtifact} - * @param response - * of the servlet - * @param request - * from the client - * - * @return response of the servlet which in case of success is status code - * {@link HttpStatus#OK} or in case of partial download - * {@link HttpStatus#PARTIAL_CONTENT}. - */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}") + @Override public ResponseEntity downloadArtifact(@PathVariable final String targetid, @PathVariable final Long softwareModuleId, @PathVariable final String fileName, final HttpServletResponse response, final HttpServletRequest request) { @@ -198,9 +154,7 @@ public class RootController { result = RestResourceConversionHelper.writeFileResponse(artifact, response, request, file, cacheWriteNotify, action.getId()); } - } - return result; } @@ -228,25 +182,7 @@ public class RootController { return null == module || !module.getLocalArtifactByFilename(fileName).isPresent(); } - /** - * Handles GET {@link Artifact} MD5 checksum file download request. - * - * @param targetid - * of the related - * @param softwareModuleId - * of the parent {@link SoftwareModule} - * @param fileName - * of the related {@link LocalArtifact} - * @param response - * of the servlet - * @param request - * the HTTP request injected by spring - * - * @return {@link ResponseEntity} with status {@link HttpStatus#OK} if - * successful - */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}" - + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX, produces = MediaType.TEXT_PLAIN_VALUE) + @Override public ResponseEntity downloadArtifactMd5(@PathVariable final String targetid, @PathVariable final Long softwareModuleId, @PathVariable final String fileName, final HttpServletResponse response, final HttpServletRequest request) { @@ -271,25 +207,7 @@ public class RootController { return new ResponseEntity<>(HttpStatus.OK); } - /** - * Resource for {@link SoftwareModule} {@link UpdateAction}s. - * - * @param targetid - * of the {@link Target} that matches to - * {@link Target#getControllerId()} - * @param actionId - * of the {@link DeploymentBase} that matches to - * {@link Target#getActiveActions()} - * @param resource - * an hashcode of the resource which indicates if the action has - * been changed, e.g. from 'soft' to 'force' and the eTag needs - * to be re-generated - * @param request - * the HTTP request injected by spring - * @return the response - */ - @RequestMapping(value = "/{targetid}/" + ControllerConstants.DEPLOYMENT_BASE_ACTION - + "/{actionId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + @Override public ResponseEntity getControllerBasedeploymentAction( @PathVariable @NotEmpty final String targetid, @PathVariable @NotEmpty final Long actionId, @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource, @@ -325,23 +243,7 @@ public class RootController { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } - /** - * This is the feedback channel for the {@link DeploymentBase} action. - * - * @param feedback - * to provide - * @param targetid - * of the {@link Target} that matches to - * {@link Target#getControllerId()} - * @param actionId - * of the action we have feedback for - * @param request - * the HTTP request injected by spring - * - * @return the response - */ - @RequestMapping(value = "/{targetid}/" + ControllerConstants.DEPLOYMENT_BASE_ACTION + "/{actionId}/" - + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) + @Override public ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final ActionFeedback feedback, @PathVariable final String targetid, @PathVariable @NotEmpty final Long actionId, final HttpServletRequest request) { @@ -369,8 +271,9 @@ public class RootController { return new ResponseEntity<>(HttpStatus.GONE); } - controllerManagement.addUpdateActionStatus(generateUpdateStatus(feedback, targetid, feedback.getId(), action), - action); + controllerManagement.addUpdateActionStatus( + + generateUpdateStatus(feedback, targetid, feedback.getId(), action), action); return new ResponseEntity<>(HttpStatus.OK); @@ -437,20 +340,7 @@ public class RootController { } } - /** - * This is the feedback channel for the config data action. - * - * @param configData - * as body - * @param targetid - * to provide data for - * @param request - * the HTTP request injected by spring - * - * @return status of the request - */ - @RequestMapping(value = "/{targetid}/" - + ControllerConstants.CONFIG_DATA_ACTION, method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) + @Override public ResponseEntity putConfigData(@Valid @RequestBody final ConfigData configData, @PathVariable final String targetid, final HttpServletRequest request) { controllerManagement.updateLastTargetQuery(targetid, @@ -461,20 +351,7 @@ public class RootController { return new ResponseEntity<>(HttpStatus.OK); } - /** - * {@link RequestMethod.GET} method for the {@link Cancel} action. - * - * @param targetid - * ID of the calling target - * @param actionId - * of the action - * @param request - * the HTTP request injected by spring - * - * @return the {@link Cancel} response - */ - @RequestMapping(value = "/{targetid}/" + ControllerConstants.CANCEL_ACTION - + "/{actionId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + @Override public ResponseEntity getControllerCancelAction(@PathVariable @NotEmpty final String targetid, @PathVariable @NotEmpty final Long actionId, final HttpServletRequest request) { LOG.debug("getControllerCancelAction({})", targetid); @@ -503,24 +380,7 @@ public class RootController { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } - /** - * {@link RequestMethod.POST} method receiving the {@link ActionFeedback} - * from the target. - * - * @param feedback - * the {@link ActionFeedback} from the target. - * @param targetid - * the ID of the calling target - * @param actionId - * of the action we have feedback for - * @param request - * the HTTP request injected by spring - * - * @return the {@link ActionFeedback} response - */ - - @RequestMapping(value = "/{targetid}/" + ControllerConstants.CANCEL_ACTION + "/{actionId}/" - + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) + @Override public ResponseEntity postCancelActionFeedback(@Valid @RequestBody final ActionFeedback feedback, @PathVariable @NotEmpty final String targetid, @PathVariable @NotEmpty final Long actionId, final HttpServletRequest request) { diff --git a/pom.xml b/pom.xml index 0c3207c13..aad9b8976 100644 --- a/pom.xml +++ b/pom.xml @@ -1,3 +1,4 @@ + - +--> 4.0.0 @@ -27,6 +26,7 @@ hawkbit-dmf-api hawkbit-rest-api + hawkbit-ddi-api hawkbit-core hawkbit-security-core hawkbit-repository @@ -40,7 +40,7 @@ hawkbit-cache-redis hawkbit-test-report examples - + @@ -244,7 +244,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -626,4 +626,4 @@ - + \ No newline at end of file From 72a61c9f6cd2b3b6cdc200684d8e429a87db829a Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 15 Apr 2016 13:01:23 +0200 Subject: [PATCH 003/371] Introduce consistent button position in change dialogs Signed-off-by: Melanie Retter --- .../rollout/AddUpdateRolloutWindowLayout.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index e5e86c520..a426c300e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -204,10 +204,9 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { mainLayout.setSpacing(Boolean.TRUE); mainLayout.setSizeUndefined(); - mainLayout.addComponents(madatoryLabel, rolloutName, distributionSet, getTargetFilterLayout(), + mainLayout.addComponents(getMandatoryLabelLinkToHelp(), rolloutName, distributionSet, getTargetFilterLayout(), getGroupDetailsLayout(), getTriggerThresoldLayout(), getErrorThresoldLayout(), description, - actionTypeOptionGroupLayout, linkToHelp, getSaveDiscardButtonLayout()); - mainLayout.setComponentAlignment(linkToHelp, Alignment.BOTTOM_RIGHT); + actionTypeOptionGroupLayout, getSaveDiscardButtonLayout()); setCompositionRoot(mainLayout); } @@ -264,6 +263,16 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return buttonsLayout; } + private HorizontalLayout getMandatoryLabelLinkToHelp() { + final HorizontalLayout mandatoryLabelLinkToHelpLayout = new HorizontalLayout(); + mandatoryLabelLinkToHelpLayout.setSizeFull(); + mandatoryLabelLinkToHelpLayout.addComponents(madatoryLabel, linkToHelp); + mandatoryLabelLinkToHelpLayout.setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); + mandatoryLabelLinkToHelpLayout.setComponentAlignment(linkToHelp, Alignment.MIDDLE_RIGHT); + mandatoryLabelLinkToHelpLayout.addStyleName("window-style"); + return mandatoryLabelLinkToHelpLayout; + } + private void createRequiredComponents() { madatoryLabel = createMandatoryLabel(); rolloutName = createRolloutNameField(); @@ -287,11 +296,15 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { totalTargetsLabel = createTotalTargetsLabel(); targetFilterQuery = createTargetFilterQuery(); - linkToHelp = SPUIComponentProvider.getHelpLink(uiProperties.getLinks().getDocumentation().getRolloutView()); + linkToHelp = createLinkToHelp(); actionTypeOptionGroupLayout.addStyleName(SPUIStyleDefinitions.ROLLOUT_ACTION_TYPE_LAYOUT); } + private Link createLinkToHelp() { + return SPUIComponentProvider.getHelpLink(uiProperties.getLinks().getDocumentation().getRolloutView()); + } + private Label createGroupSizeLabel() { final Label groupSize = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); groupSize.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); From 3145709824134e02bb682cf89e9636bf28354157 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Mon, 18 Apr 2016 12:39:28 +0200 Subject: [PATCH 004/371] Move DDI resources and annotation to module hawkbit-ddi-resource - created module and moved resources Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-app/pom.xml | 5 + .../java/org/eclipse/hawkbit/app/Start.java | 2 +- hawkbit-autoconfigure/pom.xml | 6 + .../ResourceControllerAutoConfiguration.java | 2 +- hawkbit-ddi-resource/pom.xml | 156 ++++++++++++++++++ .../resource}/ArtifactStoreController.java | 2 +- .../ddi/resource}/DataConversionHelper.java | 2 +- .../ddi/resource}/EnableDirectDeviceApi.java | 2 +- .../hawkbit/ddi/resource}/RootController.java | 2 +- .../ddi/resource}/ArtifactDownloadTest.java | 2 +- .../ddi/resource}/CancelActionTest.java | 2 +- .../hawkbit/ddi/resource}/ConfigDataTest.java | 2 +- .../ddi/resource}/DeploymentBaseTest.java | 2 +- .../ddi/resource}/RootControllerTest.java | 2 +- .../helper}/FileSteamingFailedException.java | 2 +- .../helper/RestResourceConversionHelper.java | 3 +- pom.xml | 3 +- 17 files changed, 182 insertions(+), 15 deletions(-) create mode 100644 hawkbit-ddi-resource/pom.xml rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource}/ArtifactStoreController.java (99%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource}/DataConversionHelper.java (99%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource}/EnableDirectDeviceApi.java (95%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller => hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource}/RootController.java (99%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller => hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource}/ArtifactDownloadTest.java (99%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller => hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource}/CancelActionTest.java (99%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller => hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource}/ConfigDataTest.java (99%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller => hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource}/DeploymentBaseTest.java (99%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller => hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource}/RootControllerTest.java (99%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/{controller => rest/resource/helper}/FileSteamingFailedException.java (96%) diff --git a/examples/hawkbit-example-app/pom.xml b/examples/hawkbit-example-app/pom.xml index a5c0f864d..fccd835bc 100644 --- a/examples/hawkbit-example-app/pom.xml +++ b/examples/hawkbit-example-app/pom.xml @@ -67,6 +67,11 @@ hawkbit-rest-resource ${project.version} + + org.eclipse.hawkbit + hawkbit-ddi-resource + ${project.version} + org.eclipse.hawkbit hawkbit-dmf-amqp diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java index a517dbb08..7038e64d8 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.app; import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; -import org.eclipse.hawkbit.controller.EnableDirectDeviceApi; +import org.eclipse.hawkbit.ddi.resource.EnableDirectDeviceApi; import org.eclipse.hawkbit.rest.resource.EnableRestResources; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/hawkbit-autoconfigure/pom.xml b/hawkbit-autoconfigure/pom.xml index 7670da406..dcbb95920 100644 --- a/hawkbit-autoconfigure/pom.xml +++ b/hawkbit-autoconfigure/pom.xml @@ -67,6 +67,12 @@ hawkbit-rest-resource ${project.version} true + + + org.eclipse.hawkbit + hawkbit-ddi-resource + ${project.version} + true org.springframework diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java index 1d75510e4..87c4ecf98 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.autoconfigure.web; -import org.eclipse.hawkbit.controller.EnableDirectDeviceApi; +import org.eclipse.hawkbit.ddi.resource.EnableDirectDeviceApi; import org.eclipse.hawkbit.rest.resource.EnableRestResources; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Configuration; diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml new file mode 100644 index 000000000..3300cbedd --- /dev/null +++ b/hawkbit-ddi-resource/pom.xml @@ -0,0 +1,156 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-parent + 0.2.0-SNAPSHOT + + hawkbit-ddi-resource + hawkBit :: DDI Resources + + + + org.eclipse.hawkbit + hawkbit-ddi-api + ${project.version} + + + org.eclipse.hawkbit + hawkbit-rest-resource + ${project.version} + + + org.eclipse.hawkbit + hawkbit-repository + ${project.version} + + + org.eclipse.hawkbit + hawkbit-core + ${project.version} + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-logging + + + test + + + org.springframework.boot + spring-boot-starter-log4j2 + test + + + com.h2database + h2 + test + + + org.mariadb.jdbc + mariadb-java-client + test + + + javax.el + javax.el-api + test + + + org.springframework.security + spring-security-config + test + + + org.eclipse.hawkbit + hawkbit-repository + ${project.version} + tests + test + + + org.eclipse.hawkbit + hawkbit-http-security + ${project.version} + test + + + com.jayway.jsonpath + json-path + test + + + org.json + json + test + + + com.fasterxml.jackson.core + jackson-databind + test + + + com.fasterxml.jackson.core + jackson-core + test + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.security + spring-security-aspects + test + + + org.easytesting + fest-assert-core + test + + + org.easytesting + fest-assert + test + + + de.flapdoodle.embed + de.flapdoodle.embed.mongo + test + + + ru.yandex.qatools.allure + allure-junit-adaptor + test + + + org.springframework + spring-context-support + test + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + + diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java similarity index 99% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java index 020592d60..5709c08d3 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi.resource; import java.io.IOException; import java.util.List; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/DataConversionHelper.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java similarity index 99% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/DataConversionHelper.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java index 8c43a91ba..dd88e7cee 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/DataConversionHelper.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/EnableDirectDeviceApi.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/EnableDirectDeviceApi.java similarity index 95% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/EnableDirectDeviceApi.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/EnableDirectDeviceApi.java index daee203bf..0d5a81e29 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/EnableDirectDeviceApi.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/EnableDirectDeviceApi.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi.resource; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java similarity index 99% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java index e630339d5..baadc5c42 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi.resource; import java.io.IOException; import java.util.List; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java similarity index 99% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java index 6149472a7..c73eb24b5 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertTrue; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/CancelActionTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java similarity index 99% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/CancelActionTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java index d7e0351cf..e4b2fa5a9 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/CancelActionTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ConfigDataTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java similarity index 99% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ConfigDataTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java index a2b26c218..6dbef5674 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ConfigDataTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java similarity index 99% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java index 5dd956ad3..714866274 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/RootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java similarity index 99% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/RootControllerTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java index fa2c5f6d4..26ea7c543 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/RootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.ddi.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/FileSteamingFailedException.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/FileSteamingFailedException.java similarity index 96% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/FileSteamingFailedException.java rename to hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/FileSteamingFailedException.java index b59bd5efc..e246bc6cd 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/FileSteamingFailedException.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/FileSteamingFailedException.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.controller; +package org.eclipse.hawkbit.rest.resource.helper; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/RestResourceConversionHelper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/RestResourceConversionHelper.java index e7b588222..f09bd7401 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/RestResourceConversionHelper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/RestResourceConversionHelper.java @@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheWriteNotify; -import org.eclipse.hawkbit.controller.FileSteamingFailedException; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.rest.resource.model.distributionset.ActionTypeRest; @@ -286,7 +285,7 @@ public final class RestResourceConversionHelper { private static long copyStreams(final InputStream from, final OutputStream to, final CacheWriteNotify cacheWriteNotify, final Long statusId, final long start, final long length) - throws IOException { + throws IOException { checkNotNull(from); checkNotNull(to); final byte[] buf = new byte[BUFFER_SIZE]; diff --git a/pom.xml b/pom.xml index aad9b8976..11374a16d 100644 --- a/pom.xml +++ b/pom.xml @@ -34,12 +34,13 @@ hawkbit-security-integration hawkbit-http-security hawkbit-rest-resource + hawkbit-ddi-resource hawkbit-ui hawkbit-artifact-repository-mongo hawkbit-autoconfigure hawkbit-cache-redis hawkbit-test-report - examples + examples From abe6dc223f9d3c2f643142e274a9f3da0cfbf48b Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Mon, 18 Apr 2016 12:51:57 +0200 Subject: [PATCH 005/371] Created hawkbit-example-ddi-client example maven module Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-ddi-client/pom.xml | 26 +++++++++++++ .../org/hawkbit/example/ddi/client/App.java | 13 +++++++ .../hawkbit/example/ddi/client/AppTest.java | 38 +++++++++++++++++++ examples/pom.xml | 8 ++-- 4 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 examples/hawkbit-example-ddi-client/pom.xml create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/hawkbit/example/ddi/client/App.java create mode 100644 examples/hawkbit-example-ddi-client/src/test/java/org/hawkbit/example/ddi/client/AppTest.java diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml new file mode 100644 index 000000000..7630a5a9e --- /dev/null +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -0,0 +1,26 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-examples-parent + 0.2.0-SNAPSHOT + + org.eclipse.hawkbit + hawkbit-example-ddi-client + 0.2.0-SNAPSHOT + hawkbit-example-ddi-client + http://maven.apache.org + + UTF-8 + + + + junit + junit + 3.8.1 + test + + + diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/hawkbit/example/ddi/client/App.java b/examples/hawkbit-example-ddi-client/src/main/java/org/hawkbit/example/ddi/client/App.java new file mode 100644 index 000000000..cd85d3a8b --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/hawkbit/example/ddi/client/App.java @@ -0,0 +1,13 @@ +package org.hawkbit.example.ddi.client; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/hawkbit/example/ddi/client/AppTest.java new file mode 100644 index 000000000..395886a2d --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/test/java/org/hawkbit/example/ddi/client/AppTest.java @@ -0,0 +1,38 @@ +package org.hawkbit.example.ddi.client; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} diff --git a/examples/pom.xml b/examples/pom.xml index 5f1377123..ae10dac0c 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -1,3 +1,4 @@ + - +--> 4.0.0 @@ -26,6 +25,7 @@ hawkbit-device-simulator hawkbit-example-app hawkbit-mgmt-api-client - + hawkbit-example-ddi-client + \ No newline at end of file From cd2db4e36eff18222503d98f052ac772a5c3555b Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Mon, 18 Apr 2016 14:01:59 +0200 Subject: [PATCH 006/371] Updated pom to receive correct dependencies Signed-off-by: Jonathan Philip Knoblauch --- hawkbit-ddi-resource/pom.xml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index 3300cbedd..08cd03828 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -16,23 +16,30 @@ hawkbit-ddi-api ${project.version} - + org.eclipse.hawkbit hawkbit-rest-resource ${project.version} - + org.eclipse.hawkbit hawkbit-repository ${project.version} - + + + org.eclipse.hawkbit + hawkbit-rest-resource + ${project.version} + test + tests + org.springframework.boot spring-boot-starter From 97f099d1946c493999a5794a6cd0ee6674d03d36 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 19 Apr 2016 09:10:27 +0200 Subject: [PATCH 007/371] Move DDI resources and annotation to module hawkbit-ddi-resource - added missing pathVaraible - added port to download urls and adjusted tests - extended feign management API client - fixed pom test artifacts dependencies Signed-off-by: Jonathan Philip Knoblauch --- .../builder/DistributionSetBuilder.java | 10 +++++ .../api/ArtifactUrlHandlerProperties.java | 2 +- hawkbit-ddi-resource/pom.xml | 11 ++--- .../ddi/resource/ArtifactStoreController.java | 15 ++++--- .../ddi/resource/DataConversionHelper.java | 2 +- .../hawkbit/ddi/resource/RootController.java | 8 ++-- .../ddi/resource/DeploymentBaseTest.java | 44 +++++++++---------- 7 files changed, 48 insertions(+), 44 deletions(-) diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java index 358cff0db..2e2d91928 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRequestBodyPost; +import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleAssigmentRest; import com.google.common.collect.Lists; @@ -23,6 +24,7 @@ public class DistributionSetBuilder { private String name; private String version; private String type; + private final List modules = new ArrayList<>(); /** * @param name @@ -34,6 +36,13 @@ public class DistributionSetBuilder { return this; } + public DistributionSetBuilder moduleByID(final Long id) { + final SoftwareModuleAssigmentRest softwareModuleAssigmentRest = new SoftwareModuleAssigmentRest(); + softwareModuleAssigmentRest.setId(id); + modules.add(softwareModuleAssigmentRest); + return this; + } + /** * @param version * the version of the distribution set @@ -89,6 +98,7 @@ public class DistributionSetBuilder { body.setName(prefixName); body.setVersion(version); body.setType(type); + body.setModules(modules); return body; } diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java index 33fe8651e..a1cb8bbd9 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java @@ -17,7 +17,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties("hawkbit.artifact.url") public class ArtifactUrlHandlerProperties { private static final String DEFAULT_IP_LOCALHOST = "127.0.0.1"; - private static final String LOCALHOST = "localhost"; + private static final String LOCALHOST = "localhost:8080"; private final Http http = new Http(); private final Https https = new Https(); diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index 08cd03828..bcc1b4932 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -26,11 +26,6 @@ hawkbit-repository ${project.version} - @@ -38,7 +33,7 @@ hawkbit-rest-resource ${project.version} test - tests + tests org.springframework.boot @@ -139,11 +134,11 @@ allure-junit-adaptor test - + org.springframework spring-context-support test - + diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java index 5709c08d3..ec8a994b0 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java @@ -32,16 +32,16 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.web.bind.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; /** - * The {@link ArtifactStoreController} of the Rollouts server controller API - * that is queried by the SP target in order to download artifacts independent + * The {@link ArtifactStoreController} of the HawkBit server controller API that + * is queried by the HawkBit target in order to download artifacts independent * of their own individual resource. This is offered in addition to the * {@link RootController#downloadArtifact(String, Long, Long, javax.servlet.http.HttpServletResponse)} * for legacy controllers that can not be fed with a download URI at runtime. - * - * TODO */ @RestController public class ArtifactStoreController implements ArtifactStoreControllerDdiApi { @@ -61,8 +61,9 @@ public class ArtifactStoreController implements ArtifactStoreControllerDdiApi { private HawkbitSecurityProperties securityProperties; @Override - public ResponseEntity downloadArtifactByFilename(final String fileName, final HttpServletResponse response, - final HttpServletRequest request, final String targetid) { + public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, + final HttpServletResponse response, final HttpServletRequest request, + @AuthenticationPrincipal final String targetid) { ResponseEntity result; final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); @@ -99,7 +100,7 @@ public class ArtifactStoreController implements ArtifactStoreControllerDdiApi { } @Override - public ResponseEntity downloadArtifactMD5ByFilename(final String fileName, + public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName, final HttpServletResponse response) { final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java index dd88e7cee..75adebb45 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java @@ -38,7 +38,7 @@ import org.springframework.hateoas.Link; import com.google.common.base.Charsets; /** - * Utility class for the Controller API. + * Utility class for the DDI API. */ public final class DataConversionHelper { diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java index baadc5c42..9fb0fca1d 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java @@ -56,13 +56,11 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** - * The {@link RootController} of the hawkBit server controller API that is - * queried by the hawkBit controller in order to pull {@link Action}s that have - * to be fulfilled and report status updates concerning the {@link Action} - * processing. + * The {@link RootController} of the hawkBit server DDI API that is queried by + * the hawkBit controller in order to pull {@link Action}s that have to be + * fulfilled and report status updates concerning the {@link Action} processing. * * Transactional (read-write) as all queries at least update the last poll time. - * */ @RestController public class RootController implements RootControllerDdiApi { diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java index 714866274..4b985f5ba 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java @@ -170,23 +170,23 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0].hashes.sha1", equalTo(artifact.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) @@ -200,22 +200,22 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1].hashes.sha1", equalTo(artifactSignature.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) @@ -315,12 +315,12 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0].hashes.sha1", equalTo(artifact.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) @@ -333,22 +333,22 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1].hashes.sha1", equalTo(artifactSignature.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) @@ -445,22 +445,22 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { equalTo(artifact.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) @@ -473,23 +473,23 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1].hashes.sha1", equalTo(artifactSignature.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum.href", - equalTo("https://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum-http.href", - equalTo("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) From 12cca669fe2e5afdeeaa62d1dd7fb7e7309a1ef7 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 19 Apr 2016 09:29:55 +0200 Subject: [PATCH 008/371] Added missing javadoc to DDI resources Signed-off-by: Jonathan Philip Knoblauch --- .../org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java | 2 -- .../org/eclipse/hawkbit/ddi/resource/CancelActionTest.java | 3 +++ .../java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java | 3 +++ .../org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java | 3 +++ .../org/eclipse/hawkbit/ddi/resource/RootControllerTest.java | 3 +++ 5 files changed, 12 insertions(+), 2 deletions(-) diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java index c73eb24b5..f7173f86e 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java @@ -56,9 +56,7 @@ import ru.yandex.qatools.allure.annotations.Stories; /** * Test artifact downloads from the controller. - * */ - @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Artifact Download Resource") diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java index e4b2fa5a9..3c236c196 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java @@ -39,6 +39,9 @@ import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; +/** + * Test cancel action from the controller. + */ @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Cancel Action Resource") diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java index 6dbef5674..ee40d6ded 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java @@ -34,6 +34,9 @@ import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; +/** + * Test config data from the controller. + */ @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Config Data Resource") diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java index 4b985f5ba..4ba5c9cdf 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java @@ -51,6 +51,9 @@ import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; +/** + * Test deployment base from the controller. + */ @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Deployment Action Resource") diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java index 26ea7c543..be390959a 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java @@ -45,6 +45,9 @@ import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; +/** + * Test the root controller resources. + */ @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Root Poll Resource") From 3c0e34ee410cbc2f282a168916a94fa1d549aa5f Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 20 Apr 2016 13:42:43 +0200 Subject: [PATCH 009/371] Rename Ddi classes Signed-off-by: SirWayne --- .../java/org/eclipse/hawkbit/app/Start.java | 4 +- .../ResourceControllerAutoConfiguration.java | 6 +- .../hawkbit/ddi/annotation/EnableDdiApi.java | 30 ++++++++ .../model/DdiActionFeedback.java} | 12 ++-- .../model/DdiArtifact.java} | 6 +- .../Cancel.java => json/model/DdiCancel.java} | 10 +-- .../model/DdiCancelActionToStop.java} | 6 +- .../Chunk.java => json/model/DdiChunk.java} | 10 +-- .../Config.java => json/model/DdiConfig.java} | 10 +-- .../model/DdiConfigData.java} | 8 +-- .../model/DdiControllerBase.java} | 12 ++-- .../model/DdiDeployment.java} | 10 +-- .../model/DdiDeploymentBase.java} | 10 +-- .../model/DdiPolling.java} | 6 +- .../model/DdiProgress.java} | 6 +- .../Result.java => json/model/DdiResult.java} | 12 ++-- .../Status.java => json/model/DdiStatus.java} | 12 ++-- .../DdiArtifactStoreControllerRestApi.java} | 19 +++-- .../api/DdiRestConstants.java} | 6 +- .../api/DdiRootControllerRestApi.java} | 71 +++++++++---------- .../ddi/resource/ArtifactStoreController.java | 4 +- .../ddi/resource/DataConversionHelper.java | 38 +++++----- .../hawkbit/ddi/resource/RootController.java | 58 +++++++-------- 23 files changed, 197 insertions(+), 169 deletions(-) create mode 100644 hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/ActionFeedback.java => json/model/DdiActionFeedback.java} (87%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/Artifact.java => json/model/DdiArtifact.java} (91%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/Cancel.java => json/model/DdiCancel.java} (78%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/CancelActionToStop.java => json/model/DdiCancelActionToStop.java} (86%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/Chunk.java => json/model/DdiChunk.java} (81%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/Config.java => json/model/DdiConfig.java} (75%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/ConfigData.java => json/model/DdiConfigData.java} (81%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/ControllerBase.java => json/model/DdiControllerBase.java} (68%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/Deployment.java => json/model/DdiDeployment.java} (87%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/DeploymentBase.java => json/model/DdiDeploymentBase.java} (79%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/Polling.java => json/model/DdiPolling.java} (84%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/Progress.java => json/model/DdiProgress.java} (86%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/Result.java => json/model/DdiResult.java} (86%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{model/Status.java => json/model/DdiStatus.java} (87%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{api/ArtifactStoreControllerDdiApi.java => rest/api/DdiArtifactStoreControllerRestApi.java} (75%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{ControllerConstants.java => rest/api/DdiRestConstants.java} (93%) rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/{api/RootControllerDdiApi.java => rest/api/DdiRootControllerRestApi.java} (70%) diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java index 7038e64d8..382d90c20 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.app; import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; -import org.eclipse.hawkbit.ddi.resource.EnableDirectDeviceApi; +import org.eclipse.hawkbit.ddi.annotation.EnableDdiApi; import org.eclipse.hawkbit.rest.resource.EnableRestResources; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -25,7 +25,7 @@ import org.springframework.context.annotation.Import; @Import({ RepositoryApplicationConfiguration.class }) @EnableHawkbitManagedSecurityConfiguration @EnableRestResources -@EnableDirectDeviceApi +@EnableDdiApi public class Start { /** diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java index 87c4ecf98..ef489049f 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.autoconfigure.web; -import org.eclipse.hawkbit.ddi.resource.EnableDirectDeviceApi; +import org.eclipse.hawkbit.ddi.annotation.EnableDdiApi; import org.eclipse.hawkbit.rest.resource.EnableRestResources; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Configuration; @@ -21,8 +21,8 @@ import org.springframework.context.annotation.Import; * */ @Configuration -@ConditionalOnClass({ EnableDirectDeviceApi.class, EnableRestResources.class }) -@Import({ EnableDirectDeviceApi.class, EnableRestResources.class }) +@ConditionalOnClass({ EnableDdiApi.class, EnableRestResources.class }) +@Import({ EnableDdiApi.class, EnableRestResources.class }) public class ResourceControllerAutoConfiguration { } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java new file mode 100644 index 000000000..1c41debc7 --- /dev/null +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Controller; + +/** + * Annotation to enable {@link ComponentScan} in the resource package to setup + * all {@link Controller} annotated classes and setup the Direct Device API. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Configuration +@ComponentScan +public @interface EnableDdiApi { + +} diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ActionFeedback.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiActionFeedback.java similarity index 87% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ActionFeedback.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiActionFeedback.java index 19ef0c0a9..cbb45b788 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ActionFeedback.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiActionFeedback.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import javax.validation.constraints.NotNull; @@ -35,12 +35,12 @@ import com.fasterxml.jackson.annotation.JsonProperty; * */ @JsonIgnoreProperties(ignoreUnknown = true) -public class ActionFeedback { +public class DdiActionFeedback { private final Long id; private final String time; @NotNull - private final Status status; + private final DdiStatus status; /** * Constructor. @@ -53,8 +53,8 @@ public class ActionFeedback { * is the feedback itself */ @JsonCreator - public ActionFeedback(@JsonProperty("id") final Long id, @JsonProperty("time") final String time, - @JsonProperty("status") final Status status) { + public DdiActionFeedback(@JsonProperty("id") final Long id, @JsonProperty("time") final String time, + @JsonProperty("status") final DdiStatus status) { this.id = id; this.time = time; this.status = status; @@ -68,7 +68,7 @@ public class ActionFeedback { return time; } - public Status getStatus() { + public DdiStatus getStatus() { return status; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Artifact.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifact.java similarity index 91% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Artifact.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifact.java index 1eac01bbe..d39a44daa 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Artifact.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifact.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import javax.validation.constraints.NotNull; @@ -16,9 +16,9 @@ import org.springframework.hateoas.ResourceSupport; import com.fasterxml.jackson.annotation.JsonProperty; /** - * Download information for all artifacts related to a specific {@link Chunk}. + * Download information for all artifacts related to a specific {@link DdiChunk}. */ -public class Artifact extends ResourceSupport { +public class DdiArtifact extends ResourceSupport { @NotNull @JsonProperty diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Cancel.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancel.java similarity index 78% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Cancel.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancel.java index f4312d964..9167ae73c 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Cancel.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancel.java @@ -6,19 +6,19 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import javax.validation.constraints.NotNull; /** * Cancel action to be provided to the target. */ -public class Cancel { +public class DdiCancel { private final String id; @NotNull - private final CancelActionToStop cancelAction; + private final DdiCancelActionToStop cancelAction; /** * Parameterized constructor. @@ -28,7 +28,7 @@ public class Cancel { * @param cancelAction * the action */ - public Cancel(final String id, final CancelActionToStop cancelAction) { + public DdiCancel(final String id, final DdiCancelActionToStop cancelAction) { super(); this.id = id; this.cancelAction = cancelAction; @@ -38,7 +38,7 @@ public class Cancel { return id; } - public CancelActionToStop getCancelAction() { + public DdiCancelActionToStop getCancelAction() { return cancelAction; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/CancelActionToStop.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancelActionToStop.java similarity index 86% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/CancelActionToStop.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancelActionToStop.java index c0348a210..e7b946a87 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/CancelActionToStop.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancelActionToStop.java @@ -6,14 +6,14 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import javax.validation.constraints.NotNull; /** * The {@link Action} that has to be stopped by the target. */ -public class CancelActionToStop { +public class DdiCancelActionToStop { @NotNull private final String stopId; @@ -24,7 +24,7 @@ public class CancelActionToStop { * @param stopId * ID of the {@link Action} to be stoppedW */ - public CancelActionToStop(final String stopId) { + public DdiCancelActionToStop(final String stopId) { super(); this.stopId = stopId; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Chunk.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java similarity index 81% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Chunk.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java index 0282bc4ea..4ff9debe4 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Chunk.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import java.util.List; @@ -15,7 +15,7 @@ import javax.validation.constraints.NotNull; /** * Deployment chunks. */ -public class Chunk { +public class DdiChunk { @NotNull private final String part; @@ -26,7 +26,7 @@ public class Chunk { @NotNull private final String name; - private final List artifacts; + private final List artifacts; /** * Constructor. @@ -40,7 +40,7 @@ public class Chunk { * @param artifacts * download information */ - public Chunk(final String part, final String version, final String name, final List artifacts) { + public DdiChunk(final String part, final String version, final String name, final List artifacts) { super(); this.part = part; this.version = version; @@ -60,7 +60,7 @@ public class Chunk { return name; } - public List getArtifacts() { + public List getArtifacts() { return artifacts; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Config.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java similarity index 75% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Config.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java index 4809d2c09..fa4f19882 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Config.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java @@ -6,14 +6,14 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; /** * Standard configuration for the target. */ -public class Config { +public class DdiConfig { - private final Polling polling; + private final DdiPolling polling; /** * Constructor. @@ -21,12 +21,12 @@ public class Config { * @param polling * configuration of the SP target */ - public Config(final Polling polling) { + public DdiConfig(final DdiPolling polling) { super(); this.polling = polling; } - public Polling getPolling() { + public DdiPolling getPolling() { return polling; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ConfigData.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfigData.java similarity index 81% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ConfigData.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfigData.java index bd9a10520..a16ddf064 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ConfigData.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfigData.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import java.util.Map; @@ -18,7 +18,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * Feedback channel for ConfigData action. */ -public class ConfigData extends ActionFeedback { +public class DdiConfigData extends DdiActionFeedback { @NotEmpty private final Map data; @@ -36,8 +36,8 @@ public class ConfigData extends ActionFeedback { * contains the attributes. */ @JsonCreator - public ConfigData(@JsonProperty(value = "id") final Long id, @JsonProperty(value = "time") final String time, - @JsonProperty(value = "status") final Status status, + public DdiConfigData(@JsonProperty(value = "id") final Long id, @JsonProperty(value = "time") final String time, + @JsonProperty(value = "status") final DdiStatus status, @JsonProperty(value = "data") final Map data) { super(id, time, status); this.data = data; diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ControllerBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java similarity index 68% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ControllerBase.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java index ff282935d..b044c3537 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/ControllerBase.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java @@ -6,16 +6,16 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import org.springframework.hateoas.ResourceSupport; /** - * {@link ControllerBase} resource content. + * {@link DdiControllerBase} resource content. */ -public class ControllerBase extends ResourceSupport { +public class DdiControllerBase extends ResourceSupport { - private final Config config; + private final DdiConfig config; /** * Constructor. @@ -23,12 +23,12 @@ public class ControllerBase extends ResourceSupport { * @param config * configuration of the SP target */ - public ControllerBase(final Config config) { + public DdiControllerBase(final DdiConfig config) { super(); this.config = config; } - public Config getConfig() { + public DdiConfig getConfig() { return config; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Deployment.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java similarity index 87% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Deployment.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java index 05cd730a0..55538f8e2 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Deployment.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import java.util.List; @@ -15,13 +15,13 @@ import com.fasterxml.jackson.annotation.JsonValue; /** * Detailed {@link UpdateAction} information. */ -public class Deployment { +public class DdiDeployment { private final HandlingType download; private final HandlingType update; - private final List chunks; + private final List chunks; /** * Constructor. @@ -33,7 +33,7 @@ public class Deployment { * @param chunks * to handle. */ - public Deployment(final HandlingType download, final HandlingType update, final List chunks) { + public DdiDeployment(final HandlingType download, final HandlingType update, final List chunks) { super(); this.download = download; this.update = update; @@ -48,7 +48,7 @@ public class Deployment { return update; } - public List getChunks() { + public List getChunks() { return chunks; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/DeploymentBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java similarity index 79% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/DeploymentBase.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java index aa30c2c63..25c7a62ed 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/DeploymentBase.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import javax.validation.constraints.NotNull; @@ -17,14 +17,14 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * {@link UpdateAction} resource. */ -public class DeploymentBase extends ResourceSupport { +public class DdiDeploymentBase extends ResourceSupport { @JsonProperty("id") @NotNull private final String deplyomentId; @NotNull - private final Deployment deployment; + private final DdiDeployment deployment; /** * Constructor. @@ -34,12 +34,12 @@ public class DeploymentBase extends ResourceSupport { * @param deployment * details. */ - public DeploymentBase(final String id, final Deployment deployment) { + public DdiDeploymentBase(final String id, final DdiDeployment deployment) { deplyomentId = id; this.deployment = deployment; } - public Deployment getDeployment() { + public DdiDeployment getDeployment() { return deployment; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Polling.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java similarity index 84% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Polling.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java index b0471bc21..4ad67d340 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Polling.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java @@ -6,12 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; /** * Polling interval for the SP target. */ -public class Polling { +public class DdiPolling { private final String sleep; @@ -21,7 +21,7 @@ public class Polling { * @param sleep * between polls */ - public Polling(final String sleep) { + public DdiPolling(final String sleep) { super(); this.sleep = sleep; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Progress.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiProgress.java similarity index 86% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Progress.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiProgress.java index a3e441f31..cf73fc5c0 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Progress.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiProgress.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import javax.validation.constraints.NotNull; @@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * Action fulfillment progress by means of gives the achieved amount of maximal * of possible levels. */ -public class Progress { +public class DdiProgress { @NotNull private final Integer cnt; @@ -33,7 +33,7 @@ public class Progress { * maximum levels */ @JsonCreator - public Progress(@JsonProperty("cnt") final Integer cnt, @JsonProperty("of") final Integer of) { + public DdiProgress(@JsonProperty("cnt") final Integer cnt, @JsonProperty("of") final Integer of) { super(); this.cnt = cnt; this.of = of; diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Result.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiResult.java similarity index 86% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Result.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiResult.java index f4b790b5d..36f0d134c 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Result.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiResult.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import org.hibernate.validator.constraints.NotEmpty; @@ -18,12 +18,12 @@ import com.fasterxml.jackson.annotation.JsonValue; * Result information of the action progress which can by an intermediate or * final update. */ -public class Result { +public class DdiResult { @NotEmpty private final FinalResult finished; - private final Progress progress; + private final DdiProgress progress; /** * Constructor. @@ -34,8 +34,8 @@ public class Result { * if not yet finished */ @JsonCreator - public Result(@JsonProperty("finished") final FinalResult finished, - @JsonProperty("progress") final Progress progress) { + public DdiResult(@JsonProperty("finished") final FinalResult finished, + @JsonProperty("progress") final DdiProgress progress) { super(); this.finished = finished; this.progress = progress; @@ -45,7 +45,7 @@ public class Result { return finished; } - public Progress getProgress() { + public DdiProgress getProgress() { return progress; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Status.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiStatus.java similarity index 87% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Status.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiStatus.java index 80351e41f..cb9b57187 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/model/Status.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiStatus.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.model; +package org.eclipse.hawkbit.ddi.json.model; import java.util.List; @@ -19,13 +19,13 @@ import com.fasterxml.jackson.annotation.JsonValue; /** * Details status information concerning the action processing. */ -public class Status { +public class DdiStatus { @NotNull private final ExecutionStatus execution; @NotNull - private final Result result; + private final DdiResult result; private final List details; @@ -40,8 +40,8 @@ public class Status { * as optional addition */ @JsonCreator - public Status(@JsonProperty("execution") final ExecutionStatus execution, - @JsonProperty("result") final Result result, @JsonProperty("details") final List details) { + public DdiStatus(@JsonProperty("execution") final ExecutionStatus execution, + @JsonProperty("result") final DdiResult result, @JsonProperty("details") final List details) { super(); this.execution = execution; this.result = result; @@ -52,7 +52,7 @@ public class Status { return execution; } - public Result getResult() { + public DdiResult getResult() { return result; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/ArtifactStoreControllerDdiApi.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java similarity index 75% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/ArtifactStoreControllerDdiApi.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java index 5df63b1b5..ffeef732f 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/ArtifactStoreControllerDdiApi.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java @@ -6,13 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.api; +package org.eclipse.hawkbit.ddi.rest.api; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.eclipse.hawkbit.ddi.ControllerConstants; -import org.eclipse.hawkbit.ddi.model.Artifact; +import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.web.bind.annotation.AuthenticationPrincipal; @@ -24,11 +23,11 @@ import org.springframework.web.bind.annotation.ResponseBody; /** * REST resource handling for artifact download operations. */ -@RequestMapping(ControllerConstants.ARTIFACTS_V1_REQUEST_MAPPING) -public interface ArtifactStoreControllerDdiApi { +@RequestMapping(DdiRestConstants.ARTIFACTS_V1_REQUEST_MAPPING) +public interface DdiArtifactStoreControllerRestApi { /** - * Handles GET {@link Artifact} download request. This could be full or + * Handles GET {@link DdiArtifact} download request. This could be full or * partial download request. * * @param fileName @@ -44,7 +43,7 @@ public interface ArtifactStoreControllerDdiApi { * {@link HttpStatus#OK} or in case of partial download * {@link HttpStatus#PARTIAL_CONTENT}. */ - @RequestMapping(method = RequestMethod.GET, value = ControllerConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + @RequestMapping(method = RequestMethod.GET, value = DdiRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + "/{fileName}") @ResponseBody public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, @@ -52,7 +51,7 @@ public interface ArtifactStoreControllerDdiApi { @AuthenticationPrincipal final String targetid); /** - * Handles GET {@link Artifact} MD5 checksum file download request. + * Handles GET {@link DdiArtifact} MD5 checksum file download request. * * @param fileName * to search for @@ -61,8 +60,8 @@ public interface ArtifactStoreControllerDdiApi { * * @return response of the servlet */ - @RequestMapping(method = RequestMethod.GET, value = ControllerConstants.ARTIFACT_DOWNLOAD_BY_FILENAME - + "/{fileName}" + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX) + @RequestMapping(method = RequestMethod.GET, value = DdiRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + + "/{fileName}" + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX) @ResponseBody public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName, final HttpServletResponse response); diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/ControllerConstants.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRestConstants.java similarity index 93% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/ControllerConstants.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRestConstants.java index 959f8488b..f6356c466 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/ControllerConstants.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRestConstants.java @@ -6,12 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi; +package org.eclipse.hawkbit.ddi.rest.api; /** * Constants for the direct device integration rest resources. */ -public final class ControllerConstants { +public final class DdiRestConstants { /** * The base URL mapping of the direct device integration rest resources. @@ -59,7 +59,7 @@ public final class ControllerConstants { public static final String ARTIFACT_MD5_DWNL_SUFFIX = ".MD5SUM"; // constant class, private constructor. - private ControllerConstants() { + private DdiRestConstants() { } } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRootControllerRestApi.java similarity index 70% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java rename to hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRootControllerRestApi.java index 8e51e0b86..febdaa6b4 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRootControllerRestApi.java @@ -1,7 +1,7 @@ /** * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. */ -package org.eclipse.hawkbit.ddi.api; +package org.eclipse.hawkbit.ddi.rest.api; import java.lang.annotation.Target; import java.util.List; @@ -10,13 +10,12 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import org.eclipse.hawkbit.ddi.ControllerConstants; -import org.eclipse.hawkbit.ddi.model.ActionFeedback; -import org.eclipse.hawkbit.ddi.model.Artifact; -import org.eclipse.hawkbit.ddi.model.Cancel; -import org.eclipse.hawkbit.ddi.model.ConfigData; -import org.eclipse.hawkbit.ddi.model.ControllerBase; -import org.eclipse.hawkbit.ddi.model.DeploymentBase; +import org.eclipse.hawkbit.ddi.json.model.DdiActionFeedback; +import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; +import org.eclipse.hawkbit.ddi.json.model.DdiCancel; +import org.eclipse.hawkbit.ddi.json.model.DdiConfigData; +import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase; +import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -30,8 +29,8 @@ import org.springframework.web.bind.annotation.RequestParam; /** * REST resource handling for root controller CRUD operations. */ -@RequestMapping(ControllerConstants.BASE_V1_REQUEST_MAPPING) -public interface RootControllerDdiApi { +@RequestMapping(DdiRestConstants.BASE_V1_REQUEST_MAPPING) +public interface DdiRootControllerRestApi { /** * Returns all artifacts of a given software module and target. @@ -45,7 +44,7 @@ public interface RootControllerDdiApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getSoftwareModulesArtifacts( + ResponseEntity> getSoftwareModulesArtifacts( @PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId); @@ -61,11 +60,11 @@ public interface RootControllerDdiApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetid}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid, + ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid, final HttpServletRequest request); /** - * Handles GET {@link Artifact} download request. This could be full or + * Handles GET {@link DdiArtifact} download request. This could be full or * partial (as specified by RFC7233 (Range Requests)) download request. * * @param targetid @@ -84,13 +83,13 @@ public interface RootControllerDdiApi { * {@link HttpStatus#PARTIAL_CONTENT}. */ @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}") - public ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, + ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("fileName") final String fileName, final HttpServletResponse response, final HttpServletRequest request); /** - * Handles GET {@link Artifact} MD5 checksum file download request. + * Handles GET {@link DdiArtifact} MD5 checksum file download request. * * @param targetid * of the related @@ -107,8 +106,8 @@ public interface RootControllerDdiApi { * successful */ @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}" - + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX, produces = MediaType.TEXT_PLAIN_VALUE) - public ResponseEntity downloadArtifactMd5(@PathVariable("targetid") final String targetid, + + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX, produces = MediaType.TEXT_PLAIN_VALUE) + ResponseEntity downloadArtifactMd5(@PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("fileName") final String fileName, final HttpServletResponse response, final HttpServletRequest request); @@ -120,7 +119,7 @@ public interface RootControllerDdiApi { * of the {@link Target} that matches to * {@link Target#getControllerId()} * @param actionId - * of the {@link DeploymentBase} that matches to + * of the {@link DdiDeploymentBase} that matches to * {@link Target#getActiveActions()} * @param resource * an hashcode of the resource which indicates if the action has @@ -130,16 +129,16 @@ public interface RootControllerDdiApi { * the HTTP request injected by spring * @return the response */ - @RequestMapping(value = "/{targetid}/" + ControllerConstants.DEPLOYMENT_BASE_ACTION + @RequestMapping(value = "/{targetid}/" + DdiRestConstants.DEPLOYMENT_BASE_ACTION + "/{actionId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getControllerBasedeploymentAction( + ResponseEntity getControllerBasedeploymentAction( @PathVariable("targetid") @NotEmpty final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource, final HttpServletRequest request); /** - * This is the feedback channel for the {@link DeploymentBase} action. + * This is the feedback channel for the {@link DdiDeploymentBase} action. * * @param feedback * to provide @@ -153,9 +152,9 @@ public interface RootControllerDdiApi { * * @return the response */ - @RequestMapping(value = "/{targetid}/" + ControllerConstants.DEPLOYMENT_BASE_ACTION + "/{actionId}/" - + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final ActionFeedback feedback, + @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, @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request); @@ -172,12 +171,12 @@ public interface RootControllerDdiApi { * @return status of the request */ @RequestMapping(value = "/{targetid}/" - + ControllerConstants.CONFIG_DATA_ACTION, method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity putConfigData(@Valid @RequestBody final ConfigData configData, + + DdiRestConstants.CONFIG_DATA_ACTION, method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) + ResponseEntity putConfigData(@Valid @RequestBody final DdiConfigData configData, @PathVariable("targetid") final String targetid, final HttpServletRequest request); /** - * {@link RequestMethod.GET} method for the {@link Cancel} action. + * {@link RequestMethod.GET} method for the {@link DdiCancel} action. * * @param targetid * ID of the calling target @@ -186,19 +185,19 @@ public interface RootControllerDdiApi { * @param request * the HTTP request injected by spring * - * @return the {@link Cancel} response + * @return the {@link DdiCancel} response */ - @RequestMapping(value = "/{targetid}/" + ControllerConstants.CANCEL_ACTION + @RequestMapping(value = "/{targetid}/" + DdiRestConstants.CANCEL_ACTION + "/{actionId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getControllerCancelAction(@PathVariable("targetid") @NotEmpty final String targetid, + ResponseEntity getControllerCancelAction(@PathVariable("targetid") @NotEmpty final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request); /** - * {@link RequestMethod.POST} method receiving the {@link ActionFeedback} + * {@link RequestMethod.POST} method receiving the {@link DdiActionFeedback} * from the target. * * @param feedback - * the {@link ActionFeedback} from the target. + * the {@link DdiActionFeedback} from the target. * @param targetid * the ID of the calling target * @param actionId @@ -206,12 +205,12 @@ public interface RootControllerDdiApi { * @param request * the HTTP request injected by spring * - * @return the {@link ActionFeedback} response + * @return the {@link DdiActionFeedback} response */ - @RequestMapping(value = "/{targetid}/" + ControllerConstants.CANCEL_ACTION + "/{actionId}/" - + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity postCancelActionFeedback(@Valid @RequestBody final ActionFeedback feedback, + @RequestMapping(value = "/{targetid}/" + DdiRestConstants.CANCEL_ACTION + "/{actionId}/" + + DdiRestConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) + ResponseEntity postCancelActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, @PathVariable("targetid") @NotEmpty final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request); diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java index ec8a994b0..61f3fd465 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java @@ -16,7 +16,7 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheWriteNotify; -import org.eclipse.hawkbit.ddi.api.ArtifactStoreControllerDdiApi; +import org.eclipse.hawkbit.ddi.rest.api.DdiArtifactStoreControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.model.Action; @@ -44,7 +44,7 @@ import org.springframework.web.bind.annotation.RestController; * for legacy controllers that can not be fed with a download URI at runtime. */ @RestController -public class ArtifactStoreController implements ArtifactStoreControllerDdiApi { +public class ArtifactStoreController implements DdiArtifactStoreControllerRestApi { private static final Logger LOG = LoggerFactory.getLogger(ArtifactStoreController.class); diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java index 75adebb45..8533c6eac 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java @@ -20,12 +20,12 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.api.UrlProtocol; -import org.eclipse.hawkbit.ddi.ControllerConstants; -import org.eclipse.hawkbit.ddi.model.Artifact; -import org.eclipse.hawkbit.ddi.model.Chunk; -import org.eclipse.hawkbit.ddi.model.Config; -import org.eclipse.hawkbit.ddi.model.ControllerBase; -import org.eclipse.hawkbit.ddi.model.Polling; +import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; +import org.eclipse.hawkbit.ddi.json.model.DdiChunk; +import org.eclipse.hawkbit.ddi.json.model.DdiConfig; +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; @@ -50,10 +50,10 @@ public final class DataConversionHelper { } - static List createChunks(final String targetid, final Action uAction, + static List createChunks(final String targetid, final Action uAction, final ArtifactUrlHandler artifactUrlHandler) { return uAction.getDistributionSet().getModules().stream() - .map(module -> new Chunk(mapChunkLegacyKeys(module.getType().getKey()), module.getVersion(), + .map(module -> new DdiChunk(mapChunkLegacyKeys(module.getType().getKey()), module.getVersion(), module.getName(), createArtifacts(targetid, module, artifactUrlHandler))) .collect(Collectors.toList()); @@ -79,12 +79,12 @@ public final class DataConversionHelper { * the software module * @return a list of artifacts or a empty list. Cannot be . */ - public static List createArtifacts(final String targetid, + public static List createArtifacts(final String targetid, final org.eclipse.hawkbit.repository.model.SoftwareModule module, final ArtifactUrlHandler artifactUrlHandler) { - final List files = new ArrayList<>(); + final List files = new ArrayList<>(); module.getLocalArtifacts().forEach(artifact -> { - final Artifact file = new Artifact(); + final DdiArtifact file = new DdiArtifact(); file.setHashes(new ArtifactHash(artifact.getSha1Hash(), artifact.getMd5Hash())); file.setFilename(artifact.getFilename()); file.setSize(artifact.getSize()); @@ -93,18 +93,18 @@ public final class DataConversionHelper { final String linkHttps = artifactUrlHandler.getUrl(targetid, artifact.getSoftwareModule().getId(), artifact.getFilename(), artifact.getSha1Hash(), UrlProtocol.HTTPS); file.add(new Link(linkHttps).withRel("download")); - file.add(new Link(linkHttps + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum")); + file.add(new Link(linkHttps + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum")); file.add(new Link(linkHttp).withRel("download-http")); - file.add(new Link(linkHttp + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum-http")); + file.add(new Link(linkHttp + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum-http")); files.add(file); }); return files; } - static ControllerBase fromTarget(final Target target, final List actions, + static DdiControllerBase fromTarget(final Target target, final List actions, final String defaultControllerPollTime, final TenantAware tenantAware) { - final ControllerBase result = new ControllerBase(new Config(new Polling(defaultControllerPollTime))); + final DdiControllerBase result = new DdiControllerBase(new DdiConfig(new DdiPolling(defaultControllerPollTime))); boolean addedUpdate = false; boolean addedCancel = false; @@ -118,19 +118,19 @@ public final class DataConversionHelper { // response because of eTags. result.add(linkTo(methodOn(RootController.class, tenantAware.getCurrentTenant()) .getControllerBasedeploymentAction(target.getControllerId(), action.getId(), actions.hashCode(), - null)).withRel(ControllerConstants.DEPLOYMENT_BASE_ACTION)); + null)).withRel(DdiRestConstants.DEPLOYMENT_BASE_ACTION)); addedUpdate = true; } else if (action.isCancelingOrCanceled() && !addedCancel) { result.add(linkTo(methodOn(RootController.class, tenantAware.getCurrentTenant()) .getControllerCancelAction(target.getControllerId(), action.getId(), null)) - .withRel(ControllerConstants.CANCEL_ACTION)); + .withRel(DdiRestConstants.CANCEL_ACTION)); addedCancel = true; } } if (target.getTargetInfo().isRequestControllerAttributes()) { result.add(linkTo(methodOn(RootController.class, tenantAware.getCurrentTenant()).putConfigData(null, - target.getControllerId(), null)).withRel(ControllerConstants.CONFIG_DATA_ACTION)); + target.getControllerId(), null)).withRel(DdiRestConstants.CONFIG_DATA_ACTION)); } return result; } @@ -146,7 +146,7 @@ public final class DataConversionHelper { final StringBuilder header = new StringBuilder(); header.append("attachment;filename="); header.append(fileName); - header.append(ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX); + header.append(DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX); response.setContentLength(content.length); response.setHeader("Content-Disposition", header.toString()); diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java index 9fb0fca1d..e48e2ec5f 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java @@ -18,17 +18,17 @@ import javax.validation.Valid; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheWriteNotify; -import org.eclipse.hawkbit.ddi.api.RootControllerDdiApi; -import org.eclipse.hawkbit.ddi.model.ActionFeedback; -import org.eclipse.hawkbit.ddi.model.Cancel; -import org.eclipse.hawkbit.ddi.model.CancelActionToStop; -import org.eclipse.hawkbit.ddi.model.Chunk; -import org.eclipse.hawkbit.ddi.model.ConfigData; -import org.eclipse.hawkbit.ddi.model.ControllerBase; -import org.eclipse.hawkbit.ddi.model.Deployment; -import org.eclipse.hawkbit.ddi.model.Deployment.HandlingType; -import org.eclipse.hawkbit.ddi.model.DeploymentBase; -import org.eclipse.hawkbit.ddi.model.Result.FinalResult; +import org.eclipse.hawkbit.ddi.json.model.DdiActionFeedback; +import org.eclipse.hawkbit.ddi.json.model.DdiCancel; +import org.eclipse.hawkbit.ddi.json.model.DdiCancelActionToStop; +import org.eclipse.hawkbit.ddi.json.model.DdiChunk; +import org.eclipse.hawkbit.ddi.json.model.DdiConfigData; +import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase; +import org.eclipse.hawkbit.ddi.json.model.DdiDeployment; +import org.eclipse.hawkbit.ddi.json.model.DdiDeployment.HandlingType; +import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase; +import org.eclipse.hawkbit.ddi.json.model.DdiResult.FinalResult; +import org.eclipse.hawkbit.ddi.rest.api.DdiRootControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -63,7 +63,7 @@ import org.springframework.web.bind.annotation.RestController; * Transactional (read-write) as all queries at least update the last poll time. */ @RestController -public class RootController implements RootControllerDdiApi { +public class RootController implements DdiRootControllerRestApi { private static final Logger LOG = LoggerFactory.getLogger(RootController.class); private static final String GIVEN_ACTION_IS_NOT_ASSIGNED_TO_GIVEN_TARGET = "given action ({}) is not assigned to given target ({})."; @@ -90,7 +90,7 @@ public class RootController implements RootControllerDdiApi { private ArtifactUrlHandler artifactUrlHandler; @Override - public ResponseEntity> getSoftwareModulesArtifacts( + public ResponseEntity> getSoftwareModulesArtifacts( @PathVariable final String targetid, @PathVariable final Long softwareModuleId) { LOG.debug("getSoftwareModulesArtifacts({})", targetid); @@ -107,7 +107,7 @@ public class RootController implements RootControllerDdiApi { } @Override - public ResponseEntity getControllerBase(@PathVariable final String targetid, + public ResponseEntity getControllerBase(@PathVariable final String targetid, final HttpServletRequest request) { LOG.debug("getControllerBase({})", targetid); @@ -206,7 +206,7 @@ public class RootController implements RootControllerDdiApi { } @Override - public ResponseEntity getControllerBasedeploymentAction( + public ResponseEntity getControllerBasedeploymentAction( @PathVariable @NotEmpty final String targetid, @PathVariable @NotEmpty final Long actionId, @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource, final HttpServletRequest request) { @@ -223,12 +223,12 @@ public class RootController implements RootControllerDdiApi { if (!action.isCancelingOrCanceled()) { - final List chunks = DataConversionHelper.createChunks(targetid, action, artifactUrlHandler); + final List chunks = DataConversionHelper.createChunks(targetid, action, artifactUrlHandler); final HandlingType handlingType = action.isForce() ? HandlingType.FORCED : HandlingType.ATTEMPT; - final DeploymentBase base = new DeploymentBase(Long.toString(action.getId()), - new Deployment(handlingType, handlingType, chunks)); + final DdiDeploymentBase base = new DdiDeploymentBase(Long.toString(action.getId()), + new DdiDeployment(handlingType, handlingType, chunks)); LOG.debug("Found an active UpdateAction for target {}. returning deyploment: {}", targetid, base); @@ -242,7 +242,7 @@ public class RootController implements RootControllerDdiApi { } @Override - public ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final ActionFeedback feedback, + public ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, @PathVariable final String targetid, @PathVariable @NotEmpty final Long actionId, final HttpServletRequest request) { LOG.debug("provideBasedeploymentActionFeedback for target [{},{}]: {}", targetid, actionId, feedback); @@ -277,7 +277,7 @@ public class RootController implements RootControllerDdiApi { } - private ActionStatus generateUpdateStatus(final ActionFeedback feedback, final String targetid, final Long actionid, + private ActionStatus generateUpdateStatus(final DdiActionFeedback feedback, final String targetid, final Long actionid, final Action action) { final ActionStatus actionStatus = new ActionStatus(); @@ -317,7 +317,7 @@ public class RootController implements RootControllerDdiApi { return actionStatus; } - private static void handleDefaultUpdateStatus(final ActionFeedback feedback, final String targetid, + private static void handleDefaultUpdateStatus(final DdiActionFeedback feedback, final String targetid, final Long actionid, final ActionStatus actionStatus) { LOG.debug("Controller reported intermediate status (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); @@ -325,7 +325,7 @@ public class RootController implements RootControllerDdiApi { actionStatus.addMessage("Controller reported: " + feedback.getStatus().getExecution()); } - private static void handleClosedUpdateStatus(final ActionFeedback feedback, final String targetid, + private static void handleClosedUpdateStatus(final DdiActionFeedback feedback, final String targetid, final Long actionid, final ActionStatus actionStatus) { LOG.debug("Controller reported closed (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); @@ -339,7 +339,7 @@ public class RootController implements RootControllerDdiApi { } @Override - public ResponseEntity putConfigData(@Valid @RequestBody final ConfigData configData, + public ResponseEntity putConfigData(@Valid @RequestBody final DdiConfigData configData, @PathVariable final String targetid, final HttpServletRequest request) { controllerManagement.updateLastTargetQuery(targetid, IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); @@ -350,7 +350,7 @@ public class RootController implements RootControllerDdiApi { } @Override - public ResponseEntity getControllerCancelAction(@PathVariable @NotEmpty final String targetid, + public ResponseEntity getControllerCancelAction(@PathVariable @NotEmpty final String targetid, @PathVariable @NotEmpty final Long actionId, final HttpServletRequest request) { LOG.debug("getControllerCancelAction({})", targetid); @@ -364,8 +364,8 @@ public class RootController implements RootControllerDdiApi { } if (action.isCancelingOrCanceled()) { - final Cancel cancel = new Cancel(String.valueOf(action.getId()), - new CancelActionToStop(String.valueOf(action.getId()))); + final DdiCancel cancel = new DdiCancel(String.valueOf(action.getId()), + new DdiCancelActionToStop(String.valueOf(action.getId()))); LOG.debug("Found an active CancelAction for target {}. returning cancel: {}", targetid, cancel); @@ -379,7 +379,7 @@ public class RootController implements RootControllerDdiApi { } @Override - public ResponseEntity postCancelActionFeedback(@Valid @RequestBody final ActionFeedback feedback, + public ResponseEntity postCancelActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, @PathVariable @NotEmpty final String targetid, @PathVariable @NotEmpty final Long actionId, final HttpServletRequest request) { LOG.debug("provideCancelActionFeedback for target [{}]: {}", targetid, feedback); @@ -405,7 +405,7 @@ public class RootController implements RootControllerDdiApi { return new ResponseEntity<>(HttpStatus.OK); } - private static ActionStatus generateActionCancelStatus(final ActionFeedback feedback, final Target target, + private static ActionStatus generateActionCancelStatus(final DdiActionFeedback feedback, final Target target, final Long actionid, final Action action) { final ActionStatus actionStatus = new ActionStatus(); @@ -445,7 +445,7 @@ public class RootController implements RootControllerDdiApi { } - private static void handleClosedCancelStatus(final ActionFeedback feedback, final ActionStatus actionStatus) { + private static void handleClosedCancelStatus(final DdiActionFeedback feedback, final ActionStatus actionStatus) { if (feedback.getStatus().getResult().getFinished() == FinalResult.FAILURE) { actionStatus.setStatus(Status.ERROR); } else { From 8a22ea3df3d47d121d89ae658330f6ce07c60625 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 20 Apr 2016 13:47:09 +0200 Subject: [PATCH 010/371] Rename Ddi classes Signed-off-by: SirWayne --- .../ddi/resource/EnableDirectDeviceApi.java | 30 ------------------- 1 file changed, 30 deletions(-) delete mode 100644 hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/EnableDirectDeviceApi.java diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/EnableDirectDeviceApi.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/EnableDirectDeviceApi.java deleted file mode 100644 index 0d5a81e29..000000000 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/EnableDirectDeviceApi.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.resource; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.stereotype.Controller; - -/** - * Annotation to enable {@link ComponentScan} in the resource package to setup - * all {@link Controller} annotated classes and setup the Direct Device API. - */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Configuration -@ComponentScan -public @interface EnableDirectDeviceApi { - -} From 8d341705151a7e5300b4c7c855b50ba17541c8cc Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 20 Apr 2016 15:02:44 +0200 Subject: [PATCH 011/371] DDI client implementation validation Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-ddi-client/pom.xml | 52 +++++++-- .../hawkbit/ddi/client/Application.java | 22 ++++ ...plicationJsonRequestHeaderInterceptor.java | 28 +++++ .../eclipse/hawkbit/ddi/client/DdiClient.java | 85 ++++++++++++++ ...leConsumersProducersSpringMvcContract.java | 43 +++++++ .../RootControllerResourceClient.java | 15 +++ .../org/hawkbit/example/ddi/client/App.java | 13 --- .../hawkbit/example/ddi/client/AppTest.java | 18 +++ .../hawkbit/example/ddi/client/AppTest.java | 38 ------- .../hawkbit/ddi/api/RootControllerDdiApi.java | 105 ++++++++++-------- 10 files changed, 312 insertions(+), 107 deletions(-) create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java delete mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/hawkbit/example/ddi/client/App.java create mode 100644 examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java delete mode 100644 examples/hawkbit-example-ddi-client/src/test/java/org/hawkbit/example/ddi/client/AppTest.java diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index 7630a5a9e..8ce1749dd 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -7,20 +7,54 @@ hawkbit-examples-parent 0.2.0-SNAPSHOT - org.eclipse.hawkbit hawkbit-example-ddi-client - 0.2.0-SNAPSHOT + hawkbit-example-ddi-client - http://maven.apache.org - - UTF-8 - + + + + + org.springframework.cloud + spring-cloud-netflix + 1.0.7.RELEASE + pom + import + + + + - + + org.eclipse.hawkbit + hawkbit-ddi-api + ${project.version} + + + org.springframework.cloud + spring-cloud-starter-feign + + + com.netflix.feign + feign-core + + 8.16.0 + + + com.netflix.feign + feign-jackson + + 8.16.0 + + + javax.servlet + javax.servlet-api + + + + junit junit - 3.8.1 test - + diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java new file mode 100644 index 000000000..e230a77da --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ddi.client; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.netflix.feign.EnableFeignClients; + +/** + * @author Jonathan Knoblauch + * + */ +@SpringBootApplication +@EnableFeignClients +public class Application { + + public static void main(final String[] args) { + new SpringApplicationBuilder().showBanner(false).sources(Application.class).run(args); + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java new file mode 100644 index 000000000..680da74f1 --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client; + +import org.springframework.http.MediaType; + +import feign.RequestInterceptor; +import feign.RequestTemplate; + +/** + * An feign request interceptor to set the defined {@code Accept} and + * {@code Content-Type} headers for each request to {@code application/json}. + */ +public class ApplicationJsonRequestHeaderInterceptor implements RequestInterceptor { + + @Override + public void apply(final RequestTemplate template) { + template.header("Accept", MediaType.APPLICATION_JSON_VALUE); + template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java new file mode 100644 index 000000000..7673f1a41 --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java @@ -0,0 +1,85 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ddi.client; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.hawkbit.ddi.ControllerConstants; +import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; +import org.eclipse.hawkbit.ddi.model.ControllerBase; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; +import org.springframework.http.ResponseEntity; + +import feign.Feign; +import feign.Logger; +import feign.Logger.Level; +import feign.jackson.JacksonDecoder; +import feign.jackson.JacksonEncoder; + +public class DdiClient { + + @Autowired + private HttpServletRequest request; + + @Autowired + private HttpServletResponse response; + + private final String controllerId; + private final String name; + private final String description; + private RootControllerResourceClient rootControllerResourceClient; + private String rootControllerResourcePath; + + public DdiClient(final String rolloutsUrl, final String controllerId, final String name, final String description, + final String tenant) { + super(); + this.controllerId = controllerId; + this.name = name; + this.description = description; + rootControllerResourcePath = rolloutsUrl + ControllerConstants.BASE_V1_REQUEST_MAPPING; + rootControllerResourcePath = rootControllerResourcePath.replace("{tenant}", tenant); + + createFeignClient(); + } + + private void createFeignClient() { + + // BasicAuthRequestInterceptor TODO + + final Feign.Builder feignBuilder = Feign.builder() + .contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) + .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) + .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()) + .decoder(new ResponseEntityDecoder(new JacksonDecoder())); + // TODO implement feign client encoder to handle MultiPartFile + // .requestInterceptor(new BasicAuthRequestInterceptor(tenant + "\\" + + // user, password)) + + rootControllerResourceClient = feignBuilder.target(RootControllerResourceClient.class, + rootControllerResourcePath); + + } + + public void startDdiClient() { + + // final HttpServletRequest request; + + // final HttpSession mySession = request.getSession(); + + // final HttpServletRequest request = new; + + final ResponseEntity response = rootControllerResourceClient.getControllerBase("test", request); + final ControllerBase controllerBase = response.getBody(); + + // TODO notify every 10 seconds on the rollout server + + // TODO if new update available -> start download and installation + // process + // report status messages + + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java new file mode 100644 index 000000000..c1c24b9ec --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.netflix.feign.support.SpringMvcContract; + +import feign.MethodMetadata; + +/** + * Own implementation of the {@link SpringMvcContract} which catches the + * {@link IllegalStateException} which occurs due multiple produces and consumes + * values in the request-mapping + * annoation.https://github.com/spring-cloud/spring-cloud-netflix/issues/808 + */ +public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvcContract { + + private static final Logger LOGGER = LoggerFactory + .getLogger(IgnoreMultipleConsumersProducersSpringMvcContract.class); + + @Override + protected void processAnnotationOnMethod(final MethodMetadata data, final Annotation methodAnnotation, + final Method method) { + try { + super.processAnnotationOnMethod(data, methodAnnotation, method); + } catch (final IllegalStateException e) { + // ignore illegalstateexception here because it's thrown because of + // multiple consumers and produces, see + // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 + LOGGER.trace(e.getMessage(), e); + } + } +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java new file mode 100644 index 000000000..2d531963f --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ddi.client.resource; + +import org.eclipse.hawkbit.ddi.api.RootControllerDdiApi; +import org.springframework.cloud.netflix.feign.FeignClient; + +/** + * Client binding for the Rootcontroller resource of the DDI API. + */ +@FeignClient(url = "${hawkbit.url:localhost:8080}/{tenant}/controller/v1") +public interface RootControllerResourceClient extends RootControllerDdiApi { + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/hawkbit/example/ddi/client/App.java b/examples/hawkbit-example-ddi-client/src/main/java/org/hawkbit/example/ddi/client/App.java deleted file mode 100644 index cd85d3a8b..000000000 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/hawkbit/example/ddi/client/App.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.hawkbit.example.ddi.client; - -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); - } -} diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java new file mode 100644 index 000000000..64f34c8ff --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java @@ -0,0 +1,18 @@ +package org.eclipse.hawkbit.example.ddi.client; + +import org.eclipse.hawkbit.ddi.client.DdiClient; +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest { + + @Test + public void AppTest() { + + final DdiClient ddiClient = new DdiClient("localhost:8080", "mytest", "mytest", "desc", "DEFAULT"); + ddiClient.startDdiClient(); + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/hawkbit/example/ddi/client/AppTest.java deleted file mode 100644 index 395886a2d..000000000 --- a/examples/hawkbit-example-ddi-client/src/test/java/org/hawkbit/example/ddi/client/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.hawkbit.example.ddi.client; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java index 8e51e0b86..548f35d72 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/api/RootControllerDdiApi.java @@ -7,22 +7,15 @@ import java.lang.annotation.Target; import java.util.List; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; import org.eclipse.hawkbit.ddi.ControllerConstants; -import org.eclipse.hawkbit.ddi.model.ActionFeedback; -import org.eclipse.hawkbit.ddi.model.Artifact; import org.eclipse.hawkbit.ddi.model.Cancel; -import org.eclipse.hawkbit.ddi.model.ConfigData; import org.eclipse.hawkbit.ddi.model.ControllerBase; import org.eclipse.hawkbit.ddi.model.DeploymentBase; import org.hibernate.validator.constraints.NotEmpty; -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; @@ -33,6 +26,21 @@ import org.springframework.web.bind.annotation.RequestParam; @RequestMapping(ControllerConstants.BASE_V1_REQUEST_MAPPING) public interface RootControllerDdiApi { + /** + * Root resource for an individual {@link Target}. + * + * @param targetid + * of the {@link Target} that matches to + * {@link Target#getControllerId()} + * @param request + * the HTTP request injected by spring + * @return the response + */ + @RequestMapping(method = RequestMethod.GET, value = "/{targetid}", produces = { "application/hal+json", + MediaType.APPLICATION_JSON_VALUE }) + public ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid, + final HttpServletRequest request); + /** * Returns all artifacts of a given software module and target. * @@ -49,21 +57,6 @@ public interface RootControllerDdiApi { @PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId); - /** - * Root resource for an individual {@link Target}. - * - * @param targetid - * of the {@link Target} that matches to - * {@link Target#getControllerId()} - * @param request - * the HTTP request injected by spring - * @return the response - */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetid}", produces = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid, - final HttpServletRequest request); - /** * Handles GET {@link Artifact} download request. This could be full or * partial (as specified by RFC7233 (Range Requests)) download request. @@ -83,11 +76,14 @@ public interface RootControllerDdiApi { * {@link HttpStatus#OK} or in case of partial download * {@link HttpStatus#PARTIAL_CONTENT}. */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}") - public ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, - @PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("fileName") final String fileName, final HttpServletResponse response, - final HttpServletRequest request); + // @RequestMapping(method = RequestMethod.GET, value = + // "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}") + // public ResponseEntity downloadArtifact(@PathVariable("targetid") + // final String targetid, + // @PathVariable("softwareModuleId") final Long softwareModuleId, + // @PathVariable("fileName") final String fileName, final + // HttpServletResponse response, + // final HttpServletRequest request); /** * Handles GET {@link Artifact} MD5 checksum file download request. @@ -106,12 +102,16 @@ public interface RootControllerDdiApi { * @return {@link ResponseEntity} with status {@link HttpStatus#OK} if * successful */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}" - + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX, produces = MediaType.TEXT_PLAIN_VALUE) - public ResponseEntity downloadArtifactMd5(@PathVariable("targetid") final String targetid, - @PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("fileName") final String fileName, final HttpServletResponse response, - final HttpServletRequest request); + // @RequestMapping(method = RequestMethod.GET, value = + // "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}" + // + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX, produces = + // MediaType.TEXT_PLAIN_VALUE) + // public ResponseEntity downloadArtifactMd5(@PathVariable("targetid") + // final String targetid, + // @PathVariable("softwareModuleId") final Long softwareModuleId, + // @PathVariable("fileName") final String fileName, final + // HttpServletResponse response, + // final HttpServletRequest request); /** * Resource for {@link SoftwareModule} {@link UpdateAction}s. @@ -153,11 +153,15 @@ public interface RootControllerDdiApi { * * @return the response */ - @RequestMapping(value = "/{targetid}/" + ControllerConstants.DEPLOYMENT_BASE_ACTION + "/{actionId}/" - + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final ActionFeedback feedback, - @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, - final HttpServletRequest request); + // @RequestMapping(value = "/{targetid}/" + + // ControllerConstants.DEPLOYMENT_BASE_ACTION + "/{actionId}/" + // + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = + // MediaType.APPLICATION_JSON_VALUE) + // public ResponseEntity postBasedeploymentActionFeedback(@Valid + // @RequestBody final ActionFeedback feedback, + // @PathVariable("targetid") final String targetid, + // @PathVariable("actionId") @NotEmpty final Long actionId, + // final HttpServletRequest request); /** * This is the feedback channel for the config data action. @@ -171,10 +175,13 @@ public interface RootControllerDdiApi { * * @return status of the request */ - @RequestMapping(value = "/{targetid}/" - + ControllerConstants.CONFIG_DATA_ACTION, method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity putConfigData(@Valid @RequestBody final ConfigData configData, - @PathVariable("targetid") final String targetid, final HttpServletRequest request); + // @RequestMapping(value = "/{targetid}/" + // + ControllerConstants.CONFIG_DATA_ACTION, method = RequestMethod.PUT, + // consumes = MediaType.APPLICATION_JSON_VALUE) + // public ResponseEntity putConfigData(@Valid @RequestBody final + // ConfigData configData, + // @PathVariable("targetid") final String targetid, final HttpServletRequest + // request); /** * {@link RequestMethod.GET} method for the {@link Cancel} action. @@ -209,10 +216,14 @@ public interface RootControllerDdiApi { * @return the {@link ActionFeedback} response */ - @RequestMapping(value = "/{targetid}/" + ControllerConstants.CANCEL_ACTION + "/{actionId}/" - + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity postCancelActionFeedback(@Valid @RequestBody final ActionFeedback feedback, - @PathVariable("targetid") @NotEmpty final String targetid, - @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request); + // @RequestMapping(value = "/{targetid}/" + + // ControllerConstants.CANCEL_ACTION + "/{actionId}/" + // + ControllerConstants.FEEDBACK, method = RequestMethod.POST, consumes = + // MediaType.APPLICATION_JSON_VALUE) + // public ResponseEntity postCancelActionFeedback(@Valid @RequestBody + // final ActionFeedback feedback, + // @PathVariable("targetid") @NotEmpty final String targetid, + // @PathVariable("actionId") @NotEmpty final Long actionId, final + // HttpServletRequest request); } From c3c405c986dd85b156aa8161e87a300231cc318b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 20 Apr 2016 17:33:03 +0200 Subject: [PATCH 012/371] Rename and split rest resources ddi, mgmt and system Signed-off-by: SirWayne --- 3rd-dependencies/listDeps.sh | 0 examples/hawkbit-example-app/pom.xml | 7 +- .../java/org/eclipse/hawkbit/app/Start.java | 6 +- examples/hawkbit-mgmt-api-client/pom.xml | 2 +- .../DistributionSetResourceClient.java | 4 +- .../DistributionSetTagResourceClient.java | 4 +- .../DistributionSetTypeResourceClient.java | 4 +- .../resource/RolloutResourceClient.java | 4 +- .../SoftwareModuleResourceClient.java | 4 +- .../SoftwareModuleTypeResourceClient.java | 4 +- .../client/resource/TargetResourceClient.java | 4 +- .../resource/TargetTagResourceClient.java | 4 +- .../builder/DistributionSetBuilder.java | 28 +- .../builder/DistributionSetTypeBuilder.java | 32 +- .../resource/builder/RolloutBuilder.java | 18 +- .../SoftwareModuleAssigmentBuilder.java | 14 +- .../builder/SoftwareModuleBuilder.java | 24 +- .../builder/SoftwareModuleTypeBuilder.java | 24 +- .../client/resource/builder/TagBuilder.java | 22 +- .../resource/builder/TargetBuilder.java | 24 +- .../CreateStartedRolloutExample.java | 16 +- .../GettingStartedDefaultScenario.java | 20 +- hawkbit-autoconfigure/pom.xml | 10 +- .../SecurityManagedConfiguration.java | 7 +- .../ResourceControllerAutoConfiguration.java | 9 +- hawkbit-ddi-api/pom.xml | 40 +- .../hawkbit/ddi/json/model/DdiArtifact.java | 10 +- .../ddi/json/model/DdiArtifactHash.java | 57 +++ hawkbit-ddi-resource/pom.xml | 33 +- .../hawkbit/ddi/annotation/EnableDdiApi.java | 0 .../resource/ArtifactStoreController.java | 4 +- .../resource/DataConversionHelper.java | 9 +- .../{ => rest}/resource/RootController.java | 4 +- .../resource/DdiArtifactDownloadTest.java} | 8 +- .../resource/DdiCancelActionTest.java} | 6 +- .../resource/DdiConfigDataTest.java} | 6 +- .../resource/DdiDeploymentBaseTest.java} | 6 +- .../resource/DdiRootControllerTest.java} | 6 +- .../ddi}/rest/resource/JsonBuilder.java | 2 +- .../rest/resource}/MockMvcResultPrinter.java | 2 +- hawkbit-mgmt-api/pom.xml | 53 ++ .../mgmt/json}/model/MetadataRest.java | 2 +- .../mgmt/json/model/MgmtBaseEntity.java | 4 +- .../hawkbit/mgmt/json/model/MgmtId.java | 4 +- .../mgmt/json/model/MgmtNamedEntity.java | 4 +- .../mgmt/json/model/MgmtPollStatus.java | 4 +- .../hawkbit/mgmt/json}/model/PagedList.java | 2 +- .../mgmt/json/model/action/MgmtAction.java | 6 +- .../json/model/action/MgmtActionStatus.java | 4 +- .../json/model/artifact/MgmtArtifact.java | 13 +- .../json/model/artifact/MgmtArtifactHash.java | 8 +- .../model/distributionset/MgmtActionType.java | 6 +- .../distributionset/MgmtDistributionSet.java | 14 +- .../MgmtDistributionSetRequestBodyPost.java | 34 +- .../MgmtDistributionSetRequestBodyPut.java | 10 +- .../MgmtTargetAssignmentRequestBody.java | 10 +- .../MgmtTargetAssignmentResponseBody.java | 4 +- ...gmtDistributionSetTypeRequestBodyPost.java | 28 +- ...MgmtDistributionSetTypeRequestBodyPut.java | 6 +- .../MgmtDistributionSetTypeRest.java | 6 +- .../model/rollout/MgmtRolloutCondition.java | 9 +- .../model/rollout/MgmtRolloutErrorAction.java | 4 +- .../rollout/MgmtRolloutResponseBody.java | 6 +- .../rollout/MgmtRolloutRestRequestBody.java | 38 +- .../rollout/MgmtRolloutSuccessAction.java | 9 +- .../MgmtRolloutGroupResponseBody.java | 6 +- .../softwaremodule/MgmtSoftwareModule.java | 6 +- .../MgmtSoftwareModuleAssigment.java | 9 +- .../MgmtSoftwareModuleRequestBodyPost.java | 14 +- .../MgmtSoftwareModuleRequestBodyPut.java | 8 +- .../MgmtSoftwareModuleType.java | 6 +- .../MgmtSoftwareModuleTypeAssigment.java | 6 +- ...MgmtSoftwareModuleTypeRequestBodyPost.java | 12 +- .../MgmtSoftwareModuleTypeRequestBodyPut.java | 6 +- ...gmtAssignedDistributionSetRequestBody.java | 6 +- .../tag/MgmtAssignedTargetRequestBody.java | 6 +- ...MgmtDistributionSetTagAssigmentResult.java | 18 +- .../hawkbit/mgmt/json/model/tag/MgmtTag.java | 6 +- .../json/model/tag/MgmtTagRequestBodyPut.java | 10 +- .../tag/MgmtTargetTagAssigmentResult.java | 18 +- .../target/MgmtDistributionSetAssigment.java | 14 +- .../mgmt/json/model/target/MgmtTarget.java | 14 +- .../model/target/MgmtTargetAttributes.java | 4 +- .../model/target/MgmtTargetRequestBody.java | 10 +- .../rest/api/MgmtDistributionSetRestApi.java | 89 ++-- .../api/MgmtDistributionSetTagRestApi.java | 66 ++- .../api/MgmtDistributionSetTypeRestApi.java | 81 ++- .../rest/api/MgmtDownloadArtifactRestApi.java | 46 ++ .../mgmt/rest/api/MgmtDownloadRestApi.java | 42 ++ .../mgmt/rest/api/MgmtRestConstants.java | 133 +++-- .../mgmt/rest/api/MgmtRolloutRestApi.java | 65 ++- .../rest/api/MgmtSoftwareModuleRestAPI.java | 73 ++- .../api/MgmtSoftwareModuleTypeRestApi.java | 39 +- .../mgmt/rest/api/MgmtTargetRestApi.java | 81 ++- .../mgmt/rest/api/MgmtTargetTagRestApi.java | 65 ++- .../mgmt/json}/model/PagedListTest.java | 2 +- .../pom.xml | 35 +- .../mgmt/annotation/EnableMgmtApi.java | 4 +- .../resource/MgmtDistributionSetMapper.java | 61 +-- .../resource/MgmtDistributionSetResource.java | 91 ++-- .../MgmtDistributionSetTagResource.java | 65 +-- .../MgmtDistributionSetTypeMapper.java | 43 +- .../MgmtDistributionSetTypeResource.java | 70 +-- .../MgmtDownloadArtifactResource.java | 19 +- .../rest/resource/MgmtDownloadResource.java | 17 +- .../rest/resource/MgmtRestModelMapper.java | 81 +++ .../mgmt/rest/resource/MgmtRolloutMapper.java | 64 +-- .../rest/resource/MgmtRolloutResource.java | 55 ++- .../resource/MgmtSoftwareModuleMapper.java | 81 +-- .../resource/MgmtSoftwareModuleResource.java | 82 +-- .../MgmtSoftwareModuleTypeMapper.java | 34 +- .../MgmtSoftwareModuleTypeResource.java | 37 +- .../mgmt/rest/resource/MgmtTagMapper.java | 56 +-- .../mgmt/rest/resource/MgmtTargetMapper.java | 112 ++--- .../rest/resource/MgmtTargetResource.java | 103 ++-- .../rest/resource/MgmtTargetTagResource.java | 63 +-- .../mgmt}/rest/resource/PagingUtility.java | 12 +- .../mgmt/rest/resource/JsonBuilder.java | 466 ++++++++++++++++++ .../MgmtDistributionSetResourceTest.java | 101 ++-- .../MgmtDistributionSetTypeResourceTest.java | 42 +- .../resource/MgmtDownloadResourceTest.java | 12 +- .../resource/MgmtRolloutResourceTest.java | 23 +- .../MgmtSoftwareModuleResourceTest.java | 44 +- .../MgmtSoftwareModuleTypeResourceTest.java | 42 +- .../rest/resource/MgmtTargetResourceTest.java | 261 +++++----- .../rest/resource/MockMvcResultPrinter.java | 55 +++ .../mgmt}/rest/resource/ResourceUtility.java | 12 +- ...MRessourceMisingMongoDbConnectionTest.java | 8 +- .../mgmt}/rest/resource/SuccessCondition.java | 2 +- .../resources/application-test.properties | 0 .../src/test/resources/log4j2.xml | 0 hawkbit-rest-core/pom.xml | 59 +++ .../hawkbit/rest/data}/SortDirection.java | 4 +- .../MessageNotReadableException.java | 2 +- .../exception}/ResponseExceptionHandler.java | 7 +- .../SortParameterSyntaxErrorException.java | 2 +- ...arameterUnsupportedDirectionException.java | 2 +- ...ortParameterUnsupportedFieldException.java | 2 +- .../rest/json}/model/ExceptionInfo.java | 2 +- .../eclipse/hawkbit/rest/util}/ByteRange.java | 2 +- .../util}/FileSteamingFailedException.java | 2 +- .../util}/RestResourceConversionHelper.java | 31 +- .../hawkbit/rest/util}/SortUtility.java | 5 +- .../rest/json}/model/ExceptionInfoTest.java | 3 +- .../hawkbit/rest/util}/SortUtilityTest.java | 7 +- .../resources/application-test.properties | 63 +++ .../src/test/resources/log4j2.xml | 26 + .../rest/resource/OffsetBasedPageRequest.java | 69 --- .../rest/resource/RestModelMapper.java | 48 -- .../pom.xml | 8 +- .../SystemTenantConfigurationValue.java | 4 +- ...SystemTenantConfigurationValueRequest.java | 8 +- .../model/systemmanagement/SystemCache.java | 11 +- .../SystemStatisticsRest.java | 8 +- .../SystemTenantServiceUsage.java | 6 +- .../rest/api/SystemManagementRestApi.java | 64 +++ .../system/rest/api/SystemRestApi.java | 86 ++++ .../system/rest/api/SystemRestConstant.java | 41 ++ hawkbit-system-resource/pom.xml | 62 +++ .../system/annotation/EnableSystemApi.java | 30 ++ .../resource/SystemManagementResource.java | 49 +- .../system}/rest/resource/SystemMapper.java | 14 +- .../system}/rest/resource/SystemResource.java | 39 +- .../rest/resource/MockMvcResultPrinter.java | 55 +++ .../system/rest/resource/ResourceUtility.java | 32 ++ .../SystemManagementResourceTest.java | 5 +- .../rest/resource/SystemResourceTest.java | 22 +- .../resources/application-test.properties | 63 +++ pom.xml | 19 +- 169 files changed, 3081 insertions(+), 1871 deletions(-) mode change 100755 => 100644 3rd-dependencies/listDeps.sh create mode 100644 hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifactHash.java rename {hawkbit-ddi-api => hawkbit-ddi-resource}/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java (100%) rename hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/{ => rest}/resource/ArtifactStoreController.java (98%) rename hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/{ => rest}/resource/DataConversionHelper.java (95%) rename hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/{ => rest}/resource/RootController.java (99%) rename hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/{resource/ArtifactDownloadTest.java => rest/resource/DdiArtifactDownloadTest.java} (99%) rename hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/{resource/CancelActionTest.java => rest/resource/DdiCancelActionTest.java} (99%) rename hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/{resource/ConfigDataTest.java => rest/resource/DdiConfigDataTest.java} (97%) rename hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/{resource/DeploymentBaseTest.java => rest/resource/DdiDeploymentBaseTest.java} (99%) rename hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/{resource/RootControllerTest.java => rest/resource/DdiRootControllerTest.java} (98%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit => hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi}/rest/resource/JsonBuilder.java (99%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit => hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource}/MockMvcResultPrinter.java (97%) create mode 100644 hawkbit-mgmt-api/pom.xml rename {hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json}/model/MetadataRest.java (96%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/BaseEntityRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtBaseEntity.java (94%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/IdRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtId.java (92%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/NamedEntityRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtNamedEntity.java (91%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PollStatusRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtPollStatus.java (95%) rename {hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json}/model/PagedList.java (97%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java (92%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtActionStatus.java (97%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java (90%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactHash.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifactHash.java (83%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/ActionTypeRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtActionType.java (85%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSet.java (86%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRequestBodyPost.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSetRequestBodyPost.java (67%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRequestBodyPut.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSetRequestBodyPut.java (82%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/TargetAssignmentRequestBody.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtTargetAssignmentRequestBody.java (85%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/TargetAssignmentResponseBody.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtTargetAssignmentResponseBody.java (93%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRequestBodyPost.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRequestBodyPost.java (68%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRequestBodyPut.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRequestBodyPut.java (79%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java (87%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutCondition.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutCondition.java (84%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutErrorAction.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutErrorAction.java (93%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutResponseBody.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutResponseBody.java (94%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutRestRequestBody.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutRestRequestBody.java (72%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutSuccessAction.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutSuccessAction.java (84%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rolloutgroup/RolloutGroupResponseBody.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rolloutgroup/MgmtRolloutGroupResponseBody.java (88%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java (93%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleAssigmentRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleAssigment.java (73%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRequestBodyPost.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleRequestBodyPost.java (80%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRequestBodyPut.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleRequestBodyPut.java (80%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleType.java (90%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeAssigmentRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeAssigment.java (73%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRequestBodyPost.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeRequestBodyPost.java (79%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRequestBodyPut.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeRequestBodyPut.java (79%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/AssignedDistributionSetRequestBody.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedDistributionSetRequestBody.java (81%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/AssignedTargetRequestBody.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedTargetRequestBody.java (83%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/DistributionSetTagAssigmentResultRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtDistributionSetTagAssigmentResult.java (61%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTag.java (87%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagRequestBodyPut.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTagRequestBodyPut.java (80%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TargetTagAssigmentResultRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTargetTagAssigmentResult.java (67%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/DistributionSetAssigmentRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtDistributionSetAssigment.java (64%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTarget.java (90%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetAttributes.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetAttributes.java (63%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetRequestBody.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java (78%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java (76%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java (72%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTypeRestApi.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java (72%) create mode 100644 hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java create mode 100644 hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/RestConstants.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRestConstants.java (92%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRolloutRestApi.java (69%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestAPI.java (74%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleTypeRestApi.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleTypeRestApi.java (70%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetRestApi.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetRestApi.java (72%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java (67%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource => hawkbit-mgmt-api/src/test/java/org/eclipse/hawkbit/mgmt/json}/model/PagedListTest.java (97%) rename {hawkbit-rest-resource => hawkbit-mgmt-resource}/pom.xml (82%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/EnableRestResources.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java (91%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java (75%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java (79%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java (72%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java (60%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java (74%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java (79%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java (83%) create mode 100644 hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRestModelMapper.java rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutMapper.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java (67%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java (81%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java (63%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java (71%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java (62%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java (73%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TagMapper.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java (61%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java (65%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java (73%) rename hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java (69%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt}/rest/resource/PagingUtility.java (91%) create mode 100644 hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/JsonBuilder.java rename hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java (92%) rename hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResourceTest.java => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java (94%) rename hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DownloadResourceTest.java => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java (84%) rename hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/RolloutResourceTest.java => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java (96%) rename hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java (96%) rename hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResourceTest.java => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java (91%) rename hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java (84%) create mode 100644 hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MockMvcResultPrinter.java rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt}/rest/resource/ResourceUtility.java (77%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt}/rest/resource/SMRessourceMisingMongoDbConnectionTest.java (93%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit => hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt}/rest/resource/SuccessCondition.java (91%) rename {hawkbit-rest-resource => hawkbit-mgmt-resource}/src/test/resources/application-test.properties (100%) rename {hawkbit-rest-resource => hawkbit-mgmt-resource}/src/test/resources/log4j2.xml (100%) create mode 100644 hawkbit-rest-core/pom.xml rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/data}/SortDirection.java (89%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception}/MessageNotReadableException.java (95%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception}/ResponseExceptionHandler.java (98%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception}/SortParameterSyntaxErrorException.java (95%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception}/SortParameterUnsupportedDirectionException.java (97%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception}/SortParameterUnsupportedFieldException.java (97%) rename {hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/json}/model/ExceptionInfo.java (97%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util}/ByteRange.java (98%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util}/FileSteamingFailedException.java (96%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util}/RestResourceConversionHelper.java (94%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util}/SortUtility.java (94%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/json}/model/ExceptionInfoTest.java (95%) rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource => hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util}/SortUtilityTest.java (91%) create mode 100644 hawkbit-rest-core/src/test/resources/application-test.properties create mode 100644 hawkbit-rest-core/src/test/resources/log4j2.xml delete mode 100644 hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/OffsetBasedPageRequest.java delete mode 100644 hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RestModelMapper.java rename {hawkbit-rest-api => hawkbit-system-api}/pom.xml (83%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/system/TenantConfigurationValueRest.java => hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValue.java (94%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/system/TenantConfigurationValueRequest.java => hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValueRequest.java (80%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/CacheRest.java => hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemCache.java (84%) rename {hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource => hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json}/model/systemmanagement/SystemStatisticsRest.java (89%) rename hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/TenantSystemUsageRest.java => hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemTenantServiceUsage.java (91%) create mode 100644 hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java create mode 100644 hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java create mode 100644 hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestConstant.java create mode 100644 hawkbit-system-resource/pom.xml create mode 100644 hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit => hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system}/rest/resource/SystemManagementResource.java (71%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit => hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system}/rest/resource/SystemMapper.java (81%) rename {hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit => hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system}/rest/resource/SystemResource.java (67%) create mode 100644 hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/MockMvcResultPrinter.java create mode 100644 hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/ResourceUtility.java rename {hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit => hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system}/rest/resource/SystemManagementResourceTest.java (98%) rename hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/ConfigurationResourceTest.java => hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java (87%) create mode 100644 hawkbit-system-resource/src/test/resources/application-test.properties diff --git a/3rd-dependencies/listDeps.sh b/3rd-dependencies/listDeps.sh old mode 100755 new mode 100644 diff --git a/examples/hawkbit-example-app/pom.xml b/examples/hawkbit-example-app/pom.xml index fccd835bc..86ce5d9eb 100644 --- a/examples/hawkbit-example-app/pom.xml +++ b/examples/hawkbit-example-app/pom.xml @@ -64,7 +64,12 @@ org.eclipse.hawkbit - hawkbit-rest-resource + hawkbit-mgmt-resource + ${project.version} + + + org.eclipse.hawkbit + hawkbit-system-resource ${project.version} diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java index 382d90c20..76d89af33 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -11,7 +11,8 @@ package org.eclipse.hawkbit.app; import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; import org.eclipse.hawkbit.ddi.annotation.EnableDdiApi; -import org.eclipse.hawkbit.rest.resource.EnableRestResources; +import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; +import org.eclipse.hawkbit.system.annotation.EnableSystemApi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Import; @@ -24,8 +25,9 @@ import org.springframework.context.annotation.Import; @SpringBootApplication @Import({ RepositoryApplicationConfiguration.class }) @EnableHawkbitManagedSecurityConfiguration -@EnableRestResources +@EnableMgmtApi @EnableDdiApi +@EnableSystemApi public class Start { /** diff --git a/examples/hawkbit-mgmt-api-client/pom.xml b/examples/hawkbit-mgmt-api-client/pom.xml index 9aaf53dc6..051252d12 100644 --- a/examples/hawkbit-mgmt-api-client/pom.xml +++ b/examples/hawkbit-mgmt-api-client/pom.xml @@ -57,7 +57,7 @@ org.eclipse.hawkbit - hawkbit-rest-api + hawkbit-mgmt-api ${project.version} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetResourceClient.java index 5ac11e012..11df8c323 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetResourceClient.java @@ -8,13 +8,13 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the DistributionSet resource of the management API. */ @FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/distributionsets") -public interface DistributionSetResourceClient extends DistributionSetRestApi { +public interface DistributionSetResourceClient extends MgmtDistributionSetRestApi { } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTagResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTagResourceClient.java index 5fbdaf857..628304e26 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTagResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTagResourceClient.java @@ -8,13 +8,13 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetTagRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the DistributionSetTag resource of the management API. */ @FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/distributionsettags") -public interface DistributionSetTagResourceClient extends DistributionSetTagRestApi { +public interface DistributionSetTagResourceClient extends MgmtDistributionSetTagRestApi { } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTypeResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTypeResourceClient.java index 300f8ddcb..871f79beb 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTypeResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTypeResourceClient.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetTypeRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** @@ -16,6 +16,6 @@ import org.springframework.cloud.netflix.feign.FeignClient; * */ @FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/distributionsettypes") -public interface DistributionSetTypeResourceClient extends DistributionSetTypeRestApi { +public interface DistributionSetTypeResourceClient extends MgmtDistributionSetTypeRestApi { } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/RolloutResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/RolloutResourceClient.java index aed3af7a2..0a40ab107 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/RolloutResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/RolloutResourceClient.java @@ -8,13 +8,13 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.rest.resource.api.RolloutRestApi; +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}/rest/v1/rollouts") -public interface RolloutResourceClient extends RolloutRestApi { +public interface RolloutResourceClient extends MgmtRolloutRestApi { } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java index 8610643ef..aaf589779 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java @@ -8,13 +8,13 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.rest.resource.api.SoftwareModuleRestAPI; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestAPI; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the SoftwareModule resource of the management API. */ @FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/softwaremodules") -public interface SoftwareModuleResourceClient extends SoftwareModuleRestAPI { +public interface SoftwareModuleResourceClient extends MgmtSoftwareModuleRestAPI { } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleTypeResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleTypeResourceClient.java index 46410dd6c..5fe0012f6 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleTypeResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleTypeResourceClient.java @@ -8,13 +8,13 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.rest.resource.api.SoftwareModuleTypeRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the oftwareModuleType resource of the management API. */ @FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/softwaremoduletypes") -public interface SoftwareModuleTypeResourceClient extends SoftwareModuleTypeRestApi { +public interface SoftwareModuleTypeResourceClient extends MgmtSoftwareModuleTypeRestApi { } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetResourceClient.java index 79385fea4..920666dd1 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetResourceClient.java @@ -8,13 +8,13 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.rest.resource.api.TargetRestApi; +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}/rest/v1/targets") -public interface TargetResourceClient extends TargetRestApi { +public interface TargetResourceClient extends MgmtTargetRestApi { } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetTagResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetTagResourceClient.java index 930931a87..ad6a1dab9 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetTagResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetTagResourceClient.java @@ -8,13 +8,13 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.rest.resource.api.TargetTagRestApi; +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}/rest/v1/targettags") -public interface TargetTagResourceClient extends TargetTagRestApi { +public interface TargetTagResourceClient extends MgmtTargetTagRestApi { } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java index 2e2d91928..56c0ddbf8 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java @@ -11,20 +11,20 @@ package org.eclipse.hawkbit.mgmt.client.resource.builder; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleAssigmentRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleAssigment; import com.google.common.collect.Lists; /** - * Builder pattern for building {@link DistributionSetRequestBodyPost}. + * Builder pattern for building {@link MgmtDistributionSetRequestBodyPost}. */ public class DistributionSetBuilder { private String name; private String version; private String type; - private final List modules = new ArrayList<>(); + private final List modules = new ArrayList<>(); /** * @param name @@ -37,7 +37,7 @@ public class DistributionSetBuilder { } public DistributionSetBuilder moduleByID(final Long id) { - final SoftwareModuleAssigmentRest softwareModuleAssigmentRest = new SoftwareModuleAssigmentRest(); + final MgmtSoftwareModuleAssigment softwareModuleAssigmentRest = new MgmtSoftwareModuleAssigment(); softwareModuleAssigmentRest.setId(id); modules.add(softwareModuleAssigmentRest); return this; @@ -65,27 +65,27 @@ public class DistributionSetBuilder { /** * Builds a list with a single entry of - * {@link DistributionSetRequestBodyPost} which can directly be used to post + * {@link MgmtDistributionSetRequestBodyPost} which can directly be used to post * on the RESTful-API. * - * @return a single entry list of {@link DistributionSetRequestBodyPost} + * @return a single entry list of {@link MgmtDistributionSetRequestBodyPost} */ - public List build() { + public List build() { return Lists.newArrayList(doBuild(name)); } /** - * Builds a list of multiple {@link DistributionSetRequestBodyPost} to + * Builds a list of multiple {@link MgmtDistributionSetRequestBodyPost} to * create multiple distribution sets at once. An increasing number will be * added to the name of the distribution set. The version and type will * remain the same. * * @param count * the amount of distribution sets body which should be created - * @return a list of {@link DistributionSetRequestBodyPost} + * @return a list of {@link MgmtDistributionSetRequestBodyPost} */ - public List buildAsList(final int count) { - final ArrayList bodyList = Lists.newArrayList(); + public List buildAsList(final int count) { + final ArrayList bodyList = Lists.newArrayList(); for (int index = 0; index < count; index++) { bodyList.add(doBuild(name + index)); } @@ -93,8 +93,8 @@ public class DistributionSetBuilder { return bodyList; } - private DistributionSetRequestBodyPost doBuild(final String prefixName) { - final DistributionSetRequestBodyPost body = new DistributionSetRequestBodyPost(); + private MgmtDistributionSetRequestBodyPost doBuild(final String prefixName) { + final MgmtDistributionSetRequestBodyPost body = new MgmtDistributionSetRequestBodyPost(); body.setName(prefixName); body.setVersion(version); body.setType(type); diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java index 752834c7d..909e08470 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java @@ -11,22 +11,22 @@ package org.eclipse.hawkbit.mgmt.client.resource.builder; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeAssigmentRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeAssigment; import com.google.common.collect.Lists; /** * - * Builder pattern for building {@link DistributionSetTypeRequestBodyPost}. + * Builder pattern for building {@link MgmtDistributionSetTypeRequestBodyPost}. * */ public class DistributionSetTypeBuilder { private String key; private String name; - private final List mandatorymodules = Lists.newArrayList(); - private final List optionalmodules = Lists.newArrayList(); + private final List mandatorymodules = Lists.newArrayList(); + private final List optionalmodules = Lists.newArrayList(); /** * @param key @@ -56,7 +56,7 @@ public class DistributionSetTypeBuilder { */ public DistributionSetTypeBuilder mandatorymodules(final Long... softwareModuleTypeIds) { for (final Long id : softwareModuleTypeIds) { - final SoftwareModuleTypeAssigmentRest softwareModuleTypeAssigmentRest = new SoftwareModuleTypeAssigmentRest(); + final MgmtSoftwareModuleTypeAssigment softwareModuleTypeAssigmentRest = new MgmtSoftwareModuleTypeAssigment(); softwareModuleTypeAssigmentRest.setId(id); this.mandatorymodules.add(softwareModuleTypeAssigmentRest); } @@ -72,7 +72,7 @@ public class DistributionSetTypeBuilder { */ public DistributionSetTypeBuilder optionalmodules(final Long... softwareModuleTypeIds) { for (final Long id : softwareModuleTypeIds) { - final SoftwareModuleTypeAssigmentRest softwareModuleTypeAssigmentRest = new SoftwareModuleTypeAssigmentRest(); + final MgmtSoftwareModuleTypeAssigment softwareModuleTypeAssigmentRest = new MgmtSoftwareModuleTypeAssigment(); softwareModuleTypeAssigmentRest.setId(id); this.optionalmodules.add(softwareModuleTypeAssigmentRest); } @@ -81,17 +81,17 @@ public class DistributionSetTypeBuilder { /** * Builds a list with a single entry of - * {@link DistributionSetTypeRequestBodyPost} which can directly be used in + * {@link MgmtDistributionSetTypeRequestBodyPost} which can directly be used in * the RESTful-API. * - * @return a single entry list of {@link DistributionSetTypeRequestBodyPost} + * @return a single entry list of {@link MgmtDistributionSetTypeRequestBodyPost} */ - public List build() { + public List build() { return Lists.newArrayList(doBuild(name, key)); } /** - * Builds a list of multiple {@link DistributionSetTypeRequestBodyPost} to + * Builds a list of multiple {@link MgmtDistributionSetTypeRequestBodyPost} to * create multiple distribution set types at once. An increasing number will * be added to the name and key of the distribution set type. The optional * and mandatory software module types will remain the same. @@ -99,10 +99,10 @@ public class DistributionSetTypeBuilder { * @param count * the amount of distribution sets type body which should be * created - * @return a list of {@link DistributionSetTypeRequestBodyPost} + * @return a list of {@link MgmtDistributionSetTypeRequestBodyPost} */ - public List buildAsList(final int count) { - final ArrayList bodyList = Lists.newArrayList(); + public List buildAsList(final int count) { + final ArrayList bodyList = Lists.newArrayList(); for (int index = 0; index < count; index++) { bodyList.add(doBuild(name + index, key + index)); } @@ -110,8 +110,8 @@ public class DistributionSetTypeBuilder { } - private DistributionSetTypeRequestBodyPost doBuild(final String prefixName, final String prefixKey) { - final DistributionSetTypeRequestBodyPost body = new DistributionSetTypeRequestBodyPost(); + private MgmtDistributionSetTypeRequestBodyPost doBuild(final String prefixName, final String prefixKey) { + final MgmtDistributionSetTypeRequestBodyPost body = new MgmtDistributionSetTypeRequestBodyPost(); body.setKey(prefixKey); body.setName(prefixName); body.setMandatorymodules(mandatorymodules); diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java index 2e01e0ba2..e9f8431d8 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java @@ -8,13 +8,13 @@ */ package org.eclipse.hawkbit.mgmt.client.resource.builder; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutCondition; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutCondition.Condition; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutRestRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutCondition; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutRestRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutCondition.Condition; /** * - * Builder pattern for building {@link RolloutRestRequestBody}. + * Builder pattern for building {@link MgmtRolloutRestRequestBody}. * */ public class RolloutBuilder { @@ -95,18 +95,18 @@ public class RolloutBuilder { * * @return the rest request body for creating a rollout */ - public RolloutRestRequestBody build() { + public MgmtRolloutRestRequestBody build() { return doBuild(); } - private RolloutRestRequestBody doBuild() { - final RolloutRestRequestBody body = new RolloutRestRequestBody(); + private MgmtRolloutRestRequestBody doBuild() { + final MgmtRolloutRestRequestBody body = new MgmtRolloutRestRequestBody(); body.setName(name); body.setAmountGroups(groupSize); body.setTargetFilterQuery(targetFilterQuery); body.setDistributionSetId(distributionSetId); - body.setSuccessCondition(new RolloutCondition(Condition.THRESHOLD, successThreshold)); - body.setErrorCondition(new RolloutCondition(Condition.THRESHOLD, errorThreshold)); + body.setSuccessCondition(new MgmtRolloutCondition(Condition.THRESHOLD, successThreshold)); + body.setErrorCondition(new MgmtRolloutCondition(Condition.THRESHOLD, errorThreshold)); return body; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java index 8d69db619..a6003e2c5 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java @@ -11,11 +11,11 @@ package org.eclipse.hawkbit.mgmt.client.resource.builder; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleAssigmentRest; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleAssigment; /** * - * Builder pattern for building {@link SoftwareModuleAssigmentRest}. + * Builder pattern for building {@link MgmtSoftwareModuleAssigment}. * */ public class SoftwareModuleAssigmentBuilder { @@ -37,15 +37,15 @@ public class SoftwareModuleAssigmentBuilder { } /** - * Builds a list with a single entry of {@link SoftwareModuleAssigmentRest} + * Builds a list with a single entry of {@link MgmtSoftwareModuleAssigment} * which can directly be used in the RESTful-API. * - * @return a single entry list of {@link SoftwareModuleAssigmentRest} + * @return a single entry list of {@link MgmtSoftwareModuleAssigment} */ - public List build() { - final List softwareModuleAssigmentRestList = new ArrayList<>(); + public List build() { + final List softwareModuleAssigmentRestList = new ArrayList<>(); for (final Long id : ids) { - final SoftwareModuleAssigmentRest softwareModuleAssigmentRest = new SoftwareModuleAssigmentRest(); + final MgmtSoftwareModuleAssigment softwareModuleAssigmentRest = new MgmtSoftwareModuleAssigment(); softwareModuleAssigmentRest.setId(id); softwareModuleAssigmentRestList.add(softwareModuleAssigmentRest); } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java index 4bbfd92b4..d1b38b2b6 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java @@ -11,14 +11,14 @@ package org.eclipse.hawkbit.mgmt.client.resource.builder; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPost; import com.google.common.collect.Lists; /** * - * Builder pattern for building {@link SoftwareModuleRequestBodyPost}. + * Builder pattern for building {@link MgmtSoftwareModuleRequestBodyPost}. * */ public class SoftwareModuleBuilder { @@ -60,27 +60,27 @@ public class SoftwareModuleBuilder { /** * Builds a list with a single entry of - * {@link SoftwareModuleRequestBodyPost} which can directly be used in the + * {@link MgmtSoftwareModuleRequestBodyPost} which can directly be used in the * RESTful-API. * - * @return a single entry list of {@link SoftwareModuleRequestBodyPost} + * @return a single entry list of {@link MgmtSoftwareModuleRequestBodyPost} */ - public List build() { + public List build() { return Lists.newArrayList(doBuild(name)); } /** - * Builds a list of multiple {@link SoftwareModuleRequestBodyPost} to create + * Builds a list of multiple {@link MgmtSoftwareModuleRequestBodyPost} to create * multiple software module at once. An increasing number will be added to * the name of the software module. The version and type will remain the * same. * * @param count * the amount of software module body which should be created - * @return a list of {@link DistributionSetTypeRequestBodyPost} + * @return a list of {@link MgmtDistributionSetTypeRequestBodyPost} */ - public List buildAsList(final int count) { - final ArrayList bodyList = Lists.newArrayList(); + public List buildAsList(final int count) { + final ArrayList bodyList = Lists.newArrayList(); for (int index = 0; index < count; index++) { bodyList.add(doBuild(name + index)); } @@ -88,8 +88,8 @@ public class SoftwareModuleBuilder { return bodyList; } - private SoftwareModuleRequestBodyPost doBuild(final String prefixName) { - final SoftwareModuleRequestBodyPost body = new SoftwareModuleRequestBodyPost(); + private MgmtSoftwareModuleRequestBodyPost doBuild(final String prefixName) { + final MgmtSoftwareModuleRequestBodyPost body = new MgmtSoftwareModuleRequestBodyPost(); body.setName(prefixName); body.setVersion(version); body.setType(type); diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java index a6472f0a0..749546442 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java @@ -11,14 +11,14 @@ package org.eclipse.hawkbit.mgmt.client.resource.builder; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPost; import com.google.common.collect.Lists; /** * - * Builder pattern for building {@link SoftwareModuleRequestBodyPost}. + * Builder pattern for building {@link MgmtSoftwareModuleRequestBodyPost}. * */ public class SoftwareModuleTypeBuilder { @@ -60,35 +60,35 @@ public class SoftwareModuleTypeBuilder { /** * Builds a list with a single entry of - * {@link SoftwareModuleTypeRequestBodyPost} which can directly be used in + * {@link MgmtSoftwareModuleTypeRequestBodyPost} which can directly be used in * the RESTful-API. * - * @return a single entry list of {@link SoftwareModuleTypeRequestBodyPost} + * @return a single entry list of {@link MgmtSoftwareModuleTypeRequestBodyPost} */ - public List build() { + public List build() { return Lists.newArrayList(doBuild(key, name)); } /** - * Builds a list of multiple {@link SoftwareModuleTypeRequestBodyPost} to + * Builds a list of multiple {@link MgmtSoftwareModuleTypeRequestBodyPost} to * create multiple software module types at once. An increasing number will * be added to the name and key of the software module type. * * @param count * the amount of software module type bodies which should be * created - * @return a list of {@link SoftwareModuleTypeRequestBodyPost} + * @return a list of {@link MgmtSoftwareModuleTypeRequestBodyPost} */ - public List buildAsList(final int count) { - final ArrayList bodyList = Lists.newArrayList(); + public List buildAsList(final int count) { + final ArrayList bodyList = Lists.newArrayList(); for (int index = 0; index < count; index++) { bodyList.add(doBuild(key + index, name + index)); } return bodyList; } - private SoftwareModuleTypeRequestBodyPost doBuild(final String prefixKey, final String prefixName) { - final SoftwareModuleTypeRequestBodyPost body = new SoftwareModuleTypeRequestBodyPost(); + private MgmtSoftwareModuleTypeRequestBodyPost doBuild(final String prefixKey, final String prefixName) { + final MgmtSoftwareModuleTypeRequestBodyPost body = new MgmtSoftwareModuleTypeRequestBodyPost(); body.setKey(prefixKey); body.setName(prefixName); body.setDescription(description); diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java index 6f2eb3248..6718e631e 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java @@ -11,12 +11,12 @@ package org.eclipse.hawkbit.mgmt.client.resource.builder; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRequestBodyPut; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; import com.google.common.collect.Lists; /** - * Builder pattern for building {@link TagRequestBodyPut}. + * Builder pattern for building {@link MgmtTagRequestBodyPut}. * */ public class TagBuilder { @@ -56,26 +56,26 @@ public class TagBuilder { } /** - * Builds a list with a single entry of {@link TagRequestBodyPut} which can + * Builds a list with a single entry of {@link MgmtTagRequestBodyPut} which can * directly be used in the RESTful-API. * - * @return a single entry list of {@link TagRequestBodyPut} + * @return a single entry list of {@link MgmtTagRequestBodyPut} */ - public List build() { + public List build() { return Lists.newArrayList(doBuild(name)); } /** - * Builds a list of multiple {@link TagRequestBodyPut} to create multiple + * Builds a list of multiple {@link MgmtTagRequestBodyPut} to create multiple * tags at once. An increasing number will be added to the name of the tag. * The color and description will remain the same. * * @param count * the amount of distribution sets body which should be created - * @return a list of {@link TagRequestBodyPut} + * @return a list of {@link MgmtTagRequestBodyPut} */ - public List buildAsList(final int count) { - final ArrayList bodyList = Lists.newArrayList(); + public List buildAsList(final int count) { + final ArrayList bodyList = Lists.newArrayList(); for (int index = 0; index < count; index++) { bodyList.add(doBuild(name + index)); } @@ -83,8 +83,8 @@ public class TagBuilder { return bodyList; } - private TagRequestBodyPut doBuild(final String prefixName) { - final TagRequestBodyPut body = new TagRequestBodyPut(); + private MgmtTagRequestBodyPut doBuild(final String prefixName) { + final MgmtTagRequestBodyPut body = new MgmtTagRequestBodyPut(); body.setName(prefixName); body.setDescription(description); body.setColour(color); diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java index e496407e1..09b20339b 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java @@ -11,14 +11,14 @@ package org.eclipse.hawkbit.mgmt.client.resource.builder; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTargetRequestBody; import com.google.common.collect.Lists; /** * - * Builder pattern for building {@link TargetRequestBody}. + * Builder pattern for building {@link MgmtTargetRequestBody}. * */ public class TargetBuilder { @@ -58,35 +58,35 @@ public class TargetBuilder { } /** - * Builds a list with a single entry of {@link TargetRequestBody} which can + * Builds a list with a single entry of {@link MgmtTargetRequestBody} which can * directly be used in the RESTful-API. * - * @return a single entry list of {@link TargetRequestBody} + * @return a single entry list of {@link MgmtTargetRequestBody} */ - public List build() { + public List build() { return Lists.newArrayList(doBuild(controllerId)); } /** - * Builds a list of multiple {@link TargetRequestBody} to create multiple + * Builds a list of multiple {@link MgmtTargetRequestBody} to create multiple * targets at once. An increasing number will be added to the controllerId * of the target. The name and description will remain. * * @param count * the amount of software module type bodies which should be * created - * @return a list of {@link SoftwareModuleTypeRequestBodyPost} + * @return a list of {@link MgmtSoftwareModuleTypeRequestBodyPost} */ - public List buildAsList(final int count) { - final ArrayList bodyList = Lists.newArrayList(); + public List buildAsList(final int count) { + final ArrayList bodyList = Lists.newArrayList(); for (int index = 0; index < count; index++) { bodyList.add(doBuild(controllerId + index)); } return bodyList; } - private TargetRequestBody doBuild(final String prefixControllerId) { - final TargetRequestBody body = new TargetRequestBody(); + private MgmtTargetRequestBody doBuild(final String prefixControllerId) { + final MgmtTargetRequestBody body = new MgmtTargetRequestBody(); body.setControllerId(prefixControllerId); body.setName(name); body.setDescription(description); diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java index cd74c0474..0e1093f1d 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java @@ -23,10 +23,10 @@ import org.eclipse.hawkbit.mgmt.client.resource.builder.SoftwareModuleAssigmentB import org.eclipse.hawkbit.mgmt.client.resource.builder.SoftwareModuleBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.SoftwareModuleTypeBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.TargetBuilder; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutResponseBody; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; +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.stereotype.Component; @@ -67,7 +67,7 @@ public class CreateStartedRolloutExample { public void run() { // create three SoftwareModuleTypes - final List createdSoftwareModuleTypes = softwareModuleTypeResource + final List createdSoftwareModuleTypes = softwareModuleTypeResource .createSoftwareModuleTypes(new SoftwareModuleTypeBuilder().key(SM_MODULE_TYPE).name(SM_MODULE_TYPE) .maxAssignments(1).build()) .getBody(); @@ -78,12 +78,12 @@ public class CreateStartedRolloutExample { .getBody(); // create one DistributionSet - final List distributionSetsRest = distributionSetResource.createDistributionSets( + final List distributionSetsRest = distributionSetResource.createDistributionSets( new DistributionSetBuilder().name("rollout-example").version("1.0.0").type(DS_MODULE_TYPE).build()) .getBody(); // create three SoftwareModules - final List softwareModulesRest = softwareModuleResource + final List softwareModulesRest = softwareModuleResource .createSoftwareModules( new SoftwareModuleBuilder().name("firmware").version("1.0.0").type(SM_MODULE_TYPE).build()) .getBody(); @@ -97,7 +97,7 @@ public class CreateStartedRolloutExample { .description("Targets used for rollout example").buildAsList(10)); // create a Rollout - final RolloutResponseBody rolloutResponseBody = rolloutResource + final MgmtRolloutResponseBody rolloutResponseBody = rolloutResource .create(new RolloutBuilder().name("MyRollout").groupSize(2).targetFilterQuery("name==00-FF-AA-0*") .distributionSetId(distributionSetsRest.get(0).getDsId()).successThreshold("80") .errorThreshold("50").build()) diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java index 5873403f0..43a98aff4 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java @@ -19,9 +19,9 @@ import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetTypeBuild 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.SoftwareModuleTypeBuilder; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -70,7 +70,7 @@ public class GettingStartedDefaultScenario { // create one SoftwareModuleTypes LOGGER.info("Creating software module type {}", SM_MODULE_TYPE); - final List createdSoftwareModuleTypes = softwareModuleTypeResource + final List createdSoftwareModuleTypes = softwareModuleTypeResource .createSoftwareModuleTypes(new SoftwareModuleTypeBuilder().key(SM_MODULE_TYPE).name(SM_MODULE_TYPE) .maxAssignments(1).build()) .getBody(); @@ -86,17 +86,17 @@ public class GettingStartedDefaultScenario { final String dsVersion3 = "2.1.0"; LOGGER.info("Creating distribution set {}:{}", DS_EXAMPLE_NAME, dsVersion1); - final List distributionSetsRest1 = distributionSetResource.createDistributionSets( + final List distributionSetsRest1 = distributionSetResource.createDistributionSets( new DistributionSetBuilder().name(DS_EXAMPLE_NAME).version(dsVersion1).type(DS_MODULE_TYPE).build()) .getBody(); LOGGER.info("Creating distribution set {}:{}", DS_EXAMPLE_NAME, dsVersion2); - final List distributionSetsRest2 = distributionSetResource.createDistributionSets( + final List distributionSetsRest2 = distributionSetResource.createDistributionSets( new DistributionSetBuilder().name(DS_EXAMPLE_NAME).version(dsVersion2).type(DS_MODULE_TYPE).build()) .getBody(); LOGGER.info("Creating distribution set {}:{}", DS_EXAMPLE_NAME, dsVersion3); - final List distributionSetsRest3 = distributionSetResource.createDistributionSets( + final List distributionSetsRest3 = distributionSetResource.createDistributionSets( new DistributionSetBuilder().name(DS_EXAMPLE_NAME).version(dsVersion3).type(DS_MODULE_TYPE).build()) .getBody(); @@ -106,15 +106,15 @@ public class GettingStartedDefaultScenario { final String swVersion3 = "3"; LOGGER.info("Creating distribution set {}:{}", SM_EXAMPLE_NAME, swVersion1); - final List softwareModulesRest1 = softwareModuleResource.createSoftwareModules( + final List softwareModulesRest1 = softwareModuleResource.createSoftwareModules( new SoftwareModuleBuilder().name(SM_EXAMPLE_NAME).version(swVersion1).type(SM_MODULE_TYPE).build()) .getBody(); LOGGER.info("Creating distribution set {}:{}", SM_EXAMPLE_NAME, swVersion2); - final List softwareModulesRest2 = softwareModuleResource.createSoftwareModules( + final List softwareModulesRest2 = softwareModuleResource.createSoftwareModules( new SoftwareModuleBuilder().name(SM_EXAMPLE_NAME).version(swVersion2).type(SM_MODULE_TYPE).build()) .getBody(); LOGGER.info("Creating distribution set {}:{}", SM_EXAMPLE_NAME, swVersion3); - final List softwareModulesRest3 = softwareModuleResource.createSoftwareModules( + final List softwareModulesRest3 = softwareModuleResource.createSoftwareModules( new SoftwareModuleBuilder().name(SM_EXAMPLE_NAME).version(swVersion3).type(SM_MODULE_TYPE).build()) .getBody(); diff --git a/hawkbit-autoconfigure/pom.xml b/hawkbit-autoconfigure/pom.xml index dcbb95920..3fb623978 100644 --- a/hawkbit-autoconfigure/pom.xml +++ b/hawkbit-autoconfigure/pom.xml @@ -64,13 +64,19 @@ org.eclipse.hawkbit - hawkbit-rest-resource + hawkbit-ddi-resource ${project.version} true org.eclipse.hawkbit - hawkbit-ddi-resource + hawkbit-system-resource + ${project.version} + true + + + org.eclipse.hawkbit + hawkbit-mgmt-resource ${project.version} true diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java index 9638377eb..d337658b8 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java @@ -29,7 +29,6 @@ import org.eclipse.hawkbit.im.authentication.UserAuthenticationFilter; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.rest.resource.RestConstants; import org.eclipse.hawkbit.security.ControllerTenantAwareAuthenticationDetailsSource; import org.eclipse.hawkbit.security.DdiSecurityProperties; import org.eclipse.hawkbit.security.DosFilter; @@ -41,6 +40,7 @@ import org.eclipse.hawkbit.security.HttpControllerPreAuthenticatedSecurityHeader import org.eclipse.hawkbit.security.HttpDownloadAuthenticationFilter; import org.eclipse.hawkbit.security.PreAuthTokenSourceTrustAuthenticationProvider; import org.eclipse.hawkbit.security.SystemSecurityContext; +import org.eclipse.hawkbit.system.rest.api.SystemRestConstant; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -292,8 +292,9 @@ public class SecurityManagedConfiguration { new AuthenticationSuccessTenantMetadataCreationFilter(tenantAware, systemManagement), RequestHeaderAuthenticationFilter.class) .authorizeRequests().anyRequest().authenticated() - .antMatchers(RestConstants.BASE_SYSTEM_MAPPING + "/admin/**") - .hasAnyAuthority(SpPermission.SYSTEM_ADMIN).antMatchers(RestConstants.BASE_SYSTEM_MAPPING + "/**") + .antMatchers(SystemRestConstant.BASE_SYSTEM_MAPPING + "/admin/**") + .hasAnyAuthority(SpPermission.SYSTEM_ADMIN) + .antMatchers(SystemRestConstant.BASE_SYSTEM_MAPPING + "/**") .hasAnyAuthority(SpPermission.SYSTEM_DIAG); } } diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java index ef489049f..34ed5ddcd 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java @@ -9,20 +9,19 @@ package org.eclipse.hawkbit.autoconfigure.web; import org.eclipse.hawkbit.ddi.annotation.EnableDdiApi; -import org.eclipse.hawkbit.rest.resource.EnableRestResources; +import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; +import org.eclipse.hawkbit.system.annotation.EnableSystemApi; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; /** * Auto-Configuration for enabling the REST-Resources. - * - * * */ @Configuration -@ConditionalOnClass({ EnableDdiApi.class, EnableRestResources.class }) -@Import({ EnableDdiApi.class, EnableRestResources.class }) +@ConditionalOnClass({ EnableDdiApi.class, EnableMgmtApi.class, EnableSystemApi.class }) +@Import({ EnableDdiApi.class, EnableMgmtApi.class, EnableSystemApi.class }) public class ResourceControllerAutoConfiguration { } diff --git a/hawkbit-ddi-api/pom.xml b/hawkbit-ddi-api/pom.xml index 6dd30fdf9..e91053fc5 100644 --- a/hawkbit-ddi-api/pom.xml +++ b/hawkbit-ddi-api/pom.xml @@ -1,4 +1,14 @@ - + + 4.0.0 @@ -9,12 +19,19 @@ hawkbit-ddi-api hawkBit :: DDI API - - + + - org.eclipse.hawkbit - hawkbit-rest-api - ${project.version} + org.springframework.hateoas + spring-hateoas + + + com.fasterxml.jackson.core + jackson-annotations + + + javax.validation + validation-api javax.servlet @@ -22,17 +39,12 @@ provided - commons-io - commons-io - 2.4 + org.hibernate + hibernate-validator org.springframework.security spring-security-web - - org.hibernate - hibernate-validator - - + diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifact.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifact.java index d39a44daa..5fc911946 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifact.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifact.java @@ -10,13 +10,13 @@ package org.eclipse.hawkbit.ddi.json.model; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactHash; import org.springframework.hateoas.ResourceSupport; import com.fasterxml.jackson.annotation.JsonProperty; /** - * Download information for all artifacts related to a specific {@link DdiChunk}. + * Download information for all artifacts related to a specific {@link DdiChunk} + * . */ public class DdiArtifact extends ResourceSupport { @@ -25,16 +25,16 @@ public class DdiArtifact extends ResourceSupport { private String filename; @JsonProperty - private ArtifactHash hashes; + private DdiArtifactHash hashes; @JsonProperty private Long size; - public ArtifactHash getHashes() { + public DdiArtifactHash getHashes() { return hashes; } - public void setHashes(final ArtifactHash hashes) { + public void setHashes(final DdiArtifactHash hashes) { this.hashes = hashes; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifactHash.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifactHash.java new file mode 100644 index 000000000..9541055f8 --- /dev/null +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiArtifactHash.java @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.json.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * Hashes for given Artifact. + * + * + */ +public class DdiArtifactHash { + + @JsonProperty + private String sha1; + + @JsonProperty + private String md5; + + /** + * Default constructor. + */ + public DdiArtifactHash() { + } + + /** + * Public constructor. + * + * @param sha1 + * @param md5 + */ + public DdiArtifactHash(final String sha1, final String md5) { + this.sha1 = sha1; + this.md5 = md5; + } + + /** + * @return the sha1 + */ + public String getSha1() { + return sha1; + } + + /** + * @return the md5 + */ + public String getMd5() { + return md5; + } + +} diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index bcc1b4932..cafcfdf70 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -1,4 +1,14 @@ - + + 4.0.0 @@ -10,31 +20,26 @@ hawkbit-ddi-resource hawkBit :: DDI Resources - - + + org.eclipse.hawkbit hawkbit-ddi-api ${project.version} - + org.eclipse.hawkbit - hawkbit-rest-resource + hawkbit-rest-core ${project.version} - - + + org.eclipse.hawkbit hawkbit-repository ${project.version} + + - - org.eclipse.hawkbit - hawkbit-rest-resource - ${project.version} - test - tests - org.springframework.boot spring-boot-starter diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java similarity index 100% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/ArtifactStoreController.java similarity index 98% rename from hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/ArtifactStoreController.java index 61f3fd465..2a6d544ab 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/ArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/ArtifactStoreController.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.resource; +package org.eclipse.hawkbit.ddi.rest.resource; import java.io.IOException; import java.util.List; @@ -24,7 +24,7 @@ import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.rest.resource.helper.RestResourceConversionHelper; +import org.eclipse.hawkbit.rest.util.RestResourceConversionHelper; import org.eclipse.hawkbit.security.HawkbitSecurityProperties; import org.eclipse.hawkbit.util.IpUtil; import org.slf4j.Logger; diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DataConversionHelper.java similarity index 95% rename from hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DataConversionHelper.java index 8533c6eac..2fd151f6e 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/DataConversionHelper.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DataConversionHelper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.resource; +package org.eclipse.hawkbit.ddi.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -21,6 +21,7 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.api.UrlProtocol; import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; +import org.eclipse.hawkbit.ddi.json.model.DdiArtifactHash; import org.eclipse.hawkbit.ddi.json.model.DdiChunk; import org.eclipse.hawkbit.ddi.json.model.DdiConfig; import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase; @@ -30,7 +31,6 @@ 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.rest.resource.model.artifact.ArtifactHash; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.Link; @@ -85,7 +85,7 @@ public final class DataConversionHelper { final List files = new ArrayList<>(); module.getLocalArtifacts().forEach(artifact -> { final DdiArtifact file = new DdiArtifact(); - file.setHashes(new ArtifactHash(artifact.getSha1Hash(), artifact.getMd5Hash())); + file.setHashes(new DdiArtifactHash(artifact.getSha1Hash(), artifact.getMd5Hash())); file.setFilename(artifact.getFilename()); file.setSize(artifact.getSize()); final String linkHttp = artifactUrlHandler.getUrl(targetid, artifact.getSoftwareModule().getId(), @@ -104,7 +104,8 @@ public final class DataConversionHelper { static DdiControllerBase fromTarget(final Target target, final List actions, final String defaultControllerPollTime, final TenantAware tenantAware) { - final DdiControllerBase result = new DdiControllerBase(new DdiConfig(new DdiPolling(defaultControllerPollTime))); + final DdiControllerBase result = new DdiControllerBase( + new DdiConfig(new DdiPolling(defaultControllerPollTime))); boolean addedUpdate = false; boolean addedCancel = false; diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/RootController.java similarity index 99% rename from hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/RootController.java index e48e2ec5f..4f485984b 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/resource/RootController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/RootController.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.resource; +package org.eclipse.hawkbit.ddi.rest.resource; import java.io.IOException; import java.util.List; @@ -40,7 +40,7 @@ import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.rest.resource.helper.RestResourceConversionHelper; +import org.eclipse.hawkbit.rest.util.RestResourceConversionHelper; import org.eclipse.hawkbit.security.HawkbitSecurityProperties; import org.eclipse.hawkbit.tenancy.TenantAware; import org.eclipse.hawkbit.util.IpUtil; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java similarity index 99% rename from hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java index f7173f86e..af65b1351 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.resource; +package org.eclipse.hawkbit.ddi.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertTrue; @@ -60,10 +60,10 @@ import ru.yandex.qatools.allure.annotations.Stories; @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Artifact Download Resource") -public class ArtifactDownloadTest extends AbstractIntegrationTestWithMongoDB { +public class DdiArtifactDownloadTest extends AbstractIntegrationTestWithMongoDB { - public ArtifactDownloadTest() { - LOG = LoggerFactory.getLogger(ArtifactDownloadTest.class); + public DdiArtifactDownloadTest() { + LOG = LoggerFactory.getLogger(DdiArtifactDownloadTest.class); } private volatile int downLoadProgress = 0; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java similarity index 99% rename from hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java index 3c236c196..27a7e7f1f 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/CancelActionTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.resource; +package org.eclipse.hawkbit.ddi.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -23,13 +23,11 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.rest.resource.JsonBuilder; import org.junit.Test; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; @@ -45,7 +43,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Cancel Action Resource") -public class CancelActionTest extends AbstractIntegrationTest { +public class DdiCancelActionTest extends AbstractIntegrationTest { @Test @Description("Test of the controller can continue a started update even after a cancel command if it so desires.") diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java similarity index 97% rename from hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java index ee40d6ded..b757f1f1a 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/ConfigDataTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.resource; +package org.eclipse.hawkbit.ddi.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -22,9 +22,7 @@ import java.util.HashMap; import java.util.Map; import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.rest.resource.JsonBuilder; import org.junit.Test; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; @@ -40,7 +38,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Config Data Resource") -public class ConfigDataTest extends AbstractIntegrationTest { +public class DdiConfigDataTest extends AbstractIntegrationTest { @Test @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) " diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java similarity index 99% rename from hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index 4ba5c9cdf..dd2f66a04 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/DeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.resource; +package org.eclipse.hawkbit.ddi.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -26,7 +26,6 @@ import java.util.List; import org.apache.commons.lang3.RandomUtils; import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; @@ -36,7 +35,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.rest.resource.JsonBuilder; import org.fest.assertions.core.Condition; import org.junit.Test; import org.springframework.data.domain.PageRequest; @@ -57,7 +55,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Deployment Action Resource") -public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { +public class DdiDeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { @Test() @Description("Ensures that artifacts are not found, when softare module does not exists.") diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java similarity index 98% rename from hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index be390959a..f291393b9 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/resource/RootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.resource; +package org.eclipse.hawkbit.ddi.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithSpringAuthorityRule; import org.eclipse.hawkbit.WithUser; @@ -33,7 +32,6 @@ import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.rest.resource.JsonBuilder; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.hawkbit.util.IpUtil; import org.junit.Test; @@ -51,7 +49,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Root Poll Resource") -public class RootControllerTest extends AbstractIntegrationTestWithMongoDB { +public class DdiRootControllerTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Ensures that targets cannot be created e.g. in plug'n play scenarios when tenant does not exists but can be created if the tenant exists.") diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/JsonBuilder.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/JsonBuilder.java similarity index 99% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/JsonBuilder.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/JsonBuilder.java index dec0bb070..cf791bcf8 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/JsonBuilder.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/JsonBuilder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.ddi.rest.resource; import java.util.ArrayList; import java.util.List; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/MockMvcResultPrinter.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/MockMvcResultPrinter.java similarity index 97% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/MockMvcResultPrinter.java rename to hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/MockMvcResultPrinter.java index b01bb4e9f..ba5020c58 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/MockMvcResultPrinter.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/MockMvcResultPrinter.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.ddi.rest.resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hawkbit-mgmt-api/pom.xml b/hawkbit-mgmt-api/pom.xml new file mode 100644 index 000000000..4c99cd7bc --- /dev/null +++ b/hawkbit-mgmt-api/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-parent + 0.2.0-SNAPSHOT + + hawkbit-mgmt-api + hawkBit :: Mgmt REST API + + + + org.springframework.hateoas + spring-hateoas + + + com.fasterxml.jackson.core + jackson-annotations + + + javax.validation + validation-api + + + javax.servlet + javax.servlet-api + provided + + + + + org.easytesting + fest-assert + test + + + ru.yandex.qatools.allure + allure-junit-adaptor + test + + + \ No newline at end of file diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/MetadataRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MetadataRest.java similarity index 96% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/MetadataRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MetadataRest.java index a5c24c4a9..70cfff0d0 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/MetadataRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MetadataRest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model; +package org.eclipse.hawkbit.mgmt.json.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/BaseEntityRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtBaseEntity.java similarity index 94% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/BaseEntityRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtBaseEntity.java index 6d80a407c..728734050 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/BaseEntityRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtBaseEntity.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model; +package org.eclipse.hawkbit.mgmt.json.model; import org.springframework.hateoas.ResourceSupport; @@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * A json annotated rest model for BaseEntity to RESTful API representation. * */ -public abstract class BaseEntityRest extends ResourceSupport { +public abstract class MgmtBaseEntity extends ResourceSupport { @JsonProperty private String createdBy; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/IdRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtId.java similarity index 92% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/IdRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtId.java index d15114d4e..e83c43d52 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/IdRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtId.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model; +package org.eclipse.hawkbit.mgmt.json.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -18,7 +18,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * */ @JsonIgnoreProperties(ignoreUnknown = true) -public class IdRest { +public class MgmtId { @JsonProperty private Long id; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/NamedEntityRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtNamedEntity.java similarity index 91% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/NamedEntityRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtNamedEntity.java index d82d14f75..d335261ad 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/NamedEntityRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtNamedEntity.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model; +package org.eclipse.hawkbit.mgmt.json.model; import com.fasterxml.jackson.annotation.JsonProperty; @@ -14,7 +14,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * A json annotated rest model for NamedEntity to RESTful API representation. * */ -public abstract class NamedEntityRest extends BaseEntityRest { +public abstract class MgmtNamedEntity extends MgmtBaseEntity { @JsonProperty(required = true) private String name; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PollStatusRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtPollStatus.java similarity index 95% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PollStatusRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtPollStatus.java index d66d02512..5e5163a6a 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PollStatusRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtPollStatus.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model; +package org.eclipse.hawkbit.mgmt.json.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -22,7 +22,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class PollStatusRest { +public class MgmtPollStatus { @JsonProperty private Long lastRequestAt; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/PagedList.java similarity index 97% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/PagedList.java index 9d5cc458c..173f3ce31 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/PagedList.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model; +package org.eclipse.hawkbit.mgmt.json.model; import java.util.List; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java similarity index 92% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java index 630bcb993..5b63b5f69 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.action; +package org.eclipse.hawkbit.mgmt.json.model.action; -import org.eclipse.hawkbit.rest.resource.model.BaseEntityRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtBaseEntity; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class ActionRest extends BaseEntityRest { +public class MgmtAction extends MgmtBaseEntity { /** * API definition for {@link UpdateAction}. diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtActionStatus.java similarity index 97% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtActionStatus.java index e5af39bac..26120d2d5 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtActionStatus.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.action; +package org.eclipse.hawkbit.mgmt.json.model.action; import java.util.List; @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class ActionStatusRest { +public class MgmtActionStatus { /** * Action is finished successfully for this target. diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java similarity index 90% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java index f32a32ed8..35ad382e7 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.artifact; +package org.eclipse.hawkbit.mgmt.json.model.artifact; -import org.eclipse.hawkbit.rest.resource.model.BaseEntityRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtBaseEntity; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -22,7 +22,8 @@ import com.fasterxml.jackson.annotation.JsonValue; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class ArtifactRest extends BaseEntityRest { +public class MgmtArtifact extends MgmtBaseEntity { + @JsonProperty(required = true) private ArtifactType type; @@ -30,7 +31,7 @@ public class ArtifactRest extends BaseEntityRest { private Long artifactId; @JsonProperty - private ArtifactHash hashes; + private MgmtArtifactHash hashes; @JsonProperty private String providedFilename; @@ -51,7 +52,7 @@ public class ArtifactRest extends BaseEntityRest { * the hashes to set */ @JsonIgnore - public void setHashes(final ArtifactHash hashes) { + public void setHashes(final MgmtArtifactHash hashes) { this.hashes = hashes; } @@ -81,7 +82,7 @@ public class ArtifactRest extends BaseEntityRest { /** * @return the hashes */ - public ArtifactHash getHashes() { + public MgmtArtifactHash getHashes() { return hashes; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactHash.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifactHash.java similarity index 83% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactHash.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifactHash.java index 58b81d8fd..d43ae4339 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactHash.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifactHash.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.artifact; +package org.eclipse.hawkbit.mgmt.json.model.artifact; import com.fasterxml.jackson.annotation.JsonProperty; @@ -15,7 +15,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * * */ -public class ArtifactHash { +public class MgmtArtifactHash { @JsonProperty private String sha1; @@ -26,7 +26,7 @@ public class ArtifactHash { /** * Default constructor. */ - public ArtifactHash() { + public MgmtArtifactHash() { } /** @@ -35,7 +35,7 @@ public class ArtifactHash { * @param sha1 * @param md5 */ - public ArtifactHash(final String sha1, final String md5) { + public MgmtArtifactHash(final String sha1, final String md5) { super(); this.sha1 = sha1; this.md5 = md5; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/ActionTypeRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtActionType.java similarity index 85% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/ActionTypeRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtActionType.java index bf6a649a0..98017d18a 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/ActionTypeRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtActionType.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.distributionset; +package org.eclipse.hawkbit.mgmt.json.model.distributionset; import com.fasterxml.jackson.annotation.JsonValue; @@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonValue; * * */ -public enum ActionTypeRest { +public enum MgmtActionType { /** * The soft action type. */ @@ -35,7 +35,7 @@ public enum ActionTypeRest { private final String name; - private ActionTypeRest(final String name) { + private MgmtActionType(final String name) { this.name = name; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSet.java similarity index 86% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSet.java index 2ff764eba..7caaf4cdd 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSet.java @@ -6,13 +6,13 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.distributionset; +package org.eclipse.hawkbit.mgmt.json.model.distributionset; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -30,7 +30,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class DistributionSetRest extends NamedEntityRest { +public class MgmtDistributionSet extends MgmtNamedEntity { @JsonProperty(value = "id", required = true) private Long dsId; @@ -39,7 +39,7 @@ public class DistributionSetRest extends NamedEntityRest { private String version; @JsonProperty - private List modules = new ArrayList<>(); + private List modules = new ArrayList<>(); @JsonProperty private boolean requiredMigrationStep; @@ -99,7 +99,7 @@ public class DistributionSetRest extends NamedEntityRest { /** * @return the modules */ - public List getModules() { + public List getModules() { return modules; } @@ -107,7 +107,7 @@ public class DistributionSetRest extends NamedEntityRest { * @param modules * the modules to set */ - public void setModules(final List modules) { + public void setModules(final List modules) { this.modules = modules; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRequestBodyPost.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSetRequestBodyPost.java similarity index 67% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRequestBodyPost.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSetRequestBodyPost.java index bf5470d72..a56b5aaba 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRequestBodyPost.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSetRequestBodyPost.java @@ -6,11 +6,11 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.distributionset; +package org.eclipse.hawkbit.mgmt.json.model.distributionset; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleAssigmentRest; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleAssigment; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -23,22 +23,22 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPut { +public class MgmtDistributionSetRequestBodyPost extends MgmtDistributionSetRequestBodyPut { // deprecated format from the time where os, application and runtime where // statically defined @JsonProperty - private SoftwareModuleAssigmentRest os; + private MgmtSoftwareModuleAssigment os; @JsonProperty - private SoftwareModuleAssigmentRest runtime; + private MgmtSoftwareModuleAssigment runtime; @JsonProperty - private SoftwareModuleAssigmentRest application; + private MgmtSoftwareModuleAssigment application; // deprecated format - END @JsonProperty - private List modules; + private List modules; @JsonProperty private boolean requiredMigrationStep; @@ -49,7 +49,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu /** * @return the os */ - public SoftwareModuleAssigmentRest getOs() { + public MgmtSoftwareModuleAssigment getOs() { return os; } @@ -59,7 +59,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu * * @return updated body */ - public DistributionSetRequestBodyPost setOs(final SoftwareModuleAssigmentRest os) { + public MgmtDistributionSetRequestBodyPost setOs(final MgmtSoftwareModuleAssigment os) { this.os = os; return this; } @@ -67,7 +67,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu /** * @return the runtime */ - public SoftwareModuleAssigmentRest getRuntime() { + public MgmtSoftwareModuleAssigment getRuntime() { return runtime; } @@ -77,7 +77,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu * * @return updated body */ - public DistributionSetRequestBodyPost setRuntime(final SoftwareModuleAssigmentRest runtime) { + public MgmtDistributionSetRequestBodyPost setRuntime(final MgmtSoftwareModuleAssigment runtime) { this.runtime = runtime; return this; @@ -86,7 +86,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu /** * @return the application */ - public SoftwareModuleAssigmentRest getApplication() { + public MgmtSoftwareModuleAssigment getApplication() { return application; } @@ -96,7 +96,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu * * @return updated body */ - public DistributionSetRequestBodyPost setApplication(final SoftwareModuleAssigmentRest application) { + public MgmtDistributionSetRequestBodyPost setApplication(final MgmtSoftwareModuleAssigment application) { this.application = application; return this; @@ -115,7 +115,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu * * @return updated body */ - public DistributionSetRequestBodyPost setRequiredMigrationStep(final boolean requiredMigrationStep) { + public MgmtDistributionSetRequestBodyPost setRequiredMigrationStep(final boolean requiredMigrationStep) { this.requiredMigrationStep = requiredMigrationStep; return this; @@ -124,7 +124,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu /** * @return the modules */ - public List getModules() { + public List getModules() { return modules; } @@ -134,7 +134,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu * * @return updated body */ - public DistributionSetRequestBodyPost setModules(final List modules) { + public MgmtDistributionSetRequestBodyPost setModules(final List modules) { this.modules = modules; return this; @@ -153,7 +153,7 @@ public class DistributionSetRequestBodyPost extends DistributionSetRequestBodyPu * * @return updated body */ - public DistributionSetRequestBodyPost setType(final String type) { + public MgmtDistributionSetRequestBodyPost setType(final String type) { this.type = type; return this; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRequestBodyPut.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSetRequestBodyPut.java similarity index 82% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRequestBodyPut.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSetRequestBodyPut.java index 2f19625f3..4494dd8a8 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetRequestBodyPut.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtDistributionSetRequestBodyPut.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.distributionset; +package org.eclipse.hawkbit.mgmt.json.model.distributionset; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class DistributionSetRequestBodyPut { +public class MgmtDistributionSetRequestBodyPut { @JsonProperty private String name; @@ -43,7 +43,7 @@ public class DistributionSetRequestBodyPut { * * @return updated body */ - public DistributionSetRequestBodyPut setName(final String name) { + public MgmtDistributionSetRequestBodyPut setName(final String name) { this.name = name; return this; } @@ -61,7 +61,7 @@ public class DistributionSetRequestBodyPut { * * @return updated body */ - public DistributionSetRequestBodyPut setDescription(final String description) { + public MgmtDistributionSetRequestBodyPut setDescription(final String description) { this.description = description; return this; @@ -80,7 +80,7 @@ public class DistributionSetRequestBodyPut { * * @return updated body */ - public DistributionSetRequestBodyPut setVersion(final String version) { + public MgmtDistributionSetRequestBodyPut setVersion(final String version) { this.version = version; return this; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/TargetAssignmentRequestBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtTargetAssignmentRequestBody.java similarity index 85% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/TargetAssignmentRequestBody.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtTargetAssignmentRequestBody.java index 5135a977c..46c43ac8b 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/TargetAssignmentRequestBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtTargetAssignmentRequestBody.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.distributionset; +package org.eclipse.hawkbit.mgmt.json.model.distributionset; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -16,14 +16,14 @@ import com.fasterxml.jackson.annotation.JsonProperty; * */ @JsonIgnoreProperties(ignoreUnknown = true) -public class TargetAssignmentRequestBody { +public class MgmtTargetAssignmentRequestBody { @JsonProperty private String id; private long forcetime; - private ActionTypeRest type; + private MgmtActionType type; /** * @return the id @@ -43,7 +43,7 @@ public class TargetAssignmentRequestBody { /** * @return the type */ - public ActionTypeRest getType() { + public MgmtActionType getType() { return type; } @@ -51,7 +51,7 @@ public class TargetAssignmentRequestBody { * @param type * the type to set */ - public void setType(final ActionTypeRest type) { + public void setType(final MgmtActionType type) { this.type = type; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/TargetAssignmentResponseBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtTargetAssignmentResponseBody.java similarity index 93% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/TargetAssignmentResponseBody.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtTargetAssignmentResponseBody.java index 77676f844..d5247c577 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/TargetAssignmentResponseBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtTargetAssignmentResponseBody.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.distributionset; +package org.eclipse.hawkbit.mgmt.json.model.distributionset; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -20,7 +20,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class TargetAssignmentResponseBody { +public class MgmtTargetAssignmentResponseBody { private int assigned; private int alreadyAssigned; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRequestBodyPost.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRequestBodyPost.java similarity index 68% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRequestBodyPost.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRequestBodyPost.java index ba0f548f6..82ecb2cc5 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRequestBodyPost.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRequestBodyPost.java @@ -6,11 +6,11 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.distributionsettype; +package org.eclipse.hawkbit.mgmt.json.model.distributionsettype; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeAssigmentRest; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeAssigment; import com.fasterxml.jackson.annotation.JsonProperty; @@ -18,7 +18,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * Request Body for DistributionSetType POST. * */ -public class DistributionSetTypeRequestBodyPost { +public class MgmtDistributionSetTypeRequestBodyPost { @JsonProperty(required = true) private String name; @@ -30,10 +30,10 @@ public class DistributionSetTypeRequestBodyPost { private String key; @JsonProperty - private List mandatorymodules; + private List mandatorymodules; @JsonProperty - private List optionalmodules; + private List optionalmodules; /** * @return the name @@ -48,7 +48,7 @@ public class DistributionSetTypeRequestBodyPost { * * @return updated body */ - public DistributionSetTypeRequestBodyPost setName(final String name) { + public MgmtDistributionSetTypeRequestBodyPost setName(final String name) { this.name = name; return this; } @@ -66,7 +66,7 @@ public class DistributionSetTypeRequestBodyPost { * * @return updated body */ - public DistributionSetTypeRequestBodyPost setDescription(final String description) { + public MgmtDistributionSetTypeRequestBodyPost setDescription(final String description) { this.description = description; return this; } @@ -84,7 +84,7 @@ public class DistributionSetTypeRequestBodyPost { * * @return updated body */ - public DistributionSetTypeRequestBodyPost setKey(final String key) { + public MgmtDistributionSetTypeRequestBodyPost setKey(final String key) { this.key = key; return this; } @@ -92,7 +92,7 @@ public class DistributionSetTypeRequestBodyPost { /** * @return the mandatory modules */ - public List getMandatorymodules() { + public List getMandatorymodules() { return mandatorymodules; } @@ -102,8 +102,8 @@ public class DistributionSetTypeRequestBodyPost { * * @return updated body */ - public DistributionSetTypeRequestBodyPost setMandatorymodules( - final List mandatorymodules) { + public MgmtDistributionSetTypeRequestBodyPost setMandatorymodules( + final List mandatorymodules) { this.mandatorymodules = mandatorymodules; return this; } @@ -111,7 +111,7 @@ public class DistributionSetTypeRequestBodyPost { /** * @return the optional modules */ - public List getOptionalmodules() { + public List getOptionalmodules() { return optionalmodules; } @@ -121,8 +121,8 @@ public class DistributionSetTypeRequestBodyPost { * * @return updated body */ - public DistributionSetTypeRequestBodyPost setOptionalmodules( - final List optionalmodules) { + public MgmtDistributionSetTypeRequestBodyPost setOptionalmodules( + final List optionalmodules) { this.optionalmodules = optionalmodules; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRequestBodyPut.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRequestBodyPut.java similarity index 79% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRequestBodyPut.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRequestBodyPut.java index 6bf21b93f..220f58e4d 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRequestBodyPut.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRequestBodyPut.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.distributionsettype; +package org.eclipse.hawkbit.mgmt.json.model.distributionsettype; import com.fasterxml.jackson.annotation.JsonProperty; @@ -14,7 +14,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * Request Body for DistributionSetType PUT, i.e. update. * */ -public class DistributionSetTypeRequestBodyPut { +public class MgmtDistributionSetTypeRequestBodyPut { @JsonProperty private String description; @@ -32,7 +32,7 @@ public class DistributionSetTypeRequestBodyPut { * * @return updated body */ - public DistributionSetTypeRequestBodyPut setDescription(final String description) { + public MgmtDistributionSetTypeRequestBodyPut setDescription(final String description) { this.description = description; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java similarity index 87% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java index e282b2924..5717863d1 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypeRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.distributionsettype; +package org.eclipse.hawkbit.mgmt.json.model.distributionsettype; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -25,7 +25,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class DistributionSetTypeRest extends NamedEntityRest { +public class MgmtDistributionSetTypeRest extends MgmtNamedEntity { @JsonProperty(value = "id", required = true) private Long moduleId; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutCondition.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutCondition.java similarity index 84% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutCondition.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutCondition.java index 914a5d5c2..d83585415 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutCondition.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutCondition.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.rollout; +package org.eclipse.hawkbit.mgmt.json.model.rollout; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class RolloutCondition { +public class MgmtRolloutCondition { private Condition condition = Condition.THRESHOLD; private String expression = "100"; @@ -25,10 +25,11 @@ public class RolloutCondition { /** * */ - public RolloutCondition() { + public MgmtRolloutCondition() { + // needed for jackson json creator. } - public RolloutCondition(final Condition condition, final String expression) { + public MgmtRolloutCondition(final Condition condition, final String expression) { this.condition = condition; this.expression = expression; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutErrorAction.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutErrorAction.java similarity index 93% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutErrorAction.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutErrorAction.java index 2ed6077e6..71fdf3ac9 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutErrorAction.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutErrorAction.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.rollout; +package org.eclipse.hawkbit.mgmt.json.model.rollout; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class RolloutErrorAction { +public class MgmtRolloutErrorAction { private ErrorAction action = ErrorAction.PAUSE; private String expression = null; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutResponseBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutResponseBody.java similarity index 94% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutResponseBody.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutResponseBody.java index dd1296cfd..79455f501 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutResponseBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutResponseBody.java @@ -6,12 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.rollout; +package org.eclipse.hawkbit.mgmt.json.model.rollout; import java.util.HashMap; import java.util.Map; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -23,7 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class RolloutResponseBody extends NamedEntityRest { +public class MgmtRolloutResponseBody extends MgmtNamedEntity { private String targetFilterQuery; private Long distributionSetId; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutRestRequestBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutRestRequestBody.java similarity index 72% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutRestRequestBody.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutRestRequestBody.java index 0b83948ff..f3bdb2665 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutRestRequestBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutRestRequestBody.java @@ -6,10 +6,10 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.rollout; +package org.eclipse.hawkbit.mgmt.json.model.rollout; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; -import org.eclipse.hawkbit.rest.resource.model.distributionset.ActionTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtActionType; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -21,26 +21,26 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class RolloutRestRequestBody extends NamedEntityRest { +public class MgmtRolloutRestRequestBody extends MgmtNamedEntity { private String targetFilterQuery; private long distributionSetId; private int amountGroups = 1; - private RolloutCondition successCondition = new RolloutCondition(); - private RolloutSuccessAction successAction = new RolloutSuccessAction(); - private RolloutCondition errorCondition = null; - private RolloutErrorAction errorAction = null; + private MgmtRolloutCondition successCondition = new MgmtRolloutCondition(); + private MgmtRolloutSuccessAction successAction = new MgmtRolloutSuccessAction(); + private MgmtRolloutCondition errorCondition = null; + private MgmtRolloutErrorAction errorAction = null; private Long forcetime; - private ActionTypeRest type; + private MgmtActionType type; /** * @return the finishCondition */ - public RolloutCondition getSuccessCondition() { + public MgmtRolloutCondition getSuccessCondition() { return successCondition; } @@ -48,14 +48,14 @@ public class RolloutRestRequestBody extends NamedEntityRest { * @param successCondition * the finishCondition to set */ - public void setSuccessCondition(final RolloutCondition successCondition) { + public void setSuccessCondition(final MgmtRolloutCondition successCondition) { this.successCondition = successCondition; } /** * @return the successAction */ - public RolloutSuccessAction getSuccessAction() { + public MgmtRolloutSuccessAction getSuccessAction() { return successAction; } @@ -63,14 +63,14 @@ public class RolloutRestRequestBody extends NamedEntityRest { * @param successAction * the successAction to set */ - public void setSuccessAction(final RolloutSuccessAction successAction) { + public void setSuccessAction(final MgmtRolloutSuccessAction successAction) { this.successAction = successAction; } /** * @return the errorCondition */ - public RolloutCondition getErrorCondition() { + public MgmtRolloutCondition getErrorCondition() { return errorCondition; } @@ -78,7 +78,7 @@ public class RolloutRestRequestBody extends NamedEntityRest { * @param errorCondition * the errorCondition to set */ - public void setErrorCondition(final RolloutCondition errorCondition) { + public void setErrorCondition(final MgmtRolloutCondition errorCondition) { this.errorCondition = errorCondition; } @@ -145,7 +145,7 @@ public class RolloutRestRequestBody extends NamedEntityRest { /** * @return the type */ - public ActionTypeRest getType() { + public MgmtActionType getType() { return type; } @@ -153,14 +153,14 @@ public class RolloutRestRequestBody extends NamedEntityRest { * @param type * the type to set */ - public void setType(final ActionTypeRest type) { + public void setType(final MgmtActionType type) { this.type = type; } /** * @return the errorAction */ - public RolloutErrorAction getErrorAction() { + public MgmtRolloutErrorAction getErrorAction() { return errorAction; } @@ -168,7 +168,7 @@ public class RolloutRestRequestBody extends NamedEntityRest { * @param errorAction * the errorAction to set */ - public void setErrorAction(final RolloutErrorAction errorAction) { + public void setErrorAction(final MgmtRolloutErrorAction errorAction) { this.errorAction = errorAction; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutSuccessAction.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutSuccessAction.java similarity index 84% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutSuccessAction.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutSuccessAction.java index f14e9a8bf..174aa63fa 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutSuccessAction.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rollout/MgmtRolloutSuccessAction.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.rollout; +package org.eclipse.hawkbit.mgmt.json.model.rollout; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class RolloutSuccessAction { +public class MgmtRolloutSuccessAction { private SuccessAction action = SuccessAction.NEXTGROUP; private String expression = null; @@ -25,10 +25,11 @@ public class RolloutSuccessAction { /** * */ - public RolloutSuccessAction() { + public MgmtRolloutSuccessAction() { + // needed for json creator } - public RolloutSuccessAction(final SuccessAction action, final String expression) { + public MgmtRolloutSuccessAction(final SuccessAction action, final String expression) { this.action = action; this.expression = expression; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rolloutgroup/RolloutGroupResponseBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rolloutgroup/MgmtRolloutGroupResponseBody.java similarity index 88% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rolloutgroup/RolloutGroupResponseBody.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rolloutgroup/MgmtRolloutGroupResponseBody.java index bb1b0116e..5e740a1fb 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rolloutgroup/RolloutGroupResponseBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/rolloutgroup/MgmtRolloutGroupResponseBody.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.rolloutgroup; +package org.eclipse.hawkbit.mgmt.json.model.rolloutgroup; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class RolloutGroupResponseBody extends NamedEntityRest { +public class MgmtRolloutGroupResponseBody extends MgmtNamedEntity { @JsonProperty(value = "id", required = true) private Long rolloutGroupId; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java similarity index 93% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java index a5ab41c8b..fe47347a9 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.softwaremodule; +package org.eclipse.hawkbit.mgmt.json.model.softwaremodule; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -22,7 +22,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class SoftwareModuleRest extends NamedEntityRest { +public class MgmtSoftwareModule extends MgmtNamedEntity { /** * API definition for {@link SoftwareModule.Type#RUNTIME}. */ diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleAssigmentRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleAssigment.java similarity index 73% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleAssigmentRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleAssigment.java index 3c866dca6..79bc31ad3 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleAssigmentRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleAssigment.java @@ -6,20 +6,17 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.softwaremodule; +package org.eclipse.hawkbit.mgmt.json.model.softwaremodule; -import org.eclipse.hawkbit.rest.resource.model.IdRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtId; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; /** * Request Body of SoftwareModule for assignment operations (ID only). * - * - * - * */ @JsonIgnoreProperties(ignoreUnknown = true) -public class SoftwareModuleAssigmentRest extends IdRest { +public class MgmtSoftwareModuleAssigment extends MgmtId { } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRequestBodyPost.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleRequestBodyPost.java similarity index 80% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRequestBodyPost.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleRequestBodyPost.java index 08638c10f..e39413915 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRequestBodyPost.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleRequestBodyPost.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.softwaremodule; +package org.eclipse.hawkbit.mgmt.json.model.softwaremodule; import com.fasterxml.jackson.annotation.JsonProperty; @@ -14,7 +14,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * Request Body for SoftwareModule POST. * */ -public class SoftwareModuleRequestBodyPost { +public class MgmtSoftwareModuleRequestBodyPost { @JsonProperty(required = true) private String name; @@ -44,7 +44,7 @@ public class SoftwareModuleRequestBodyPost { * * @return updated body */ - public SoftwareModuleRequestBodyPost setName(final String name) { + public MgmtSoftwareModuleRequestBodyPost setName(final String name) { this.name = name; return this; } @@ -62,7 +62,7 @@ public class SoftwareModuleRequestBodyPost { * * @return updated body */ - public SoftwareModuleRequestBodyPost setVersion(final String version) { + public MgmtSoftwareModuleRequestBodyPost setVersion(final String version) { this.version = version; return this; } @@ -80,7 +80,7 @@ public class SoftwareModuleRequestBodyPost { * * @return updated body */ - public SoftwareModuleRequestBodyPost setType(final String type) { + public MgmtSoftwareModuleRequestBodyPost setType(final String type) { this.type = type; return this; } @@ -98,7 +98,7 @@ public class SoftwareModuleRequestBodyPost { * * @return updated body */ - public SoftwareModuleRequestBodyPost setDescription(final String description) { + public MgmtSoftwareModuleRequestBodyPost setDescription(final String description) { this.description = description; return this; } @@ -116,7 +116,7 @@ public class SoftwareModuleRequestBodyPost { * * @return updated body */ - public SoftwareModuleRequestBodyPost setVendor(final String vendor) { + public MgmtSoftwareModuleRequestBodyPost setVendor(final String vendor) { this.vendor = vendor; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRequestBodyPut.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleRequestBodyPut.java similarity index 80% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRequestBodyPut.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleRequestBodyPut.java index 1ee547886..52c097e39 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModuleRequestBodyPut.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModuleRequestBodyPut.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.softwaremodule; +package org.eclipse.hawkbit.mgmt.json.model.softwaremodule; import com.fasterxml.jackson.annotation.JsonProperty; @@ -14,7 +14,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * Request Body for SoftwareModule PUT. * */ -public class SoftwareModuleRequestBodyPut { +public class MgmtSoftwareModuleRequestBodyPut { @JsonProperty private String description; @@ -35,7 +35,7 @@ public class SoftwareModuleRequestBodyPut { * * @return updated body */ - public SoftwareModuleRequestBodyPut setDescription(final String description) { + public MgmtSoftwareModuleRequestBodyPut setDescription(final String description) { this.description = description; return this; } @@ -53,7 +53,7 @@ public class SoftwareModuleRequestBodyPut { * * @return updated body */ - public SoftwareModuleRequestBodyPut setVendor(final String vendor) { + public MgmtSoftwareModuleRequestBodyPut setVendor(final String vendor) { this.vendor = vendor; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleType.java similarity index 90% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleType.java index ed05c1ee4..c0cda4994 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleType.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.softwaremoduletype; +package org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -22,7 +22,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class SoftwareModuleTypeRest extends NamedEntityRest { +public class MgmtSoftwareModuleType extends MgmtNamedEntity { @JsonProperty(value = "id", required = true) private Long moduleId; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeAssigmentRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeAssigment.java similarity index 73% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeAssigmentRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeAssigment.java index 68709650b..43bdc157e 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeAssigmentRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeAssigment.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.softwaremoduletype; +package org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype; -import org.eclipse.hawkbit.rest.resource.model.IdRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtId; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -17,6 +17,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; * */ @JsonIgnoreProperties(ignoreUnknown = true) -public class SoftwareModuleTypeAssigmentRest extends IdRest { +public class MgmtSoftwareModuleTypeAssigment extends MgmtId { } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRequestBodyPost.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeRequestBodyPost.java similarity index 79% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRequestBodyPost.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeRequestBodyPost.java index 3528f6b98..836c39d19 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRequestBodyPost.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeRequestBodyPost.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.softwaremoduletype; +package org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype; import com.fasterxml.jackson.annotation.JsonProperty; @@ -14,7 +14,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * Request Body for SoftwareModuleType POST. * */ -public class SoftwareModuleTypeRequestBodyPost { +public class MgmtSoftwareModuleTypeRequestBodyPost { @JsonProperty(required = true) private String name; @@ -41,7 +41,7 @@ public class SoftwareModuleTypeRequestBodyPost { * * @return updated body */ - public SoftwareModuleTypeRequestBodyPost setName(final String name) { + public MgmtSoftwareModuleTypeRequestBodyPost setName(final String name) { this.name = name; return this; } @@ -59,7 +59,7 @@ public class SoftwareModuleTypeRequestBodyPost { * * @return updated body */ - public SoftwareModuleTypeRequestBodyPost setDescription(final String description) { + public MgmtSoftwareModuleTypeRequestBodyPost setDescription(final String description) { this.description = description; return this; } @@ -76,7 +76,7 @@ public class SoftwareModuleTypeRequestBodyPost { * the key to set * @return updated body */ - public SoftwareModuleTypeRequestBodyPost setKey(final String key) { + public MgmtSoftwareModuleTypeRequestBodyPost setKey(final String key) { this.key = key; return this; } @@ -94,7 +94,7 @@ public class SoftwareModuleTypeRequestBodyPost { * * @return updated body */ - public SoftwareModuleTypeRequestBodyPost setMaxAssignments(final int maxAssignments) { + public MgmtSoftwareModuleTypeRequestBodyPost setMaxAssignments(final int maxAssignments) { this.maxAssignments = maxAssignments; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRequestBodyPut.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeRequestBodyPut.java similarity index 79% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRequestBodyPut.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeRequestBodyPut.java index 107a3cd2b..ecc8c9f65 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRequestBodyPut.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremoduletype/MgmtSoftwareModuleTypeRequestBodyPut.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.softwaremoduletype; +package org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype; import com.fasterxml.jackson.annotation.JsonProperty; @@ -14,7 +14,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * Request Body for SoftwareModuleType PUT. * */ -public class SoftwareModuleTypeRequestBodyPut { +public class MgmtSoftwareModuleTypeRequestBodyPut { @JsonProperty private String description; @@ -32,7 +32,7 @@ public class SoftwareModuleTypeRequestBodyPut { * * @return updated body */ - public SoftwareModuleTypeRequestBodyPut setDescription(final String description) { + public MgmtSoftwareModuleTypeRequestBodyPut setDescription(final String description) { this.description = description; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/AssignedDistributionSetRequestBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedDistributionSetRequestBody.java similarity index 81% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/AssignedDistributionSetRequestBody.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedDistributionSetRequestBody.java index 2bfd6cbf8..469780abf 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/AssignedDistributionSetRequestBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedDistributionSetRequestBody.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.tag; +package org.eclipse.hawkbit.mgmt.json.model.tag; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class AssignedDistributionSetRequestBody { +public class MgmtAssignedDistributionSetRequestBody { @JsonProperty(value = "id", required = true) private Long distributionSetId; @@ -28,7 +28,7 @@ public class AssignedDistributionSetRequestBody { return distributionSetId; } - public AssignedDistributionSetRequestBody setDistributionSetId(final Long distributionSetId) { + public MgmtAssignedDistributionSetRequestBody setDistributionSetId(final Long distributionSetId) { this.distributionSetId = distributionSetId; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/AssignedTargetRequestBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedTargetRequestBody.java similarity index 83% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/AssignedTargetRequestBody.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedTargetRequestBody.java index 2147c2697..6df1d10d7 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/AssignedTargetRequestBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtAssignedTargetRequestBody.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.tag; +package org.eclipse.hawkbit.mgmt.json.model.tag; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class AssignedTargetRequestBody { +public class MgmtAssignedTargetRequestBody { @JsonProperty(required = true) private String controllerId; @@ -28,7 +28,7 @@ public class AssignedTargetRequestBody { return controllerId; } - public AssignedTargetRequestBody setControllerId(final String controllerId) { + public MgmtAssignedTargetRequestBody setControllerId(final String controllerId) { this.controllerId = controllerId; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/DistributionSetTagAssigmentResultRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtDistributionSetTagAssigmentResult.java similarity index 61% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/DistributionSetTagAssigmentResultRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtDistributionSetTagAssigmentResult.java index 2078fe891..892bac453 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/DistributionSetTagAssigmentResultRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtDistributionSetTagAssigmentResult.java @@ -6,11 +6,11 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.tag; +package org.eclipse.hawkbit.mgmt.json.model.tag; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -24,27 +24,27 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class DistributionSetTagAssigmentResultRest { +public class MgmtDistributionSetTagAssigmentResult { @JsonProperty - private List assignedDistributionSets; + private List assignedDistributionSets; @JsonProperty - private List unassignedDistributionSets; + private List unassignedDistributionSets; - public List getAssignedDistributionSets() { + public List getAssignedDistributionSets() { return assignedDistributionSets; } - public List getUnassignedDistributionSets() { + public List getUnassignedDistributionSets() { return unassignedDistributionSets; } - public void setAssignedDistributionSets(final List assignedDistributionSets) { + public void setAssignedDistributionSets(final List assignedDistributionSets) { this.assignedDistributionSets = assignedDistributionSets; } - public void setUnassignedDistributionSets(final List unassignedDistributionSets) { + public void setUnassignedDistributionSets(final List unassignedDistributionSets) { this.unassignedDistributionSets = unassignedDistributionSets; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTag.java similarity index 87% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTag.java index 54d3c5064..82c33b434 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTag.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.tag; +package org.eclipse.hawkbit.mgmt.json.model.tag; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -22,7 +22,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class TagRest extends NamedEntityRest { +public class MgmtTag extends MgmtNamedEntity { @JsonProperty(value = "id", required = true) private Long tagId; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagRequestBodyPut.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTagRequestBodyPut.java similarity index 80% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagRequestBodyPut.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTagRequestBodyPut.java index 2165bcfc0..e7037af2b 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagRequestBodyPut.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTagRequestBodyPut.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.tag; +package org.eclipse.hawkbit.mgmt.json.model.tag; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class TagRequestBodyPut { +public class MgmtTagRequestBodyPut { @JsonProperty private String colour; @@ -34,7 +34,7 @@ public class TagRequestBodyPut { return name; } - public TagRequestBodyPut setName(final String name) { + public MgmtTagRequestBodyPut setName(final String name) { this.name = name; return this; } @@ -43,12 +43,12 @@ public class TagRequestBodyPut { return description; } - public TagRequestBodyPut setDescription(final String description) { + public MgmtTagRequestBodyPut setDescription(final String description) { this.description = description; return this; } - public TagRequestBodyPut setColour(final String colour) { + public MgmtTagRequestBodyPut setColour(final String colour) { this.colour = colour; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TargetTagAssigmentResultRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTargetTagAssigmentResult.java similarity index 67% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TargetTagAssigmentResultRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTargetTagAssigmentResult.java index 30d47cc90..61625e59d 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TargetTagAssigmentResultRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/tag/MgmtTargetTagAssigmentResult.java @@ -6,11 +6,11 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.tag; +package org.eclipse.hawkbit.mgmt.json.model.tag; import java.util.List; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -24,27 +24,27 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class TargetTagAssigmentResultRest { +public class MgmtTargetTagAssigmentResult { @JsonProperty - private List assignedTargets; + private List assignedTargets; @JsonProperty - private List unassignedTargets; + private List unassignedTargets; - public void setAssignedTargets(final List assignedTargets) { + public void setAssignedTargets(final List assignedTargets) { this.assignedTargets = assignedTargets; } - public List getAssignedTargets() { + public List getAssignedTargets() { return assignedTargets; } - public void setUnassignedTargets(final List unassignedTargets) { + public void setUnassignedTargets(final List unassignedTargets) { this.unassignedTargets = unassignedTargets; } - public List getUnassignedTargets() { + public List getUnassignedTargets() { return unassignedTargets; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/DistributionSetAssigmentRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtDistributionSetAssigment.java similarity index 64% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/DistributionSetAssigmentRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtDistributionSetAssigment.java index c2dc7f4a9..edfcc5687 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/DistributionSetAssigmentRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtDistributionSetAssigment.java @@ -1,23 +1,23 @@ /** * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. */ -package org.eclipse.hawkbit.rest.resource.model.target; +package org.eclipse.hawkbit.mgmt.json.model.target; -import org.eclipse.hawkbit.rest.resource.model.IdRest; -import org.eclipse.hawkbit.rest.resource.model.distributionset.ActionTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtId; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtActionType; /** * Request Body of DistributionSet for assignment operations (ID only). * */ -public class DistributionSetAssigmentRest extends IdRest { +public class MgmtDistributionSetAssigment extends MgmtId { private long forcetime; - private ActionTypeRest type; + private MgmtActionType type; /** * @return the type */ - public ActionTypeRest getType() { + public MgmtActionType getType() { return type; } @@ -25,7 +25,7 @@ public class DistributionSetAssigmentRest extends IdRest { * @param type * the type to set */ - public void setType(final ActionTypeRest type) { + public void setType(final MgmtActionType type) { this.type = type; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTarget.java similarity index 90% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTarget.java index 37baeeec9..40dd553a5 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTarget.java @@ -1,12 +1,12 @@ /** * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. */ -package org.eclipse.hawkbit.rest.resource.model.target; +package org.eclipse.hawkbit.mgmt.json.model.target; import java.net.URI; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; -import org.eclipse.hawkbit.rest.resource.model.PollStatusRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; +import org.eclipse.hawkbit.mgmt.json.model.MgmtPollStatus; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -20,7 +20,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class TargetRest extends NamedEntityRest { +public class MgmtTarget extends MgmtNamedEntity { @JsonProperty(required = true) private String controllerId; @@ -41,7 +41,7 @@ public class TargetRest extends NamedEntityRest { private String address; @JsonProperty - private PollStatusRest pollStatus; + private MgmtPollStatus pollStatus; @JsonProperty private String securityToken; @@ -111,7 +111,7 @@ public class TargetRest extends NamedEntityRest { /** * @return the pollStatus */ - public PollStatusRest getPollStatus() { + public MgmtPollStatus getPollStatus() { return pollStatus; } @@ -120,7 +120,7 @@ public class TargetRest extends NamedEntityRest { * the pollStatus to set */ @JsonIgnore - public void setPollStatus(final PollStatusRest pollStatus) { + public void setPollStatus(final MgmtPollStatus pollStatus) { this.pollStatus = pollStatus; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetAttributes.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetAttributes.java similarity index 63% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetAttributes.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetAttributes.java index 821be6b45..dad8e868f 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetAttributes.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetAttributes.java @@ -1,7 +1,7 @@ /** * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. */ -package org.eclipse.hawkbit.rest.resource.model.target; +package org.eclipse.hawkbit.mgmt.json.model.target; import java.util.HashMap; import java.util.Map; @@ -10,6 +10,6 @@ import java.util.Map; * {@link Map} with attributes of SP Target. * */ -public class TargetAttributes extends HashMap { +public class MgmtTargetAttributes extends HashMap { } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetRequestBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java similarity index 78% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetRequestBody.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java index bc1ca8a63..bc40326e4 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetRequestBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java @@ -1,7 +1,7 @@ /** * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. */ -package org.eclipse.hawkbit.rest.resource.model.target; +package org.eclipse.hawkbit.mgmt.json.model.target; import com.fasterxml.jackson.annotation.JsonProperty; @@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; * Request body for target PUT/POST commands. * */ -public class TargetRequestBody { +public class MgmtTargetRequestBody { @JsonProperty(required = true) private String name; @@ -43,7 +43,7 @@ public class TargetRequestBody { * @param name * the name to set */ - public TargetRequestBody setName(final String name) { + public MgmtTargetRequestBody setName(final String name) { this.name = name; return this; } @@ -52,7 +52,7 @@ public class TargetRequestBody { * @param description * the description to set */ - public TargetRequestBody setDescription(final String description) { + public MgmtTargetRequestBody setDescription(final String description) { this.description = description; return this; } @@ -61,7 +61,7 @@ public class TargetRequestBody { * @param controllerId * the controllerId to set */ - public TargetRequestBody setControllerId(final String controllerId) { + public MgmtTargetRequestBody setControllerId(final String controllerId) { this.controllerId = controllerId; return this; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java similarity index 76% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java index 80caefc94..26788760e 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java @@ -7,21 +7,20 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.api; +package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; -import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.MetadataRest; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; -import org.eclipse.hawkbit.rest.resource.model.distributionset.TargetAssignmentRequestBody; -import org.eclipse.hawkbit.rest.resource.model.distributionset.TargetAssignmentResponseBody; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleAssigmentRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; +import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPut; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtTargetAssignmentRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtTargetAssignmentResponseBody; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleAssigment; +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; @@ -33,8 +32,8 @@ import org.springframework.web.bind.annotation.RequestParam; /** * REST Resource handling for DistributionSet CRUD operations. */ -@RequestMapping(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING) -public interface DistributionSetRestApi { +@RequestMapping(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING) +public interface MgmtDistributionSetRestApi { /** * Handles the GET request of retrieving all DistributionSets . @@ -56,11 +55,11 @@ public interface DistributionSetRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getDistributionSets( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + public 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_SORTING, required = false) final String sortParam, + @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); /** * Handles the GET request of retrieving a single DistributionSet . @@ -75,7 +74,7 @@ public interface DistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getDistributionSet( + public ResponseEntity getDistributionSet( @PathVariable("distributionSetId") final Long distributionSetId); /** @@ -91,8 +90,8 @@ public interface DistributionSetRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> createDistributionSets( - @RequestBody final List sets); + public ResponseEntity> createDistributionSets( + @RequestBody final List sets); /** * Handles the DELETE request for a single DistributionSet . @@ -118,9 +117,9 @@ public interface DistributionSetRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{distributionSetId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity updateDistributionSet( + public ResponseEntity updateDistributionSet( @PathVariable("distributionSetId") final Long distributionSetId, - @RequestBody final DistributionSetRequestBodyPut toUpdate); + @RequestBody final MgmtDistributionSetRequestBodyPut toUpdate); /** * Handles the GET request of retrieving assigned targets to a specific @@ -146,12 +145,12 @@ public interface DistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/assignedTargets", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> getAssignedTargets( + public ResponseEntity> getAssignedTargets( @PathVariable("distributionSetId") final Long distributionSetId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + @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); /** * Handles the GET request of retrieving installed targets to a specific @@ -177,12 +176,12 @@ public interface DistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/installedTargets", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> getInstalledTargets( + public ResponseEntity> getInstalledTargets( @PathVariable("distributionSetId") final Long distributionSetId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + @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); /** * Handles the POST request of assigning multiple targets to a single @@ -200,9 +199,9 @@ public interface DistributionSetRestApi { @RequestMapping(method = RequestMethod.POST, value = "/{distributionSetId}/assignedTargets", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity createAssignedTarget( + public ResponseEntity createAssignedTarget( @PathVariable("distributionSetId") final Long distributionSetId, - @RequestBody final List targetIds); + @RequestBody final List targetIds); /** * Gets a paged list of meta data for a distribution set. @@ -228,10 +227,10 @@ public interface DistributionSetRestApi { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) public ResponseEntity> getMetadata( @PathVariable("distributionSetId") final Long distributionSetId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + @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); /** * Gets a single meta data value for a specific key of a distribution set. @@ -311,7 +310,7 @@ public interface DistributionSetRestApi { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) public ResponseEntity assignSoftwareModules(@PathVariable("distributionSetId") final Long distributionSetId, - @RequestBody final List softwareModuleIDs); + @RequestBody final List softwareModuleIDs); /** * Deletes the assignment of the software module form the distribution set. @@ -355,9 +354,9 @@ public interface DistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/assignedSM", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getAssignedSoftwareModules( + public ResponseEntity> getAssignedSoftwareModules( @PathVariable("distributionSetId") final Long distributionSetId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam); + @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); } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java similarity index 72% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java index 83f29bb17..316f2a56e 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java @@ -2,21 +2,20 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.api; +package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; -import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; -import org.eclipse.hawkbit.rest.resource.model.tag.AssignedDistributionSetRequestBody; -import org.eclipse.hawkbit.rest.resource.model.tag.DistributionSetTagAssigmentResultRest; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtAssignedDistributionSetRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtDistributionSetTagAssigmentResult; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTag; +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; @@ -29,8 +28,8 @@ import org.springframework.web.bind.annotation.RequestParam; * REST Resource handling for DistributionSetTag CRUD operations. * */ -@RequestMapping(RestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING) -public interface DistributionSetTagRestApi { +@RequestMapping(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING) +public interface MgmtDistributionSetTagRestApi { /** * Handles the GET request of retrieving all DistributionSet tags. * @@ -52,11 +51,11 @@ public interface DistributionSetTagRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getDistributionSetTags( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + ResponseEntity> getDistributionSetTags( + @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); /** * Handles the GET request of retrieving a single distribution set tag. @@ -71,7 +70,7 @@ public interface DistributionSetTagRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionsetTagId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getDistributionSetTag( + ResponseEntity getDistributionSetTag( @PathVariable("distributionsetTagId") final Long distributionsetTagId); /** @@ -86,7 +85,7 @@ public interface DistributionSetTagRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> createDistributionSetTags(@RequestBody final List tags); + ResponseEntity> createDistributionSetTags(@RequestBody final List tags); /** * @@ -104,9 +103,9 @@ public interface DistributionSetTagRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{distributionsetTagId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity updateDistributionSetTag( + ResponseEntity updateDistributionSetTag( @PathVariable("distributionsetTagId") final Long distributionsetTagId, - @RequestBody final TagRequestBodyPut restDSTagRest); + @RequestBody final MgmtTagRequestBodyPut restDSTagRest); /** * Handles the DELETE request for a single distribution set tag. @@ -120,7 +119,7 @@ public interface DistributionSetTagRestApi { * */ @RequestMapping(method = RequestMethod.DELETE, value = "/{distributionsetTagId}") - public ResponseEntity deleteDistributionSetTag( + ResponseEntity deleteDistributionSetTag( @PathVariable("distributionsetTagId") final Long distributionsetTagId); /** @@ -135,8 +134,8 @@ public interface DistributionSetTagRestApi { * in case the given {@code distributionsetTagId} doesn't * exists. */ - @RequestMapping(method = RequestMethod.GET, value = RestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) - public ResponseEntity> getAssignedDistributionSets( + @RequestMapping(method = RequestMethod.GET, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) + ResponseEntity> getAssignedDistributionSets( @PathVariable("distributionsetTagId") final Long distributionsetTagId); /** @@ -154,11 +153,11 @@ public interface DistributionSetTagRestApi { * in case the given {@code distributionsetTagId} doesn't * exists. */ - @RequestMapping(method = RequestMethod.POST, value = RestConstants.DISTRIBUTIONSET_REQUEST_MAPPING + @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING + "/toggleTagAssignment") - public ResponseEntity toggleTagAssignment( + ResponseEntity toggleTagAssignment( @PathVariable("distributionsetTagId") final Long distributionsetTagId, - @RequestBody final List assignedDSRequestBodies); + @RequestBody final List assignedDSRequestBodies); /** * Handles the POST request to assign distribution sets to the given tag id. @@ -173,10 +172,10 @@ public interface DistributionSetTagRestApi { * in case the given {@code distributionsetTagId} doesn't * exists. */ - @RequestMapping(method = RequestMethod.POST, value = RestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) - public ResponseEntity> assignDistributionSets( + @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) + ResponseEntity> assignDistributionSets( @PathVariable("distributionsetTagId") final Long distributionsetTagId, - @RequestBody final List assignedDSRequestBodies); + @RequestBody final List assignedDSRequestBodies); /** * Handles the DELETE request to unassign all distribution set from the @@ -189,8 +188,8 @@ public interface DistributionSetTagRestApi { * in case the given {@code distributionsetTagId} doesn't * exists. */ - @RequestMapping(method = RequestMethod.DELETE, value = RestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) - public ResponseEntity unassignDistributionSets( + @RequestMapping(method = RequestMethod.DELETE, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) + ResponseEntity unassignDistributionSets( @PathVariable("distributionsetTagId") final Long distributionsetTagId); /** @@ -206,9 +205,8 @@ public interface DistributionSetTagRestApi { * in case the given {@code distributionsetTagId} doesn't * exists. */ - @RequestMapping(method = RequestMethod.DELETE, value = RestConstants.DISTRIBUTIONSET_REQUEST_MAPPING + @RequestMapping(method = RequestMethod.DELETE, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING + "/{distributionsetId}") - public ResponseEntity unassignDistributionSet( - @PathVariable("distributionsetTagId") final Long distributionsetTagId, + ResponseEntity unassignDistributionSet(@PathVariable("distributionsetTagId") final Long distributionsetTagId, @PathVariable("distributionsetId") final Long distributionsetId); } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTypeRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java similarity index 72% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTypeRestApi.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java index 1900d8d7d..28af107f7 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTypeRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java @@ -2,21 +2,20 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.api; +package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; -import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.IdRest; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtId; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPut; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -30,8 +29,8 @@ import org.springframework.web.bind.annotation.RequestParam; * operations. * */ -@RequestMapping(RestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) -public interface DistributionSetTypeRestApi { +@RequestMapping(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) +public interface MgmtDistributionSetTypeRestApi { /** * Handles the GET request of retrieving all DistributionSetTypes. @@ -55,11 +54,11 @@ public interface DistributionSetTypeRestApi { * response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getDistributionSetTypes( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + ResponseEntity> getDistributionSetTypes( + @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); /** * Handles the GET request of retrieving a single DistributionSetType @@ -74,7 +73,7 @@ public interface DistributionSetTypeRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getDistributionSetType( + ResponseEntity getDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId); /** @@ -86,7 +85,7 @@ public interface DistributionSetTypeRestApi { * */ @RequestMapping(method = RequestMethod.DELETE, value = "/{distributionSetTypeId}") - public ResponseEntity deleteDistributionSetType( + ResponseEntity deleteDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId); /** @@ -100,9 +99,9 @@ public interface DistributionSetTypeRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{distributionSetTypeId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity updateDistributionSetType( + ResponseEntity updateDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, - @RequestBody final DistributionSetTypeRequestBodyPut restDistributionSetType); + @RequestBody final MgmtDistributionSetTypeRequestBodyPut restDistributionSetType); /** * Handles the POST request of creating new DistributionSetTypes. The @@ -117,8 +116,8 @@ public interface DistributionSetTypeRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> createDistributionSetTypes( - @RequestBody final List distributionSetTypes); + ResponseEntity> createDistributionSetTypes( + @RequestBody final List distributionSetTypes); /** * Handles the GET request of retrieving the list of mandatory software @@ -129,9 +128,9 @@ public interface DistributionSetTypeRestApi { * @return Unpaged list of module types and OK in case of success. */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}/" - + RestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES, produces = { "application/hal+json", + + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getMandatoryModules( + ResponseEntity> getMandatoryModules( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId); /** @@ -145,9 +144,9 @@ public interface DistributionSetTypeRestApi { * @return Unpaged list of module types and OK in case of success. */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}/" - + RestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES + + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES + "/{softwareModuleTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getMandatoryModule( + ResponseEntity getMandatoryModule( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId); @@ -162,9 +161,9 @@ public interface DistributionSetTypeRestApi { * @return Unpaged list of module types and OK in case of success. */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}/" - + RestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULE_TYPES + + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULE_TYPES + "/{softwareModuleTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getOptionalModule( + ResponseEntity getOptionalModule( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId); @@ -177,9 +176,9 @@ public interface DistributionSetTypeRestApi { * @return Unpaged list of module types and OK in case of success. */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}/" - + RestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULE_TYPES, produces = { "application/hal+json", + + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULE_TYPES, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getOptionalModules( + ResponseEntity> getOptionalModules( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId); /** @@ -194,10 +193,9 @@ public interface DistributionSetTypeRestApi { * @return OK if the request was successful */ @RequestMapping(method = RequestMethod.DELETE, value = "/{distributionSetTypeId}/" - + RestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES + + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES + "/{softwareModuleTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity removeMandatoryModule( - @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, + ResponseEntity removeMandatoryModule(@PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId); /** @@ -212,10 +210,9 @@ public interface DistributionSetTypeRestApi { * @return OK if the request was successful */ @RequestMapping(method = RequestMethod.DELETE, value = "/{distributionSetTypeId}/" - + RestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULE_TYPES + + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULE_TYPES + "/{softwareModuleTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity removeOptionalModule( - @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, + ResponseEntity removeOptionalModule(@PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId); /** @@ -230,11 +227,11 @@ public interface DistributionSetTypeRestApi { * @return OK if the request was successful */ @RequestMapping(method = RequestMethod.POST, value = "/{distributionSetTypeId}/" - + RestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES, consumes = { "application/hal+json", + + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity addMandatoryModule( - @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @RequestBody final IdRest smtId); + ResponseEntity addMandatoryModule(@PathVariable("distributionSetTypeId") final Long distributionSetTypeId, + @RequestBody final MgmtId smtId); /** * Handles the POST request for adding an optional software module type to a @@ -248,10 +245,10 @@ public interface DistributionSetTypeRestApi { * @return OK if the request was successful */ @RequestMapping(method = RequestMethod.POST, value = "/{distributionSetTypeId}/" - + RestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULE_TYPES, consumes = { "application/hal+json", + + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULE_TYPES, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity addOptionalModule( - @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @RequestBody final IdRest smtId); + ResponseEntity addOptionalModule(@PathVariable("distributionSetTypeId") final Long distributionSetTypeId, + @RequestBody final MgmtId smtId); } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java new file mode 100644 index 000000000..e07d77f2f --- /dev/null +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.rest.api; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * + */ +@RequestMapping(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) +public interface MgmtDownloadArtifactRestApi { + + /** + * Handles the GET request for downloading an artifact. + * + * @param softwareModuleId + * of the parent SoftwareModule + * @param artifactId + * of the related LocalArtifact + * @param servletResponse + * of the servlet + * @param request + * of the client + * + * @return responseEntity with status ok if successful + */ + @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/artifacts/{artifactId}/download") + @ResponseBody + ResponseEntity downloadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("artifactId") final Long artifactId, final HttpServletResponse servletResponse, + final HttpServletRequest request); + +} diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java new file mode 100644 index 000000000..c7caed01b --- /dev/null +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.rest.api; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * A resource for download artifacts. + * + */ +@RequestMapping(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE) +public interface MgmtDownloadRestApi { + + /** + * Handles the GET request for downloading an artifact. + * + * @param downloadId + * the generated download id + * @param response + * of the servlet + * @return {@link ResponseEntity} with status {@link HttpStatus#OK} if + * successful + */ + @RequestMapping(method = RequestMethod.GET, value = MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING) + @ResponseBody + ResponseEntity downloadArtifactByDownloadId(@PathVariable final String downloadId, + final HttpServletResponse response); + +} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/RestConstants.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRestConstants.java similarity index 92% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/RestConstants.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRestConstants.java index bde96f7a8..d8f395568 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/RestConstants.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRestConstants.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.api; /** * Constants for RESTful API. @@ -14,23 +14,13 @@ package org.eclipse.hawkbit.rest.resource; * * */ -public final class RestConstants { +public final class MgmtRestConstants { /** * API version definition. We are using only major versions. */ public static final String API_VERSION = "v1"; - /** - * The base URL mapping for the spring acuator management context path. - */ - public static final String BASE_SYSTEM_MAPPING = "/system"; - - /** - * URL mapping for system admin operations. - */ - public static final String SYSTEM_ADMIN_MAPPING = BASE_SYSTEM_MAPPING + "/admin"; - /** * The base URL mapping of the SP rest resources. */ @@ -50,6 +40,64 @@ public final class RestConstants { */ public static final String REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT = "50"; + /** + * The software module URL mapping rest resource. + */ + public static final String SOFTWAREMODULE_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/softwaremodules"; + + public static final String DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE = "/api/" + API_VERSION + "/downloadserver/"; + public static final String DOWNLOAD_ID_V1_REQUEST_MAPPING = "downloadId/{downloadId}"; + + /** + * The target URL mapping, href link for assigned distribution set. + */ + public static final String TARGET_V1_ASSIGNED_DISTRIBUTION_SET = "assignedDS"; + /** + * The target URL mapping, href link for installed distribution set. + */ + public static final String TARGET_V1_INSTALLED_DISTRIBUTION_SET = "installedDS"; + /** + * The target URL mapping, href link for target attributes. + */ + public static final String TARGET_V1_ATTRIBUTES = "attributes"; + /** + * The target URL mapping, href link for target actions. + */ + public static final String TARGET_V1_ACTIONS = "actions"; + /** + * The target URL mapping, href link for canceled actions. + */ + public static final String TARGET_V1_CANCELED_ACTION = "canceledaction"; + /** + * The target URL mapping, href link for canceled actions. + */ + public static final String TARGET_V1_ACTION_STATUS = "status"; + + /** + * The target URL mapping rest resource. + */ + public static final String TARGET_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/targets"; + + /** + * The tag URL mapping rest resource. + */ + public static final String TARGET_TAG_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/targettags"; + /** + * The tag URL mapping rest resource. + */ + public static final String TARGET_TAG_TAGERTS_REQUEST_MAPPING = "/{targetTagId}/targets"; + + /** + * The tag URL mapping rest resource. + */ + public static final String DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + + "/distributionsettags"; + + /** + * The tag URL mapping rest resource. + */ + public static final String DISTRIBUTIONSET_REQUEST_MAPPING = "/{distributionsetTagId}/distributionsets"; + /** * The default offset parameter in case the offset parameter is not present * in the request. @@ -87,62 +135,6 @@ public final class RestConstants { */ public static final String REQUEST_PARAMETER_SEARCH = "q"; - /** - * The target URL mapping, href link for assigned distribution set. - */ - public static final String TARGET_V1_ASSIGNED_DISTRIBUTION_SET = "assignedDS"; - /** - * The target URL mapping, href link for installed distribution set. - */ - public static final String TARGET_V1_INSTALLED_DISTRIBUTION_SET = "installedDS"; - /** - * The target URL mapping, href link for target attributes. - */ - public static final String TARGET_V1_ATTRIBUTES = "attributes"; - /** - * The target URL mapping, href link for target actions. - */ - public static final String TARGET_V1_ACTIONS = "actions"; - /** - * The target URL mapping, href link for canceled actions. - */ - public static final String TARGET_V1_CANCELED_ACTION = "canceledaction"; - /** - * The target URL mapping, href link for canceled actions. - */ - public static final String TARGET_V1_ACTION_STATUS = "status"; - - /** - * The target URL mapping rest resource. - */ - public static final String TARGET_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/targets"; - - public static final String SYSTEM_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/system"; - /** - * The software module URL mapping rest resource. - */ - public static final String SOFTWAREMODULE_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/softwaremodules"; - - /** - * The tag URL mapping rest resource. - */ - public static final String TARGET_TAG_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/targettags"; - /** - * The tag URL mapping rest resource. - */ - public static final String TARGET_TAG_TAGERTS_REQUEST_MAPPING = "/{targetTagId}/targets"; - - /** - * The tag URL mapping rest resource. - */ - public static final String DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING - + "/distributionsettags"; - - /** - * The tag URL mapping rest resource. - */ - public static final String DISTRIBUTIONSET_REQUEST_MAPPING = "/{distributionsetTagId}/distributionsets"; - /** * The software module type URL mapping rest resource. */ @@ -184,11 +176,8 @@ public final class RestConstants { public static final String DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES = "mandatorymoduletypes"; - public static final String DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE = "/api/" + API_VERSION + "/downloadserver/"; - public static final String DOWNLOAD_ID_V1_REQUEST_MAPPING = "downloadId/{downloadId}"; - // constant class, private constructor. - private RestConstants() { + private MgmtRestConstants() { } } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRolloutRestApi.java similarity index 69% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRolloutRestApi.java index 9f76b6bce..ea4578cad 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRolloutRestApi.java @@ -2,18 +2,17 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.api; +package org.eclipse.hawkbit.mgmt.rest.api; -import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutResponseBody; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutRestRequestBody; -import org.eclipse.hawkbit.rest.resource.model.rolloutgroup.RolloutGroupResponseBody; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutResponseBody; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutRestRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.rolloutgroup.MgmtRolloutGroupResponseBody; +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; @@ -26,8 +25,8 @@ import org.springframework.web.bind.annotation.RequestParam; * REST Resource handling rollout CRUD operations. * */ -@RequestMapping(RestConstants.ROLLOUT_V1_REQUEST_MAPPING) -public interface RolloutRestApi { +@RequestMapping(MgmtRestConstants.ROLLOUT_V1_REQUEST_MAPPING) +public interface MgmtRolloutRestApi { /** * Handles the GET request of retrieving all rollouts. @@ -49,11 +48,11 @@ public interface RolloutRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> getRollouts( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + ResponseEntity> getRollouts( + @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); /** * Handles the GET request of retrieving a single rollout. @@ -66,7 +65,7 @@ public interface RolloutRestApi { */ @RequestMapping(value = "/{rolloutId}", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity getRollout(@PathVariable("rolloutId") final Long rolloutId); + ResponseEntity getRollout(@PathVariable("rolloutId") final Long rolloutId); /** * Handles the POST request for creating rollout. @@ -81,7 +80,7 @@ public interface RolloutRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity create(@RequestBody final RolloutRestRequestBody rolloutRequestBody); + ResponseEntity create(@RequestBody final MgmtRolloutRestRequestBody rolloutRequestBody); /** * Handles the POST request for starting a rollout. @@ -96,8 +95,8 @@ public interface RolloutRestApi { */ @RequestMapping(method = RequestMethod.POST, value = "/{rolloutId}/start", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity start(@PathVariable("rolloutId") final Long rolloutId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_ASYNC, defaultValue = "false") final boolean startAsync); + ResponseEntity start(@PathVariable("rolloutId") final Long rolloutId, + @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_ASYNC, defaultValue = "false") final boolean startAsync); /** * Handles the POST request for pausing a rollout. @@ -112,7 +111,7 @@ public interface RolloutRestApi { */ @RequestMapping(method = RequestMethod.POST, value = "/{rolloutId}/pause", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity pause(@PathVariable("rolloutId") final Long rolloutId); + ResponseEntity pause(@PathVariable("rolloutId") final Long rolloutId); /** * Handles the POST request for resuming a rollout. @@ -127,7 +126,7 @@ public interface RolloutRestApi { */ @RequestMapping(method = RequestMethod.POST, value = "/{rolloutId}/resume", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity resume(@PathVariable("rolloutId") final Long rolloutId); + ResponseEntity resume(@PathVariable("rolloutId") final Long rolloutId); /** * Handles the GET request of retrieving all rollout groups referred to a @@ -153,12 +152,12 @@ public interface RolloutRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{rolloutId}/deploygroups", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> getRolloutGroups( + ResponseEntity> getRolloutGroups( @PathVariable("rolloutId") final Long rolloutId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + @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); /** * Handles the GET request for retrieving a single rollout group. @@ -167,12 +166,12 @@ public interface RolloutRestApi { * the rolloutId to retrieve the group from * @param groupId * the groupId to retrieve the rollout group - * @return the OK response containing the RolloutGroupResponseBody + * @return the OK response containing the MgmtRolloutGroupResponseBody * @throws EntityNotFoundException */ @RequestMapping(method = RequestMethod.GET, value = "/{rolloutId}/deploygroups/{groupId}", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity getRolloutGroup(@PathVariable("rolloutId") final Long rolloutId, + ResponseEntity getRolloutGroup(@PathVariable("rolloutId") final Long rolloutId, @PathVariable("groupId") final Long groupId); /** @@ -200,10 +199,10 @@ public interface RolloutRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{rolloutId}/deploygroups/{groupId}/targets", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> getRolloutGroupTargets(@PathVariable("rolloutId") final Long rolloutId, + ResponseEntity> getRolloutGroupTargets(@PathVariable("rolloutId") final Long rolloutId, @PathVariable("groupId") final Long groupId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + @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); } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestAPI.java similarity index 74% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestAPI.java index 0eb874489..e452eb9a3 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestAPI.java @@ -2,21 +2,20 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.api; +package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; -import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.MetadataRest; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; +import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPut; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -32,8 +31,8 @@ import org.springframework.web.multipart.MultipartFile; * operations. * */ -@RequestMapping(RestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) -public interface SoftwareModuleRestAPI { +@RequestMapping(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) +public interface MgmtSoftwareModuleRestAPI { /** * Handles POST request for artifact upload. @@ -56,7 +55,7 @@ public interface SoftwareModuleRestAPI { */ @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @RequestParam("file") final MultipartFile file, @RequestParam(value = "filename", required = false) final String optionalFileName, @RequestParam(value = "md5sum", required = false) final String md5Sum, @@ -76,8 +75,7 @@ public interface SoftwareModuleRestAPI { @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/artifacts", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @ResponseBody - public ResponseEntity> getArtifacts( - @PathVariable("softwareModuleId") final Long softwareModuleId); + ResponseEntity> getArtifacts(@PathVariable("softwareModuleId") final Long softwareModuleId); /** * Handles the GET request of retrieving a single Artifact meta data @@ -93,7 +91,7 @@ public interface SoftwareModuleRestAPI { @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/artifacts/{artifactId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @ResponseBody - public ResponseEntity getArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity getArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("artifactId") final Long artifactId); /** @@ -108,7 +106,7 @@ public interface SoftwareModuleRestAPI { */ @RequestMapping(method = RequestMethod.DELETE, value = "/{softwareModuleId}/artifacts/{artifactId}") @ResponseBody - public ResponseEntity deleteArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity deleteArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("artifactId") final Long artifactId); /** @@ -132,11 +130,11 @@ public interface SoftwareModuleRestAPI { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getSoftwareModules( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + ResponseEntity> getSoftwareModules( + @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); /** * Handles the GET request of retrieving a single software module. @@ -150,8 +148,7 @@ public interface SoftwareModuleRestAPI { */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getSoftwareModule( - @PathVariable("softwareModuleId") final Long softwareModuleId); + ResponseEntity getSoftwareModule(@PathVariable("softwareModuleId") final Long softwareModuleId); /** * Handles the POST request of creating new softwaremodules. The request @@ -166,8 +163,8 @@ public interface SoftwareModuleRestAPI { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> createSoftwareModules( - @RequestBody final List softwareModules); + ResponseEntity> createSoftwareModules( + @RequestBody final List softwareModules); /** * Handles the PUT request of updating a software module. @@ -180,9 +177,9 @@ public interface SoftwareModuleRestAPI { */ @RequestMapping(method = RequestMethod.PUT, value = "/{softwareModuleId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity updateSoftwareModule( + ResponseEntity updateSoftwareModule( @PathVariable("softwareModuleId") final Long softwareModuleId, - @RequestBody final SoftwareModuleRequestBodyPut restSoftwareModule); + @RequestBody final MgmtSoftwareModuleRequestBodyPut restSoftwareModule); /** * Handles the DELETE request for a single software module. @@ -193,7 +190,7 @@ public interface SoftwareModuleRestAPI { * */ @RequestMapping(method = RequestMethod.DELETE, value = "/{softwareModuleId}") - public ResponseEntity deleteSoftwareModule(@PathVariable("softwareModuleId") final Long softwareModuleId); + ResponseEntity deleteSoftwareModule(@PathVariable("softwareModuleId") final Long softwareModuleId); /** * Gets a paged list of meta data for a software module. @@ -217,12 +214,11 @@ public interface SoftwareModuleRestAPI { */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/metadata", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> getMetadata( - @PathVariable("softwareModuleId") final Long softwareModuleId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + ResponseEntity> getMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, + @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); /** * Gets a single meta data value for a specific key of a software module. @@ -236,7 +232,7 @@ public interface SoftwareModuleRestAPI { */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/metadata/{metadataKey}", produces = { MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getMetadataValue(@PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity getMetadataValue(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("metadataKey") final String metadataKey); /** @@ -251,7 +247,7 @@ public interface SoftwareModuleRestAPI { */ @RequestMapping(method = RequestMethod.PUT, value = "/{softwareModuleId}/metadata/{metadataKey}", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity updateMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity updateMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("metadataKey") final String metadataKey, @RequestBody final MetadataRest metadata); /** @@ -264,7 +260,7 @@ public interface SoftwareModuleRestAPI { * @return status OK if the delete request is successful */ @RequestMapping(method = RequestMethod.DELETE, value = "/{softwareModuleId}/metadata/{metadataKey}") - public ResponseEntity deleteMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity deleteMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("metadataKey") final String metadataKey); /** @@ -280,8 +276,7 @@ public interface SoftwareModuleRestAPI { @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/metadata", consumes = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> createMetadata( - @PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity> createMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, @RequestBody final List metadataRest); } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleTypeRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleTypeRestApi.java similarity index 70% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleTypeRestApi.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleTypeRestApi.java index a98e35a32..6c7252d62 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleTypeRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleTypeRestApi.java @@ -2,19 +2,18 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.api; +package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; -import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPut; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -28,8 +27,8 @@ import org.springframework.web.bind.annotation.RequestParam; * operations. * */ -@RequestMapping(RestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) -public interface SoftwareModuleTypeRestApi { +@RequestMapping(MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) +public interface MgmtSoftwareModuleTypeRestApi { /** * Handles the GET request of retrieving all SoftwareModuleTypes . * @@ -51,11 +50,11 @@ public interface SoftwareModuleTypeRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getTypes( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + ResponseEntity> getTypes( + @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); /** * Handles the GET request of retrieving a single software module type . @@ -69,7 +68,7 @@ public interface SoftwareModuleTypeRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getSoftwareModuleType( + ResponseEntity getSoftwareModuleType( @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId); /** @@ -81,7 +80,7 @@ public interface SoftwareModuleTypeRestApi { * */ @RequestMapping(method = RequestMethod.DELETE, value = "/{softwareModuleTypeId}") - public ResponseEntity deleteSoftwareModuleType( + ResponseEntity deleteSoftwareModuleType( @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId); /** @@ -95,9 +94,9 @@ public interface SoftwareModuleTypeRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{softwareModuleTypeId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity updateSoftwareModuleType( + ResponseEntity updateSoftwareModuleType( @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId, - @RequestBody final SoftwareModuleTypeRequestBodyPut restSoftwareModuleType); + @RequestBody final MgmtSoftwareModuleTypeRequestBodyPut restSoftwareModuleType); /** * Handles the POST request of creating new SoftwareModuleTypes. The request @@ -112,7 +111,7 @@ public interface SoftwareModuleTypeRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> createSoftwareModuleTypes( - @RequestBody final List softwareModuleTypes); + ResponseEntity> createSoftwareModuleTypes( + @RequestBody final List softwareModuleTypes); } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetRestApi.java similarity index 72% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetRestApi.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetRestApi.java index 48e242f81..572dcf500 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetRestApi.java @@ -2,23 +2,22 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.api; +package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; -import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.action.ActionRest; -import org.eclipse.hawkbit.rest.resource.model.action.ActionStatusRest; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; -import org.eclipse.hawkbit.rest.resource.model.target.DistributionSetAssigmentRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetAttributes; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRequestBody; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.action.MgmtAction; +import org.eclipse.hawkbit.mgmt.json.model.action.MgmtActionStatus; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtDistributionSetAssigment; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTargetAttributes; +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; @@ -30,8 +29,8 @@ import org.springframework.web.bind.annotation.RequestParam; /** * Api for handling target operations. */ -@RequestMapping(RestConstants.TARGET_V1_REQUEST_MAPPING) -public interface TargetRestApi { +@RequestMapping(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING) +public interface MgmtTargetRestApi { /** * Handles the GET request of retrieving a single target. @@ -45,7 +44,7 @@ public interface TargetRestApi { @RequestMapping(method = RequestMethod.GET, value = "/{targetId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getTarget(@PathVariable("targetId") final String targetId); + ResponseEntity getTarget(@PathVariable("targetId") final String targetId); /** * Handles the GET request of retrieving all targets. @@ -68,11 +67,11 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getTargets( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + ResponseEntity> getTargets( + @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); /** * Handles the POST request of creating new targets. The request body must @@ -87,7 +86,7 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> createTargets(@RequestBody final List targets); + ResponseEntity> createTargets(@RequestBody final List targets); /** * Handles the PUT request of updating a target. The ID is within the URL @@ -105,8 +104,8 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{targetId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity updateTarget(@PathVariable("targetId") final String targetId, - @RequestBody final TargetRequestBody targetRest); + ResponseEntity updateTarget(@PathVariable("targetId") final String targetId, + @RequestBody final MgmtTargetRequestBody targetRest); /** * Handles the DELETE request of deleting a target. @@ -119,7 +118,7 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.DELETE, value = "/{targetId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity deleteTarget(@PathVariable("targetId") final String targetId); + ResponseEntity deleteTarget(@PathVariable("targetId") final String targetId); /** * Handles the GET request of retrieving the attributes of a specific @@ -133,7 +132,7 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/attributes", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getAttributes(@PathVariable("targetId") final String targetId); + ResponseEntity getAttributes(@PathVariable("targetId") final String targetId); /** * Handles the GET request of retrieving the Actions of a specific target. @@ -158,11 +157,11 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/actions", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getActionHistory(@PathVariable("targetId") final String targetId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + ResponseEntity> getActionHistory(@PathVariable("targetId") final String targetId, + @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); /** * Handles the GET request of retrieving a specific Actions of a specific @@ -176,7 +175,7 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/actions/{actionId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getAction(@PathVariable("targetId") final String targetId, + ResponseEntity getAction(@PathVariable("targetId") final String targetId, @PathVariable("actionId") final Long actionId); /** @@ -196,7 +195,7 @@ public interface TargetRestApi { * if the target or the action is not found */ @RequestMapping(method = RequestMethod.DELETE, value = "/{targetId}/actions/{actionId}") - public ResponseEntity cancelAction(@PathVariable("targetId") final String targetId, + ResponseEntity cancelAction(@PathVariable("targetId") final String targetId, @PathVariable("actionId") final Long actionId, @RequestParam(value = "force", required = false, defaultValue = "false") final boolean force); @@ -223,11 +222,11 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/actions/{actionId}/status", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getActionStatusList( - @PathVariable("targetId") final String targetId, @PathVariable("actionId") final Long actionId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam); + ResponseEntity> getActionStatusList(@PathVariable("targetId") final String targetId, + @PathVariable("actionId") final Long actionId, + @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); /** * Handles the GET request of retrieving the assigned distribution set of an @@ -242,8 +241,7 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/assignedDS", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getAssignedDistributionSet( - @PathVariable("targetId") final String targetId); + ResponseEntity getAssignedDistributionSet(@PathVariable("targetId") final String targetId); /** * Changes the assigned distribution set of a target. @@ -260,8 +258,8 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.POST, value = "/{targetId}/assignedDS", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity postAssignedDistributionSet(@PathVariable("targetId") final String targetId, - @RequestBody final DistributionSetAssigmentRest dsId); + ResponseEntity postAssignedDistributionSet(@PathVariable("targetId") final String targetId, + @RequestBody final MgmtDistributionSetAssigment dsId); /** * Handles the GET request of retrieving the installed distribution set of @@ -276,7 +274,6 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/installedDS", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getInstalledDistributionSet( - @PathVariable("targetId") final String targetId); + ResponseEntity getInstalledDistributionSet(@PathVariable("targetId") final String targetId); } \ No newline at end of file diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java similarity index 67% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java index 940b578d4..90646a562 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java @@ -2,21 +2,20 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.api; +package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; -import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.tag.AssignedTargetRequestBody; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRest; -import org.eclipse.hawkbit.rest.resource.model.tag.TargetTagAssigmentResultRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtAssignedTargetRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTag; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTargetTagAssigmentResult; +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; @@ -29,8 +28,8 @@ import org.springframework.web.bind.annotation.RequestParam; * REST Resource handling for TargetTag CRUD operations. * */ -@RequestMapping(RestConstants.TARGET_TAG_V1_REQUEST_MAPPING) -public interface TargetTagRestApi { +@RequestMapping(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING) +public interface MgmtTargetTagRestApi { /** * Handles the GET request of retrieving all target tags. @@ -52,11 +51,11 @@ public interface TargetTagRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getTargetTags( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam); + ResponseEntity> getTargetTags( + @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); /** * Handles the GET request of retrieving a single target tag. @@ -70,7 +69,7 @@ public interface TargetTagRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetTagId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getTargetTag(@PathVariable("targetTagId") final Long targetTagId); + ResponseEntity getTargetTag(@PathVariable("targetTagId") final Long targetTagId); /** * Handles the POST request of creating new target tag. The request body @@ -84,7 +83,7 @@ public interface TargetTagRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> createTargetTags(@RequestBody final List tags); + ResponseEntity> createTargetTags(@RequestBody final List tags); /** * @@ -100,8 +99,8 @@ public interface TargetTagRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{targetTagId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity updateTagretTag(@PathVariable("targetTagId") final Long targetTagId, - @RequestBody final TagRequestBodyPut restTargetTagRest); + ResponseEntity updateTagretTag(@PathVariable("targetTagId") final Long targetTagId, + @RequestBody final MgmtTagRequestBodyPut restTargetTagRest); /** * Handles the DELETE request for a single target tag. @@ -114,7 +113,7 @@ public interface TargetTagRestApi { * */ @RequestMapping(method = RequestMethod.DELETE, value = "/{targetTagId}") - public ResponseEntity deleteTargetTag(@PathVariable("targetTagId") final Long targetTagId); + ResponseEntity deleteTargetTag(@PathVariable("targetTagId") final Long targetTagId); /** * Handles the GET request of retrieving all assigned targets by the given @@ -127,8 +126,8 @@ public interface TargetTagRestApi { * @throws EntityNotFoundException * in case the given {@code targetTagId} doesn't exists. */ - @RequestMapping(method = RequestMethod.GET, value = RestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) - public ResponseEntity> getAssignedTargets(@PathVariable("targetTagId") final Long targetTagId); + @RequestMapping(method = RequestMethod.GET, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) + ResponseEntity> getAssignedTargets(@PathVariable("targetTagId") final Long targetTagId); /** * Handles the POST request to toggle the assignment of targets by the given @@ -143,11 +142,11 @@ public interface TargetTagRestApi { * @throws EntityNotFoundException * in case the given {@code targetTagId} doesn't exists. */ - @RequestMapping(method = RequestMethod.POST, value = RestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING + @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING + "/toggleTagAssignment") - public ResponseEntity toggleTagAssignment( + ResponseEntity toggleTagAssignment( @PathVariable("targetTagId") final Long targetTagId, - @RequestBody final List assignedTargetRequestBodies); + @RequestBody final List assignedTargetRequestBodies); /** * Handles the POST request to assign targets to the given tag id. @@ -161,9 +160,9 @@ public interface TargetTagRestApi { * @throws EntityNotFoundException * in case the given {@code targetTagId} doesn't exists. */ - @RequestMapping(method = RequestMethod.POST, value = RestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) - public ResponseEntity> assignTargets(@PathVariable("targetTagId") final Long targetTagId, - @RequestBody final List assignedTargetRequestBodies); + @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) + ResponseEntity> assignTargets(@PathVariable("targetTagId") final Long targetTagId, + @RequestBody final List assignedTargetRequestBodies); /** * Handles the DELETE request to unassign all targets from the given tag id. @@ -174,8 +173,8 @@ public interface TargetTagRestApi { * @throws EntityNotFoundException * in case the given {@code targetTagId} doesn't exists. */ - @RequestMapping(method = RequestMethod.DELETE, value = RestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) - public ResponseEntity unassignTargets(@PathVariable("targetTagId") final Long targetTagId); + @RequestMapping(method = RequestMethod.DELETE, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) + ResponseEntity unassignTargets(@PathVariable("targetTagId") final Long targetTagId); /** * Handles the DELETE request to unassign one target from the given tag id. @@ -188,8 +187,8 @@ public interface TargetTagRestApi { * @throws EntityNotFoundException * in case the given {@code targetTagId} doesn't exists. */ - @RequestMapping(method = RequestMethod.DELETE, value = RestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING + @RequestMapping(method = RequestMethod.DELETE, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING + "/{controllerId}") - public ResponseEntity unassignTarget(@PathVariable("targetTagId") final Long targetTagId, + ResponseEntity unassignTarget(@PathVariable("targetTagId") final Long targetTagId, @PathVariable("controllerId") final String controllerId); } diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java b/hawkbit-mgmt-api/src/test/java/org/eclipse/hawkbit/mgmt/json/model/PagedListTest.java similarity index 97% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java rename to hawkbit-mgmt-api/src/test/java/org/eclipse/hawkbit/mgmt/json/model/PagedListTest.java index 68ce570a1..c17acb3b1 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java +++ b/hawkbit-mgmt-api/src/test/java/org/eclipse/hawkbit/mgmt/json/model/PagedListTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model; +package org.eclipse.hawkbit.mgmt.json.model; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.fail; diff --git a/hawkbit-rest-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml similarity index 82% rename from hawkbit-rest-resource/pom.xml rename to hawkbit-mgmt-resource/pom.xml index 45d104963..311cbae76 100644 --- a/hawkbit-rest-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -9,7 +9,7 @@ hawkbit-parent 0.2.0-SNAPSHOT - hawkbit-rest-resource + hawkbit-mgmt-resource hawkBit :: REST Resources @@ -21,43 +21,14 @@ org.eclipse.hawkbit - hawkbit-core + hawkbit-mgmt-api ${project.version} org.eclipse.hawkbit - hawkbit-rest-api + hawkbit-rest-core ${project.version} - - org.eclipse.hawkbit - hawkbit-ddi-api - ${project.version} - - - javax.servlet - javax.servlet-api - provided - - - org.apache.tomcat.embed - tomcat-embed-core - provided - - - io.springfox - springfox-core - 2.0.3 - - - commons-io - commons-io - 2.4 - - - org.springframework.security - spring-security-web - diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/EnableRestResources.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java similarity index 91% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/EnableRestResources.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java index 8f9952054..ee34a3988 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/EnableRestResources.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -29,6 +29,6 @@ import org.springframework.stereotype.Controller; @Retention(RetentionPolicy.RUNTIME) @Configuration @ComponentScan -public @interface EnableRestResources { +public @interface EnableMgmtApi { } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java similarity index 75% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java index 8051146a1..111ba00ae 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -14,6 +14,13 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtTargetAssignmentResponseBody; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -22,12 +29,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetRestApi; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetTypeRestApi; -import org.eclipse.hawkbit.rest.resource.model.MetadataRest; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; -import org.eclipse.hawkbit.rest.resource.model.distributionset.TargetAssignmentResponseBody; /** * A mapper which maps repository model to RESTful model representation and @@ -37,8 +38,8 @@ import org.eclipse.hawkbit.rest.resource.model.distributionset.TargetAssignmentR * * */ -public final class DistributionSetMapper { - private DistributionSetMapper() { +public final class MgmtDistributionSetMapper { + private MgmtDistributionSetMapper() { // Utility class } @@ -65,7 +66,7 @@ public final class DistributionSetMapper { } /** - * {@link DistributionSetRequestBodyPost}s to {@link DistributionSet}s. + * {@link MgmtDistributionSetRequestBodyPost}s to {@link DistributionSet}s. * * @param sets * to convert @@ -73,11 +74,11 @@ public final class DistributionSetMapper { * to use for conversion * @return converted list of {@link DistributionSet}s */ - static List dsFromRequest(final Iterable sets, + static List dsFromRequest(final Iterable sets, final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { final List mappedList = new ArrayList<>(); - for (final DistributionSetRequestBodyPost dsRest : sets) { + for (final MgmtDistributionSetRequestBodyPost dsRest : sets) { mappedList.add(fromRequest(dsRest, softwareManagement, distributionSetManagement)); } return mappedList; @@ -85,7 +86,7 @@ public final class DistributionSetMapper { } /** - * {@link DistributionSetRequestBodyPost} to {@link DistributionSet}. + * {@link MgmtDistributionSetRequestBodyPost} to {@link DistributionSet}. * * @param dsRest * to convert @@ -93,7 +94,7 @@ public final class DistributionSetMapper { * to use for conversion * @return converted {@link DistributionSet} */ - static DistributionSet fromRequest(final DistributionSetRequestBodyPost dsRest, + static DistributionSet fromRequest(final MgmtDistributionSetRequestBodyPost dsRest, final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { final DistributionSet result = new DistributionSet(); @@ -152,12 +153,12 @@ public final class DistributionSetMapper { * the ds set * @return the response */ - public static DistributionSetRest toResponse(final DistributionSet distributionSet) { + public static MgmtDistributionSet toResponse(final DistributionSet distributionSet) { if (distributionSet == null) { return null; } - final DistributionSetRest response = new DistributionSetRest(); - RestModelMapper.mapNamedToNamed(response, distributionSet); + final MgmtDistributionSet response = new MgmtDistributionSet(); + MgmtRestModelMapper.mapNamedToNamed(response, distributionSet); response.setDsId(distributionSet.getId()); response.setVersion(distributionSet.getVersion()); @@ -165,35 +166,35 @@ public final class DistributionSetMapper { response.setType(distributionSet.getType().getKey()); distributionSet.getModules() - .forEach(module -> response.getModules().add(SoftwareModuleMapper.toResponse(module))); + .forEach(module -> response.getModules().add(MgmtSoftwareModuleMapper.toResponse(module))); response.setRequiredMigrationStep(distributionSet.isRequiredMigrationStep()); response.add( - linkTo(methodOn(DistributionSetRestApi.class).getDistributionSet(response.getDsId())).withRel("self")); + linkTo(methodOn(MgmtDistributionSetRestApi.class).getDistributionSet(response.getDsId())).withRel("self")); response.add(linkTo( - methodOn(DistributionSetTypeRestApi.class).getDistributionSetType(distributionSet.getType().getId())) + methodOn(MgmtDistributionSetTypeRestApi.class).getDistributionSetType(distributionSet.getType().getId())) .withRel("type")); - response.add(linkTo(methodOn(DistributionSetRestApi.class).getMetadata(response.getDsId(), - Integer.parseInt(RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET), - Integer.parseInt(RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT), null, null)) + response.add(linkTo(methodOn(MgmtDistributionSetRestApi.class).getMetadata(response.getDsId(), + Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET), + Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT), null, null)) .withRel("metadata")); return response; } - static TargetAssignmentResponseBody toResponse(final DistributionSetAssignmentResult dsAssignmentResult) { - final TargetAssignmentResponseBody result = new TargetAssignmentResponseBody(); + static MgmtTargetAssignmentResponseBody toResponse(final DistributionSetAssignmentResult dsAssignmentResult) { + final MgmtTargetAssignmentResponseBody result = new MgmtTargetAssignmentResponseBody(); result.setAssigned(dsAssignmentResult.getAssigned()); result.setAlreadyAssigned(dsAssignmentResult.getAlreadyAssigned()); result.setTotal(dsAssignmentResult.getTotal()); return result; } - static List toResponseDistributionSets(final Iterable sets) { - final List response = new ArrayList<>(); + static List toResponseDistributionSets(final Iterable sets) { + final List response = new ArrayList<>(); if (sets != null) { for (final DistributionSet set : sets) { @@ -219,11 +220,11 @@ public final class DistributionSetMapper { return mappedList; } - static List toResponseFromDsList(final List sets) { - final List mappedList = new ArrayList<>(); + static List toResponseFromDsList(final List sets) { + final List mappedList = new ArrayList<>(); if (sets != null) { for (final DistributionSet set : sets) { - final DistributionSetRest response = toResponse(set); + final MgmtDistributionSet response = toResponse(set); mappedList.add(response); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java similarity index 79% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java index 27231308b..2db11f489 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java @@ -6,18 +6,30 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPut; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtTargetAssignmentRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtTargetAssignmentResponseBody; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleAssigment; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetFields; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TargetFields; @@ -30,18 +42,6 @@ import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetRestApi; -import org.eclipse.hawkbit.rest.resource.helper.RestResourceConversionHelper; -import org.eclipse.hawkbit.rest.resource.model.MetadataRest; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; -import org.eclipse.hawkbit.rest.resource.model.distributionset.TargetAssignmentRequestBody; -import org.eclipse.hawkbit.rest.resource.model.distributionset.TargetAssignmentResponseBody; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleAssigmentRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,8 +57,8 @@ import org.springframework.web.bind.annotation.RestController; * REST Resource handling for {@link DistributionSet} CRUD operations. */ @RestController -public class DistributionSetResource implements DistributionSetRestApi { - private static final Logger LOG = LoggerFactory.getLogger(DistributionSetResource.class); +public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { + private static final Logger LOG = LoggerFactory.getLogger(MgmtDistributionSetResource.class); @Autowired private SoftwareManagement softwareManagement; @@ -79,7 +79,7 @@ public class DistributionSetResource implements DistributionSetRestApi { private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity> getDistributionSets(final int pagingOffsetParam, + public ResponseEntity> getDistributionSets(final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); @@ -95,20 +95,20 @@ public class DistributionSetResource implements DistributionSetRestApi { findDsPage = this.distributionSetManagement.findDistributionSetsAll(pageable, false, null); } - final List rest = DistributionSetMapper.toResponseFromDsList(findDsPage.getContent()); + final List rest = MgmtDistributionSetMapper.toResponseFromDsList(findDsPage.getContent()); return new ResponseEntity<>(new PagedList<>(rest, findDsPage.getTotalElements()), HttpStatus.OK); } @Override - public ResponseEntity getDistributionSet(final Long distributionSetId) { + public ResponseEntity getDistributionSet(final Long distributionSetId) { final DistributionSet foundDs = findDistributionSetWithExceptionIfNotFound(distributionSetId); - return new ResponseEntity<>(DistributionSetMapper.toResponse(foundDs), HttpStatus.OK); + return new ResponseEntity<>(MgmtDistributionSetMapper.toResponse(foundDs), HttpStatus.OK); } @Override - public ResponseEntity> createDistributionSets( - final List sets) { + public ResponseEntity> createDistributionSets( + final List sets) { LOG.debug("creating {} distribution sets", sets.size()); // set default Ds type if ds type is null @@ -116,10 +116,11 @@ public class DistributionSetResource implements DistributionSetRestApi { .getTenantMetadata(this.currentTenant.getCurrentTenant()).getDefaultDsType().getKey())); final Iterable createdDSets = this.distributionSetManagement.createDistributionSets( - DistributionSetMapper.dsFromRequest(sets, this.softwareManagement, this.distributionSetManagement)); + MgmtDistributionSetMapper.dsFromRequest(sets, this.softwareManagement, this.distributionSetManagement)); LOG.debug("{} distribution sets created, return status {}", sets.size(), HttpStatus.CREATED); - return new ResponseEntity<>(DistributionSetMapper.toResponseDistributionSets(createdDSets), HttpStatus.CREATED); + return new ResponseEntity<>(MgmtDistributionSetMapper.toResponseDistributionSets(createdDSets), + HttpStatus.CREATED); } @Override @@ -132,8 +133,8 @@ public class DistributionSetResource implements DistributionSetRestApi { } @Override - public ResponseEntity updateDistributionSet(final Long distributionSetId, - final DistributionSetRequestBodyPut toUpdate) { + public ResponseEntity updateDistributionSet(final Long distributionSetId, + final MgmtDistributionSetRequestBodyPut toUpdate) { final DistributionSet set = findDistributionSetWithExceptionIfNotFound(distributionSetId); if (toUpdate.getDescription() != null) { @@ -148,12 +149,12 @@ public class DistributionSetResource implements DistributionSetRestApi { set.setVersion(toUpdate.getVersion()); } return new ResponseEntity<>( - DistributionSetMapper.toResponse(this.distributionSetManagement.updateDistributionSet(set)), + MgmtDistributionSetMapper.toResponse(this.distributionSetManagement.updateDistributionSet(set)), HttpStatus.OK); } @Override - public ResponseEntity> getAssignedTargets(final Long distributionSetId, + public ResponseEntity> getAssignedTargets(final Long distributionSetId, final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { // check if distribution set exists otherwise throw exception @@ -173,12 +174,12 @@ public class DistributionSetResource implements DistributionSetRestApi { targetsAssignedDS = this.targetManagement.findTargetByAssignedDistributionSet(distributionSetId, pageable); } - return new ResponseEntity<>(new PagedList<>(TargetMapper.toResponse(targetsAssignedDS.getContent()), + return new ResponseEntity<>(new PagedList<>(MgmtTargetMapper.toResponse(targetsAssignedDS.getContent()), targetsAssignedDS.getTotalElements()), HttpStatus.OK); } @Override - public ResponseEntity> getInstalledTargets(final Long distributionSetId, + public ResponseEntity> getInstalledTargets(final Long distributionSetId, final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { // check if distribution set exists otherwise throw exception // immediately @@ -198,22 +199,24 @@ public class DistributionSetResource implements DistributionSetRestApi { pageable); } - return new ResponseEntity<>(new PagedList(TargetMapper.toResponse(targetsInstalledDS.getContent()), - targetsInstalledDS.getTotalElements()), HttpStatus.OK); + return new ResponseEntity<>( + new PagedList(MgmtTargetMapper.toResponse(targetsInstalledDS.getContent()), + targetsInstalledDS.getTotalElements()), + HttpStatus.OK); } @Override - public ResponseEntity createAssignedTarget(final Long distributionSetId, - final List targetIds) { + public ResponseEntity createAssignedTarget(final Long distributionSetId, + final List targetIds) { final DistributionSetAssignmentResult assignDistributionSet = this.deployManagament.assignDistributionSet( distributionSetId, targetIds.stream() .map(t -> new TargetWithActionType(t.getId(), - RestResourceConversionHelper.convertActionType(t.getType()), t.getForcetime())) + MgmtRestModelMapper.convertActionType(t.getType()), t.getForcetime())) .collect(Collectors.toList())); - return new ResponseEntity<>(DistributionSetMapper.toResponse(assignDistributionSet), HttpStatus.OK); + return new ResponseEntity<>(MgmtDistributionSetMapper.toResponse(assignDistributionSet), HttpStatus.OK); } @Override @@ -240,7 +243,7 @@ public class DistributionSetResource implements DistributionSetRestApi { } return new ResponseEntity<>( - new PagedList<>(DistributionSetMapper.toResponseDsMetadata(metaDataPage.getContent()), + new PagedList<>(MgmtDistributionSetMapper.toResponseDsMetadata(metaDataPage.getContent()), metaDataPage.getTotalElements()), HttpStatus.OK); @@ -253,7 +256,7 @@ public class DistributionSetResource implements DistributionSetRestApi { final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); final DistributionSetMetadata findOne = this.distributionSetManagement .findOne(new DsMetadataCompositeKey(ds, metadataKey)); - return ResponseEntity. ok(DistributionSetMapper.toResponseDsMetadata(findOne)); + return ResponseEntity. ok(MgmtDistributionSetMapper.toResponseDsMetadata(findOne)); } @Override @@ -264,7 +267,7 @@ public class DistributionSetResource implements DistributionSetRestApi { final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); final DistributionSetMetadata updated = this.distributionSetManagement .updateDistributionSetMetadata(new DistributionSetMetadata(metadataKey, ds, metadata.getValue())); - return ResponseEntity.ok(DistributionSetMapper.toResponseDsMetadata(updated)); + return ResponseEntity.ok(MgmtDistributionSetMapper.toResponseDsMetadata(updated)); } @Override @@ -284,20 +287,20 @@ public class DistributionSetResource implements DistributionSetRestApi { final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); final List created = this.distributionSetManagement - .createDistributionSetMetadata(DistributionSetMapper.fromRequestDsMetadata(ds, metadataRest)); - return new ResponseEntity<>(DistributionSetMapper.toResponseDsMetadata(created), HttpStatus.CREATED); + .createDistributionSetMetadata(MgmtDistributionSetMapper.fromRequestDsMetadata(ds, metadataRest)); + return new ResponseEntity<>(MgmtDistributionSetMapper.toResponseDsMetadata(created), HttpStatus.CREATED); } @Override public ResponseEntity assignSoftwareModules(final Long distributionSetId, - final List softwareModuleIDs) { + final List softwareModuleIDs) { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); final Set softwareModuleToBeAssigned = new HashSet<>(); - for (final SoftwareModuleAssigmentRest sm : softwareModuleIDs) { + for (final MgmtSoftwareModuleAssigment sm : softwareModuleIDs) { final SoftwareModule softwareModule = this.softwareManagement.findSoftwareModuleById(sm.getId()); if (softwareModule != null) { softwareModuleToBeAssigned.add(softwareModule); @@ -321,7 +324,7 @@ public class DistributionSetResource implements DistributionSetRestApi { } @Override - public ResponseEntity> getAssignedSoftwareModules(final Long distributionSetId, + public ResponseEntity> getAssignedSoftwareModules(final Long distributionSetId, final int pagingOffsetParam, final int pagingLimitParam, final String sortParam) { // check if distribution set exists otherwise throw exception // immediately @@ -332,7 +335,7 @@ public class DistributionSetResource implements DistributionSetRestApi { final Pageable pageable = new OffsetBasedPageRequest(sanitizedOffsetParam, sanitizedLimitParam, sorting); final Page softwaremodules = this.softwareManagement.findSoftwareModuleByAssignedTo(pageable, foundDs); - return new ResponseEntity<>(new PagedList<>(SoftwareModuleMapper.toResponse(softwaremodules.getContent()), + return new ResponseEntity<>(new PagedList<>(MgmtSoftwareModuleMapper.toResponse(softwaremodules.getContent()), softwaremodules.getTotalElements()), HttpStatus.OK); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java similarity index 72% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java index eaa0fec28..5d0131fec 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java @@ -6,12 +6,20 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.util.List; import java.util.stream.Collectors; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtAssignedDistributionSetRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtDistributionSetTagAssigmentResult; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTag; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TagFields; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -19,13 +27,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetTagRestApi; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; -import org.eclipse.hawkbit.rest.resource.model.tag.AssignedDistributionSetRequestBody; -import org.eclipse.hawkbit.rest.resource.model.tag.DistributionSetTagAssigmentResultRest; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -42,8 +43,8 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController -public class DistributionSetTagResource implements DistributionSetTagRestApi { - private static final Logger LOG = LoggerFactory.getLogger(DistributionSetTagResource.class); +public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRestApi { + private static final Logger LOG = LoggerFactory.getLogger(MgmtDistributionSetTagResource.class); @Autowired private TagManagement tagManagement; @@ -52,7 +53,7 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity> getDistributionSetTags(final int pagingOffsetParam, + public ResponseEntity> getDistributionSetTags(final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); @@ -74,39 +75,39 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { } - final List rest = TagMapper.toResponseDistributionSetTag(findTargetsAll.getContent()); + final List rest = MgmtTagMapper.toResponseDistributionSetTag(findTargetsAll.getContent()); return new ResponseEntity<>(new PagedList<>(rest, countTargetsAll), HttpStatus.OK); } @Override - public ResponseEntity getDistributionSetTag(final Long distributionsetTagId) { + public ResponseEntity getDistributionSetTag(final Long distributionsetTagId) { final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); - return new ResponseEntity<>(TagMapper.toResponse(tag), HttpStatus.OK); + return new ResponseEntity<>(MgmtTagMapper.toResponse(tag), HttpStatus.OK); } @Override - public ResponseEntity> createDistributionSetTags(final List tags) { + public ResponseEntity> createDistributionSetTags(final List tags) { LOG.debug("creating {} ds tags", tags.size()); final List createdTags = this.tagManagement - .createDistributionSetTags(TagMapper.mapDistributionSetTagFromRequest(tags)); + .createDistributionSetTags(MgmtTagMapper.mapDistributionSetTagFromRequest(tags)); - return new ResponseEntity<>(TagMapper.toResponseDistributionSetTag(createdTags), HttpStatus.CREATED); + return new ResponseEntity<>(MgmtTagMapper.toResponseDistributionSetTag(createdTags), HttpStatus.CREATED); } @Override - public ResponseEntity updateDistributionSetTag(final Long distributionsetTagId, - final TagRequestBodyPut restDSTagRest) { + public ResponseEntity updateDistributionSetTag(final Long distributionsetTagId, + final MgmtTagRequestBodyPut restDSTagRest) { LOG.debug("update {} ds tag", restDSTagRest); final DistributionSetTag distributionSetTag = findDistributionTagById(distributionsetTagId); - TagMapper.updateTag(restDSTagRest, distributionSetTag); + MgmtTagMapper.updateTag(restDSTagRest, distributionSetTag); final DistributionSetTag updateDistributionSetTag = this.tagManagement .updateDistributionSetTag(distributionSetTag); LOG.debug("ds tag updated"); - return new ResponseEntity<>(TagMapper.toResponse(updateDistributionSetTag), HttpStatus.OK); + return new ResponseEntity<>(MgmtTagMapper.toResponse(updateDistributionSetTag), HttpStatus.OK); } @Override @@ -120,15 +121,15 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { } @Override - public ResponseEntity> getAssignedDistributionSets(final Long distributionsetTagId) { + public ResponseEntity> getAssignedDistributionSets(final Long distributionsetTagId) { final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); return new ResponseEntity<>( - DistributionSetMapper.toResponseDistributionSets(tag.getAssignedToDistributionSet()), HttpStatus.OK); + MgmtDistributionSetMapper.toResponseDistributionSets(tag.getAssignedToDistributionSet()), HttpStatus.OK); } @Override - public ResponseEntity toggleTagAssignment(final Long distributionsetTagId, - final List assignedDSRequestBodies) { + public ResponseEntity toggleTagAssignment(final Long distributionsetTagId, + final List assignedDSRequestBodies) { LOG.debug("Toggle distribution set assignment {} for ds tag {}", assignedDSRequestBodies.size(), distributionsetTagId); @@ -137,11 +138,11 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { final DistributionSetTagAssignmentResult assigmentResult = this.distributionSetManagement .toggleTagAssignment(findDistributionSetIds(assignedDSRequestBodies), tag.getName()); - final DistributionSetTagAssigmentResultRest tagAssigmentResultRest = new DistributionSetTagAssigmentResultRest(); + final MgmtDistributionSetTagAssigmentResult tagAssigmentResultRest = new MgmtDistributionSetTagAssigmentResult(); tagAssigmentResultRest.setAssignedDistributionSets( - DistributionSetMapper.toResponseDistributionSets(assigmentResult.getAssignedEntity())); + MgmtDistributionSetMapper.toResponseDistributionSets(assigmentResult.getAssignedEntity())); tagAssigmentResultRest.setUnassignedDistributionSets( - DistributionSetMapper.toResponseDistributionSets(assigmentResult.getUnassignedEntity())); + MgmtDistributionSetMapper.toResponseDistributionSets(assigmentResult.getUnassignedEntity())); LOG.debug("Toggled assignedDS {} and unassignedDS{}", assigmentResult.getAssigned(), assigmentResult.getUnassigned()); @@ -150,15 +151,15 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { } @Override - public ResponseEntity> assignDistributionSets(final Long distributionsetTagId, - final List assignedDSRequestBodies) { + public ResponseEntity> assignDistributionSets(final Long distributionsetTagId, + final List assignedDSRequestBodies) { LOG.debug("Assign DistributionSet {} for ds tag {}", assignedDSRequestBodies.size(), distributionsetTagId); final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); final List assignedDs = this.distributionSetManagement .assignTag(findDistributionSetIds(assignedDSRequestBodies), tag); LOG.debug("Assignd DistributionSet {}", assignedDs.size()); - return new ResponseEntity<>(DistributionSetMapper.toResponseDistributionSets(assignedDs), HttpStatus.OK); + return new ResponseEntity<>(MgmtDistributionSetMapper.toResponseDistributionSets(assignedDs), HttpStatus.OK); } @Override @@ -193,7 +194,7 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { } private List findDistributionSetIds( - final List assignedDistributionSetRequestBodies) { + final List assignedDistributionSetRequestBodies) { return assignedDistributionSetRequestBodies.stream().map(request -> request.getDistributionSetId()) .collect(Collectors.toList()); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java similarity index 60% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java index 409caf01d..244f07095 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -14,38 +14,39 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRest; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetTypeRestApi; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRest; /** * A mapper which maps repository model to RESTful model representation and * back. * */ -final class DistributionSetTypeMapper { +final class MgmtDistributionSetTypeMapper { // private constructor, utility class - private DistributionSetTypeMapper() { + private MgmtDistributionSetTypeMapper() { } static List smFromRequest(final SoftwareManagement softwareManagement, - final Iterable smTypesRest) { + final Iterable smTypesRest) { final List mappedList = new ArrayList<>(); - for (final DistributionSetTypeRequestBodyPost smRest : smTypesRest) { + for (final MgmtDistributionSetTypeRequestBodyPost smRest : smTypesRest) { mappedList.add(fromRequest(softwareManagement, smRest)); } return mappedList; } static DistributionSetType fromRequest(final SoftwareManagement softwareManagement, - final DistributionSetTypeRequestBodyPost smsRest) { + final MgmtDistributionSetTypeRequestBodyPost smsRest) { final DistributionSetType result = new DistributionSetType(smsRest.getKey(), smsRest.getName(), smsRest.getDescription()); @@ -75,37 +76,37 @@ final class DistributionSetTypeMapper { return result; } - static List toTypesResponse(final List types) { - final List response = new ArrayList<>(); + static List toTypesResponse(final List types) { + final List response = new ArrayList<>(); for (final DistributionSetType dsType : types) { response.add(toResponse(dsType)); } return response; } - static List toListResponse(final List types) { - final List response = new ArrayList<>(); + static List toListResponse(final List types) { + final List response = new ArrayList<>(); for (final DistributionSetType dsType : types) { response.add(toResponse(dsType)); } return response; } - static DistributionSetTypeRest toResponse(final DistributionSetType type) { - final DistributionSetTypeRest result = new DistributionSetTypeRest(); + static MgmtDistributionSetTypeRest toResponse(final DistributionSetType type) { + final MgmtDistributionSetTypeRest result = new MgmtDistributionSetTypeRest(); - RestModelMapper.mapNamedToNamed(result, type); + MgmtRestModelMapper.mapNamedToNamed(result, type); result.setKey(type.getKey()); result.setModuleId(type.getId()); - result.add(linkTo(methodOn(DistributionSetTypeRestApi.class).getDistributionSetType(result.getModuleId())) + result.add(linkTo(methodOn(MgmtDistributionSetTypeRestApi.class).getDistributionSetType(result.getModuleId())) .withRel("self")); - result.add(linkTo(methodOn(DistributionSetTypeRestApi.class).getMandatoryModules(result.getModuleId())) - .withRel(RestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULES)); + result.add(linkTo(methodOn(MgmtDistributionSetTypeRestApi.class).getMandatoryModules(result.getModuleId())) + .withRel(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULES)); - result.add(linkTo(methodOn(DistributionSetTypeRestApi.class).getOptionalModules(result.getModuleId())) - .withRel(RestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULES)); + result.add(linkTo(methodOn(MgmtDistributionSetTypeRestApi.class).getOptionalModules(result.getModuleId())) + .withRel(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULES)); return result; } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java similarity index 74% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java index f7346a6ff..0e5adccdc 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java @@ -6,12 +6,21 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.MgmtId; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPut; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetTypeFields; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Artifact; @@ -19,13 +28,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetTypeRestApi; -import org.eclipse.hawkbit.rest.resource.model.IdRest; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypeRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -45,7 +47,7 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController -public class DistributionSetTypeResource implements DistributionSetTypeRestApi { +public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeRestApi { @Autowired private SoftwareManagement softwareManagement; @@ -54,11 +56,11 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity> getDistributionSetTypes( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam) { + public ResponseEntity> getDistributionSetTypes( + @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) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -77,17 +79,17 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { countModulesAll = distributionSetManagement.countDistributionSetTypesAll(); } - final List rest = DistributionSetTypeMapper + final List rest = MgmtDistributionSetTypeMapper .toListResponse(findModuleTypessAll.getContent()); return new ResponseEntity<>(new PagedList<>(rest, countModulesAll), HttpStatus.OK); } @Override - public ResponseEntity getDistributionSetType( + public ResponseEntity getDistributionSetType( @PathVariable final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); - return new ResponseEntity<>(DistributionSetTypeMapper.toResponse(foundType), HttpStatus.OK); + return new ResponseEntity<>(MgmtDistributionSetTypeMapper.toResponse(foundType), HttpStatus.OK); } @Override @@ -100,9 +102,9 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { } @Override - public ResponseEntity updateDistributionSetType( + public ResponseEntity updateDistributionSetType( @PathVariable final Long distributionSetTypeId, - @RequestBody final DistributionSetTypeRequestBodyPut restDistributionSetType) { + @RequestBody final MgmtDistributionSetTypeRequestBodyPut restDistributionSetType) { final DistributionSetType type = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); // only description can be modified @@ -113,17 +115,17 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { final DistributionSetType updatedDistributionSetType = distributionSetManagement .updateDistributionSetType(type); - return new ResponseEntity<>(DistributionSetTypeMapper.toResponse(updatedDistributionSetType), HttpStatus.OK); + return new ResponseEntity<>(MgmtDistributionSetTypeMapper.toResponse(updatedDistributionSetType), HttpStatus.OK); } @Override - public ResponseEntity> createDistributionSetTypes( - @RequestBody final List distributionSetTypes) { + public ResponseEntity> createDistributionSetTypes( + @RequestBody final List distributionSetTypes) { final List createdSoftwareModules = distributionSetManagement.createDistributionSetTypes( - DistributionSetTypeMapper.smFromRequest(softwareManagement, distributionSetTypes)); + MgmtDistributionSetTypeMapper.smFromRequest(softwareManagement, distributionSetTypes)); - return new ResponseEntity<>(DistributionSetTypeMapper.toTypesResponse(createdSoftwareModules), + return new ResponseEntity<>(MgmtDistributionSetTypeMapper.toTypesResponse(createdSoftwareModules), HttpStatus.CREATED); } @@ -137,16 +139,16 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { } @Override - public ResponseEntity> getMandatoryModules( + public ResponseEntity> getMandatoryModules( @PathVariable final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); - return new ResponseEntity<>(SoftwareModuleTypeMapper.toListResponse(foundType.getMandatoryModuleTypes()), + return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toListResponse(foundType.getMandatoryModuleTypes()), HttpStatus.OK); } @Override - public ResponseEntity getMandatoryModule(@PathVariable final Long distributionSetTypeId, + public ResponseEntity getMandatoryModule(@PathVariable final Long distributionSetTypeId, @PathVariable final Long softwareModuleTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -158,11 +160,11 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { "Software module with given ID is not part of this distribution set type!"); } - return new ResponseEntity<>(SoftwareModuleTypeMapper.toResponse(foundSmType), HttpStatus.OK); + return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toResponse(foundSmType), HttpStatus.OK); } @Override - public ResponseEntity getOptionalModule(@PathVariable final Long distributionSetTypeId, + public ResponseEntity getOptionalModule(@PathVariable final Long distributionSetTypeId, @PathVariable final Long softwareModuleTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -174,16 +176,16 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { "Software module with given ID is not part of this distribution set type!"); } - return new ResponseEntity<>(SoftwareModuleTypeMapper.toResponse(foundSmType), HttpStatus.OK); + return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toResponse(foundSmType), HttpStatus.OK); } @Override - public ResponseEntity> getOptionalModules( + public ResponseEntity> getOptionalModules( @PathVariable final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); - return new ResponseEntity<>(SoftwareModuleTypeMapper.toListResponse(foundType.getOptionalModuleTypes()), + return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toListResponse(foundType.getOptionalModuleTypes()), HttpStatus.OK); } @@ -228,7 +230,7 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { @Override public ResponseEntity addMandatoryModule(@PathVariable final Long distributionSetTypeId, - @RequestBody final IdRest smtId) { + @RequestBody final MgmtId smtId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -243,7 +245,7 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { @Override public ResponseEntity addOptionalModule(@PathVariable final Long distributionSetTypeId, - @RequestBody final IdRest smtId) { + @RequestBody final MgmtId smtId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java similarity index 79% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java index 00f8f4756..ec06c3c8a 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java @@ -6,34 +6,30 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadArtifactRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.rest.resource.helper.RestResourceConversionHelper; +import org.eclipse.hawkbit.rest.util.RestResourceConversionHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** - * @author Jonathan Knoblauch * */ @RestController -@RequestMapping(RestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) -public class DownloadArtifactResource { +public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi { @Autowired private SoftwareManagement softwareManagement; @@ -55,11 +51,10 @@ public class DownloadArtifactResource { * * @return responseEntity with status ok if successful */ - @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/artifacts/{artifactId}/download") + @Override @ResponseBody - public ResponseEntity downloadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("artifactId") final Long artifactId, final HttpServletResponse servletResponse, - final HttpServletRequest request) { + public ResponseEntity downloadArtifact(final Long softwareModuleId, final Long artifactId, + final HttpServletResponse servletResponse, final HttpServletRequest request) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId); if (null == module || !module.getLocalArtifact(artifactId).isPresent()) { diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java similarity index 83% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java index 14b1dcbc6..ec2eced90 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.io.IOException; @@ -17,6 +17,7 @@ import org.eclipse.hawkbit.artifact.repository.ArtifactRepository; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.DownloadArtifactCache; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadRestApi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -25,10 +26,6 @@ import org.springframework.cache.Cache; import org.springframework.cache.Cache.ValueWrapper; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** @@ -37,11 +34,10 @@ import org.springframework.web.bind.annotation.RestController; * * */ -@RequestMapping(RestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE) @RestController -public class DownloadResource { +public class MgmtDownloadResource implements MgmtDownloadRestApi { - private static final Logger LOGGER = LoggerFactory.getLogger(DownloadResource.class); + private static final Logger LOGGER = LoggerFactory.getLogger(MgmtDownloadResource.class); @Autowired private ArtifactRepository artifactRepository; @@ -60,9 +56,8 @@ public class DownloadResource { * @return {@link ResponseEntity} with status {@link HttpStatus#OK} if * successful */ - @RequestMapping(method = RequestMethod.GET, value = RestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING) - @ResponseBody - public ResponseEntity downloadArtifactByDownloadId(@PathVariable final String downloadId, + @Override + public ResponseEntity downloadArtifactByDownloadId(final String downloadId, final HttpServletResponse response) { try { final ValueWrapper cacheWrapper = cache.get(downloadId); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRestModelMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRestModelMapper.java new file mode 100644 index 000000000..deee0e461 --- /dev/null +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRestModelMapper.java @@ -0,0 +1,81 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.rest.resource; + +import org.eclipse.hawkbit.mgmt.json.model.MgmtBaseEntity; +import org.eclipse.hawkbit.mgmt.json.model.MgmtNamedEntity; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtActionType; +import org.eclipse.hawkbit.repository.model.Action.ActionType; +import org.eclipse.hawkbit.repository.model.NamedEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; + +/** + * A mapper which maps repository model to RESTful model representation and + * back. + * + * + * + * + */ +final class MgmtRestModelMapper { + + // private constructor, utility class + private MgmtRestModelMapper() { + + } + + static void mapBaseToBase(final MgmtBaseEntity response, final TenantAwareBaseEntity base) { + response.setCreatedBy(base.getCreatedBy()); + response.setLastModifiedBy(base.getLastModifiedBy()); + if (base.getCreatedAt() != null) { + response.setCreatedAt(base.getCreatedAt()); + } + if (base.getLastModifiedAt() != null) { + response.setLastModifiedAt(base.getLastModifiedAt()); + } + } + + static void mapNamedToNamed(final MgmtNamedEntity response, final NamedEntity base) { + mapBaseToBase(response, base); + + response.setName(base.getName()); + response.setDescription(base.getDescription()); + } + + /** + * Convert a action rest type to a action repository type. + * + * @param actionTypeRest + * the rest type + * @return or the action repository type + */ + /** + * Convert a action rest type to a action repository type. + * + * @param actionTypeRest + * the rest type + * @return or the action repository type + */ + public static ActionType convertActionType(final MgmtActionType actionTypeRest) { + if (actionTypeRest == null) { + return null; + } + + switch (actionTypeRest) { + case SOFT: + return ActionType.SOFT; + case FORCED: + return ActionType.FORCED; + case TIMEFORCED: + return ActionType.TIMEFORCED; + default: + throw new IllegalStateException("Action Type is not supported"); + } + } +} diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java similarity index 67% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutMapper.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java index c6be219ba..4dcaf0bf1 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -14,6 +14,14 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutCondition.Condition; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutErrorAction.ErrorAction; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutResponseBody; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutRestRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutSuccessAction.SuccessAction; +import org.eclipse.hawkbit.mgmt.json.model.rolloutgroup.MgmtRolloutGroupResponseBody; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRolloutRestApi; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; @@ -23,14 +31,6 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondit import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.rest.resource.api.RolloutRestApi; -import org.eclipse.hawkbit.rest.resource.helper.RestResourceConversionHelper; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutCondition.Condition; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutErrorAction.ErrorAction; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutResponseBody; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutRestRequestBody; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutSuccessAction.SuccessAction; -import org.eclipse.hawkbit.rest.resource.model.rolloutgroup.RolloutGroupResponseBody; /** * A mapper which maps repository model to RESTful model representation and @@ -38,22 +38,22 @@ import org.eclipse.hawkbit.rest.resource.model.rolloutgroup.RolloutGroupResponse * * */ -final class RolloutMapper { +final class MgmtRolloutMapper { private static final String NOT_SUPPORTED = " is not supported"; - private RolloutMapper() { + private MgmtRolloutMapper() { // Utility class } - static List toResponseRollout(final List rollouts) { - final List result = new ArrayList<>(rollouts.size()); + static List toResponseRollout(final List rollouts) { + final List result = new ArrayList<>(rollouts.size()); rollouts.forEach(r -> result.add(toResponseRollout(r))); return result; } - static RolloutResponseBody toResponseRollout(final Rollout rollout) { - final RolloutResponseBody body = new RolloutResponseBody(); + static MgmtRolloutResponseBody toResponseRollout(final Rollout rollout) { + final MgmtRolloutResponseBody body = new MgmtRolloutResponseBody(); body.setCreatedAt(rollout.getCreatedAt()); body.setCreatedBy(rollout.getCreatedBy()); body.setDescription(rollout.getDescription()); @@ -71,25 +71,26 @@ final class RolloutMapper { rollout.getTotalTargetCountStatus().getTotalTargetCountByStatus(status)); } - body.add(linkTo(methodOn(RolloutRestApi.class).getRollout(rollout.getId())).withRel("self")); - body.add(linkTo(methodOn(RolloutRestApi.class).start(rollout.getId(), false)).withRel("start")); - body.add(linkTo(methodOn(RolloutRestApi.class).start(rollout.getId(), true)).withRel("startAsync")); - body.add(linkTo(methodOn(RolloutRestApi.class).pause(rollout.getId())).withRel("pause")); - body.add(linkTo(methodOn(RolloutRestApi.class).resume(rollout.getId())).withRel("resume")); - body.add(linkTo(methodOn(RolloutRestApi.class).getRolloutGroups(rollout.getId(), - Integer.parseInt(RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET), - Integer.parseInt(RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT), null, null)).withRel("groups")); + body.add(linkTo(methodOn(MgmtRolloutRestApi.class).getRollout(rollout.getId())).withRel("self")); + body.add(linkTo(methodOn(MgmtRolloutRestApi.class).start(rollout.getId(), false)).withRel("start")); + body.add(linkTo(methodOn(MgmtRolloutRestApi.class).start(rollout.getId(), true)).withRel("startAsync")); + body.add(linkTo(methodOn(MgmtRolloutRestApi.class).pause(rollout.getId())).withRel("pause")); + body.add(linkTo(methodOn(MgmtRolloutRestApi.class).resume(rollout.getId())).withRel("resume")); + body.add(linkTo(methodOn(MgmtRolloutRestApi.class).getRolloutGroups(rollout.getId(), + Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET), + Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT), null, null)) + .withRel("groups")); return body; } - static Rollout fromRequest(final RolloutRestRequestBody restRequest, final DistributionSet distributionSet, + static Rollout fromRequest(final MgmtRolloutRestRequestBody restRequest, final DistributionSet distributionSet, final String filterQuery) { final Rollout rollout = new Rollout(); rollout.setName(restRequest.getName()); rollout.setDescription(restRequest.getDescription()); rollout.setDistributionSet(distributionSet); rollout.setTargetFilterQuery(filterQuery); - final ActionType convertActionType = RestResourceConversionHelper.convertActionType(restRequest.getType()); + final ActionType convertActionType = MgmtRestModelMapper.convertActionType(restRequest.getType()); if (convertActionType != null) { rollout.setActionType(convertActionType); } @@ -100,14 +101,14 @@ final class RolloutMapper { return rollout; } - static List toResponseRolloutGroup(final List rollouts) { - final List result = new ArrayList<>(rollouts.size()); + static List toResponseRolloutGroup(final List rollouts) { + final List result = new ArrayList<>(rollouts.size()); rollouts.forEach(r -> result.add(toResponseRolloutGroup(r))); return result; } - static RolloutGroupResponseBody toResponseRolloutGroup(final RolloutGroup rolloutGroup) { - final RolloutGroupResponseBody body = new RolloutGroupResponseBody(); + static MgmtRolloutGroupResponseBody toResponseRolloutGroup(final RolloutGroup rolloutGroup) { + final MgmtRolloutGroupResponseBody body = new MgmtRolloutGroupResponseBody(); body.setCreatedAt(rolloutGroup.getCreatedAt()); body.setCreatedBy(rolloutGroup.getCreatedBy()); body.setDescription(rolloutGroup.getDescription()); @@ -116,9 +117,8 @@ final class RolloutMapper { body.setName(rolloutGroup.getName()); body.setRolloutGroupId(rolloutGroup.getId()); body.setStatus(rolloutGroup.getStatus().toString().toLowerCase()); - body.add(linkTo( - methodOn(RolloutRestApi.class).getRolloutGroup(rolloutGroup.getRollout().getId(), rolloutGroup.getId())) - .withRel("self")); + body.add(linkTo(methodOn(MgmtRolloutRestApi.class).getRolloutGroup(rolloutGroup.getRollout().getId(), + rolloutGroup.getId())).withRel("self")); return body; } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java similarity index 81% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java index 78cfefa0d..ba1017cf3 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java @@ -6,11 +6,18 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutResponseBody; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutRestRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.rolloutgroup.MgmtRolloutGroupResponseBody; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRolloutRestApi; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.RolloutFields; import org.eclipse.hawkbit.repository.RolloutGroupFields; import org.eclipse.hawkbit.repository.RolloutGroupManagement; @@ -27,12 +34,6 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessActi import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.rest.resource.api.RolloutRestApi; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutResponseBody; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutRestRequestBody; -import org.eclipse.hawkbit.rest.resource.model.rolloutgroup.RolloutGroupResponseBody; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -48,7 +49,7 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController -public class RolloutResource implements RolloutRestApi { +public class MgmtRolloutResource implements MgmtRolloutRestApi { private static final String DOES_NOT_EXIST = "} does not exist"; @@ -62,7 +63,7 @@ public class RolloutResource implements RolloutRestApi { private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity> getRollouts(final int pagingOffsetParam, + public ResponseEntity> getRollouts(final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); @@ -79,18 +80,18 @@ public class RolloutResource implements RolloutRestApi { findModulesAll = this.rolloutManagement.findAll(pageable); } - final List rest = RolloutMapper.toResponseRollout(findModulesAll.getContent()); + final List rest = MgmtRolloutMapper.toResponseRollout(findModulesAll.getContent()); return new ResponseEntity<>(new PagedList<>(rest, findModulesAll.getTotalElements()), HttpStatus.OK); } @Override - public ResponseEntity getRollout(final Long rolloutId) { + public ResponseEntity getRollout(final Long rolloutId) { final Rollout findRolloutById = findRolloutOrThrowException(rolloutId); - return new ResponseEntity<>(RolloutMapper.toResponseRollout(findRolloutById), HttpStatus.OK); + return new ResponseEntity<>(MgmtRolloutMapper.toResponseRollout(findRolloutById), HttpStatus.OK); } @Override - public ResponseEntity create(@RequestBody final RolloutRestRequestBody rolloutRequestBody) { + public ResponseEntity create(@RequestBody final MgmtRolloutRestRequestBody rolloutRequestBody) { // first check the given RSQL query if it's well formed, otherwise and // exception is thrown @@ -111,20 +112,20 @@ public class RolloutResource implements RolloutRestApi { RolloutGroupErrorAction errorAction = null; String errorActionExpr = null; if (rolloutRequestBody.getSuccessCondition() != null) { - successCondition = RolloutMapper + successCondition = MgmtRolloutMapper .mapFinishCondition(rolloutRequestBody.getSuccessCondition().getCondition()); successConditionExpr = rolloutRequestBody.getSuccessCondition().getExpression(); } if (rolloutRequestBody.getSuccessAction() != null) { - successAction = RolloutMapper.map(rolloutRequestBody.getSuccessAction().getAction()); + successAction = MgmtRolloutMapper.map(rolloutRequestBody.getSuccessAction().getAction()); successActionExpr = rolloutRequestBody.getSuccessAction().getExpression(); } if (rolloutRequestBody.getErrorCondition() != null) { - errorCondition = RolloutMapper.mapErrorCondition(rolloutRequestBody.getErrorCondition().getCondition()); + errorCondition = MgmtRolloutMapper.mapErrorCondition(rolloutRequestBody.getErrorCondition().getCondition()); errorConditionExpr = rolloutRequestBody.getErrorCondition().getExpression(); } if (rolloutRequestBody.getErrorAction() != null) { - errorAction = RolloutMapper.map(rolloutRequestBody.getErrorAction().getAction()); + errorAction = MgmtRolloutMapper.map(rolloutRequestBody.getErrorAction().getAction()); errorActionExpr = rolloutRequestBody.getErrorAction().getExpression(); } @@ -133,11 +134,11 @@ public class RolloutResource implements RolloutRestApi { .successAction(successAction, successActionExpr).errorCondition(errorCondition, errorConditionExpr) .errorAction(errorAction, errorActionExpr).build(); final Rollout rollout = this.rolloutManagement.createRollout( - RolloutMapper.fromRequest(rolloutRequestBody, distributionSet, + MgmtRolloutMapper.fromRequest(rolloutRequestBody, distributionSet, rolloutRequestBody.getTargetFilterQuery()), rolloutRequestBody.getAmountGroups(), rolloutGroupConditions); - return ResponseEntity.status(HttpStatus.CREATED).body(RolloutMapper.toResponseRollout(rollout)); + return ResponseEntity.status(HttpStatus.CREATED).body(MgmtRolloutMapper.toResponseRollout(rollout)); } @Override @@ -166,7 +167,7 @@ public class RolloutResource implements RolloutRestApi { } @Override - public ResponseEntity> getRolloutGroups(final Long rolloutId, + public ResponseEntity> getRolloutGroups(final Long rolloutId, final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { final Rollout rollout = findRolloutOrThrowException(rolloutId); @@ -184,20 +185,20 @@ public class RolloutResource implements RolloutRestApi { findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsByRolloutId(rolloutId, pageable); } - final List rest = RolloutMapper + final List rest = MgmtRolloutMapper .toResponseRolloutGroup(findRolloutGroupsAll.getContent()); return new ResponseEntity<>(new PagedList<>(rest, findRolloutGroupsAll.getTotalElements()), HttpStatus.OK); } @Override - public ResponseEntity getRolloutGroup(final Long rolloutId, final Long groupId) { + public ResponseEntity getRolloutGroup(final Long rolloutId, final Long groupId) { findRolloutOrThrowException(rolloutId); final RolloutGroup rolloutGroup = findRolloutGroupOrThrowException(groupId); - return ResponseEntity.ok(RolloutMapper.toResponseRolloutGroup(rolloutGroup)); + return ResponseEntity.ok(MgmtRolloutMapper.toResponseRolloutGroup(rolloutGroup)); } @Override - public ResponseEntity> getRolloutGroupTargets(final Long rolloutId, final Long groupId, + public ResponseEntity> getRolloutGroupTargets(final Long rolloutId, final Long groupId, final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { findRolloutOrThrowException(rolloutId); final RolloutGroup rolloutGroup = findRolloutGroupOrThrowException(groupId); @@ -218,8 +219,8 @@ public class RolloutResource implements RolloutRestApi { pageable); rolloutGroupTargets = pageTargets; } - final List rest = TargetMapper.toResponse(rolloutGroupTargets.getContent()); - return new ResponseEntity<>(new PagedList(rest, rolloutGroupTargets.getTotalElements()), + final List rest = MgmtTargetMapper.toResponse(rolloutGroupTargets.getContent()); + return new ResponseEntity<>(new PagedList(rest, rolloutGroupTargets.getTotalElements()), HttpStatus.OK); } @@ -239,7 +240,7 @@ public class RolloutResource implements RolloutRestApi { return rolloutGroup; } - private DistributionSet findDistributionSetOrThrowException(final RolloutRestRequestBody rolloutRequestBody) { + private DistributionSet findDistributionSetOrThrowException(final MgmtRolloutRestRequestBody rolloutRequestBody) { final DistributionSet ds = this.distributionSetManagement .findDistributionSetById(rolloutRequestBody.getDistributionSetId()); if (ds == null) { diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java similarity index 63% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java index 01dfae9cd..b31fe068a 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -14,6 +14,14 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; +import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifactHash; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPost; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestAPI; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Artifact; @@ -21,21 +29,14 @@ import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.rest.resource.api.SoftwareModuleRestAPI; -import org.eclipse.hawkbit.rest.resource.api.SoftwareModuleTypeRestApi; -import org.eclipse.hawkbit.rest.resource.model.MetadataRest; -import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactHash; -import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; /** * A mapper which maps repository model to RESTful model representation and * back. * */ -public final class SoftwareModuleMapper { - private SoftwareModuleMapper() { +public final class MgmtSoftwareModuleMapper { + private MgmtSoftwareModuleMapper() { // Utility class } @@ -51,7 +52,7 @@ public final class SoftwareModuleMapper { return smType; } - static SoftwareModule fromRequest(final SoftwareModuleRequestBodyPost smsRest, + static SoftwareModule fromRequest(final MgmtSoftwareModuleRequestBodyPost smsRest, final SoftwareManagement softwareManagement) { return new SoftwareModule(getSoftwareModuleTypeFromKeyString(smsRest.getType(), softwareManagement), smsRest.getName(), smsRest.getVersion(), smsRest.getDescription(), smsRest.getVendor()); @@ -69,10 +70,10 @@ public final class SoftwareModuleMapper { return mappedList; } - static List smFromRequest(final Iterable smsRest, + static List smFromRequest(final Iterable smsRest, final SoftwareManagement softwareManagement) { final List mappedList = new ArrayList<>(); - for (final SoftwareModuleRequestBodyPost smRest : smsRest) { + for (final MgmtSoftwareModuleRequestBodyPost smRest : smsRest) { mappedList.add(fromRequest(smRest, softwareManagement)); } return mappedList; @@ -85,11 +86,11 @@ public final class SoftwareModuleMapper { * the modules * @return the response */ - public static List toResponse(final List baseSoftareModules) { - final List mappedList = new ArrayList<>(); + public static List toResponse(final List baseSoftareModules) { + final List mappedList = new ArrayList<>(); if (baseSoftareModules != null) { for (final SoftwareModule target : baseSoftareModules) { - final SoftwareModuleRest response = toResponse(target); + final MgmtSoftwareModule response = toResponse(target); mappedList.add(response); } @@ -97,8 +98,8 @@ public final class SoftwareModuleMapper { return mappedList; } - static List toResponseSoftwareModules(final Iterable softwareModules) { - final List response = new ArrayList<>(); + static List toResponseSoftwareModules(final Iterable softwareModules) { + final List response = new ArrayList<>(); for (final SoftwareModule softwareModule : softwareModules) { response.add(toResponse(softwareModule)); } @@ -127,30 +128,30 @@ public final class SoftwareModuleMapper { * the sw module * @return the response */ - public static SoftwareModuleRest toResponse(final SoftwareModule baseSofwareModule) { + public static MgmtSoftwareModule toResponse(final SoftwareModule baseSofwareModule) { if (baseSofwareModule == null) { return null; } - final SoftwareModuleRest response = new SoftwareModuleRest(); - RestModelMapper.mapNamedToNamed(response, baseSofwareModule); + final MgmtSoftwareModule response = new MgmtSoftwareModule(); + MgmtRestModelMapper.mapNamedToNamed(response, baseSofwareModule); response.setModuleId(baseSofwareModule.getId()); response.setVersion(baseSofwareModule.getVersion()); response.setType(baseSofwareModule.getType().getKey()); response.setVendor(baseSofwareModule.getVendor()); - response.add(linkTo(methodOn(SoftwareModuleRestAPI.class).getArtifacts(response.getModuleId())) - .withRel(RestConstants.SOFTWAREMODULE_V1_ARTIFACT)); - response.add(linkTo(methodOn(SoftwareModuleRestAPI.class).getSoftwareModule(response.getModuleId())) + response.add(linkTo(methodOn(MgmtSoftwareModuleRestAPI.class).getArtifacts(response.getModuleId())) + .withRel(MgmtRestConstants.SOFTWAREMODULE_V1_ARTIFACT)); + response.add(linkTo(methodOn(MgmtSoftwareModuleRestAPI.class).getSoftwareModule(response.getModuleId())) .withRel("self")); response.add(linkTo( - methodOn(SoftwareModuleTypeRestApi.class).getSoftwareModuleType(baseSofwareModule.getType().getId())) - .withRel(RestConstants.SOFTWAREMODULE_V1_TYPE)); + methodOn(MgmtSoftwareModuleTypeRestApi.class).getSoftwareModuleType(baseSofwareModule.getType().getId())) + .withRel(MgmtRestConstants.SOFTWAREMODULE_V1_TYPE)); - response.add(linkTo(methodOn(SoftwareModuleResource.class).getMetadata(response.getModuleId(), - Integer.parseInt(RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET), - Integer.parseInt(RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT), null, null)) + response.add(linkTo(methodOn(MgmtSoftwareModuleResource.class).getMetadata(response.getModuleId(), + Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET), + Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT), null, null)) .withRel("metadata")); return response; } @@ -159,27 +160,27 @@ public final class SoftwareModuleMapper { * @param artifact * @return */ - static ArtifactRest toResponse(final Artifact artifact) { - final ArtifactRest.ArtifactType type = artifact instanceof LocalArtifact ? ArtifactRest.ArtifactType.LOCAL - : ArtifactRest.ArtifactType.EXTERNAL; + static MgmtArtifact toResponse(final Artifact artifact) { + final MgmtArtifact.ArtifactType type = artifact instanceof LocalArtifact ? MgmtArtifact.ArtifactType.LOCAL + : MgmtArtifact.ArtifactType.EXTERNAL; - final ArtifactRest artifactRest = new ArtifactRest(); + final MgmtArtifact artifactRest = new MgmtArtifact(); artifactRest.setType(type); artifactRest.setArtifactId(artifact.getId()); artifactRest.setSize(artifact.getSize()); - artifactRest.setHashes(new ArtifactHash(artifact.getSha1Hash(), artifact.getMd5Hash())); + artifactRest.setHashes(new MgmtArtifactHash(artifact.getSha1Hash(), artifact.getMd5Hash())); if (artifact instanceof LocalArtifact) { artifactRest.setProvidedFilename(((LocalArtifact) artifact).getFilename()); } - RestModelMapper.mapBaseToBase(artifactRest, artifact); + MgmtRestModelMapper.mapBaseToBase(artifactRest, artifact); - artifactRest.add(linkTo(methodOn(SoftwareModuleRestAPI.class).getArtifact(artifact.getSoftwareModule().getId(), + artifactRest.add(linkTo(methodOn(MgmtSoftwareModuleRestAPI.class).getArtifact(artifact.getSoftwareModule().getId(), artifact.getId())).withRel("self")); if (artifact instanceof LocalArtifact) { - artifactRest.add(linkTo(methodOn(DownloadArtifactResource.class) + artifactRest.add(linkTo(methodOn(MgmtDownloadArtifactResource.class) .downloadArtifact(artifact.getSoftwareModule().getId(), artifact.getId(), null, null)) .withRel("download")); } @@ -187,12 +188,12 @@ public final class SoftwareModuleMapper { return artifactRest; } - static List artifactsToResponse(final List artifacts) { - final List mappedList = new ArrayList<>(); + static List artifactsToResponse(final List artifacts) { + final List mappedList = new ArrayList<>(); if (artifacts != null) { for (final Artifact artifact : artifacts) { - final ArtifactRest response = toResponse(artifact); + final MgmtArtifact response = toResponse(artifact); mappedList.add(response); } } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java similarity index 71% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java index 830443cbd..f4135744b 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java @@ -6,12 +6,21 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.io.IOException; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPut; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestAPI; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SoftwareModuleFields; import org.eclipse.hawkbit.repository.SoftwareModuleMetadataFields; @@ -21,13 +30,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.rest.resource.api.SoftwareModuleRestAPI; -import org.eclipse.hawkbit.rest.resource.model.MetadataRest; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -49,8 +51,8 @@ import org.springframework.web.multipart.MultipartFile; * */ @RestController -public class SoftwareModuleResource implements SoftwareModuleRestAPI { - private static final Logger LOG = LoggerFactory.getLogger(SoftwareModuleResource.class); +public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestAPI { + private static final Logger LOG = LoggerFactory.getLogger(MgmtSoftwareModuleResource.class); @Autowired private ArtifactManagement artifactManagement; @@ -59,7 +61,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { private SoftwareManagement softwareManagement; @Override - public ResponseEntity uploadArtifact(@PathVariable final Long softwareModuleId, + public ResponseEntity uploadArtifact(@PathVariable final Long softwareModuleId, @RequestParam("file") final MultipartFile file, @RequestParam(value = "filename", required = false) final String optionalFileName, @RequestParam(value = "md5sum", required = false) final String md5Sum, @@ -85,23 +87,23 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } - return new ResponseEntity<>(SoftwareModuleMapper.toResponse(result), HttpStatus.CREATED); + return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponse(result), HttpStatus.CREATED); } @Override - public ResponseEntity> getArtifacts(@PathVariable final Long softwareModuleId) { + public ResponseEntity> getArtifacts(@PathVariable final Long softwareModuleId) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); - return new ResponseEntity<>(SoftwareModuleMapper.artifactsToResponse(module.getArtifacts()), HttpStatus.OK); + return new ResponseEntity<>(MgmtSoftwareModuleMapper.artifactsToResponse(module.getArtifacts()), HttpStatus.OK); } @Override - public ResponseEntity getArtifact(@PathVariable final Long softwareModuleId, + public ResponseEntity getArtifact(@PathVariable final Long softwareModuleId, @PathVariable final Long artifactId) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId); - return new ResponseEntity<>(SoftwareModuleMapper.toResponse(module.getLocalArtifact(artifactId).get()), + return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponse(module.getLocalArtifact(artifactId).get()), HttpStatus.OK); } @@ -117,11 +119,11 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { } @Override - public ResponseEntity> getSoftwareModules( - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam) { + public ResponseEntity> getSoftwareModules( + @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) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -140,32 +142,32 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { countModulesAll = softwareManagement.countSoftwareModulesAll(); } - final List rest = SoftwareModuleMapper.toResponse(findModulesAll.getContent()); + final List rest = MgmtSoftwareModuleMapper.toResponse(findModulesAll.getContent()); return new ResponseEntity<>(new PagedList<>(rest, countModulesAll), HttpStatus.OK); } @Override - public ResponseEntity getSoftwareModule(@PathVariable final Long softwareModuleId) { + public ResponseEntity getSoftwareModule(@PathVariable final Long softwareModuleId) { final SoftwareModule findBaseSoftareModule = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); - return new ResponseEntity<>(SoftwareModuleMapper.toResponse(findBaseSoftareModule), HttpStatus.OK); + return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponse(findBaseSoftareModule), HttpStatus.OK); } @Override - public ResponseEntity> createSoftwareModules( - @RequestBody final List softwareModules) { + public ResponseEntity> createSoftwareModules( + @RequestBody final List softwareModules) { LOG.debug("creating {} softwareModules", softwareModules.size()); final Iterable createdSoftwareModules = softwareManagement - .createSoftwareModule(SoftwareModuleMapper.smFromRequest(softwareModules, softwareManagement)); + .createSoftwareModule(MgmtSoftwareModuleMapper.smFromRequest(softwareModules, softwareManagement)); LOG.debug("{} softwareModules created, return status {}", softwareModules.size(), HttpStatus.CREATED); - return new ResponseEntity<>(SoftwareModuleMapper.toResponseSoftwareModules(createdSoftwareModules), + return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponseSoftwareModules(createdSoftwareModules), HttpStatus.CREATED); } @Override - public ResponseEntity updateSoftwareModule(@PathVariable final Long softwareModuleId, - @RequestBody final SoftwareModuleRequestBodyPut restSoftwareModule) { + public ResponseEntity updateSoftwareModule(@PathVariable final Long softwareModuleId, + @RequestBody final MgmtSoftwareModuleRequestBodyPut restSoftwareModule) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); // only description and vendor can be modified @@ -177,7 +179,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { } final SoftwareModule updateSoftwareModule = softwareManagement.updateSoftwareModule(module); - return new ResponseEntity<>(SoftwareModuleMapper.toResponse(updateSoftwareModule), HttpStatus.OK); + return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponse(updateSoftwareModule), HttpStatus.OK); } @Override @@ -191,10 +193,10 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { @Override public ResponseEntity> getMetadata(@PathVariable final Long softwareModuleId, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, - @RequestParam(value = RestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam) { + @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) { // check if software module exists otherwise throw exception immediately findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); @@ -214,7 +216,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { } return new ResponseEntity<>( - new PagedList<>(SoftwareModuleMapper.toResponseSwMetadata(metaDataPage.getContent()), + new PagedList<>(MgmtSoftwareModuleMapper.toResponseSwMetadata(metaDataPage.getContent()), metaDataPage.getTotalElements()), HttpStatus.OK); } @@ -226,7 +228,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { // immediately final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final SoftwareModuleMetadata findOne = softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(sw, metadataKey)); - return ResponseEntity. ok(SoftwareModuleMapper.toResponseSwMetadata(findOne)); + return ResponseEntity. ok(MgmtSoftwareModuleMapper.toResponseSwMetadata(findOne)); } @Override @@ -236,7 +238,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final SoftwareModuleMetadata updated = softwareManagement .updateSoftwareModuleMetadata(new SoftwareModuleMetadata(metadataKey, sw, metadata.getValue())); - return ResponseEntity.ok(SoftwareModuleMapper.toResponseSwMetadata(updated)); + return ResponseEntity.ok(MgmtSoftwareModuleMapper.toResponseSwMetadata(updated)); } @Override @@ -255,9 +257,9 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final List created = softwareManagement - .createSoftwareModuleMetadata(SoftwareModuleMapper.fromRequestSwMetadata(sw, metadataRest)); + .createSoftwareModuleMetadata(MgmtSoftwareModuleMapper.fromRequestSwMetadata(sw, metadataRest)); - return new ResponseEntity<>(SoftwareModuleMapper.toResponseSwMetadata(created), HttpStatus.CREATED); + return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponseSwMetadata(created), HttpStatus.CREATED); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java similarity index 62% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java index b6525948c..5b16436a9 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -15,10 +15,10 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.rest.resource.api.SoftwareModuleTypeRestApi; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; /** * A mapper which maps repository model to RESTful model representation and @@ -28,52 +28,52 @@ import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModule * * */ -final class SoftwareModuleTypeMapper { +final class MgmtSoftwareModuleTypeMapper { // private constructor, utility class - private SoftwareModuleTypeMapper() { + private MgmtSoftwareModuleTypeMapper() { } - static List smFromRequest(final Iterable smTypesRest) { + static List smFromRequest(final Iterable smTypesRest) { final List mappedList = new ArrayList<>(); - for (final SoftwareModuleTypeRequestBodyPost smRest : smTypesRest) { + for (final MgmtSoftwareModuleTypeRequestBodyPost smRest : smTypesRest) { mappedList.add(fromRequest(smRest)); } return mappedList; } - static SoftwareModuleType fromRequest(final SoftwareModuleTypeRequestBodyPost smsRest) { + static SoftwareModuleType fromRequest(final MgmtSoftwareModuleTypeRequestBodyPost smsRest) { return new SoftwareModuleType(smsRest.getKey(), smsRest.getName(), smsRest.getDescription(), smsRest.getMaxAssignments()); } - static List toTypesResponse(final List types) { - final List response = new ArrayList<>(); + static List toTypesResponse(final List types) { + final List response = new ArrayList<>(); for (final SoftwareModuleType softwareModule : types) { response.add(toResponse(softwareModule)); } return response; } - static List toListResponse(final Collection types) { - final List response = new ArrayList<>(); + static List toListResponse(final Collection types) { + final List response = new ArrayList<>(); for (final SoftwareModuleType softwareModule : types) { response.add(toResponse(softwareModule)); } return response; } - static SoftwareModuleTypeRest toResponse(final SoftwareModuleType type) { - final SoftwareModuleTypeRest result = new SoftwareModuleTypeRest(); + static MgmtSoftwareModuleType toResponse(final SoftwareModuleType type) { + final MgmtSoftwareModuleType result = new MgmtSoftwareModuleType(); - RestModelMapper.mapNamedToNamed(result, type); + MgmtRestModelMapper.mapNamedToNamed(result, type); result.setKey(type.getKey()); result.setMaxAssignments(type.getMaxAssignments()); result.setModuleId(type.getId()); - result.add(linkTo(methodOn(SoftwareModuleTypeRestApi.class).getSoftwareModuleType(result.getModuleId())) + result.add(linkTo(methodOn(MgmtSoftwareModuleTypeRestApi.class).getSoftwareModuleType(result.getModuleId())) .withRel("self")); return result; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java similarity index 73% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java index e3498f141..ab23046b3 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java @@ -6,10 +6,16 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPost; +import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPut; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SoftwareModuleTypeFields; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -17,11 +23,6 @@ import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.rest.resource.api.SoftwareModuleTypeRestApi; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRequestBodyPost; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -37,12 +38,12 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController -public class SoftwareModuleTypeResource implements SoftwareModuleTypeRestApi { +public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRestApi { @Autowired private SoftwareManagement softwareManagement; @Override - public ResponseEntity> getTypes(final int pagingOffsetParam, + public ResponseEntity> getTypes(final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); @@ -62,16 +63,16 @@ public class SoftwareModuleTypeResource implements SoftwareModuleTypeRestApi { countModulesAll = this.softwareManagement.countSoftwareModuleTypesAll(); } - final List rest = SoftwareModuleTypeMapper + final List rest = MgmtSoftwareModuleTypeMapper .toListResponse(findModuleTypessAll.getContent()); return new ResponseEntity<>(new PagedList<>(rest, countModulesAll), HttpStatus.OK); } @Override - public ResponseEntity getSoftwareModuleType(final Long softwareModuleTypeId) { + public ResponseEntity getSoftwareModuleType(final Long softwareModuleTypeId) { final SoftwareModuleType foundType = findSoftwareModuleTypeWithExceptionIfNotFound(softwareModuleTypeId); - return new ResponseEntity<>(SoftwareModuleTypeMapper.toResponse(foundType), HttpStatus.OK); + return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toResponse(foundType), HttpStatus.OK); } @Override @@ -84,8 +85,8 @@ public class SoftwareModuleTypeResource implements SoftwareModuleTypeRestApi { } @Override - public ResponseEntity updateSoftwareModuleType(final Long softwareModuleTypeId, - final SoftwareModuleTypeRequestBodyPut restSoftwareModuleType) { + public ResponseEntity updateSoftwareModuleType(final Long softwareModuleTypeId, + final MgmtSoftwareModuleTypeRequestBodyPut restSoftwareModuleType) { final SoftwareModuleType type = findSoftwareModuleTypeWithExceptionIfNotFound(softwareModuleTypeId); // only description can be modified @@ -94,17 +95,17 @@ public class SoftwareModuleTypeResource implements SoftwareModuleTypeRestApi { } final SoftwareModuleType updatedSoftwareModuleType = this.softwareManagement.updateSoftwareModuleType(type); - return new ResponseEntity<>(SoftwareModuleTypeMapper.toResponse(updatedSoftwareModuleType), HttpStatus.OK); + return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toResponse(updatedSoftwareModuleType), HttpStatus.OK); } @Override - public ResponseEntity> createSoftwareModuleTypes( - final List softwareModuleTypes) { + public ResponseEntity> createSoftwareModuleTypes( + final List softwareModuleTypes) { final List createdSoftwareModules = this.softwareManagement - .createSoftwareModuleType(SoftwareModuleTypeMapper.smFromRequest(softwareModuleTypes)); + .createSoftwareModuleType(MgmtSoftwareModuleTypeMapper.smFromRequest(softwareModuleTypes)); - return new ResponseEntity<>(SoftwareModuleTypeMapper.toTypesResponse(createdSoftwareModules), + return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toTypesResponse(createdSoftwareModules), HttpStatus.CREATED); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TagMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java similarity index 61% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TagMapper.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java index f9f0caba0..3ab2016ec 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TagMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -14,111 +14,111 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTag; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetTagRestApi; -import org.eclipse.hawkbit.rest.resource.api.TargetTagRestApi; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRest; /** * A mapper which maps repository model to RESTful model representation and * back. * */ -final class TagMapper { - private TagMapper() { +final class MgmtTagMapper { + private MgmtTagMapper() { // Utility class } - static List toResponse(final List targetTags) { - final List tagsRest = new ArrayList<>(); + static List toResponse(final List targetTags) { + final List tagsRest = new ArrayList<>(); if (targetTags == null) { return tagsRest; } for (final TargetTag target : targetTags) { - final TagRest response = toResponse(target); + final MgmtTag response = toResponse(target); tagsRest.add(response); } return tagsRest; } - static TagRest toResponse(final TargetTag targetTag) { - final TagRest response = new TagRest(); + static MgmtTag toResponse(final TargetTag targetTag) { + final MgmtTag response = new MgmtTag(); if (targetTag == null) { return response; } mapTag(response, targetTag); - response.add(linkTo(methodOn(TargetTagRestApi.class).getTargetTag(targetTag.getId())).withRel("self")); + response.add(linkTo(methodOn(MgmtTargetTagRestApi.class).getTargetTag(targetTag.getId())).withRel("self")); - response.add(linkTo(methodOn(TargetTagRestApi.class).getAssignedTargets(targetTag.getId())) + response.add(linkTo(methodOn(MgmtTargetTagRestApi.class).getAssignedTargets(targetTag.getId())) .withRel("assignedTargets")); return response; } - static List toResponseDistributionSetTag(final List distributionSetTags) { - final List tagsRest = new ArrayList<>(); + static List toResponseDistributionSetTag(final List distributionSetTags) { + final List tagsRest = new ArrayList<>(); if (distributionSetTags == null) { return tagsRest; } for (final DistributionSetTag distributionSetTag : distributionSetTags) { - final TagRest response = toResponse(distributionSetTag); + final MgmtTag response = toResponse(distributionSetTag); tagsRest.add(response); } return tagsRest; } - static TagRest toResponse(final DistributionSetTag distributionSetTag) { - final TagRest response = new TagRest(); + static MgmtTag toResponse(final DistributionSetTag distributionSetTag) { + final MgmtTag response = new MgmtTag(); if (distributionSetTag == null) { return null; } mapTag(response, distributionSetTag); - response.add(linkTo(methodOn(DistributionSetTagRestApi.class).getDistributionSetTag(distributionSetTag.getId())) + response.add(linkTo(methodOn(MgmtDistributionSetTagRestApi.class).getDistributionSetTag(distributionSetTag.getId())) .withRel("self")); response.add(linkTo( - methodOn(DistributionSetTagRestApi.class).getAssignedDistributionSets(distributionSetTag.getId())) + methodOn(MgmtDistributionSetTagRestApi.class).getAssignedDistributionSets(distributionSetTag.getId())) .withRel("assignedDistributionSets")); return response; } - static List mapTargeTagFromRequest(final Iterable tags) { + static List mapTargeTagFromRequest(final Iterable tags) { final List mappedList = new ArrayList<>(); - for (final TagRequestBodyPut targetTagRest : tags) { + for (final MgmtTagRequestBodyPut targetTagRest : tags) { mappedList.add( new TargetTag(targetTagRest.getName(), targetTagRest.getDescription(), targetTagRest.getColour())); } return mappedList; } - static List mapDistributionSetTagFromRequest(final Iterable tags) { + static List mapDistributionSetTagFromRequest(final Iterable tags) { final List mappedList = new ArrayList<>(); - for (final TagRequestBodyPut targetTagRest : tags) { + for (final MgmtTagRequestBodyPut targetTagRest : tags) { mappedList.add(new DistributionSetTag(targetTagRest.getName(), targetTagRest.getDescription(), targetTagRest.getColour())); } return mappedList; } - private static void mapTag(final TagRest response, final Tag tag) { - RestModelMapper.mapNamedToNamed(response, tag); + private static void mapTag(final MgmtTag response, final Tag tag) { + MgmtRestModelMapper.mapNamedToNamed(response, tag); response.setTagId(tag.getId()); response.setColour(tag.getColour()); } - static void updateTag(final TagRequestBodyPut response, final Tag tag) { + static void updateTag(final MgmtTagRequestBodyPut response, final Tag tag) { if (response.getDescription() != null) { tag.setDescription(response.getDescription()); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java similarity index 65% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java index c8a39a2f3..afb941bc1 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -17,27 +17,29 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import org.eclipse.hawkbit.mgmt.json.model.MgmtPollStatus; +import org.eclipse.hawkbit.mgmt.json.model.action.MgmtAction; +import org.eclipse.hawkbit.mgmt.json.model.action.MgmtActionStatus; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTargetRequestBody; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetRestApi; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo.PollStatus; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.rest.resource.api.TargetRestApi; -import org.eclipse.hawkbit.rest.resource.model.PollStatusRest; -import org.eclipse.hawkbit.rest.resource.model.action.ActionRest; -import org.eclipse.hawkbit.rest.resource.model.action.ActionStatusRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRequestBody; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; +import org.eclipse.hawkbit.rest.data.SortDirection; /** * A mapper which maps repository model to RESTful model representation and * back. * */ -public final class TargetMapper { +public final class MgmtTargetMapper { - private TargetMapper() { + private MgmtTargetMapper() { // Utility class } @@ -47,17 +49,17 @@ public final class TargetMapper { * @param response * the target response */ - public static void addTargetLinks(final TargetRest response) { - response.add(linkTo(methodOn(TargetRestApi.class).getAssignedDistributionSet(response.getControllerId())) - .withRel(RestConstants.TARGET_V1_ASSIGNED_DISTRIBUTION_SET)); - response.add(linkTo(methodOn(TargetRestApi.class).getInstalledDistributionSet(response.getControllerId())) - .withRel(RestConstants.TARGET_V1_INSTALLED_DISTRIBUTION_SET)); - response.add(linkTo(methodOn(TargetRestApi.class).getAttributes(response.getControllerId())) - .withRel(RestConstants.TARGET_V1_ATTRIBUTES)); - response.add(linkTo(methodOn(TargetRestApi.class).getActionHistory(response.getControllerId(), 0, - RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, + public static void addTargetLinks(final MgmtTarget response) { + response.add(linkTo(methodOn(MgmtTargetRestApi.class).getAssignedDistributionSet(response.getControllerId())) + .withRel(MgmtRestConstants.TARGET_V1_ASSIGNED_DISTRIBUTION_SET)); + response.add(linkTo(methodOn(MgmtTargetRestApi.class).getInstalledDistributionSet(response.getControllerId())) + .withRel(MgmtRestConstants.TARGET_V1_INSTALLED_DISTRIBUTION_SET)); + response.add(linkTo(methodOn(MgmtTargetRestApi.class).getAttributes(response.getControllerId())) + .withRel(MgmtRestConstants.TARGET_V1_ATTRIBUTES)); + response.add(linkTo(methodOn(MgmtTargetRestApi.class).getActionHistory(response.getControllerId(), 0, + MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, ActionFields.ID.getFieldName() + ":" + SortDirection.DESC, null)) - .withRel(RestConstants.TARGET_V1_ACTIONS)); + .withRel(MgmtRestConstants.TARGET_V1_ACTIONS)); } /** @@ -68,10 +70,10 @@ public final class TargetMapper { * @param targetRest * the response */ - public static void addPollStatus(final Target target, final TargetRest targetRest) { + public static void addPollStatus(final Target target, final MgmtTarget targetRest) { final PollStatus pollStatus = target.getTargetInfo().getPollStatus(); if (pollStatus != null) { - final PollStatusRest pollStatusRest = new PollStatusRest(); + final MgmtPollStatus pollStatusRest = new MgmtPollStatus(); pollStatusRest.setLastRequestAt( Date.from(pollStatus.getLastPollDate().atZone(ZoneId.systemDefault()).toInstant()).getTime()); pollStatusRest.setNextExpectedRequestAt( @@ -88,11 +90,11 @@ public final class TargetMapper { * the targets * @return the response */ - public static List toResponseWithLinksAndPollStatus(final Iterable targets) { - final List mappedList = new ArrayList<>(); + public static List toResponseWithLinksAndPollStatus(final Iterable targets) { + final List mappedList = new ArrayList<>(); if (targets != null) { for (final Target target : targets) { - final TargetRest response = toResponse(target); + final MgmtTarget response = toResponse(target); addPollStatus(target, response); addTargetLinks(response); mappedList.add(response); @@ -108,11 +110,11 @@ public final class TargetMapper { * list of targets * @return the response */ - public static List toResponse(final Iterable targets) { - final List mappedList = new ArrayList<>(); + public static List toResponse(final Iterable targets) { + final List mappedList = new ArrayList<>(); if (targets != null) { for (final Target target : targets) { - final TargetRest response = toResponse(target); + final MgmtTarget response = toResponse(target); mappedList.add(response); } } @@ -126,11 +128,11 @@ public final class TargetMapper { * the target * @return the response */ - public static TargetRest toResponse(final Target target) { + public static MgmtTarget toResponse(final Target target) { if (target == null) { return null; } - final TargetRest targetRest = new TargetRest(); + final MgmtTarget targetRest = new MgmtTarget(); targetRest.setControllerId(target.getControllerId()); targetRest.setDescription(target.getDescription()); targetRest.setName(target.getName()); @@ -161,32 +163,32 @@ public final class TargetMapper { targetRest.setInstalledAt(installationDate); } - targetRest.add(linkTo(methodOn(TargetRestApi.class).getTarget(target.getControllerId())).withRel("self")); + targetRest.add(linkTo(methodOn(MgmtTargetRestApi.class).getTarget(target.getControllerId())).withRel("self")); return targetRest; } - static List fromRequest(final Iterable targetsRest) { + static List fromRequest(final Iterable targetsRest) { final List mappedList = new ArrayList<>(); - for (final TargetRequestBody targetRest : targetsRest) { + for (final MgmtTargetRequestBody targetRest : targetsRest) { mappedList.add(fromRequest(targetRest)); } return mappedList; } - static Target fromRequest(final TargetRequestBody targetRest) { + static Target fromRequest(final MgmtTargetRequestBody targetRest) { final Target target = new Target(targetRest.getControllerId()); target.setDescription(targetRest.getDescription()); target.setName(targetRest.getName()); return target; } - static List toActionStatusRestResponse(final List actionStatus) { - final List mappedList = new ArrayList<>(); + static List toActionStatusRestResponse(final List actionStatus) { + final List mappedList = new ArrayList<>(); if (actionStatus != null) { for (final ActionStatus status : actionStatus) { - final ActionStatusRest response = toResponse(status); + final MgmtActionStatus response = toResponse(status); mappedList.add(response); } } @@ -194,30 +196,30 @@ public final class TargetMapper { return mappedList; } - static ActionRest toResponse(final String targetId, final Action action, final boolean isActive) { - final ActionRest result = new ActionRest(); + static MgmtAction toResponse(final String targetId, final Action action, final boolean isActive) { + final MgmtAction result = new MgmtAction(); result.setActionId(action.getId()); result.setType(getType(action)); if (isActive) { - result.setStatus(ActionRest.ACTION_PENDING); + result.setStatus(MgmtAction.ACTION_PENDING); } else { - result.setStatus(ActionRest.ACTION_FINISHED); + result.setStatus(MgmtAction.ACTION_FINISHED); } - RestModelMapper.mapBaseToBase(result, action); + MgmtRestModelMapper.mapBaseToBase(result, action); - result.add(linkTo(methodOn(TargetRestApi.class).getAction(targetId, action.getId())).withRel("self")); + result.add(linkTo(methodOn(MgmtTargetRestApi.class).getAction(targetId, action.getId())).withRel("self")); return result; } - static List toResponse(final String targetId, final List actions) { - final List mappedList = new ArrayList<>(); + static List toResponse(final String targetId, final List actions) { + final List mappedList = new ArrayList<>(); for (final Action action : actions) { - final ActionRest response = toResponse(targetId, action, action.isActive()); + final MgmtAction response = toResponse(targetId, action, action.isActive()); mappedList.add(response); } return mappedList; @@ -228,22 +230,22 @@ public final class TargetMapper { switch (type) { case CANCELED: - result = ActionStatusRest.AS_CANCELED; + result = MgmtActionStatus.AS_CANCELED; break; case ERROR: - result = ActionStatusRest.AS_ERROR; + result = MgmtActionStatus.AS_ERROR; break; case FINISHED: - result = ActionStatusRest.AS_FINISHED; + result = MgmtActionStatus.AS_FINISHED; break; case RETRIEVED: - result = ActionStatusRest.AS_RETRIEVED; + result = MgmtActionStatus.AS_RETRIEVED; break; case RUNNING: - result = ActionStatusRest.AS_RUNNING; + result = MgmtActionStatus.AS_RUNNING; break; case WARNING: - result = ActionStatusRest.AS_WARNING; + result = MgmtActionStatus.AS_WARNING; break; default: return type.name().toLowerCase(); @@ -256,9 +258,9 @@ public final class TargetMapper { private static String getType(final Action action) { if (!action.isCancelingOrCanceled()) { - return ActionRest.ACTION_UPDATE; + return MgmtAction.ACTION_UPDATE; } else if (action.isCancelingOrCanceled()) { - return ActionRest.ACTION_CANCEL; + return MgmtAction.ACTION_CANCEL; } return null; @@ -290,8 +292,8 @@ public final class TargetMapper { return result; } - private static ActionStatusRest toResponse(final ActionStatus actionStatus) { - final ActionStatusRest result = new ActionStatusRest(); + private static MgmtActionStatus toResponse(final ActionStatus actionStatus) { + final MgmtActionStatus result = new MgmtActionStatus(); result.setMessages(actionStatus.getMessages()); result.setReportedAt(actionStatus.getCreatedAt()); diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java similarity index 73% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java index 4b068a41e..449c57362 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -15,9 +15,21 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.action.MgmtAction; +import org.eclipse.hawkbit.mgmt.json.model.action.MgmtActionStatus; +import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtDistributionSetAssigment; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTargetAttributes; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTargetRequestBody; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetRestApi; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.DeploymentManagement; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -26,17 +38,7 @@ import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.rest.resource.api.DistributionSetRestApi; -import org.eclipse.hawkbit.rest.resource.api.TargetRestApi; -import org.eclipse.hawkbit.rest.resource.helper.RestResourceConversionHelper; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.action.ActionRest; -import org.eclipse.hawkbit.rest.resource.model.action.ActionStatusRest; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; -import org.eclipse.hawkbit.rest.resource.model.target.DistributionSetAssigmentRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetAttributes; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRequestBody; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; +import org.eclipse.hawkbit.rest.data.SortDirection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -54,8 +56,8 @@ import org.springframework.web.bind.annotation.RestController; * REST Resource handling target CRUD operations. */ @RestController -public class TargetResource implements TargetRestApi { - private static final Logger LOG = LoggerFactory.getLogger(TargetResource.class); +public class MgmtTargetResource implements MgmtTargetRestApi { + private static final Logger LOG = LoggerFactory.getLogger(MgmtTargetResource.class); @Autowired private TargetManagement targetManagement; @@ -64,18 +66,18 @@ public class TargetResource implements TargetRestApi { private DeploymentManagement deploymentManagement; @Override - public ResponseEntity getTarget(final String targetId) { + public ResponseEntity getTarget(final String targetId) { final Target findTarget = findTargetWithExceptionIfNotFound(targetId); // to single response include poll status - final TargetRest response = TargetMapper.toResponse(findTarget); - TargetMapper.addPollStatus(findTarget, response); - TargetMapper.addTargetLinks(response); + final MgmtTarget response = MgmtTargetMapper.toResponse(findTarget); + MgmtTargetMapper.addPollStatus(findTarget, response); + MgmtTargetMapper.addTargetLinks(response); return new ResponseEntity<>(response, HttpStatus.OK); } @Override - public ResponseEntity> getTargets(final int pagingOffsetParam, final int pagingLimitParam, + public ResponseEntity> getTargets(final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); @@ -95,20 +97,21 @@ public class TargetResource implements TargetRestApi { countTargetsAll = this.targetManagement.countTargetsAll(); } - final List rest = TargetMapper.toResponse(findTargetsAll.getContent()); - return new ResponseEntity<>(new PagedList(rest, countTargetsAll), HttpStatus.OK); + final List rest = MgmtTargetMapper.toResponse(findTargetsAll.getContent()); + return new ResponseEntity<>(new PagedList(rest, countTargetsAll), HttpStatus.OK); } @Override - public ResponseEntity> createTargets(final List targets) { + public ResponseEntity> createTargets(final List targets) { LOG.debug("creating {} targets", targets.size()); - final Iterable createdTargets = this.targetManagement.createTargets(TargetMapper.fromRequest(targets)); + final Iterable createdTargets = this.targetManagement + .createTargets(MgmtTargetMapper.fromRequest(targets)); LOG.debug("{} targets created, return status {}", targets.size(), HttpStatus.CREATED); - return new ResponseEntity<>(TargetMapper.toResponse(createdTargets), HttpStatus.CREATED); + return new ResponseEntity<>(MgmtTargetMapper.toResponse(createdTargets), HttpStatus.CREATED); } @Override - public ResponseEntity updateTarget(final String targetId, final TargetRequestBody targetRest) { + public ResponseEntity updateTarget(final String targetId, final MgmtTargetRequestBody targetRest) { final Target existingTarget = findTargetWithExceptionIfNotFound(targetId); LOG.debug("updating target {}", existingTarget.getId()); if (targetRest.getDescription() != null) { @@ -119,7 +122,7 @@ public class TargetResource implements TargetRestApi { } final Target updateTarget = this.targetManagement.updateTarget(existingTarget); - return new ResponseEntity<>(TargetMapper.toResponse(updateTarget), HttpStatus.OK); + return new ResponseEntity<>(MgmtTargetMapper.toResponse(updateTarget), HttpStatus.OK); } @Override @@ -131,21 +134,21 @@ public class TargetResource implements TargetRestApi { } @Override - public ResponseEntity getAttributes(final String targetId) { + public ResponseEntity getAttributes(final String targetId) { final Target foundTarget = findTargetWithExceptionIfNotFound(targetId); final Map controllerAttributes = foundTarget.getTargetInfo().getControllerAttributes(); if (controllerAttributes.isEmpty()) { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - final TargetAttributes result = new TargetAttributes(); + final MgmtTargetAttributes result = new MgmtTargetAttributes(); result.putAll(controllerAttributes); return new ResponseEntity<>(result, HttpStatus.OK); } @Override - public ResponseEntity> getActionHistory(final String targetId, final int pagingOffsetParam, + public ResponseEntity> getActionHistory(final String targetId, final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { final Target foundTarget = findTargetWithExceptionIfNotFound(targetId); @@ -167,12 +170,12 @@ public class TargetResource implements TargetRestApi { } return new ResponseEntity<>( - new PagedList<>(TargetMapper.toResponse(targetId, activeActions.getContent()), totalActionCount), + new PagedList<>(MgmtTargetMapper.toResponse(targetId, activeActions.getContent()), totalActionCount), HttpStatus.OK); } @Override - public ResponseEntity getAction(final String targetId, final Long actionId) { + public ResponseEntity getAction(final String targetId, final Long actionId) { final Target target = findTargetWithExceptionIfNotFound(targetId); final Action action = findActionWithExceptionIfNotFound(actionId); @@ -181,21 +184,21 @@ public class TargetResource implements TargetRestApi { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } - final ActionRest result = TargetMapper.toResponse(targetId, action, action.isActive()); + final MgmtAction result = MgmtTargetMapper.toResponse(targetId, action, action.isActive()); if (!action.isCancelingOrCanceled()) { result.add(linkTo( - methodOn(DistributionSetRestApi.class).getDistributionSet(action.getDistributionSet().getId())) + methodOn(MgmtDistributionSetRestApi.class).getDistributionSet(action.getDistributionSet().getId())) .withRel("distributionset")); } else if (action.isCancelingOrCanceled()) { - result.add(linkTo(methodOn(TargetRestApi.class).getAction(targetId, action.getId())) - .withRel(RestConstants.TARGET_V1_CANCELED_ACTION)); + result.add(linkTo(methodOn(MgmtTargetRestApi.class).getAction(targetId, action.getId())) + .withRel(MgmtRestConstants.TARGET_V1_CANCELED_ACTION)); } - result.add(linkTo(methodOn(TargetRestApi.class).getActionStatusList(targetId, action.getId(), 0, - RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, + result.add(linkTo(methodOn(MgmtTargetRestApi.class).getActionStatusList(targetId, action.getId(), 0, + MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, ActionStatusFields.ID.getFieldName() + ":" + SortDirection.DESC)) - .withRel(RestConstants.TARGET_V1_ACTION_STATUS)); + .withRel(MgmtRestConstants.TARGET_V1_ACTION_STATUS)); return new ResponseEntity<>(result, HttpStatus.OK); } @@ -212,13 +215,13 @@ public class TargetResource implements TargetRestApi { this.deploymentManagement.cancelAction(action, target); } // both functions will throw an exception, when action is in wrong - // state, which is mapped by ResponseExceptionHandler. + // state, which is mapped by MgmtResponseExceptionHandler. return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Override - public ResponseEntity> getActionStatusList(final String targetId, final Long actionId, + public ResponseEntity> getActionStatusList(final String targetId, final Long actionId, final int pagingOffsetParam, final int pagingLimitParam, final String sortParam) { final Target target = findTargetWithExceptionIfNotFound(targetId); @@ -236,15 +239,17 @@ public class TargetResource implements TargetRestApi { final Page statusList = this.deploymentManagement.findActionStatusByAction( new OffsetBasedPageRequest(sanitizedOffsetParam, sanitizedLimitParam, sorting), action, true); - return new ResponseEntity<>(new PagedList<>(TargetMapper.toActionStatusRestResponse(statusList.getContent()), - statusList.getTotalElements()), HttpStatus.OK); + return new ResponseEntity<>( + new PagedList<>(MgmtTargetMapper.toActionStatusRestResponse(statusList.getContent()), + statusList.getTotalElements()), + HttpStatus.OK); } @Override - public ResponseEntity getAssignedDistributionSet(final String targetId) { + public ResponseEntity getAssignedDistributionSet(final String targetId) { final Target findTarget = findTargetWithExceptionIfNotFound(targetId); - final DistributionSetRest distributionSetRest = DistributionSetMapper + final MgmtDistributionSet distributionSetRest = MgmtDistributionSetMapper .toResponse(findTarget.getAssignedDistributionSet()); final HttpStatus retStatus; if (distributionSetRest == null) { @@ -257,11 +262,11 @@ public class TargetResource implements TargetRestApi { @Override public ResponseEntity postAssignedDistributionSet(final String targetId, - final DistributionSetAssigmentRest dsId) { + final MgmtDistributionSetAssigment dsId) { findTargetWithExceptionIfNotFound(targetId); - final ActionType type = (dsId.getType() != null) - ? RestResourceConversionHelper.convertActionType(dsId.getType()) : ActionType.FORCED; + final ActionType type = (dsId.getType() != null) ? MgmtRestModelMapper.convertActionType(dsId.getType()) + : ActionType.FORCED; final Iterator changed = this.deploymentManagement .assignDistributionSet(dsId.getId(), type, dsId.getForcetime(), targetId).getAssignedEntity() .iterator(); @@ -276,9 +281,9 @@ public class TargetResource implements TargetRestApi { } @Override - public ResponseEntity getInstalledDistributionSet(final String targetId) { + public ResponseEntity getInstalledDistributionSet(final String targetId) { final Target findTarget = findTargetWithExceptionIfNotFound(targetId); - final DistributionSetRest distributionSetRest = DistributionSetMapper + final MgmtDistributionSet distributionSetRest = MgmtDistributionSetMapper .toResponse(findTarget.getTargetInfo().getInstalledDistributionSet()); final HttpStatus retStatus; if (distributionSetRest == null) { diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java similarity index 69% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java index 1a9155828..d98518208 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java @@ -6,11 +6,19 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.util.List; import java.util.stream.Collectors; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtAssignedTargetRequestBody; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTag; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; +import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTargetTagAssigmentResult; +import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TagFields; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; @@ -19,13 +27,6 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.rest.resource.api.TargetTagRestApi; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.tag.AssignedTargetRequestBody; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRequestBodyPut; -import org.eclipse.hawkbit.rest.resource.model.tag.TagRest; -import org.eclipse.hawkbit.rest.resource.model.tag.TargetTagAssigmentResultRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -43,8 +44,8 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController -public class TargetTagResource implements TargetTagRestApi { - private static final Logger LOG = LoggerFactory.getLogger(TargetTagResource.class); +public class MgmtTargetTagResource implements MgmtTargetTagRestApi { + private static final Logger LOG = LoggerFactory.getLogger(MgmtTargetTagResource.class); @Autowired private TagManagement tagManagement; @@ -53,7 +54,7 @@ public class TargetTagResource implements TargetTagRestApi { private TargetManagement targetManagement; @Override - public ResponseEntity> getTargetTags(final int pagingOffsetParam, final int pagingLimitParam, + public ResponseEntity> getTargetTags(final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); @@ -75,35 +76,35 @@ public class TargetTagResource implements TargetTagRestApi { } - final List rest = TagMapper.toResponse(findTargetsAll.getContent()); + final List rest = MgmtTagMapper.toResponse(findTargetsAll.getContent()); return new ResponseEntity<>(new PagedList<>(rest, countTargetsAll), HttpStatus.OK); } @Override - public ResponseEntity getTargetTag(final Long targetTagId) { + public ResponseEntity getTargetTag(final Long targetTagId) { final TargetTag tag = findTargetTagById(targetTagId); - return new ResponseEntity<>(TagMapper.toResponse(tag), HttpStatus.OK); + return new ResponseEntity<>(MgmtTagMapper.toResponse(tag), HttpStatus.OK); } @Override - public ResponseEntity> createTargetTags(@RequestBody final List tags) { + public ResponseEntity> createTargetTags(@RequestBody final List tags) { LOG.debug("creating {} target tags", tags.size()); final List createdTargetTags = this.tagManagement - .createTargetTags(TagMapper.mapTargeTagFromRequest(tags)); - return new ResponseEntity<>(TagMapper.toResponse(createdTargetTags), HttpStatus.CREATED); + .createTargetTags(MgmtTagMapper.mapTargeTagFromRequest(tags)); + return new ResponseEntity<>(MgmtTagMapper.toResponse(createdTargetTags), HttpStatus.CREATED); } @Override - public ResponseEntity updateTagretTag(final Long targetTagId, final TagRequestBodyPut restTargetTagRest) { + public ResponseEntity updateTagretTag(final Long targetTagId, final MgmtTagRequestBodyPut restTargetTagRest) { LOG.debug("update {} target tag", restTargetTagRest); final TargetTag targetTag = findTargetTagById(targetTagId); - TagMapper.updateTag(restTargetTagRest, targetTag); + MgmtTagMapper.updateTag(restTargetTagRest, targetTag); final TargetTag updateTargetTag = this.tagManagement.updateTargetTag(targetTag); LOG.debug("target tag updated"); - return new ResponseEntity<>(TagMapper.toResponse(updateTargetTag), HttpStatus.OK); + return new ResponseEntity<>(MgmtTagMapper.toResponse(updateTargetTag), HttpStatus.OK); } @Override @@ -117,35 +118,35 @@ public class TargetTagResource implements TargetTagRestApi { } @Override - public ResponseEntity> getAssignedTargets(final Long targetTagId) { + public ResponseEntity> getAssignedTargets(final Long targetTagId) { final TargetTag targetTag = findTargetTagById(targetTagId); - return new ResponseEntity<>(TargetMapper.toResponseWithLinksAndPollStatus(targetTag.getAssignedToTargets()), + return new ResponseEntity<>(MgmtTargetMapper.toResponseWithLinksAndPollStatus(targetTag.getAssignedToTargets()), HttpStatus.OK); } @Override - public ResponseEntity toggleTagAssignment(final Long targetTagId, - final List assignedTargetRequestBodies) { + public ResponseEntity toggleTagAssignment(final Long targetTagId, + final List assignedTargetRequestBodies) { LOG.debug("Toggle Target assignment {} for target tag {}", assignedTargetRequestBodies.size(), targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); final TargetTagAssignmentResult assigmentResult = this.targetManagement .toggleTagAssignment(findTargetControllerIds(assignedTargetRequestBodies), targetTag.getName()); - final TargetTagAssigmentResultRest tagAssigmentResultRest = new TargetTagAssigmentResultRest(); - tagAssigmentResultRest.setAssignedTargets(TargetMapper.toResponse(assigmentResult.getAssignedEntity())); - tagAssigmentResultRest.setUnassignedTargets(TargetMapper.toResponse(assigmentResult.getUnassignedEntity())); + final MgmtTargetTagAssigmentResult tagAssigmentResultRest = new MgmtTargetTagAssigmentResult(); + tagAssigmentResultRest.setAssignedTargets(MgmtTargetMapper.toResponse(assigmentResult.getAssignedEntity())); + tagAssigmentResultRest.setUnassignedTargets(MgmtTargetMapper.toResponse(assigmentResult.getUnassignedEntity())); return new ResponseEntity<>(tagAssigmentResultRest, HttpStatus.OK); } @Override - public ResponseEntity> assignTargets(final Long targetTagId, - final List assignedTargetRequestBodies) { + public ResponseEntity> assignTargets(final Long targetTagId, + final List assignedTargetRequestBodies) { LOG.debug("Assign Targets {} for target tag {}", assignedTargetRequestBodies.size(), targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); final List assignedTarget = this.targetManagement .assignTag(findTargetControllerIds(assignedTargetRequestBodies), targetTag); - return new ResponseEntity<>(TargetMapper.toResponseWithLinksAndPollStatus(assignedTarget), HttpStatus.OK); + return new ResponseEntity<>(MgmtTargetMapper.toResponseWithLinksAndPollStatus(assignedTarget), HttpStatus.OK); } @Override @@ -176,7 +177,7 @@ public class TargetTagResource implements TargetTagRestApi { return tag; } - private List findTargetControllerIds(final List assignedTargetRequestBodies) { + private List findTargetControllerIds(final List assignedTargetRequestBodies) { return assignedTargetRequestBodies.stream().map(request -> request.getControllerId()) .collect(Collectors.toList()); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/PagingUtility.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/PagingUtility.java similarity index 91% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/PagingUtility.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/PagingUtility.java index ac45796e5..abd9e9ec4 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/PagingUtility.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/PagingUtility.java @@ -6,8 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.DistributionSetFields; @@ -19,6 +20,7 @@ import org.eclipse.hawkbit.repository.SoftwareModuleFields; import org.eclipse.hawkbit.repository.SoftwareModuleMetadataFields; import org.eclipse.hawkbit.repository.SoftwareModuleTypeFields; import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.rest.util.SortUtility; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; @@ -35,16 +37,16 @@ public final class PagingUtility { static int sanitizeOffsetParam(final int offset) { if (offset < 0) { - return Integer.parseInt(RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET); + return Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET); } return offset; } static int sanitizePageLimitParam(final int pageLimit) { if (pageLimit < 1) { - return Integer.parseInt(RestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT); - } else if (pageLimit > RestConstants.REQUEST_PARAMETER_PAGING_MAX_LIMIT) { - return RestConstants.REQUEST_PARAMETER_PAGING_MAX_LIMIT; + return Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT); + } else if (pageLimit > MgmtRestConstants.REQUEST_PARAMETER_PAGING_MAX_LIMIT) { + return MgmtRestConstants.REQUEST_PARAMETER_PAGING_MAX_LIMIT; } return pageLimit; } diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/JsonBuilder.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/JsonBuilder.java new file mode 100644 index 000000000..5a9f2785a --- /dev/null +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/JsonBuilder.java @@ -0,0 +1,466 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.rest.resource; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.RandomStringUtils; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.model.Target; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Builder class for building certain json strings. + * + * + * + */ +public abstract class JsonBuilder { + + public static String softwareModules(final List modules) throws JSONException { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final SoftwareModule module : modules) { + try { + builder.append(new JSONObject().put("name", module.getName()) + .put("description", module.getDescription()).put("type", module.getType().getKey()) + .put("id", Long.MAX_VALUE).put("vendor", module.getVendor()) + .put("version", module.getVersion()).put("createdAt", "0").put("updatedAt", "0") + .put("createdBy", "fghdfkjghdfkjh").put("updatedBy", "fghdfkjghdfkjh").toString()); + } catch (final Exception e) { + e.printStackTrace(); + } + + if (++i < modules.size()) { + builder.append(","); + } + } + + builder.append("]"); + + return builder.toString(); + + } + + public static String softwareModulesCreatableFieldsOnly(final List modules) throws JSONException { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final SoftwareModule module : modules) { + try { + builder.append(new JSONObject().put("name", module.getName()) + .put("description", module.getDescription()).put("type", module.getType().getKey()) + .put("vendor", module.getVendor()).put("version", module.getVersion()).toString()); + } catch (final Exception e) { + e.printStackTrace(); + } + + if (++i < modules.size()) { + builder.append(","); + } + } + + builder.append("]"); + + return builder.toString(); + + } + + public static String softwareModuleUpdatableFieldsOnly(final SoftwareModule module) throws JSONException { + final StringBuilder builder = new StringBuilder(); + + builder.append(new JSONObject().put("description", module.getDescription()).put("vendor", module.getVendor()) + .toString()); + + return builder.toString(); + + } + + public static String softwareModuleTypes(final List types) throws JSONException { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final SoftwareModuleType module : types) { + try { + builder.append(new JSONObject().put("name", module.getName()) + .put("description", module.getDescription()).put("id", Long.MAX_VALUE) + .put("key", module.getKey()).put("maxAssignments", module.getMaxAssignments()) + .put("createdAt", "0").put("updatedAt", "0").put("createdBy", "fghdfkjghdfkjh") + .put("updatedBy", "fghdfkjghdfkjh").toString()); + } catch (final Exception e) { + e.printStackTrace(); + } + + if (++i < types.size()) { + builder.append(","); + } + } + + builder.append("]"); + + return builder.toString(); + + } + + public static String softwareModuleTypesCreatableFieldsOnly(final List types) + throws JSONException { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final SoftwareModuleType module : types) { + try { + builder.append(new JSONObject().put("name", module.getName()) + .put("description", module.getDescription()).put("key", module.getKey()) + .put("maxAssignments", module.getMaxAssignments()).toString()); + } catch (final Exception e) { + e.printStackTrace(); + } + + if (++i < types.size()) { + builder.append(","); + } + } + + builder.append("]"); + + return builder.toString(); + + } + + /** + * builds a json string for the feedback for the execution "proceeding". + * + * @param id + * of the Action feedback refers to + * @return the built string + * @throws JSONException + */ + public static String deploymentActionInProgressFeedback(final String id) throws JSONException { + return deploymentActionFeedback(id, "proceeding"); + } + + /** + * builds a certain json string for a action feedback. + * + * @param id + * of the action the feedback refers to + * @param execution + * see ExecutionStatus + * @return the build json string + * @throws JSONException + */ + public static String deploymentActionFeedback(final String id, final String execution) throws JSONException { + return deploymentActionFeedback(id, execution, "none", RandomStringUtils.randomAscii(1000)); + + } + + public static String deploymentActionFeedback(final String id, final String execution, final String message) + throws JSONException { + return deploymentActionFeedback(id, execution, "none", message); + + } + + public static String deploymentActionFeedback(final String id, final String execution, final String finished, + final String message) throws JSONException { + final List messages = new ArrayList(); + messages.add(message); + + return new JSONObject() + .put("id", id) + .put("time", "20140511T121314") + .put("status", + new JSONObject() + .put("execution", execution) + .put("result", + new JSONObject().put("finished", finished).put("progress", + new JSONObject().put("cnt", 2).put("of", 5))).put("details", messages)) + .toString(); + + } + + /** + * @param types + * @return + */ + public static String distributionSetTypes(final List types) { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final DistributionSetType module : types) { + + try { + + final JSONArray osmTypes = new JSONArray(); + module.getOptionalModuleTypes().forEach(smt -> osmTypes.put(new JSONObject().put("id", smt.getId()))); + + final JSONArray msmTypes = new JSONArray(); + module.getMandatoryModuleTypes().forEach(smt -> msmTypes.put(new JSONObject().put("id", smt.getId()))); + + builder.append(new JSONObject().put("name", module.getName()) + .put("description", module.getDescription()).put("id", Long.MAX_VALUE) + .put("key", module.getKey()).put("createdAt", "0").put("updatedAt", "0") + .put("createdBy", "fghdfkjghdfkjh").put("optionalmodules", osmTypes) + .put("mandatorymodules", msmTypes).put("updatedBy", "fghdfkjghdfkjh").toString()); + } catch (final Exception e) { + e.printStackTrace(); + } + + if (++i < types.size()) { + builder.append(","); + } + } + + builder.append("]"); + + return builder.toString(); + } + + public static String distributionSetTypesCreateValidFieldsOnly(final List types) { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final DistributionSetType module : types) { + + try { + + final JSONArray osmTypes = new JSONArray(); + module.getOptionalModuleTypes().forEach(smt -> osmTypes.put(new JSONObject().put("id", smt.getId()))); + + final JSONArray msmTypes = new JSONArray(); + module.getMandatoryModuleTypes().forEach(smt -> msmTypes.put(new JSONObject().put("id", smt.getId()))); + + builder.append(new JSONObject().put("name", module.getName()) + .put("description", module.getDescription()).put("key", module.getKey()) + .put("optionalmodules", osmTypes).put("mandatorymodules", msmTypes).toString()); + } catch (final Exception e) { + e.printStackTrace(); + } + + if (++i < types.size()) { + builder.append(","); + } + } + + builder.append("]"); + + return builder.toString(); + } + + public static String distributionSets(final List sets) throws JSONException { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final DistributionSet set : sets) { + try { + builder.append(distributionSet(set)); + } catch (final Exception e) { + e.printStackTrace(); + } + + if (++i < sets.size()) { + builder.append(","); + } + } + + builder.append("]"); + + return builder.toString(); + + } + + public static String distributionSetsCreateValidFieldsOnly(final List sets) throws JSONException { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final DistributionSet set : sets) { + try { + builder.append(distributionSetCreateValidFieldsOnly(set)); + } catch (final Exception e) { + e.printStackTrace(); + } + + if (++i < sets.size()) { + builder.append(","); + } + } + + builder.append("]"); + + return builder.toString(); + + } + + public static String distributionSetCreateValidFieldsOnly(final DistributionSet set) throws JSONException { + + final List modules = set.getModules().stream().map(module -> { + try { + return new JSONObject().put("id", module.getId()); + } catch (final Exception e) { + e.printStackTrace(); + } + + return null; + }).collect(Collectors.toList()); + + return new JSONObject().put("name", set.getName()).put("description", set.getDescription()) + .put("type", set.getType() == null ? null : set.getType().getKey()).put("version", set.getVersion()) + .put("requiredMigrationStep", set.isRequiredMigrationStep()).put("modules", modules).toString(); + + } + + public static String distributionSetUpdateValidFieldsOnly(final DistributionSet set) throws JSONException { + + final List modules = set.getModules().stream().map(module -> { + try { + return new JSONObject().put("id", module.getId()); + } catch (final Exception e) { + e.printStackTrace(); + } + + return null; + }).collect(Collectors.toList()); + + return new JSONObject().put("name", set.getName()).put("description", set.getDescription()) + .put("version", set.getVersion()).toString(); + + } + + public static String distributionSet(final DistributionSet set) throws JSONException { + + final List modules = set.getModules().stream().map(module -> { + try { + return new JSONObject().put("id", module.getId()); + } catch (final Exception e) { + e.printStackTrace(); + } + + return null; + }).collect(Collectors.toList()); + + return new JSONObject().put("name", set.getName()).put("description", set.getDescription()) + .put("type", set.getType() == null ? null : set.getType().getKey()).put("id", Long.MAX_VALUE) + .put("version", set.getVersion()).put("createdAt", "0").put("updatedAt", "0") + .put("createdBy", "fghdfkjghdfkjh").put("updatedBy", "fghdfkjghdfkjh") + .put("requiredMigrationStep", set.isRequiredMigrationStep()).put("modules", modules).toString(); + + } + + /** + * @param targets + * @return + */ + public static String targets(final List targets) { + final StringBuilder builder = new StringBuilder(); + + builder.append("["); + int i = 0; + for (final Target target : targets) { + try { + builder.append(new JSONObject().put("controllerId", target.getControllerId()) + .put("description", target.getDescription()).put("name", target.getName()) + .put("createdAt", "0").put("updatedAt", "0").put("createdBy", "fghdfkjghdfkjh") + .put("updatedBy", "fghdfkjghdfkjh").toString()); + } catch (final Exception e) { + e.printStackTrace(); + } + + if (++i < targets.size()) { + builder.append(","); + } + } + + builder.append("]"); + + return builder.toString(); + } + + public static String rollout(final String name, final String description, final int groupSize, + final long distributionSetId, final String targetFilterQuery, final RolloutGroupConditions conditions) { + final JSONObject json = new JSONObject(); + json.put("name", name); + json.put("description", description); + json.put("amountGroups", groupSize); + json.put("distributionSetId", distributionSetId); + json.put("targetFilterQuery", targetFilterQuery); + + if (conditions != null) { + final JSONObject successCondition = new JSONObject(); + json.put("successCondition", successCondition); + successCondition.put("condition", conditions.getSuccessCondition().toString()); + successCondition.put("expression", conditions.getSuccessConditionExp().toString()); + + final JSONObject successAction = new JSONObject(); + json.put("successAction", successAction); + successAction.put("action", conditions.getSuccessAction().toString()); + successAction.put("expression", conditions.getSuccessActionExp().toString()); + + final JSONObject errorCondition = new JSONObject(); + json.put("errorCondition", errorCondition); + errorCondition.put("condition", conditions.getErrorCondition().toString()); + errorCondition.put("expression", conditions.getErrorConditionExp().toString()); + + final JSONObject errorAction = new JSONObject(); + json.put("errorAction", errorAction); + errorAction.put("action", conditions.getErrorAction().toString()); + errorAction.put("expression", conditions.getErrorActionExp().toString()); + } + + return json.toString(); + } + + public static String cancelActionFeedback(final String id, final String execution) throws JSONException { + return cancelActionFeedback(id, execution, RandomStringUtils.randomAscii(1000)); + + } + + public static String cancelActionFeedback(final String id, final String execution, final String message) + throws JSONException { + final List messages = new ArrayList(); + messages.add(message); + return new JSONObject() + .put("id", id) + .put("time", "20140511T121314") + .put("status", + new JSONObject().put("execution", execution) + .put("result", new JSONObject().put("finished", "success")).put("details", messages)) + .toString(); + + } + + public static String configData(final String id, final Map attributes, final String execution) + throws JSONException { + return new JSONObject() + .put("id", id) + .put("time", "20140511T121314") + .put("status", + new JSONObject().put("execution", execution) + .put("result", new JSONObject().put("finished", "success")) + .put("details", new ArrayList())).put("data", attributes).toString(); + + } + +} diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java similarity index 92% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index 6254da992..b7839f7f6 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -27,9 +27,9 @@ import java.util.List; import java.util.Set; import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.ActionRepository; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -60,7 +60,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Management API") @Stories("Distribution Set Resource") -public class DistributionSetResourceTest extends AbstractIntegrationTest { +public class MgmtDistributionSetResourceTest extends AbstractIntegrationTest { @Test @Description("This test verifies the call of all Software Modules that are assiged to a Distribution Set through the RESTful API.") @@ -68,7 +68,7 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { // Create DistributionSet with three software modules final DistributionSet set = TestDataUtil.generateDistributionSet("SMTest", softwareManagement, distributionSetManagement); - mvc.perform(get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM")) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("$.size", equalTo(set.getModules().size()))); } @@ -89,7 +89,7 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { smList.put(new JSONObject().put("id", Long.valueOf(smID))); } // post assignment - mvc.perform(post(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM") + mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM") .contentType(MediaType.APPLICATION_JSON).content(smList.toString())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); @@ -101,18 +101,19 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { list.put(new JSONObject().put("id", Long.valueOf(targetId))); } deploymentManagement.assignDistributionSet(disSet.getId(), knownTargetIds[0]); - mvc.perform(post(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedTargets") - .contentType(MediaType.APPLICATION_JSON).content(list.toString())).andDo(MockMvcResultPrinter.print()) - .andExpect(status().isOk()).andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1))) + mvc.perform( + post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedTargets") + .contentType(MediaType.APPLICATION_JSON).content(list.toString())) + .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1))) .andExpect(jsonPath("$.alreadyAssigned", equalTo(1))) .andExpect(jsonPath("$.total", equalTo(knownTargetIds.length))); // try to delete the Software Module from DistSet that has been assigned // to the target. - mvc.perform(delete( - RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM/" + smIDs.get(0)) - .contentType(MediaType.APPLICATION_JSON)) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isLocked()) + mvc.perform(delete(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM/" + + smIDs.get(0)).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) + .andExpect(status().isLocked()) .andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.entitiylocked"))); } @@ -132,7 +133,7 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { smList.put(new JSONObject().put("id", Long.valueOf(smID))); } // post assignment - mvc.perform(post(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM") + mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM") .contentType(MediaType.APPLICATION_JSON).content(smList.toString())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); @@ -145,9 +146,11 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { } // assign DisSet to target and test assignment deploymentManagement.assignDistributionSet(disSet.getId(), knownTargetIds[0]); - mvc.perform(post(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedTargets") - .contentType(MediaType.APPLICATION_JSON).content(list.toString())).andDo(MockMvcResultPrinter.print()) - .andExpect(status().isOk()).andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1))) + mvc.perform( + post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedTargets") + .contentType(MediaType.APPLICATION_JSON).content(list.toString())) + .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1))) .andExpect(jsonPath("$.alreadyAssigned", equalTo(1))) .andExpect(jsonPath("$.total", equalTo(knownTargetIds.length))); @@ -161,7 +164,7 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { smList2.put(new JSONObject().put("id", Long.valueOf(smID))); } - mvc.perform(post(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM") + mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM") .contentType(MediaType.APPLICATION_JSON).content(smList2.toString())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isLocked()) .andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.entitiylocked"))); @@ -175,7 +178,7 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { final DistributionSet disSet = TestDataUtil.generateDistributionSetWithNoSoftwareModules("Jupiter", "398,88", distributionSetManagement); // Test if size is 0 - mvc.perform(get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("$.size", equalTo(disSet.getModules().size()))); // create Software Modules @@ -194,11 +197,11 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { list.put(new JSONObject().put("id", Long.valueOf(smID))); } // post assignment - mvc.perform(post(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM") + mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM") .contentType(MediaType.APPLICATION_JSON).content(list.toString())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); // Test if size is 3 - mvc.perform(get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("$.size", equalTo(smIDs.size()))); } @@ -211,16 +214,16 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { final DistributionSet set = TestDataUtil.generateDistributionSet("Venus", softwareManagement, distributionSetManagement); int amountOfSM = set.getModules().size(); - mvc.perform(get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM")) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("$.size", equalTo(amountOfSM))); // test the removal of all software modules one by one for (final Iterator iter = set.getModules().iterator(); iter.hasNext();) { final Long smId = iter.next().getId(); mvc.perform(delete( - RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM/" + smId)) + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM/" + smId)) .andExpect(status().isOk()); - mvc.perform(get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM")) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("$.size", equalTo(--amountOfSM))); } @@ -242,8 +245,8 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { // assign already one target to DS deploymentManagement.assignDistributionSet(createdDs.getId(), knownTargetIds[0]); - mvc.perform( - post(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets") + mvc.perform(post( + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets") .contentType(MediaType.APPLICATION_JSON).content(list.toString())) .andExpect(status().isOk()).andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1))) .andExpect(jsonPath("$.alreadyAssigned", equalTo(1))) @@ -263,8 +266,8 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { targetManagement.createTarget(new Target(knownTargetId)); deploymentManagement.assignDistributionSet(createdDs.getId(), knownTargetId); - mvc.perform( - get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")) + mvc.perform(get( + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")) .andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(1))) .andExpect(jsonPath("$.content[0].controllerId", equalTo(knownTargetId))); } @@ -274,8 +277,8 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { public void getAssignedTargetsOfDistributionSetIsEmpty() throws Exception { final Set createDistributionSetsAlphabetical = createDistributionSetsAlphabetical(1); final DistributionSet createdDs = createDistributionSetsAlphabetical.iterator().next(); - mvc.perform( - get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")) + mvc.perform(get( + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")) .andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(0))) .andExpect(jsonPath("$.total", equalTo(0))); } @@ -297,8 +300,8 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { sendUpdateActionStatusToTargets(controllerManagament, targetManagement, actionRepository, createdDs, Lists.newArrayList(createTarget), Status.FINISHED, "some message"); - mvc.perform( - get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/installedTargets")) + mvc.perform(get( + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/installedTargets")) .andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(1))) .andExpect(jsonPath("$.content[0].controllerId", equalTo(knownTargetId))); } @@ -308,11 +311,11 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { public void getDistributionSetsWithoutAddtionalRequestParameters() throws Exception { final int sets = 5; createDistributionSetsAlphabetical(sets); - mvc.perform(get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(sets))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(sets))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(sets))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(sets))); } @Test @@ -321,12 +324,12 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { final int sets = 5; final int limitSize = 1; createDistributionSetsAlphabetical(sets); - mvc.perform(get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limitSize))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limitSize))); } @Test @@ -336,13 +339,13 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { final int offsetParam = 2; final int expectedSize = sets - offsetParam; createDistributionSetsAlphabetical(sets); - mvc.perform(get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING) - .param(RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(sets))) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(sets))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize))); } @Test @@ -825,9 +828,9 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { final String rsqlFindTargetId1 = "controllerId==1"; - mvc.perform( - get(RestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets?q=" - + rsqlFindTargetId1).contentType(MediaType.APPLICATION_JSON).content(list.toString())) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + + "/assignedTargets?q=" + rsqlFindTargetId1).contentType(MediaType.APPLICATION_JSON) + .content(list.toString())) .andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1))) .andExpect(jsonPath("size", equalTo(1))).andExpect(jsonPath("content[0].controllerId", equalTo("1"))); } diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java similarity index 94% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResourceTest.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java index 9f3d2a89d..b2f309995 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -24,8 +24,8 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.WithUser; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -44,12 +44,12 @@ import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; /** - * Test for {@link DistributionSetTypeResource}. + * Test for {@link MgmtDistributionSetTypeResource}. * */ @Features("Component Tests - Management API") @Stories("Distribution Set Type Resource") -public class DistributionSetTypeResourceTest extends AbstractIntegrationTest { +public class MgmtDistributionSetTypeResourceTest extends AbstractIntegrationTest { @Test @WithUser(principal = "uploadTester", allSpPermissions = true) @@ -101,7 +101,7 @@ public class DistributionSetTypeResourceTest extends AbstractIntegrationTest { // descending mvc.perform(get("/rest/v1/distributionsettypes").accept(MediaType.APPLICATION_JSON) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "KEY:DESC")).andDo(MockMvcResultPrinter.print()) + .param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "KEY:DESC")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content.[0].id", equalTo(testType.getId().intValue()))) .andExpect(jsonPath("$content.[0].name", equalTo("TestName123"))) @@ -114,7 +114,7 @@ public class DistributionSetTypeResourceTest extends AbstractIntegrationTest { // ascending mvc.perform(get("/rest/v1/distributionsettypes").accept(MediaType.APPLICATION_JSON) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "KEY:ASC")).andDo(MockMvcResultPrinter.print()) + .param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "KEY:ASC")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content.[3].id", equalTo(testType.getId().intValue()))) .andExpect(jsonPath("$content.[3].name", equalTo("TestName123"))) @@ -439,11 +439,11 @@ public class DistributionSetTypeResourceTest extends AbstractIntegrationTest { @Description("Checks the correct behaviour of /rest/v1/distributionsettypes GET requests with paging.") public void getDistributionSetTypesWithoutAddtionalRequestParameters() throws Exception { final int types = 3; - mvc.perform(get(RestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(types))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(types))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(types))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(types))); } @Test @@ -451,12 +451,12 @@ public class DistributionSetTypeResourceTest extends AbstractIntegrationTest { public void getDistributionSetTypesWithPagingLimitRequestParameter() throws Exception { final int types = 3; final int limitSize = 1; - mvc.perform(get(RestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limitSize))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limitSize))); } @Test @@ -465,13 +465,13 @@ public class DistributionSetTypeResourceTest extends AbstractIntegrationTest { final int types = 3; final int offsetParam = 2; final int expectedSize = types - offsetParam; - mvc.perform(get(RestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) - .param(RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(types))) + mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(types))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize))); } @Test diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DownloadResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java similarity index 84% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DownloadResourceTest.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java index ee0fa52fe..2311b098c 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DownloadResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java @@ -6,17 +6,17 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.DownloadArtifactCache; import org.eclipse.hawkbit.cache.DownloadType; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -32,7 +32,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Management API") @Stories("Download Resource") -public class DownloadResourceTest extends AbstractIntegrationTestWithMongoDB { +public class MgmtDownloadResourceTest extends AbstractIntegrationTestWithMongoDB { @Autowired @Qualifier(CacheConstants.DOWNLOAD_ID_CACHE) @@ -58,7 +58,7 @@ public class DownloadResourceTest extends AbstractIntegrationTestWithMongoDB { @Description("This test verifies the call of download artifact without a valid download id fails.") public void testNoDownloadIdAvailable() throws Exception { mvc.perform( - get(RestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + RestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, + get(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, downloadIdNotAvailable)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); @@ -68,13 +68,13 @@ public class DownloadResourceTest extends AbstractIntegrationTestWithMongoDB { @Description("This test verifies the call of download artifact works and the download id will be removed.") public void testDownload() throws Exception { mvc.perform( - get(RestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + RestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, + get(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, downloadIdSha1)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); // because cache is empty mvc.perform( - get(RestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + RestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, + get(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, downloadIdSha1)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/RolloutResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java similarity index 96% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/RolloutResourceTest.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index f27eb5186..f33ceb942 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/RolloutResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.Matchers.equalTo; @@ -22,9 +22,10 @@ import java.util.List; import java.util.concurrent.Callable; import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.mgmt.rest.resource.MgmtRolloutResource; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -45,11 +46,11 @@ import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; /** - * Tests for covering the {@link RolloutResource}. + * Tests for covering the {@link MgmtRolloutResource}. */ @Features("Component Tests - Management API") @Stories("Rollout Resource") -public class RolloutResourceTest extends AbstractIntegrationTest { +public class MgmtRolloutResourceTest extends AbstractIntegrationTest { @Autowired private RolloutManagement rolloutManagement; @@ -449,7 +450,7 @@ public class RolloutResourceTest extends AbstractIntegrationTest { // starting rollout mvc.perform(post("/rest/v1/rollouts/{rolloutId}/start", rollout.getId()) - .param(RestConstants.REQUEST_PARAMETER_ASYNC, "true")).andDo(MockMvcResultPrinter.print()) + .param(MgmtRestConstants.REQUEST_PARAMETER_ASYNC, "true")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); // check if running @@ -477,18 +478,18 @@ public class RolloutResourceTest extends AbstractIntegrationTest { createRollout("rollout3", 5, dsA.getId(), "controllerId==rollout3*"); createRollout("other1", 5, dsA.getId(), "controllerId==other1*"); - mvc.perform(get("/rest/v1/rollouts").param(RestConstants.REQUEST_PARAMETER_SEARCH, "name==*2")) + mvc.perform(get("/rest/v1/rollouts").param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "name==*2")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content", hasSize(1))).andExpect(jsonPath("$total", equalTo(1))) .andExpect(jsonPath("$content[0].name", equalTo(rollout2.getName()))); - mvc.perform(get("/rest/v1/rollouts").param(RestConstants.REQUEST_PARAMETER_SEARCH, "name==rollout*")) + mvc.perform(get("/rest/v1/rollouts").param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "name==rollout*")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content", hasSize(3))).andExpect(jsonPath("$total", equalTo(3))); - mvc.perform(get("/rest/v1/rollouts").param(RestConstants.REQUEST_PARAMETER_SEARCH, "name==*1")) + mvc.perform(get("/rest/v1/rollouts").param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "name==*1")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content", hasSize(2))).andExpect(jsonPath("$total", equalTo(2))); @@ -509,18 +510,18 @@ public class RolloutResourceTest extends AbstractIntegrationTest { // retrieve rollout groups from created rollout mvc.perform(get("/rest/v1/rollouts/{rolloutId}/deploygroups", rollout.getId()) - .param(RestConstants.REQUEST_PARAMETER_SEARCH, "name==group-1")).andDo(MockMvcResultPrinter.print()) + .param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "name==group-1")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content", hasSize(1))).andExpect(jsonPath("$total", equalTo(1))) .andExpect(jsonPath("$content[0].name", equalTo("group-1"))); mvc.perform(get("/rest/v1/rollouts/{rolloutId}/deploygroups", rollout.getId()) - .param(RestConstants.REQUEST_PARAMETER_SEARCH, "name==group*")).andDo(MockMvcResultPrinter.print()) + .param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "name==group*")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content", hasSize(4))).andExpect(jsonPath("$total", equalTo(4))); mvc.perform(get("/rest/v1/rollouts/{rolloutId}/deploygroups", rollout.getId()) - .param(RestConstants.REQUEST_PARAMETER_SEARCH, "name==group-1,name==group-2")) + .param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "name==group-1,name==group-2")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content", hasSize(2))).andExpect(jsonPath("$total", equalTo(2))); diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java similarity index 96% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java index 1d2222c9a..f6a945a29 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -34,10 +34,11 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.HashGeneratorUtils; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.exception.SpServerError; +import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -45,8 +46,7 @@ import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; -import org.eclipse.hawkbit.rest.resource.model.ExceptionInfo; -import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactRest; +import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -64,12 +64,12 @@ import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; /** - * Tests for {@link SoftwareModuleResource} {@link RestController}. + * Tests for {@link MgmtSoftwareModuleResource} {@link RestController}. * */ @Features("Component Tests - Management API") @Stories("Software Module Resource") -public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongoDB { +public class MgmtSoftwareModuleResourceTest extends AbstractIntegrationTestWithMongoDB { @Before public void assertPreparationOfRepo() { @@ -142,7 +142,7 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andExpect(jsonPath("$providedFilename", equalTo("origFilename"))).andReturn(); // check rest of response compared to DB - final ArtifactRest artResult = ResourceUtility + final MgmtArtifact artResult = ResourceUtility .convertArtifactResponse(mvcResult.getResponse().getContentAsString()); final Long artId = ((LocalArtifact) softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts() .get(0)).getId(); @@ -473,11 +473,11 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo public void getSoftwareModulesWithoutAddtionalRequestParameters() throws Exception { final int modules = 5; createSoftwareModulesAlphabetical(modules); - mvc.perform(get(RestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(modules))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(modules))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(modules))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(modules))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(modules))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(modules))); } @Test @@ -486,12 +486,12 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo final int modules = 5; final int limitSize = 1; createSoftwareModulesAlphabetical(modules); - mvc.perform(get(RestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) + mvc.perform(get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(modules))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limitSize))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(modules))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limitSize))); } @Test @@ -501,13 +501,13 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo final int offsetParam = 2; final int expectedSize = modules - offsetParam; createSoftwareModulesAlphabetical(modules); - mvc.perform(get(RestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) - .param(RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(modules))) + mvc.perform(get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(modules))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(modules))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(modules))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize))); } @Test diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java similarity index 91% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResourceTest.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java index a85e25bed..d8d113fbc 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -24,8 +24,8 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.WithUser; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.json.JSONException; @@ -41,12 +41,12 @@ import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; /** - * Test for {@link SoftwareModuleTypeResource}. + * Test for {@link MgmtSoftwareModuleTypeResource}. * */ @Features("Component Tests - Management API") @Stories("Software Module Type Resource") -public class SoftwareModuleTypeResourceTest extends AbstractIntegrationTest { +public class MgmtSoftwareModuleTypeResourceTest extends AbstractIntegrationTest { @Test @WithUser(principal = "uploadTester", allSpPermissions = true) @@ -101,7 +101,7 @@ public class SoftwareModuleTypeResourceTest extends AbstractIntegrationTest { // descending mvc.perform(get("/rest/v1/softwaremoduletypes").accept(MediaType.APPLICATION_JSON) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:DESC")) + .param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:DESC")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content.[0].id", equalTo(testType.getId().intValue()))) @@ -116,7 +116,7 @@ public class SoftwareModuleTypeResourceTest extends AbstractIntegrationTest { // ascending mvc.perform(get("/rest/v1/softwaremoduletypes").accept(MediaType.APPLICATION_JSON) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:ASC")) + .param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:ASC")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$content.[3].id", equalTo(testType.getId().intValue()))) @@ -252,11 +252,11 @@ public class SoftwareModuleTypeResourceTest extends AbstractIntegrationTest { @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes GET requests with paging.") public void getSoftwareModuleTypesWithoutAddtionalRequestParameters() throws Exception { final int types = 3; - mvc.perform(get(RestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(types))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(types))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(types))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(types))); } @Test @@ -264,12 +264,12 @@ public class SoftwareModuleTypeResourceTest extends AbstractIntegrationTest { public void getSoftwareModuleTypesWithPagingLimitRequestParameter() throws Exception { final int types = 3; final int limitSize = 1; - mvc.perform(get(RestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) + mvc.perform(get(MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limitSize))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limitSize))); } @Test @@ -278,13 +278,13 @@ public class SoftwareModuleTypeResourceTest extends AbstractIntegrationTest { final int types = 3; final int offsetParam = 2; final int expectedSize = types - offsetParam; - mvc.perform(get(RestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) - .param(RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(types))) + mvc.perform(get(MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(types))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize))) - .andExpect(jsonPath(TargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize))); + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize))) + .andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize))); } @Test diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java similarity index 84% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index 8d27d5114..6954aee31 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -30,11 +30,11 @@ import java.util.Map; import java.util.stream.Collectors; import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.im.authentication.SpPermission; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; @@ -46,7 +46,8 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; -import org.eclipse.hawkbit.rest.resource.model.ExceptionInfo; +import org.eclipse.hawkbit.rest.exception.MessageNotReadableException; +import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.eclipse.hawkbit.util.IpUtil; import org.json.JSONException; import org.json.JSONObject; @@ -68,12 +69,12 @@ import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; /** - * Spring MVC Tests against the TargetResource. + * Spring MVC Tests against the MgmtTargetResource. * */ @Features("Component Tests - Management API") @Stories("Target Resource") -public class TargetResourceTest extends AbstractIntegrationTest { +public class MgmtTargetResourceTest extends AbstractIntegrationTest { private static final String TARGET_DESCRIPTION_TEST = "created in test"; @@ -117,10 +118,10 @@ public class TargetResourceTest extends AbstractIntegrationTest { .get(0).getActionStatus().stream().sorted((e1, e2) -> Long.compare(e2.getId(), e1.getId())) .collect(Collectors.toList()).get(0); - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actions.get(0).getId() + "/status") - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "ID:DESC")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actions.get(0).getId() + "/status") + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)) + .param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:DESC")) .andExpect(status().isOk()).andDo(MockMvcResultPrinter.print()) .andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(3))) .andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) @@ -139,7 +140,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String knownControllerId = "knownControllerId"; targetManagement.createTarget(new Target(knownControllerId)); - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}", knownControllerId)) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}", knownControllerId)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("securityToken").doesNotExist()); } @@ -152,7 +153,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String knownControllerId = "knownControllerId"; final Target createTarget = targetManagement.createTarget(new Target(knownControllerId)); - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}", knownControllerId)) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}", knownControllerId)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("securityToken", equalTo(createTarget.getSecurityToken()))); } @@ -168,7 +169,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { createTarget(knownControllerId2); // test - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(2))) .andExpect(jsonPath("size", equalTo(2))) .andExpect(jsonPath("$content.[?(@.controllerId==" + knownControllerId1 + ")][0].ipAddress", @@ -204,22 +205,22 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String rsqlFinishedStatus = "status==finished"; final String rsqlPendingOrFinishedStatus = rsqlFinishedStatus + "," + rsqlPendingStatus; // pending status one result - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions?q=" + rsqlPendingStatus, + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions?q=" + rsqlPendingStatus, createTarget.getControllerId())).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("total", equalTo(1))).andExpect(jsonPath("size", equalTo(1))) .andExpect(jsonPath("content[0].status", equalTo("pending"))); // finished status none result - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions?q=" + rsqlFinishedStatus, + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions?q=" + rsqlFinishedStatus, createTarget.getControllerId())).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("total", equalTo(0))).andExpect(jsonPath("size", equalTo(0))); // pending or finished status one result - mvc.perform( - get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions?q=" + rsqlPendingOrFinishedStatus, - createTarget.getControllerId())) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1))) - .andExpect(jsonPath("size", equalTo(1))).andExpect(jsonPath("content[0].status", equalTo("pending"))); + mvc.perform(get( + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions?q=" + rsqlPendingOrFinishedStatus, + createTarget.getControllerId())).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(jsonPath("total", equalTo(1))).andExpect(jsonPath("size", equalTo(1))) + .andExpect(jsonPath("content[0].status", equalTo("pending"))); } @Test @@ -229,7 +230,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final Target tA = createTargetAndStartAction(); // test - cancel the active action - mvc.perform(delete(RestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions/{actionId}", + mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions/{actionId}", tA.getControllerId(), tA.getActions().get(0).getId())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isNoContent()); @@ -261,7 +262,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { assertThat(cancelActions).hasSize(1); // test - cancel an cancel action returns forbidden - mvc.perform(delete(RestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions/{actionId}", + mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions/{actionId}", tA.getControllerId(), cancelActions.get(0).getId())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isMethodNotAllowed()); } @@ -282,7 +283,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { assertThat(cancelActions.get(0).isCancelingOrCanceled()).isTrue(); // test - force quit an canceled action should return 204 - mvc.perform(delete(RestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions/{actionId}?force=true", + mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions/{actionId}?force=true", tA.getControllerId(), cancelActions.get(0).getId())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isNoContent()); } @@ -294,7 +295,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final Target tA = createTargetAndStartAction(); // test - cancel an cancel action returns forbidden - mvc.perform(delete(RestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions/{actionId}?force=true", + mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/actions/{actionId}?force=true", tA.getControllerId(), tA.getActions().get(0).getId())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isMethodNotAllowed()); } @@ -305,7 +306,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String knownControllerId = "knownControllerIdDelete"; targetManagement.createTarget(new Target(knownControllerId)); - mvc.perform(delete(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId)) + mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId)) .andExpect(status().isOk()); final Target findTargetByControllerID = targetManagement.findTargetByControllerID(knownControllerId); @@ -317,7 +318,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { public void deleteTargetWhichDoesNotExistsLeadsToEntityNotFound() throws Exception { final String knownControllerId = "knownControllerIdDelete"; - mvc.perform(delete(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId)) + mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId)) .andExpect(status().isNotFound()); } @@ -325,7 +326,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { @Description("Ensures that update is refused with not found if target does not exist.") public void updateTargetWhichDoesNotExistsLeadsToEntityNotFound() throws Exception { final String knownControllerId = "knownControllerIdUpdate"; - mvc.perform(put(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId).content("{}") + mvc.perform(put(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId).content("{}") .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isNotFound()); } @@ -344,7 +345,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { t.setName(knownNameNotModiy); targetManagement.createTarget(t); - mvc.perform(put(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId).content(body) + mvc.perform(put(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId).content(body) .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("$.controllerId", equalTo(knownControllerId))) .andExpect(jsonPath("$.description", equalTo(knownNewDescription))) @@ -364,7 +365,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String idC = "c"; final String linksHrefPrefix = "http://localhost/rest/v1/targets/"; createTargetsAlphabetical(knownTargetAmount); - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING)).andExpect(status().isOk()) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING)).andExpect(status().isOk()) .andDo(MockMvcResultPrinter.print()) .andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(knownTargetAmount))) .andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(knownTargetAmount))) @@ -404,8 +405,9 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String idA = "a"; final String linksHrefPrefix = "http://localhost/rest/v1/targets/"; - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING).param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, - String.valueOf(limitSize))).andExpect(status().isOk()).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) + .andExpect(status().isOk()).andDo(MockMvcResultPrinter.print()) .andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(knownTargetAmount))) .andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize))) .andExpect(jsonPath(JSON_PATH_PAGED_LIST_CONTENT, hasSize(limitSize))) @@ -431,9 +433,9 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String linksHrefPrefix = "http://localhost/rest/v1/targets/"; createTargetsAlphabetical(knownTargetAmount); - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING) - .param(RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(knownTargetAmount))) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam)) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(knownTargetAmount))) .andExpect(status().isOk()).andDo(MockMvcResultPrinter.print()) .andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(knownTargetAmount))) .andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize))) @@ -472,7 +474,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { createSingleTarget(knownControllerId, knownName); final String hrefPrefix = "http://localhost/rest/v1/targets/" + knownControllerId + "/"; // test - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId)) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath(JSON_PATH_NAME, equalTo(knownName))) .andExpect(jsonPath(JSON_PATH_CONTROLLERID, equalTo(knownControllerId))) @@ -491,7 +493,8 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String targetIdNotExists = "bubu"; // test - final MvcResult mvcResult = mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + targetIdNotExists)) + final MvcResult mvcResult = mvc + .perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + targetIdNotExists)) .andExpect(status().isNotFound()).andReturn(); // verify response json exception message @@ -509,7 +512,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { // test - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/assignedDS")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/assignedDS")) .andExpect(status().isNoContent()).andExpect(content().string("")); } @@ -529,7 +532,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final SoftwareModule os = ds.findFirstModuleByType(osType); final SoftwareModule jvm = ds.findFirstModuleByType(runtimeType); final SoftwareModule bApp = ds.findFirstModuleByType(appType); - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/assignedDS")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/assignedDS")) .andExpect(status().isOk()).andDo(MockMvcResultPrinter.print()) .andExpect(jsonPath(JSON_PATH_ID, equalTo(ds.getId().intValue()))) .andExpect(jsonPath(JSON_PATH_NAME, equalTo(ds.getName()))) @@ -579,7 +582,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { // test - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/installedDS")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/installedDS")) .andExpect(status().isNoContent()).andExpect(content().string("")); } @@ -602,7 +605,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final SoftwareModule os = ds.findFirstModuleByType(osType); final SoftwareModule jvm = ds.findFirstModuleByType(runtimeType); final SoftwareModule bApp = ds.findFirstModuleByType(appType); - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/installedDS")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId + "/installedDS")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath(JSON_PATH_ID, equalTo(ds.getId().intValue()))) .andExpect(jsonPath(JSON_PATH_NAME, equalTo(ds.getName()))) @@ -646,7 +649,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { public void createTargetWithoutPayloadBadRequest() throws Exception { final MvcResult mvcResult = mvc - .perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING).contentType(MediaType.APPLICATION_JSON)) + .perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING).contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest()).andReturn(); assertThat(targetManagement.countTargetsAll()).isEqualTo(0); @@ -663,7 +666,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String notJson = "abc"; final MvcResult mvcResult = mvc - .perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING).content(notJson) + .perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING).content(notJson) .contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest()).andReturn(); @@ -743,7 +746,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String knownDescription = "someDescription"; final String createTargetsJson = getCreateTargetsListJsonString(knownControllerId, knownName, knownDescription); - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING).content(createTargetsJson) + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING).content(createTargetsJson) .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) .andExpect(status().is2xxSuccessful()); @@ -764,12 +767,12 @@ public class TargetResourceTest extends AbstractIntegrationTest { // create a taret first to provoke a already exists error - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING).content(createTargetsJson) + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING).content(createTargetsJson) .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) .andExpect(status().is2xxSuccessful()); // create another one to retrieve the entity already exists exception final MvcResult mvcResult = mvc - .perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING).content(createTargetsJson) + .perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING).content(createTargetsJson) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().is(HttpStatus.CONFLICT.value())).andReturn(); @@ -792,7 +795,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String createTargetsJson = getCreateTargetsListJsonStringWithAdditionalNotExistingAttribute( knownControllerId, knownName, knownDescription); - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING).content(createTargetsJson) + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING).content(createTargetsJson) .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) .andExpect(status().is2xxSuccessful()); @@ -810,10 +813,10 @@ public class TargetResourceTest extends AbstractIntegrationTest { final Target target = new Target(knownTargetId); targetManagement.createTarget(target); - mvc.perform(get( - RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + RestConstants.TARGET_V1_ACTIONS)) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("size", equalTo(0))) - .andExpect(jsonPath("content", hasSize(0))).andExpect(jsonPath("total", equalTo(0))); + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(jsonPath("size", equalTo(0))).andExpect(jsonPath("content", hasSize(0))) + .andExpect(jsonPath("total", equalTo(0))); } @Test @@ -821,9 +824,10 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String knownTargetId = "targetId"; final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actions.get(0).getId())).andDo(MockMvcResultPrinter.print()) - .andExpect(status().isOk()).andExpect(jsonPath("id", equalTo(actions.get(0).getId().intValue()))) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actions.get(0).getId())) + .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(jsonPath("id", equalTo(actions.get(0).getId().intValue()))) .andExpect(jsonPath("type", equalTo("cancel"))).andExpect(jsonPath("status", equalTo("pending"))) .andExpect(jsonPath("_links.self.href", equalTo(generateActionSelfLink(knownTargetId, actions.get(0))))) .andExpect(jsonPath("_links.canceledaction.href", @@ -837,9 +841,8 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String knownTargetId = "targetId"; final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); - mvc.perform(get( - RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + RestConstants.TARGET_V1_ACTIONS) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS).param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("content.[1].id", equalTo(actions.get(1).getId().intValue()))) .andExpect(jsonPath("content.[1].type", equalTo("update"))) @@ -866,9 +869,10 @@ public class TargetResourceTest extends AbstractIntegrationTest { .sorted((e1, e2) -> Long.compare(e2.getId(), e1.getId())).collect(Collectors.toList()); // sort is default descending order, latest status first - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + RestConstants.TARGET_V1_ACTION_STATUS)) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + + MgmtRestConstants.TARGET_V1_ACTION_STATUS)).andDo(MockMvcResultPrinter.print()) + .andExpect(status().isOk()) .andExpect(jsonPath("content.[0].id", equalTo(actionStatus.get(0).getId().intValue()))) .andExpect(jsonPath("content.[0].type", equalTo("canceling"))) .andExpect(jsonPath("content.[0].messages", hasItem("manual cancelation requested"))) @@ -890,9 +894,10 @@ public class TargetResourceTest extends AbstractIntegrationTest { .sorted((e1, e2) -> Long.compare(e1.getId(), e2.getId())).collect(Collectors.toList()); // descending order - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + RestConstants.TARGET_V1_ACTION_STATUS) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "REPORTEDAT:DESC")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + + MgmtRestConstants.TARGET_V1_ACTION_STATUS).param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, + "REPORTEDAT:DESC")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("content.[0].id", equalTo(actionStatus.get(1).getId().intValue()))) .andExpect(jsonPath("content.[0].type", equalTo("canceling"))) @@ -906,9 +911,10 @@ public class TargetResourceTest extends AbstractIntegrationTest { .andExpect(jsonPath(JSON_PATH_PAGED_LIST_CONTENT, hasSize(2))); // ascending order - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + RestConstants.TARGET_V1_ACTION_STATUS) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "REPORTEDAT:ASC")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + + MgmtRestConstants.TARGET_V1_ACTION_STATUS).param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, + "REPORTEDAT:ASC")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("content.[1].id", equalTo(actionStatus.get(1).getId().intValue()))) .andExpect(jsonPath("content.[1].type", equalTo("canceling"))) @@ -932,9 +938,10 @@ public class TargetResourceTest extends AbstractIntegrationTest { .sorted((e1, e2) -> Long.compare(e1.getId(), e2.getId())).collect(Collectors.toList()); // Page 1 - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + RestConstants.TARGET_V1_ACTION_STATUS) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1))) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + + MgmtRestConstants.TARGET_V1_ACTION_STATUS).param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, + String.valueOf(1))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("content.[0].id", equalTo(actionStatus.get(1).getId().intValue()))) .andExpect(jsonPath("content.[0].type", equalTo("canceling"))) @@ -945,10 +952,11 @@ public class TargetResourceTest extends AbstractIntegrationTest { .andExpect(jsonPath(JSON_PATH_PAGED_LIST_CONTENT, hasSize(1))); // Page 2 - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + RestConstants.TARGET_V1_ACTION_STATUS) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1)) - .param(RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1))) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + + MgmtRestConstants.TARGET_V1_ACTION_STATUS) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1)) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1))) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("content.[0].id", equalTo(actionStatus.get(0).getId().intValue()))) .andExpect(jsonPath("content.[0].type", equalTo("running"))) @@ -964,10 +972,10 @@ public class TargetResourceTest extends AbstractIntegrationTest { final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); // page 1: one entry - mvc.perform(get( - RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + RestConstants.TARGET_V1_ACTIONS) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1)) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1)) + .param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("content.[0].id", equalTo(actions.get(0).getId().intValue()))) .andExpect(jsonPath("content.[0].type", equalTo("cancel"))) @@ -979,12 +987,12 @@ public class TargetResourceTest extends AbstractIntegrationTest { .andExpect(jsonPath(JSON_PATH_PAGED_LIST_CONTENT, hasSize(1))); // page 2: one entry - mvc.perform(get( - RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + RestConstants.TARGET_V1_ACTIONS) - .param(RestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1)) - .param(RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1)) - .param(RestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1)) - .param(RestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1)) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1)) + .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1)) + .param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("content.[0].id", equalTo(actions.get(1).getId().intValue()))) .andExpect(jsonPath("content.[0].type", equalTo("update"))) @@ -997,19 +1005,19 @@ public class TargetResourceTest extends AbstractIntegrationTest { } private String generateActionSelfLink(final String knownTargetId, final Action action) { - return "http://localhost" + RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + action.getId(); + return "http://localhost" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + action.getId(); } private String generateCanceledactionreferenceLink(final String knownTargetId, final Action action) { - return "http://localhost" + RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + action.getId(); + return "http://localhost" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + action.getId(); } private String generateStatusreferenceLink(final String knownTargetId, final Action action) { - return "http://localhost" + RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + RestConstants.TARGET_V1_ACTION_STATUS - + "?offset=0&limit=50&sort=id:DESC"; + return "http://localhost" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + action.getId() + "/" + + MgmtRestConstants.TARGET_V1_ACTION_STATUS + "?offset=0&limit=50&sort=id:DESC"; } private List generateTargetWithTwoUpdatesWithOneOverride(final String knownTargetId) @@ -1047,9 +1055,10 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String knownTargetId = "targetId"; final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actions.get(1).getId())).andDo(MockMvcResultPrinter.print()) - .andExpect(status().isOk()).andExpect(jsonPath("id", equalTo(actions.get(1).getId().intValue()))) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actions.get(1).getId())) + .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(jsonPath("id", equalTo(actions.get(1).getId().intValue()))) .andExpect(jsonPath("type", equalTo("update"))).andExpect(jsonPath("status", equalTo("pending"))) .andExpect(jsonPath("_links.self.href", equalTo(generateActionSelfLink(knownTargetId, actions.get(1))))) .andExpect(jsonPath("_links.distributionset.href", @@ -1066,7 +1075,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") .content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); @@ -1084,7 +1093,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String body = new JSONObject().put("id", set.getId()).put("type", "timeforced") .put("forcetime", forceTime).toString(); - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS").content(body) + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS").content(body) .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); @@ -1101,25 +1110,25 @@ public class TargetResourceTest extends AbstractIntegrationTest { final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") .content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); targetManagement.createTarget(new Target("fsdfsd")); - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") .content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS").content("{\"id\":12345678}") - .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) - .andExpect(status().isNotFound()); + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") + .content("{\"id\":12345678}").contentType(MediaType.APPLICATION_JSON)) + .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); - mvc.perform(delete(RestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") + mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isMethodNotAllowed()); - mvc.perform(put(RestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") + mvc.perform(put(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") .content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isMethodNotAllowed()); @@ -1130,28 +1139,28 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String knownTargetId = "targetId"; // target does not exist - mvc.perform(get( - RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + RestConstants.TARGET_V1_ACTIONS)) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS)).andDo(MockMvcResultPrinter.print()) + .andExpect(status().isNotFound()); final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); final Long actionId = actions.get(0).getId(); // should work now - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actionId)).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actionId)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); // action does not exist - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/12321")).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/12321")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isNotFound()); // not allowed methods - mvc.perform(put(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actionId)).andDo(MockMvcResultPrinter.print()) + mvc.perform(put(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actionId)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isMethodNotAllowed()); - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actionId)).andDo(MockMvcResultPrinter.print()) + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actionId)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isMethodNotAllowed()); } @@ -1160,31 +1169,31 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String knownTargetId = "targetId"; // target does not exist - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/1/status")).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/1/status")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isNotFound()); final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); final Long actionId = actions.get(0).getId(); // should work now - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actionId + "/status")).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actionId + "/status")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); // action does not exist - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/12321/status")).andDo(MockMvcResultPrinter.print()) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/12321/status")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isNotFound()); // not allowed methods - mvc.perform(delete(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actionId + "/status")).andDo(MockMvcResultPrinter.print()) + mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actionId + "/status")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isMethodNotAllowed()); - mvc.perform(put(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actionId + "/status")).andDo(MockMvcResultPrinter.print()) + mvc.perform(put(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actionId + "/status")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isMethodNotAllowed()); - mvc.perform(post(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" - + RestConstants.TARGET_V1_ACTIONS + "/" + actionId + "/status")).andDo(MockMvcResultPrinter.print()) + mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" + + MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actionId + "/status")).andDo(MockMvcResultPrinter.print()) .andExpect(status().isMethodNotAllowed()); } @@ -1200,7 +1209,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { controllerManagament.updateControllerAttributes(knownTargetId, knownControllerAttrs); // test query target over rest resource - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/attributes")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/attributes")) .andDo(MockMvcResultPrinter.print()).andExpect(status().is2xxSuccessful()) .andExpect(jsonPath("$.a", equalTo("1"))).andExpect(jsonPath("$.b", equalTo("2"))); } @@ -1213,7 +1222,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { targetManagement.createTarget(target); // test query target over rest resource - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/attributes")) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/attributes")) .andDo(MockMvcResultPrinter.print()).andExpect(status().is(HttpStatus.NO_CONTENT.value())); } @@ -1224,7 +1233,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final String rsqlFindAOrB = "controllerId==a,controllerId==b"; - mvc.perform(get(RestConstants.TARGET_V1_REQUEST_MAPPING + "?q=" + rsqlFindAOrB)) + mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "?q=" + rsqlFindAOrB)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("size", equalTo(2))) .andExpect(jsonPath("total", equalTo(2))).andExpect(jsonPath("content[0].controllerId", equalTo("a"))) .andExpect(jsonPath("content[1].controllerId", equalTo("b"))); diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MockMvcResultPrinter.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MockMvcResultPrinter.java new file mode 100644 index 000000000..7d07b3bd3 --- /dev/null +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MockMvcResultPrinter.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.rest.resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultHandler; +import org.springframework.test.web.servlet.result.PrintingResultHandler; +import org.springframework.util.CollectionUtils; + +public abstract class MockMvcResultPrinter { + private static final Logger LOG = LoggerFactory.getLogger(MockMvcResultPrinter.class); + + private MockMvcResultPrinter() { + } + + /** + * Print {@link MvcResult} details to the "standard" output stream. + */ + public static ResultHandler print() { + return new ConsolePrintingResultHandler(); + } + + /** + * An {@link PrintingResultHandler} that writes to the "standard" output + * stream + */ + private static class ConsolePrintingResultHandler extends PrintingResultHandler { + + public ConsolePrintingResultHandler() { + super(new ResultValuePrinter() { + + @Override + public void printHeading(final String heading) { + LOG.debug(String.format("%20s:", heading)); + } + + @Override + public void printValue(final String label, Object value) { + if (value != null && value.getClass().isArray()) { + value = CollectionUtils.arrayToList(value); + } + LOG.debug(String.format("%20s = %s", label, value)); + } + }); + } + } +} diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/ResourceUtility.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/ResourceUtility.java similarity index 77% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/ResourceUtility.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/ResourceUtility.java index 9e99031e9..e94d1b857 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/ResourceUtility.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/ResourceUtility.java @@ -6,13 +6,13 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.io.IOException; -import org.eclipse.hawkbit.rest.resource.model.ExceptionInfo; -import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactRest; +import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; +import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; @@ -33,9 +33,9 @@ public final class ResourceUtility { return mapper.readValue(jsonExceptionResponse, ExceptionInfo.class); } - static ArtifactRest convertArtifactResponse(final String jsonResponse) + static MgmtArtifact convertArtifactResponse(final String jsonResponse) throws JsonParseException, JsonMappingException, IOException { - return mapper.readValue(jsonResponse, ArtifactRest.class); + return mapper.readValue(jsonResponse, MgmtArtifact.class); } diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SMRessourceMisingMongoDbConnectionTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java similarity index 93% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SMRessourceMisingMongoDbConnectionTest.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java index 664dc861c..4f80728f1 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SMRessourceMisingMongoDbConnectionTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.fileUpload; @@ -14,10 +14,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import org.apache.commons.lang3.RandomStringUtils; import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.rest.resource.model.ExceptionInfo; +import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.mock.web.MockMultipartFile; @@ -28,7 +27,8 @@ import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; /** - * Tests {@link SoftwareModuleResource} in case of missing MongoDB connection. + * Tests {@link MgmtSoftwareModuleResource} in case of missing MongoDB + * connection. * */ @Features("Component Tests - Management API") diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SuccessCondition.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SuccessCondition.java similarity index 91% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SuccessCondition.java rename to hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SuccessCondition.java index be6e166ef..cafc36b0b 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SuccessCondition.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SuccessCondition.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; /** * diff --git a/hawkbit-rest-resource/src/test/resources/application-test.properties b/hawkbit-mgmt-resource/src/test/resources/application-test.properties similarity index 100% rename from hawkbit-rest-resource/src/test/resources/application-test.properties rename to hawkbit-mgmt-resource/src/test/resources/application-test.properties diff --git a/hawkbit-rest-resource/src/test/resources/log4j2.xml b/hawkbit-mgmt-resource/src/test/resources/log4j2.xml similarity index 100% rename from hawkbit-rest-resource/src/test/resources/log4j2.xml rename to hawkbit-mgmt-resource/src/test/resources/log4j2.xml diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml new file mode 100644 index 000000000..9048cf677 --- /dev/null +++ b/hawkbit-rest-core/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-parent + 0.2.0-SNAPSHOT + + hawkbit-rest-core + hawkBit :: REST Resources + + + + + org.eclipse.hawkbit + hawkbit-repository + ${project.version} + + + org.eclipse.hawkbit + hawkbit-core + ${project.version} + + + + javax.servlet + javax.servlet-api + provided + + + org.apache.tomcat.embed + tomcat-embed-core + provided + + + org.springframework.data + spring-data-commons + + + org.springframework + spring-web + + + + + org.easytesting + fest-assert + test + + + ru.yandex.qatools.allure + allure-junit-adaptor + test + + + \ No newline at end of file diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortDirection.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/data/SortDirection.java similarity index 89% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortDirection.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/data/SortDirection.java index 344c27ce7..ca33d25b3 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortDirection.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/data/SortDirection.java @@ -6,7 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.rest.data; + +import org.eclipse.hawkbit.rest.exception.SortParameterUnsupportedDirectionException; /** * A definition of possible sorting direction. diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/MessageNotReadableException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/MessageNotReadableException.java similarity index 95% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/MessageNotReadableException.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/MessageNotReadableException.java index 023b67352..3c5e0aee3 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/MessageNotReadableException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/MessageNotReadableException.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.rest.exception; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/ResponseExceptionHandler.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java similarity index 98% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/ResponseExceptionHandler.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java index 25ddc7c4c..0f8da9ebe 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/ResponseExceptionHandler.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.rest.exception; import java.util.EnumMap; import java.util.Map; @@ -16,7 +16,7 @@ import javax.servlet.http.HttpServletRequest; import org.apache.tomcat.util.http.fileupload.FileUploadBase.FileSizeLimitExceededException; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; -import org.eclipse.hawkbit.rest.resource.model.ExceptionInfo; +import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; @@ -86,7 +86,8 @@ public class ResponseExceptionHandler { * as entity. */ @ExceptionHandler(SpServerRtException.class) - public ResponseEntity handleSpServerRtExceptions(final HttpServletRequest request, final Exception ex) { + public ResponseEntity handleSpServerRtExceptions(final HttpServletRequest request, + final Exception ex) { LOG.debug("Handling exception of request {}", request.getRequestURL()); final ExceptionInfo response = new ExceptionInfo(); final HttpStatus responseStatus; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortParameterSyntaxErrorException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterSyntaxErrorException.java similarity index 95% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortParameterSyntaxErrorException.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterSyntaxErrorException.java index b6bacd9d2..a8d476ac1 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortParameterSyntaxErrorException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterSyntaxErrorException.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.rest.exception; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortParameterUnsupportedDirectionException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedDirectionException.java similarity index 97% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortParameterUnsupportedDirectionException.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedDirectionException.java index 60fa3d8df..b44b94917 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortParameterUnsupportedDirectionException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedDirectionException.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.rest.exception; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortParameterUnsupportedFieldException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedFieldException.java similarity index 97% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortParameterUnsupportedFieldException.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedFieldException.java index 20c6f03d6..c9ce0dcdd 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortParameterUnsupportedFieldException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/SortParameterUnsupportedFieldException.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.rest.exception; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfo.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfo.java similarity index 97% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfo.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfo.java index e2d808943..d68e0037f 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfo.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfo.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model; +package org.eclipse.hawkbit.rest.json.model; import java.util.List; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/ByteRange.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/ByteRange.java similarity index 98% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/ByteRange.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/ByteRange.java index df72e2c53..667fc197d 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/ByteRange.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/ByteRange.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.helper; +package org.eclipse.hawkbit.rest.util; /** * Byte range for resume download operations. diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/FileSteamingFailedException.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FileSteamingFailedException.java similarity index 96% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/FileSteamingFailedException.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FileSteamingFailedException.java index e246bc6cd..abf7c0245 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/FileSteamingFailedException.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FileSteamingFailedException.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.helper; +package org.eclipse.hawkbit.rest.util; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/RestResourceConversionHelper.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java similarity index 94% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/RestResourceConversionHelper.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java index f09bd7401..827506048 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/helper/RestResourceConversionHelper.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.helper; +package org.eclipse.hawkbit.rest.util; import static com.google.common.base.Preconditions.checkNotNull; @@ -23,9 +23,7 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheWriteNotify; -import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.LocalArtifact; -import org.eclipse.hawkbit.rest.resource.model.distributionset.ActionTypeRest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; @@ -38,9 +36,6 @@ import com.google.common.net.HttpHeaders; /** * Utility class for the Rest Source API. * - * - * - * */ public final class RestResourceConversionHelper { private static final Logger LOG = LoggerFactory.getLogger(RestResourceConversionHelper.class); @@ -346,28 +341,4 @@ public final class RestResourceConversionHelper { return Arrays.binarySearch(matchValues, toMatch) > -1 || Arrays.binarySearch(matchValues, "*") > -1; } - /** - * Convert a action rest type to a action repository type. - * - * @param actionTypeRest - * the rest type - * @return or the action repository type - */ - public static ActionType convertActionType(final ActionTypeRest actionTypeRest) { - if (actionTypeRest == null) { - return null; - } - - switch (actionTypeRest) { - case SOFT: - return ActionType.SOFT; - case FORCED: - return ActionType.FORCED; - case TIMEFORCED: - return ActionType.TIMEFORCED; - default: - throw new IllegalStateException("Action Type is not supported"); - } - - } } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortUtility.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/SortUtility.java similarity index 94% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortUtility.java rename to hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/SortUtility.java index f8b997bf9..d0abc47a7 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SortUtility.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/SortUtility.java @@ -6,12 +6,15 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.rest.util; import java.util.List; import java.util.StringTokenizer; import org.eclipse.hawkbit.repository.FieldNameProvider; +import org.eclipse.hawkbit.rest.exception.SortParameterSyntaxErrorException; +import org.eclipse.hawkbit.rest.exception.SortParameterUnsupportedDirectionException; +import org.eclipse.hawkbit.rest.exception.SortParameterUnsupportedFieldException; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.domain.Sort.Order; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfoTest.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfoTest.java similarity index 95% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfoTest.java rename to hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfoTest.java index d240a814b..263bb75c5 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/ExceptionInfoTest.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfoTest.java @@ -6,13 +6,14 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model; +package org.eclipse.hawkbit.rest.json.model; import static org.fest.assertions.Assertions.assertThat; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.junit.Test; import ru.yandex.qatools.allure.annotations.Description; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SortUtilityTest.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/SortUtilityTest.java similarity index 91% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SortUtilityTest.java rename to hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/SortUtilityTest.java index 09a90c39c..8f1b814bf 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SortUtilityTest.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/SortUtilityTest.java @@ -6,14 +6,17 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.rest.util; -import static org.fest.assertions.api.Assertions.assertThat; +import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.fail; import java.util.List; import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.rest.exception.SortParameterSyntaxErrorException; +import org.eclipse.hawkbit.rest.exception.SortParameterUnsupportedDirectionException; +import org.eclipse.hawkbit.rest.exception.SortParameterUnsupportedFieldException; import org.junit.Test; import org.springframework.data.domain.Sort.Order; diff --git a/hawkbit-rest-core/src/test/resources/application-test.properties b/hawkbit-rest-core/src/test/resources/application-test.properties new file mode 100644 index 000000000..92506caa4 --- /dev/null +++ b/hawkbit-rest-core/src/test/resources/application-test.properties @@ -0,0 +1,63 @@ +# +# Copyright (c) 2015 Bosch Software Innovations GmbH and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# + +# used if IM profile is disabled +security.ignored=true + +# IM required for integration tests +spring.profiles.active=im,suiteembedded,artifactrepository,redis + +server.port=12222 + +spring.data.mongodb.uri=mongodb://localhost/spArtifactRepository${random.value} +spring.data.mongodb.port=28017 + + +# supported: H2, MYSQL +hawkbit.server.database=H2 +hawkbit.server.database.env=TEST +spring.main.show_banner=false + +hawkbit.server.ddi.security.authentication.header=true + +hawkbit.server.artifact.repo.upload.maxFileSize=5MB + +hawkbit.server.security.dos.maxStatusEntriesPerAction=100 + +hawkbit.server.security.dos.maxAttributeEntriesPerTarget=10 + +spring.jpa.database=${hawkbit.server.database} +#spring.jpa.show-sql=true + + +flyway.sqlMigrationSuffix=${spring.jpa.database}.sql + +# effective DB setting +spring.datasource.url=${${hawkbit.server.database}.spring.datasource.url} +spring.datasource.driverClassName=${${hawkbit.server.database}.spring.datasource.driverClassName} +spring.datasource.username=${${hawkbit.server.database}.spring.datasource.username} +spring.datasource.password=${${hawkbit.server.database}.spring.datasource.password} + +# H2 +##;AUTOCOMMIT=ON +H2.spring.datasource.url=jdbc:h2:mem:sp-db;DB_CLOSE_ON_EXIT=FALSE +#H2.spring.datasource.url=jdbc:h2:./db/sp-db;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;MVCC=TRUE +H2.spring.datasource.driverClassName=org.h2.Driver +H2.spring.datasource.username=sa +H2.spring.datasource.password=sa + +# MYSQL +MYSQL.spring.datasource.url=jdbc:mysql://localhost:3306/sp_test +MYSQL.spring.datasource.driverClassName=org.mariadb.jdbc.Driver +MYSQL.spring.datasource.username=root +MYSQL.spring.datasource.password= + +# SP Controller configuration +hawkbit.controller.pollingTime=00:01:00 +hawkbit.controller.pollingOverdueTime=00:01:00 diff --git a/hawkbit-rest-core/src/test/resources/log4j2.xml b/hawkbit-rest-core/src/test/resources/log4j2.xml new file mode 100644 index 000000000..98ea99ac9 --- /dev/null +++ b/hawkbit-rest-core/src/test/resources/log4j2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/OffsetBasedPageRequest.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/OffsetBasedPageRequest.java deleted file mode 100644 index 5ab6b33c6..000000000 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/OffsetBasedPageRequest.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.rest.resource; - -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; - -/** - * An implementation of the {@link PageRequest} which is offset based by means - * the offset is given and not the page number as in the original - * {@link PageRequest} implemntation where the offset is generated. Due that the - * REST-API is working with {@code offset} and {@code limit} parameter we need - * an offset based page request for JPA. - * - * - * - * - */ -public final class OffsetBasedPageRequest extends PageRequest { - - private static final long serialVersionUID = 1L; - private final int offset; - - /** - * Creates a new {@link OffsetBasedPageRequest}. Offsets are zero indexed, - * thus providing 0 for {@code offset} will return the first entry. - * - * @param offset - * zero-based offset index. - * @param limit - * the limit of the page to be returned. - */ - public OffsetBasedPageRequest(final int offset, final int limit) { - this(offset, limit, null); - } - - /** - * Creates a new {@link OffsetBasedPageRequest}. Offsets are zero indexed, - * thus providing 0 for {@code offset} will return the first entry. - * - * @param offset - * zero-based offset index. - * @param limit - * the limit of the page to be returned. - * @param sort - * sort can be {@literal null}. - */ - public OffsetBasedPageRequest(final int offset, final int limit, final Sort sort) { - super(0, limit, sort); - this.offset = offset; - } - - @Override - public int getOffset() { - return offset; - } - - @Override - public String toString() { - return "OffsetBasedPageRequest [offset=" + offset + ", getPageSize()=" + getPageSize() + ", getPageNumber()=" - + getPageNumber() + "]"; - } -} diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RestModelMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RestModelMapper.java deleted file mode 100644 index 9616d0e86..000000000 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RestModelMapper.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.rest.resource; - -import org.eclipse.hawkbit.repository.model.NamedEntity; -import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; -import org.eclipse.hawkbit.rest.resource.model.BaseEntityRest; -import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; - -/** - * A mapper which maps repository model to RESTful model representation and - * back. - * - * - * - * - */ -final class RestModelMapper { - - // private constructor, utility class - private RestModelMapper() { - - } - - static void mapBaseToBase(final BaseEntityRest response, final TenantAwareBaseEntity base) { - response.setCreatedBy(base.getCreatedBy()); - response.setLastModifiedBy(base.getLastModifiedBy()); - if (base.getCreatedAt() != null) { - response.setCreatedAt(base.getCreatedAt()); - } - if (base.getLastModifiedAt() != null) { - response.setLastModifiedAt(base.getLastModifiedAt()); - } - } - - static void mapNamedToNamed(final NamedEntityRest response, final NamedEntity base) { - mapBaseToBase(response, base); - - response.setName(base.getName()); - response.setDescription(base.getDescription()); - } -} diff --git a/hawkbit-rest-api/pom.xml b/hawkbit-system-api/pom.xml similarity index 83% rename from hawkbit-rest-api/pom.xml rename to hawkbit-system-api/pom.xml index 703d6caf3..b68b02b36 100644 --- a/hawkbit-rest-api/pom.xml +++ b/hawkbit-system-api/pom.xml @@ -16,15 +16,11 @@ hawkbit-parent 0.2.0-SNAPSHOT - hawkbit-rest-api - hawkBit :: REST API + hawkbit-system-api + hawkBit :: System REST API - - javax.validation - validation-api - org.springframework.hateoas spring-hateoas diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/system/TenantConfigurationValueRest.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValue.java similarity index 94% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/system/TenantConfigurationValueRest.java rename to hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValue.java index 47dcfebe0..c152de0c3 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/system/TenantConfigurationValueRest.java +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValue.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.system; +package org.eclipse.hawkbit.system.json.model.system; import org.springframework.hateoas.ResourceSupport; @@ -22,7 +22,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class TenantConfigurationValueRest extends ResourceSupport { +public class SystemTenantConfigurationValue extends ResourceSupport { @JsonInclude(Include.ALWAYS) private Object value; diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/system/TenantConfigurationValueRequest.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValueRequest.java similarity index 80% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/system/TenantConfigurationValueRequest.java rename to hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValueRequest.java index b0ae6e546..08bd06dd8 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/system/TenantConfigurationValueRequest.java +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValueRequest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.system; +package org.eclipse.hawkbit.system.json.model.system; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -18,21 +18,21 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class TenantConfigurationValueRequest { +public class SystemTenantConfigurationValueRequest { @JsonProperty(required = true) private Object value; /** * - * @return the value of the TenantConfigurationValueRequest + * @return the value of the SystemTenantConfigurationValueRequest */ public Object getValue() { return value; } /** - * Sets the TenantConfigurationValueRequest + * Sets the SystemTenantConfigurationValueRequest * * @param value */ diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/CacheRest.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemCache.java similarity index 84% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/CacheRest.java rename to hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemCache.java index 35d35c0b1..428483be9 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/CacheRest.java +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemCache.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.systemmanagement; +package org.eclipse.hawkbit.system.json.model.systemmanagement; import java.util.Collection; @@ -16,14 +16,11 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; /** * Model representation of an Cache entry as json. - * - * - * * */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class CacheRest { +public class SystemCache { private final String name; private final Collection keys; @@ -34,7 +31,7 @@ public class CacheRest { * @param cacheKeys * the keys which contains in the cache */ - public CacheRest(final String name, final Collection cacheKeys) { + public SystemCache(final String name, final Collection cacheKeys) { this.name = name; this.keys = cacheKeys; } @@ -60,6 +57,6 @@ public class CacheRest { */ @Override public String toString() { - return "CacheRest [name=" + name + ", keys=" + keys + "]"; + return "SystemCache [name=" + name + ", keys=" + keys + "]"; } } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/SystemStatisticsRest.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemStatisticsRest.java similarity index 89% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/SystemStatisticsRest.java rename to hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemStatisticsRest.java index c69201d69..8e1c80ded 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/SystemStatisticsRest.java +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemStatisticsRest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.systemmanagement; +package org.eclipse.hawkbit.system.json.model.systemmanagement; import java.util.List; @@ -28,7 +28,7 @@ public class SystemStatisticsRest { private long overallActions; private long overallTenants; - private List tenantStats; + private List tenantStats; public long getOverallTargets() { return overallTargets; @@ -75,11 +75,11 @@ public class SystemStatisticsRest { return this; } - public void setTenantStats(final List tenantStats) { + public void setTenantStats(final List tenantStats) { this.tenantStats = tenantStats; } - public List getTenantStats() { + public List getTenantStats() { return tenantStats; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/TenantSystemUsageRest.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemTenantServiceUsage.java similarity index 91% rename from hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/TenantSystemUsageRest.java rename to hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemTenantServiceUsage.java index bc8653b36..ab7b7e6b8 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/systemmanagement/TenantSystemUsageRest.java +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemTenantServiceUsage.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource.model.systemmanagement; +package org.eclipse.hawkbit.system.json.model.systemmanagement; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -18,7 +18,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class TenantSystemUsageRest { +public class SystemTenantServiceUsage { private final String tenantName; private long targets; @@ -31,7 +31,7 @@ public class TenantSystemUsageRest { * * @param tenantName */ - public TenantSystemUsageRest(final String tenantName) { + public SystemTenantServiceUsage(final String tenantName) { super(); this.tenantName = tenantName; } diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java new file mode 100644 index 000000000..9e7864439 --- /dev/null +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.system.rest.api; + +import java.util.Collection; + +import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemCache; +import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemStatisticsRest; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * {@link SystemManagement} capabilities by REST. + * + */ +@RequestMapping(SystemRestConstant.SYSTEM_ADMIN_MAPPING) +public interface SystemManagementRestApi { + + /** + * Deletes the tenant data of a given tenant. USE WITH CARE! + * + * @param tenant + * to delete + * @return HttpStatus.OK + */ + @RequestMapping(method = RequestMethod.DELETE, value = "/tenants/{tenant}") + ResponseEntity deleteTenant(@PathVariable final String tenant); + + /** + * Collects and returns system usage statistics. It provides a system wide + * overview and tenant based stats. + * + * @return system usage statistics + */ + @RequestMapping(method = RequestMethod.GET, value = "/usage", produces = { "application/hal+json", + MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity getSystemUsageStats(); + + /** + * Returns a list of all caches. + * + * @return a list of caches for all tenants + */ + @RequestMapping(method = RequestMethod.GET, value = "/caches") + ResponseEntity> getCaches(); + + /** + * Invalidates all caches for all tenants. + * + * @return a list of cache names which has been invalidated + */ + @RequestMapping(method = RequestMethod.DELETE, value = "/caches") + ResponseEntity> invalidateCaches(); + +} diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java new file mode 100644 index 000000000..aa764d82a --- /dev/null +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java @@ -0,0 +1,86 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.system.rest.api; + +import java.util.Map; + +import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValue; +import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValueRequest; +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; + +/** + * REST Resource handling tenant specific configuration operations. + * + * + */ +@RequestMapping(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING) +public interface SystemRestApi { + + @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity getSystem(); + + /** + * @return a Map of all configuration values. + */ + @RequestMapping(method = RequestMethod.GET, value = "/configs", produces = { "application/hal+json", + MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity> getSystemConfiguration(); + + /** + * Handles the DELETE request of deleting a tenant specific configuration + * value within SP. + * + * @param keyName + * the Name of the configuration key + * @return If the given configuration value exists and could be deleted Http + * OK. In any failure the JsonResponseExceptionHandler is handling + * the response. + */ + @RequestMapping(method = RequestMethod.DELETE, value = "/configs/{keyName}", produces = { "application/hal+json", + MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity deleteConfigurationValue(@PathVariable final String keyName); + + /** + * Handles the GET request of deleting a tenant specific configuration value + * within SP. + * + * @param keyName + * the Name of the configuration key + * @return If the given configuration value exists and could be get Http OK. + * In any failure the JsonResponseExceptionHandler is handling the + * response. + */ + @RequestMapping(method = RequestMethod.GET, value = "/configs/{keyName}", produces = { "application/hal+json", + MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity getConfigurationValue(@PathVariable final String keyName); + + /** + * Handles the GET request of deleting a tenant specific configuration value + * within SP. + * + * @param keyName + * the Name of the configuration key + * @param configurationValueRest + * the new value for the configuration + * @return If the given configuration value exists and could be get Http OK. + * In any failure the JsonResponseExceptionHandler is handling the + * response. + */ + @RequestMapping(method = RequestMethod.PUT, value = "/configs/{keyName}", consumes = { "application/hal+json", + MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity updateConfigurationValue(@PathVariable final String keyName, + @RequestBody final SystemTenantConfigurationValueRequest configurationValueRest); + +} \ No newline at end of file diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestConstant.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestConstant.java new file mode 100644 index 000000000..cb10ba8b2 --- /dev/null +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestConstant.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.system.rest.api; + +/** + * + */ +public final class SystemRestConstant { + + /** + * API version definition. We are using only major versions. + */ + public static final String API_VERSION = "v1"; + + /** + * The base URL mapping for the spring acuator management context path. + */ + public static final String BASE_SYSTEM_MAPPING = "/system"; + + /** + * The base URL mapping of the SP rest resources. + */ + public static final String BASE_V1_REQUEST_MAPPING = "/rest/" + API_VERSION; + + /** + * URL mapping for system admin operations. + */ + public static final String SYSTEM_ADMIN_MAPPING = BASE_SYSTEM_MAPPING + "/admin"; + + public static final String SYSTEM_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + BASE_SYSTEM_MAPPING; + + private SystemRestConstant() { + + } +} diff --git a/hawkbit-system-resource/pom.xml b/hawkbit-system-resource/pom.xml new file mode 100644 index 000000000..fed198db3 --- /dev/null +++ b/hawkbit-system-resource/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-parent + 0.2.0-SNAPSHOT + + hawkbit-system-resource + hawkBit :: REST Resources + + + + + org.eclipse.hawkbit + hawkbit-repository + ${project.version} + + + org.eclipse.hawkbit + hawkbit-system-api + ${project.version} + + + org.eclipse.hawkbit + hawkbit-rest-core + ${project.version} + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.easytesting + fest-assert-core + test + + + org.eclipse.hawkbit + hawkbit-repository + ${project.version} + tests + test + + + org.easytesting + fest-assert + test + + + ru.yandex.qatools.allure + allure-junit-adaptor + test + + + \ No newline at end of file diff --git a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java new file mode 100644 index 000000000..209dfdd95 --- /dev/null +++ b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.system.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Controller; + +/** + * Annotation to enable {@link ComponentScan} in the resource package to setup + * all {@link Controller} annotated classes and setup the System API. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Configuration +@ComponentScan +public @interface EnableSystemApi { + +} diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java similarity index 71% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java rename to hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java index 27cfdb924..074cf444d 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java +++ b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.system.rest.resource; import java.util.Collection; import java.util.Collections; @@ -17,43 +17,32 @@ import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.report.model.SystemUsageReport; import org.eclipse.hawkbit.report.model.TenantUsage; import org.eclipse.hawkbit.repository.SystemManagement; -import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.rest.resource.model.systemmanagement.CacheRest; -import org.eclipse.hawkbit.rest.resource.model.systemmanagement.SystemStatisticsRest; -import org.eclipse.hawkbit.rest.resource.model.systemmanagement.TenantSystemUsageRest; +import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemCache; +import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemStatisticsRest; +import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemTenantServiceUsage; +import org.eclipse.hawkbit.system.rest.api.SystemManagementRestApi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; /** * {@link SystemManagement} capabilities by REST. * - * - * - * */ @RestController -@RequestMapping(RestConstants.SYSTEM_ADMIN_MAPPING) -public class SystemManagementResource { +public class SystemManagementResource implements SystemManagementRestApi { private static final Logger LOGGER = LoggerFactory.getLogger(SystemManagementResource.class); @Autowired private SystemManagement systemManagement; - @Autowired - private TenantConfigurationManagement tenantConfigurationManagement; - @Autowired private CacheManager cacheManager; @@ -64,10 +53,9 @@ public class SystemManagementResource { * to delete * @return HttpStatus.OK */ - @RequestMapping(method = RequestMethod.DELETE, value = "/tenants/{tenant}") - public ResponseEntity deleteTenant(@PathVariable final String tenant) { + @Override + public ResponseEntity deleteTenant(final String tenant) { systemManagement.deleteTenant(tenant); - return new ResponseEntity<>(HttpStatus.OK); } @@ -77,8 +65,7 @@ public class SystemManagementResource { * * @return system usage statistics */ - @RequestMapping(method = RequestMethod.GET, value = "/usage", produces = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }) + @Override public ResponseEntity getSystemUsageStats() { final SystemUsageReport report = systemManagement.getSystemUsageStatistics(); @@ -93,8 +80,8 @@ public class SystemManagementResource { return ResponseEntity.ok(result); } - private static TenantSystemUsageRest convertTenant(final TenantUsage tenant) { - final TenantSystemUsageRest result = new TenantSystemUsageRest(tenant.getTenantName()); + private static SystemTenantServiceUsage convertTenant(final TenantUsage tenant) { + final SystemTenantServiceUsage result = new SystemTenantServiceUsage(tenant.getTenantName()); result.setActions(tenant.getActions()); result.setArtifacts(tenant.getArtifacts()); result.setOverallArtifactVolumeInBytes(tenant.getOverallArtifactVolumeInBytes()); @@ -108,9 +95,9 @@ public class SystemManagementResource { * * @return a list of caches for all tenants */ - @RequestMapping(method = RequestMethod.GET, value = "/caches") + @Override @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) - public ResponseEntity> getCaches() { + public ResponseEntity> getCaches() { final Collection cacheNames = cacheManager.getCacheNames(); return ResponseEntity .ok(cacheNames.stream().map(cacheManager::getCache).map(this::cacheRest).collect(Collectors.toList())); @@ -121,8 +108,8 @@ public class SystemManagementResource { * * @return a list of cache names which has been invalidated */ - @RequestMapping(method = RequestMethod.DELETE, value = "/caches") @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) + @Override public ResponseEntity> invalidateCaches() { final Collection cacheNames = cacheManager.getCacheNames(); LOGGER.info("Invalidating caches {}", cacheNames); @@ -130,20 +117,20 @@ public class SystemManagementResource { return ResponseEntity.ok(cacheNames); } - private CacheRest cacheRest(final Cache cache) { + private SystemCache cacheRest(final Cache cache) { final Object nativeCache = cache.getNativeCache(); if (nativeCache instanceof com.google.common.cache.Cache) { return guavaCache(cache, nativeCache); } else { - return new CacheRest(cache.getName(), Collections.emptyList()); + return new SystemCache(cache.getName(), Collections.emptyList()); } } @SuppressWarnings("unchecked") - private CacheRest guavaCache(final Cache cache, final Object nativeCache) { + private SystemCache guavaCache(final Cache cache, final Object nativeCache) { final com.google.common.cache.Cache guavaCache = (com.google.common.cache.Cache) nativeCache; final List keys = guavaCache.asMap().keySet().stream().map(key -> key.toString()) .collect(Collectors.toList()); - return new CacheRest(cache.getName(), keys); + return new SystemCache(cache.getName(), keys); } } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemMapper.java b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemMapper.java similarity index 81% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemMapper.java rename to hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemMapper.java index 0f8119b53..3a7b39029 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemMapper.java +++ b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.system.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -16,7 +16,7 @@ import java.util.Map; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; -import org.eclipse.hawkbit.rest.resource.model.system.TenantConfigurationValueRest; +import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValue; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; /** @@ -34,10 +34,10 @@ public class SystemMapper { * instance of TenantConfigurationManagement * @return a map of all existing configuration values */ - public static Map toResponse( + public static Map toResponse( final TenantConfigurationManagement tenantConfigurationManagement) { - final Map configurationMap = new HashMap<>(); + final Map configurationMap = new HashMap<>(); for (final TenantConfigurationKey key : TenantConfigurationKey.values()) { configurationMap.put(key.getKeyName(), @@ -49,15 +49,15 @@ public class SystemMapper { /** * maps a TenantConfigurationValue from the repository model to a - * TenantConfigurationValueRest, the RESTful model. + * SystemTenantConfigurationValue, the RESTful model. * * @param repoConfValue * configuration value as repository model * @return configuration value as RESTful model */ - public static TenantConfigurationValueRest toResponse(final String key, + public static SystemTenantConfigurationValue toResponse(final String key, final TenantConfigurationValue repoConfValue) { - final TenantConfigurationValueRest restConfValue = new TenantConfigurationValueRest(); + final SystemTenantConfigurationValue restConfValue = new SystemTenantConfigurationValue(); restConfValue.setValue(repoConfValue.getValue()); restConfValue.setGlobal(repoConfValue.isGlobal()); diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemResource.java b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java similarity index 67% rename from hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemResource.java rename to hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java index 9f2201868..ca9b84df4 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemResource.java +++ b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.system.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -15,20 +15,16 @@ import java.util.Map; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; -import org.eclipse.hawkbit.rest.resource.model.system.TenantConfigurationValueRequest; -import org.eclipse.hawkbit.rest.resource.model.system.TenantConfigurationValueRest; +import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValue; +import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValueRequest; +import org.eclipse.hawkbit.system.rest.api.SystemRestApi; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.ResourceSupport; 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.RestController; /** @@ -39,15 +35,14 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController -@RequestMapping(RestConstants.SYSTEM_V1_REQUEST_MAPPING) -public class SystemResource { +public class SystemResource implements SystemRestApi { private static final Logger LOG = LoggerFactory.getLogger(SystemResource.class); @Autowired private TenantConfigurationManagement tenantConfigurationManagement; - @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) + @Override public ResponseEntity getSystem() { final ResourceSupport resourceSupport = new ResourceSupport(); resourceSupport.add(linkTo(methodOn(SystemResource.class).getSystemConfiguration()).withRel("configs")); @@ -57,9 +52,8 @@ public class SystemResource { /** * @return a Map of all configuration values. */ - @RequestMapping(method = RequestMethod.GET, value = "/configs", produces = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getSystemConfiguration() { + @Override + public ResponseEntity> getSystemConfiguration() { return new ResponseEntity<>(SystemMapper.toResponse(tenantConfigurationManagement), HttpStatus.OK); } @@ -73,9 +67,8 @@ public class SystemResource { * OK. In any failure the JsonResponseExceptionHandler is handling * the response. */ - @RequestMapping(method = RequestMethod.DELETE, value = "/configs/{keyName}", produces = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity deleteConfigurationValue(@PathVariable final String keyName) { + @Override + public ResponseEntity deleteConfigurationValue(final String keyName) { final TenantConfigurationKey configKey = TenantConfigurationKey.fromKeyName(keyName); @@ -95,9 +88,8 @@ public class SystemResource { * In any failure the JsonResponseExceptionHandler is handling the * response. */ - @RequestMapping(method = RequestMethod.GET, value = "/configs/{keyName}", produces = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getConfigurationValue(@PathVariable final String keyName) { + @Override + public ResponseEntity getConfigurationValue(final String keyName) { final TenantConfigurationKey configKey = TenantConfigurationKey.fromKeyName(keyName); @@ -118,10 +110,9 @@ public class SystemResource { * In any failure the JsonResponseExceptionHandler is handling the * response. */ - @RequestMapping(method = RequestMethod.PUT, value = "/configs/{keyName}", consumes = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity updateConfigurationValue(@PathVariable final String keyName, - @RequestBody final TenantConfigurationValueRequest configurationValueRest) { + @Override + public ResponseEntity updateConfigurationValue(final String keyName, + final SystemTenantConfigurationValueRequest configurationValueRest) { final TenantConfigurationKey configKey = TenantConfigurationKey.fromKeyName(keyName); diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/MockMvcResultPrinter.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/MockMvcResultPrinter.java new file mode 100644 index 000000000..de82640dc --- /dev/null +++ b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/MockMvcResultPrinter.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.system.rest.resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultHandler; +import org.springframework.test.web.servlet.result.PrintingResultHandler; +import org.springframework.util.CollectionUtils; + +public abstract class MockMvcResultPrinter { + private static final Logger LOG = LoggerFactory.getLogger(MockMvcResultPrinter.class); + + private MockMvcResultPrinter() { + } + + /** + * Print {@link MvcResult} details to the "standard" output stream. + */ + public static ResultHandler print() { + return new ConsolePrintingResultHandler(); + } + + /** + * An {@link PrintingResultHandler} that writes to the "standard" output + * stream + */ + private static class ConsolePrintingResultHandler extends PrintingResultHandler { + + public ConsolePrintingResultHandler() { + super(new ResultValuePrinter() { + + @Override + public void printHeading(final String heading) { + LOG.debug(String.format("%20s:", heading)); + } + + @Override + public void printValue(final String label, Object value) { + if (value != null && value.getClass().isArray()) { + value = CollectionUtils.arrayToList(value); + } + LOG.debug(String.format("%20s = %s", label, value)); + } + }); + } + } +} diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/ResourceUtility.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/ResourceUtility.java new file mode 100644 index 000000000..1b2772530 --- /dev/null +++ b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/ResourceUtility.java @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.system.rest.resource; + +import java.io.IOException; + +import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * Utility additions for the REST API tests. + * + * + */ +public final class ResourceUtility { + private static final ObjectMapper mapper = new ObjectMapper(); + + static ExceptionInfo convertException(final String jsonExceptionResponse) + throws JsonParseException, JsonMappingException, IOException { + return mapper.readValue(jsonExceptionResponse, ExceptionInfo.class); + } + +} diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SystemManagementResourceTest.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java similarity index 98% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SystemManagementResourceTest.java rename to hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java index 76cd68d64..38a8f1b11 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SystemManagementResourceTest.java +++ b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.system.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -21,7 +21,6 @@ import java.util.List; import java.util.Random; import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithSpringAuthorityRule; import org.eclipse.hawkbit.WithUser; @@ -40,7 +39,7 @@ import ru.yandex.qatools.allure.annotations.Stories; * * */ -@Features("Component Tests - Management API") +@Features("Component Tests - System API") @Stories("System Management Resource") public class SystemManagementResourceTest extends AbstractIntegrationTestWithMongoDB { diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/ConfigurationResourceTest.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java similarity index 87% rename from hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/ConfigurationResourceTest.java rename to hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java index 39e571a2c..13ccf0999 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/ConfigurationResourceTest.java +++ b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rest.resource; +package org.eclipse.hawkbit.system.rest.resource; import static org.fest.assertions.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.equalTo; @@ -19,10 +19,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; -import org.eclipse.hawkbit.rest.resource.model.ExceptionInfo; +import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; +import org.eclipse.hawkbit.system.rest.api.SystemRestConstant; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.junit.Test; import org.springframework.http.MediaType; @@ -33,9 +33,9 @@ import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; -@Features("Component Tests - Management RESTful API") +@Features("Component Tests - System RESTful API") @Stories("ConfigurationResource") -public class ConfigurationResourceTest extends AbstractIntegrationTest { +public class SystemResourceTest extends AbstractIntegrationTest { private static String BASE_JSON_REQUEST_STRING = "{\"value\":\"%s\"}"; @@ -43,7 +43,7 @@ public class ConfigurationResourceTest extends AbstractIntegrationTest { @Description("perform a GET request on all existing configurations.") public void getConfigurationValues() throws Exception { - final ResultActions resultActions = mvc.perform(get(RestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/")) + final ResultActions resultActions = mvc.perform(get(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("$.*", hasSize(TenantConfigurationKey.values().length))); @@ -64,7 +64,7 @@ public class ConfigurationResourceTest extends AbstractIntegrationTest { tenantConfigurationManagement.addOrUpdateConfiguration(key, notGlobalValue); - mvc.perform(get(RestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}/", key.getKeyName())) + mvc.perform(get(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}/", key.getKeyName())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("value", equalTo(notGlobalValue))).andExpect(jsonPath("global", equalTo(false))) .andExpect(jsonPath("createdAt", notNullValue())).andExpect(jsonPath("createdBy", notNullValue())); @@ -77,7 +77,7 @@ public class ConfigurationResourceTest extends AbstractIntegrationTest { final TenantConfigurationKey key = TenantConfigurationKey.AUTHENTICATION_MODE_HEADER_AUTHORITY_NAME; final String testValue = "12:12:12"; - mvc.perform(put(RestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}/", key.getKeyName()) + mvc.perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}/", key.getKeyName()) .content(String.format(BASE_JSON_REQUEST_STRING, testValue)).contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); @@ -98,7 +98,7 @@ public class ConfigurationResourceTest extends AbstractIntegrationTest { assertThat(tenantConfigurationManagement.getConfigurationValue(key, String.class).getValue()) .isEqualTo(notGlobalValue); - mvc.perform(delete(RestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}/", key.getKeyName())) + mvc.perform(delete(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}/", key.getKeyName())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isNoContent()); assertThat(tenantConfigurationManagement.getConfigurationValue(key, String.class).isGlobal()).isEqualTo(true); @@ -114,7 +114,7 @@ public class ConfigurationResourceTest extends AbstractIntegrationTest { final String testValue = "12:12:12"; final MvcResult mvcResult = mvc - .perform(put(RestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}", notExistingKey) + .perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}", notExistingKey) .content(String.format(BASE_JSON_REQUEST_STRING, testValue)) .contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest()).andReturn(); @@ -133,7 +133,7 @@ public class ConfigurationResourceTest extends AbstractIntegrationTest { final String testValue = "invalidFormattedDuration"; final MvcResult mvcResult = mvc - .perform(put(RestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}", key.getKeyName()) + .perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}", key.getKeyName()) .content(String.format(BASE_JSON_REQUEST_STRING, testValue)) .contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest()).andReturn(); diff --git a/hawkbit-system-resource/src/test/resources/application-test.properties b/hawkbit-system-resource/src/test/resources/application-test.properties new file mode 100644 index 000000000..92506caa4 --- /dev/null +++ b/hawkbit-system-resource/src/test/resources/application-test.properties @@ -0,0 +1,63 @@ +# +# Copyright (c) 2015 Bosch Software Innovations GmbH and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# + +# used if IM profile is disabled +security.ignored=true + +# IM required for integration tests +spring.profiles.active=im,suiteembedded,artifactrepository,redis + +server.port=12222 + +spring.data.mongodb.uri=mongodb://localhost/spArtifactRepository${random.value} +spring.data.mongodb.port=28017 + + +# supported: H2, MYSQL +hawkbit.server.database=H2 +hawkbit.server.database.env=TEST +spring.main.show_banner=false + +hawkbit.server.ddi.security.authentication.header=true + +hawkbit.server.artifact.repo.upload.maxFileSize=5MB + +hawkbit.server.security.dos.maxStatusEntriesPerAction=100 + +hawkbit.server.security.dos.maxAttributeEntriesPerTarget=10 + +spring.jpa.database=${hawkbit.server.database} +#spring.jpa.show-sql=true + + +flyway.sqlMigrationSuffix=${spring.jpa.database}.sql + +# effective DB setting +spring.datasource.url=${${hawkbit.server.database}.spring.datasource.url} +spring.datasource.driverClassName=${${hawkbit.server.database}.spring.datasource.driverClassName} +spring.datasource.username=${${hawkbit.server.database}.spring.datasource.username} +spring.datasource.password=${${hawkbit.server.database}.spring.datasource.password} + +# H2 +##;AUTOCOMMIT=ON +H2.spring.datasource.url=jdbc:h2:mem:sp-db;DB_CLOSE_ON_EXIT=FALSE +#H2.spring.datasource.url=jdbc:h2:./db/sp-db;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;MVCC=TRUE +H2.spring.datasource.driverClassName=org.h2.Driver +H2.spring.datasource.username=sa +H2.spring.datasource.password=sa + +# MYSQL +MYSQL.spring.datasource.url=jdbc:mysql://localhost:3306/sp_test +MYSQL.spring.datasource.driverClassName=org.mariadb.jdbc.Driver +MYSQL.spring.datasource.username=root +MYSQL.spring.datasource.password= + +# SP Controller configuration +hawkbit.controller.pollingTime=00:01:00 +hawkbit.controller.pollingOverdueTime=00:01:00 diff --git a/pom.xml b/pom.xml index 11374a16d..0260683ba 100644 --- a/pom.xml +++ b/pom.xml @@ -24,24 +24,27 @@ hawkBit :: Parent - hawkbit-dmf-api - hawkbit-rest-api - hawkbit-ddi-api hawkbit-core hawkbit-security-core - hawkbit-repository + hawkbit-rest-core + hawkbit-system-api + hawkbit-system-resource + hawkbit-mgmt-api + hawkbit-mgmt-resource + hawkbit-ddi-api + hawkbit-ddi-resource + hawkbit-dmf-api hawkbit-dmf-amqp + hawkbit-repository hawkbit-security-integration hawkbit-http-security - hawkbit-rest-resource - hawkbit-ddi-resource hawkbit-ui hawkbit-artifact-repository-mongo hawkbit-autoconfigure hawkbit-cache-redis hawkbit-test-report - examples - + examples + From 2538d1278501e83441c69d2590b9ce3586d4b863 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 20 Apr 2016 17:55:54 +0200 Subject: [PATCH 013/371] Remove duplicate test util classes Signed-off-by: SirWayne --- hawkbit-ddi-resource/pom.xml | 8 +- .../rest/resource/DdiCancelActionTest.java | 2 + .../ddi/rest/resource/DdiConfigDataTest.java | 2 + .../rest/resource/DdiDeploymentBaseTest.java | 2 + .../rest/resource/DdiRootControllerTest.java | 2 + hawkbit-mgmt-resource/pom.xml | 6 + .../mgmt/rest/resource/JsonBuilder.java | 466 ------------------ .../MgmtDistributionSetResourceTest.java | 2 + .../MgmtDistributionSetTypeResourceTest.java | 2 + .../resource/MgmtDownloadResourceTest.java | 1 + .../resource/MgmtRolloutResourceTest.java | 4 +- .../MgmtSoftwareModuleResourceTest.java | 2 + .../MgmtSoftwareModuleTypeResourceTest.java | 2 + .../rest/resource/MgmtTargetResourceTest.java | 2 + .../rest/resource/MockMvcResultPrinter.java | 55 --- ...MRessourceMisingMongoDbConnectionTest.java | 1 + hawkbit-rest-core/pom.xml | 26 + .../hawkbit/rest/util}/JsonBuilder.java | 2 +- .../rest/util}/MockMvcResultPrinter.java | 2 +- .../hawkbit/rest/util}/SuccessCondition.java | 2 +- .../src/test/resources/log4j2.xml | 26 - hawkbit-system-resource/pom.xml | 6 + .../rest/resource/MockMvcResultPrinter.java | 55 --- .../SystemManagementResourceTest.java | 1 + .../rest/resource/SystemResourceTest.java | 1 + .../resources/application-test.properties | 63 --- 26 files changed, 73 insertions(+), 670 deletions(-) delete mode 100644 hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/JsonBuilder.java delete mode 100644 hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MockMvcResultPrinter.java rename {hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource => hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util}/JsonBuilder.java (99%) rename {hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource => hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util}/MockMvcResultPrinter.java (97%) rename {hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource => hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util}/SuccessCondition.java (91%) delete mode 100644 hawkbit-rest-core/src/test/resources/log4j2.xml delete mode 100644 hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/MockMvcResultPrinter.java delete mode 100644 hawkbit-system-resource/src/test/resources/application-test.properties diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index cafcfdf70..f73cb6c1e 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -28,7 +28,7 @@ org.eclipse.hawkbit - hawkbit-rest-core + hawkbit-rest-core ${project.version} @@ -40,6 +40,12 @@ + + org.eclipse.hawkbit + hawkbit-rest-core + ${project.version} + test + org.springframework.boot spring-boot-starter diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java index 27a7e7f1f..ddd826e8a 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java @@ -28,6 +28,8 @@ import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.Test; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java index b757f1f1a..4a86cfe8c 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java @@ -23,6 +23,8 @@ import java.util.Map; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.Test; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index dd2f66a04..5c89291cc 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -35,6 +35,8 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.fest.assertions.core.Condition; import org.junit.Test; import org.springframework.data.domain.PageRequest; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index f291393b9..407ff63d0 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -32,6 +32,8 @@ import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.hawkbit.util.IpUtil; import org.junit.Test; diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index 311cbae76..cc95f8026 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -31,6 +31,12 @@ + + org.eclipse.hawkbit + hawkbit-rest-core + ${project.version} + test + org.springframework.boot spring-boot-starter diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/JsonBuilder.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/JsonBuilder.java deleted file mode 100644 index 5a9f2785a..000000000 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/JsonBuilder.java +++ /dev/null @@ -1,466 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.mgmt.rest.resource; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.RandomStringUtils; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; -import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.model.Target; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -/** - * Builder class for building certain json strings. - * - * - * - */ -public abstract class JsonBuilder { - - public static String softwareModules(final List modules) throws JSONException { - final StringBuilder builder = new StringBuilder(); - - builder.append("["); - int i = 0; - for (final SoftwareModule module : modules) { - try { - builder.append(new JSONObject().put("name", module.getName()) - .put("description", module.getDescription()).put("type", module.getType().getKey()) - .put("id", Long.MAX_VALUE).put("vendor", module.getVendor()) - .put("version", module.getVersion()).put("createdAt", "0").put("updatedAt", "0") - .put("createdBy", "fghdfkjghdfkjh").put("updatedBy", "fghdfkjghdfkjh").toString()); - } catch (final Exception e) { - e.printStackTrace(); - } - - if (++i < modules.size()) { - builder.append(","); - } - } - - builder.append("]"); - - return builder.toString(); - - } - - public static String softwareModulesCreatableFieldsOnly(final List modules) throws JSONException { - final StringBuilder builder = new StringBuilder(); - - builder.append("["); - int i = 0; - for (final SoftwareModule module : modules) { - try { - builder.append(new JSONObject().put("name", module.getName()) - .put("description", module.getDescription()).put("type", module.getType().getKey()) - .put("vendor", module.getVendor()).put("version", module.getVersion()).toString()); - } catch (final Exception e) { - e.printStackTrace(); - } - - if (++i < modules.size()) { - builder.append(","); - } - } - - builder.append("]"); - - return builder.toString(); - - } - - public static String softwareModuleUpdatableFieldsOnly(final SoftwareModule module) throws JSONException { - final StringBuilder builder = new StringBuilder(); - - builder.append(new JSONObject().put("description", module.getDescription()).put("vendor", module.getVendor()) - .toString()); - - return builder.toString(); - - } - - public static String softwareModuleTypes(final List types) throws JSONException { - final StringBuilder builder = new StringBuilder(); - - builder.append("["); - int i = 0; - for (final SoftwareModuleType module : types) { - try { - builder.append(new JSONObject().put("name", module.getName()) - .put("description", module.getDescription()).put("id", Long.MAX_VALUE) - .put("key", module.getKey()).put("maxAssignments", module.getMaxAssignments()) - .put("createdAt", "0").put("updatedAt", "0").put("createdBy", "fghdfkjghdfkjh") - .put("updatedBy", "fghdfkjghdfkjh").toString()); - } catch (final Exception e) { - e.printStackTrace(); - } - - if (++i < types.size()) { - builder.append(","); - } - } - - builder.append("]"); - - return builder.toString(); - - } - - public static String softwareModuleTypesCreatableFieldsOnly(final List types) - throws JSONException { - final StringBuilder builder = new StringBuilder(); - - builder.append("["); - int i = 0; - for (final SoftwareModuleType module : types) { - try { - builder.append(new JSONObject().put("name", module.getName()) - .put("description", module.getDescription()).put("key", module.getKey()) - .put("maxAssignments", module.getMaxAssignments()).toString()); - } catch (final Exception e) { - e.printStackTrace(); - } - - if (++i < types.size()) { - builder.append(","); - } - } - - builder.append("]"); - - return builder.toString(); - - } - - /** - * builds a json string for the feedback for the execution "proceeding". - * - * @param id - * of the Action feedback refers to - * @return the built string - * @throws JSONException - */ - public static String deploymentActionInProgressFeedback(final String id) throws JSONException { - return deploymentActionFeedback(id, "proceeding"); - } - - /** - * builds a certain json string for a action feedback. - * - * @param id - * of the action the feedback refers to - * @param execution - * see ExecutionStatus - * @return the build json string - * @throws JSONException - */ - public static String deploymentActionFeedback(final String id, final String execution) throws JSONException { - return deploymentActionFeedback(id, execution, "none", RandomStringUtils.randomAscii(1000)); - - } - - public static String deploymentActionFeedback(final String id, final String execution, final String message) - throws JSONException { - return deploymentActionFeedback(id, execution, "none", message); - - } - - public static String deploymentActionFeedback(final String id, final String execution, final String finished, - final String message) throws JSONException { - final List messages = new ArrayList(); - messages.add(message); - - return new JSONObject() - .put("id", id) - .put("time", "20140511T121314") - .put("status", - new JSONObject() - .put("execution", execution) - .put("result", - new JSONObject().put("finished", finished).put("progress", - new JSONObject().put("cnt", 2).put("of", 5))).put("details", messages)) - .toString(); - - } - - /** - * @param types - * @return - */ - public static String distributionSetTypes(final List types) { - final StringBuilder builder = new StringBuilder(); - - builder.append("["); - int i = 0; - for (final DistributionSetType module : types) { - - try { - - final JSONArray osmTypes = new JSONArray(); - module.getOptionalModuleTypes().forEach(smt -> osmTypes.put(new JSONObject().put("id", smt.getId()))); - - final JSONArray msmTypes = new JSONArray(); - module.getMandatoryModuleTypes().forEach(smt -> msmTypes.put(new JSONObject().put("id", smt.getId()))); - - builder.append(new JSONObject().put("name", module.getName()) - .put("description", module.getDescription()).put("id", Long.MAX_VALUE) - .put("key", module.getKey()).put("createdAt", "0").put("updatedAt", "0") - .put("createdBy", "fghdfkjghdfkjh").put("optionalmodules", osmTypes) - .put("mandatorymodules", msmTypes).put("updatedBy", "fghdfkjghdfkjh").toString()); - } catch (final Exception e) { - e.printStackTrace(); - } - - if (++i < types.size()) { - builder.append(","); - } - } - - builder.append("]"); - - return builder.toString(); - } - - public static String distributionSetTypesCreateValidFieldsOnly(final List types) { - final StringBuilder builder = new StringBuilder(); - - builder.append("["); - int i = 0; - for (final DistributionSetType module : types) { - - try { - - final JSONArray osmTypes = new JSONArray(); - module.getOptionalModuleTypes().forEach(smt -> osmTypes.put(new JSONObject().put("id", smt.getId()))); - - final JSONArray msmTypes = new JSONArray(); - module.getMandatoryModuleTypes().forEach(smt -> msmTypes.put(new JSONObject().put("id", smt.getId()))); - - builder.append(new JSONObject().put("name", module.getName()) - .put("description", module.getDescription()).put("key", module.getKey()) - .put("optionalmodules", osmTypes).put("mandatorymodules", msmTypes).toString()); - } catch (final Exception e) { - e.printStackTrace(); - } - - if (++i < types.size()) { - builder.append(","); - } - } - - builder.append("]"); - - return builder.toString(); - } - - public static String distributionSets(final List sets) throws JSONException { - final StringBuilder builder = new StringBuilder(); - - builder.append("["); - int i = 0; - for (final DistributionSet set : sets) { - try { - builder.append(distributionSet(set)); - } catch (final Exception e) { - e.printStackTrace(); - } - - if (++i < sets.size()) { - builder.append(","); - } - } - - builder.append("]"); - - return builder.toString(); - - } - - public static String distributionSetsCreateValidFieldsOnly(final List sets) throws JSONException { - final StringBuilder builder = new StringBuilder(); - - builder.append("["); - int i = 0; - for (final DistributionSet set : sets) { - try { - builder.append(distributionSetCreateValidFieldsOnly(set)); - } catch (final Exception e) { - e.printStackTrace(); - } - - if (++i < sets.size()) { - builder.append(","); - } - } - - builder.append("]"); - - return builder.toString(); - - } - - public static String distributionSetCreateValidFieldsOnly(final DistributionSet set) throws JSONException { - - final List modules = set.getModules().stream().map(module -> { - try { - return new JSONObject().put("id", module.getId()); - } catch (final Exception e) { - e.printStackTrace(); - } - - return null; - }).collect(Collectors.toList()); - - return new JSONObject().put("name", set.getName()).put("description", set.getDescription()) - .put("type", set.getType() == null ? null : set.getType().getKey()).put("version", set.getVersion()) - .put("requiredMigrationStep", set.isRequiredMigrationStep()).put("modules", modules).toString(); - - } - - public static String distributionSetUpdateValidFieldsOnly(final DistributionSet set) throws JSONException { - - final List modules = set.getModules().stream().map(module -> { - try { - return new JSONObject().put("id", module.getId()); - } catch (final Exception e) { - e.printStackTrace(); - } - - return null; - }).collect(Collectors.toList()); - - return new JSONObject().put("name", set.getName()).put("description", set.getDescription()) - .put("version", set.getVersion()).toString(); - - } - - public static String distributionSet(final DistributionSet set) throws JSONException { - - final List modules = set.getModules().stream().map(module -> { - try { - return new JSONObject().put("id", module.getId()); - } catch (final Exception e) { - e.printStackTrace(); - } - - return null; - }).collect(Collectors.toList()); - - return new JSONObject().put("name", set.getName()).put("description", set.getDescription()) - .put("type", set.getType() == null ? null : set.getType().getKey()).put("id", Long.MAX_VALUE) - .put("version", set.getVersion()).put("createdAt", "0").put("updatedAt", "0") - .put("createdBy", "fghdfkjghdfkjh").put("updatedBy", "fghdfkjghdfkjh") - .put("requiredMigrationStep", set.isRequiredMigrationStep()).put("modules", modules).toString(); - - } - - /** - * @param targets - * @return - */ - public static String targets(final List targets) { - final StringBuilder builder = new StringBuilder(); - - builder.append("["); - int i = 0; - for (final Target target : targets) { - try { - builder.append(new JSONObject().put("controllerId", target.getControllerId()) - .put("description", target.getDescription()).put("name", target.getName()) - .put("createdAt", "0").put("updatedAt", "0").put("createdBy", "fghdfkjghdfkjh") - .put("updatedBy", "fghdfkjghdfkjh").toString()); - } catch (final Exception e) { - e.printStackTrace(); - } - - if (++i < targets.size()) { - builder.append(","); - } - } - - builder.append("]"); - - return builder.toString(); - } - - public static String rollout(final String name, final String description, final int groupSize, - final long distributionSetId, final String targetFilterQuery, final RolloutGroupConditions conditions) { - final JSONObject json = new JSONObject(); - json.put("name", name); - json.put("description", description); - json.put("amountGroups", groupSize); - json.put("distributionSetId", distributionSetId); - json.put("targetFilterQuery", targetFilterQuery); - - if (conditions != null) { - final JSONObject successCondition = new JSONObject(); - json.put("successCondition", successCondition); - successCondition.put("condition", conditions.getSuccessCondition().toString()); - successCondition.put("expression", conditions.getSuccessConditionExp().toString()); - - final JSONObject successAction = new JSONObject(); - json.put("successAction", successAction); - successAction.put("action", conditions.getSuccessAction().toString()); - successAction.put("expression", conditions.getSuccessActionExp().toString()); - - final JSONObject errorCondition = new JSONObject(); - json.put("errorCondition", errorCondition); - errorCondition.put("condition", conditions.getErrorCondition().toString()); - errorCondition.put("expression", conditions.getErrorConditionExp().toString()); - - final JSONObject errorAction = new JSONObject(); - json.put("errorAction", errorAction); - errorAction.put("action", conditions.getErrorAction().toString()); - errorAction.put("expression", conditions.getErrorActionExp().toString()); - } - - return json.toString(); - } - - public static String cancelActionFeedback(final String id, final String execution) throws JSONException { - return cancelActionFeedback(id, execution, RandomStringUtils.randomAscii(1000)); - - } - - public static String cancelActionFeedback(final String id, final String execution, final String message) - throws JSONException { - final List messages = new ArrayList(); - messages.add(message); - return new JSONObject() - .put("id", id) - .put("time", "20140511T121314") - .put("status", - new JSONObject().put("execution", execution) - .put("result", new JSONObject().put("finished", "success")).put("details", messages)) - .toString(); - - } - - public static String configData(final String id, final Map attributes, final String execution) - throws JSONException { - return new JSONObject() - .put("id", id) - .put("time", "20140511T121314") - .put("status", - new JSONObject().put("execution", execution) - .put("result", new JSONObject().put("finished", "success")) - .put("details", new ArrayList())).put("data", attributes).toString(); - - } - -} diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index b7839f7f6..61a84fdd8 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -44,6 +44,8 @@ import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java index b2f309995..8bc8c6ca9 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java @@ -30,6 +30,8 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.json.JSONException; import org.json.JSONObject; import org.junit.Test; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java index 2311b098c..1122f3ed4 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java @@ -20,6 +20,7 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index f33ceb942..35ab7a786 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -25,7 +25,6 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; -import org.eclipse.hawkbit.mgmt.rest.resource.MgmtRolloutResource; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -35,6 +34,9 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; +import org.eclipse.hawkbit.rest.util.SuccessCondition; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Description; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java index f6a945a29..dbce7d90e 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java @@ -47,6 +47,8 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java index d8d113fbc..aa2cd68e2 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java @@ -28,6 +28,8 @@ import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.json.JSONException; import org.json.JSONObject; import org.junit.Test; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index 6954aee31..fff9d8d2e 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -48,6 +48,8 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.rest.exception.MessageNotReadableException; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.eclipse.hawkbit.util.IpUtil; import org.json.JSONException; import org.json.JSONObject; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MockMvcResultPrinter.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MockMvcResultPrinter.java deleted file mode 100644 index 7d07b3bd3..000000000 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MockMvcResultPrinter.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.mgmt.rest.resource; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultHandler; -import org.springframework.test.web.servlet.result.PrintingResultHandler; -import org.springframework.util.CollectionUtils; - -public abstract class MockMvcResultPrinter { - private static final Logger LOG = LoggerFactory.getLogger(MockMvcResultPrinter.class); - - private MockMvcResultPrinter() { - } - - /** - * Print {@link MvcResult} details to the "standard" output stream. - */ - public static ResultHandler print() { - return new ConsolePrintingResultHandler(); - } - - /** - * An {@link PrintingResultHandler} that writes to the "standard" output - * stream - */ - private static class ConsolePrintingResultHandler extends PrintingResultHandler { - - public ConsolePrintingResultHandler() { - super(new ResultValuePrinter() { - - @Override - public void printHeading(final String heading) { - LOG.debug(String.format("%20s:", heading)); - } - - @Override - public void printValue(final String label, Object value) { - if (value != null && value.getClass().isArray()) { - value = CollectionUtils.arrayToList(value); - } - LOG.debug(String.format("%20s = %s", label, value)); - } - }); - } - } -} diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java index 4f80728f1..15d22c703 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java @@ -17,6 +17,7 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.mock.web.MockMultipartFile; diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml index 9048cf677..f731a35a3 100644 --- a/hawkbit-rest-core/pom.xml +++ b/hawkbit-rest-core/pom.xml @@ -55,5 +55,31 @@ allure-junit-adaptor test + + org.springframework.boot + spring-boot-starter-test + test + + + org.json + json + test + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + \ No newline at end of file diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/JsonBuilder.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java similarity index 99% rename from hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/JsonBuilder.java rename to hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java index cf791bcf8..b73320f0e 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/JsonBuilder.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.rest.resource; +package org.eclipse.hawkbit.rest.util; import java.util.ArrayList; import java.util.List; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/MockMvcResultPrinter.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/MockMvcResultPrinter.java similarity index 97% rename from hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/MockMvcResultPrinter.java rename to hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/MockMvcResultPrinter.java index ba5020c58..b1de56f61 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/MockMvcResultPrinter.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/MockMvcResultPrinter.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.rest.resource; +package org.eclipse.hawkbit.rest.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SuccessCondition.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/SuccessCondition.java similarity index 91% rename from hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SuccessCondition.java rename to hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/SuccessCondition.java index cafc36b0b..f3424b0c0 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SuccessCondition.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/SuccessCondition.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.mgmt.rest.resource; +package org.eclipse.hawkbit.rest.util; /** * diff --git a/hawkbit-rest-core/src/test/resources/log4j2.xml b/hawkbit-rest-core/src/test/resources/log4j2.xml deleted file mode 100644 index 98ea99ac9..000000000 --- a/hawkbit-rest-core/src/test/resources/log4j2.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hawkbit-system-resource/pom.xml b/hawkbit-system-resource/pom.xml index fed198db3..6b02cf70c 100644 --- a/hawkbit-system-resource/pom.xml +++ b/hawkbit-system-resource/pom.xml @@ -31,6 +31,12 @@ + + org.eclipse.hawkbit + hawkbit-rest-core + ${project.version} + test + org.springframework.boot spring-boot-starter-test diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/MockMvcResultPrinter.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/MockMvcResultPrinter.java deleted file mode 100644 index de82640dc..000000000 --- a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/MockMvcResultPrinter.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.system.rest.resource; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultHandler; -import org.springframework.test.web.servlet.result.PrintingResultHandler; -import org.springframework.util.CollectionUtils; - -public abstract class MockMvcResultPrinter { - private static final Logger LOG = LoggerFactory.getLogger(MockMvcResultPrinter.class); - - private MockMvcResultPrinter() { - } - - /** - * Print {@link MvcResult} details to the "standard" output stream. - */ - public static ResultHandler print() { - return new ConsolePrintingResultHandler(); - } - - /** - * An {@link PrintingResultHandler} that writes to the "standard" output - * stream - */ - private static class ConsolePrintingResultHandler extends PrintingResultHandler { - - public ConsolePrintingResultHandler() { - super(new ResultValuePrinter() { - - @Override - public void printHeading(final String heading) { - LOG.debug(String.format("%20s:", heading)); - } - - @Override - public void printValue(final String label, Object value) { - if (value != null && value.getClass().isArray()) { - value = CollectionUtils.arrayToList(value); - } - LOG.debug(String.format("%20s = %s", label, value)); - } - }); - } - } -} diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java index 38a8f1b11..fb98a8470 100644 --- a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java +++ b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java @@ -28,6 +28,7 @@ import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.Test; import org.springframework.http.MediaType; diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java index 13ccf0999..abb61ef67 100644 --- a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java +++ b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java @@ -22,6 +22,7 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; +import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.eclipse.hawkbit.system.rest.api.SystemRestConstant; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.junit.Test; diff --git a/hawkbit-system-resource/src/test/resources/application-test.properties b/hawkbit-system-resource/src/test/resources/application-test.properties deleted file mode 100644 index 92506caa4..000000000 --- a/hawkbit-system-resource/src/test/resources/application-test.properties +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 2015 Bosch Software Innovations GmbH and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v10.html -# - -# used if IM profile is disabled -security.ignored=true - -# IM required for integration tests -spring.profiles.active=im,suiteembedded,artifactrepository,redis - -server.port=12222 - -spring.data.mongodb.uri=mongodb://localhost/spArtifactRepository${random.value} -spring.data.mongodb.port=28017 - - -# supported: H2, MYSQL -hawkbit.server.database=H2 -hawkbit.server.database.env=TEST -spring.main.show_banner=false - -hawkbit.server.ddi.security.authentication.header=true - -hawkbit.server.artifact.repo.upload.maxFileSize=5MB - -hawkbit.server.security.dos.maxStatusEntriesPerAction=100 - -hawkbit.server.security.dos.maxAttributeEntriesPerTarget=10 - -spring.jpa.database=${hawkbit.server.database} -#spring.jpa.show-sql=true - - -flyway.sqlMigrationSuffix=${spring.jpa.database}.sql - -# effective DB setting -spring.datasource.url=${${hawkbit.server.database}.spring.datasource.url} -spring.datasource.driverClassName=${${hawkbit.server.database}.spring.datasource.driverClassName} -spring.datasource.username=${${hawkbit.server.database}.spring.datasource.username} -spring.datasource.password=${${hawkbit.server.database}.spring.datasource.password} - -# H2 -##;AUTOCOMMIT=ON -H2.spring.datasource.url=jdbc:h2:mem:sp-db;DB_CLOSE_ON_EXIT=FALSE -#H2.spring.datasource.url=jdbc:h2:./db/sp-db;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;MVCC=TRUE -H2.spring.datasource.driverClassName=org.h2.Driver -H2.spring.datasource.username=sa -H2.spring.datasource.password=sa - -# MYSQL -MYSQL.spring.datasource.url=jdbc:mysql://localhost:3306/sp_test -MYSQL.spring.datasource.driverClassName=org.mariadb.jdbc.Driver -MYSQL.spring.datasource.username=root -MYSQL.spring.datasource.password= - -# SP Controller configuration -hawkbit.controller.pollingTime=00:01:00 -hawkbit.controller.pollingOverdueTime=00:01:00 From 3fa91054284b8f3dbff9e74dbe33eeef73fa00b6 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 10:02:03 +0200 Subject: [PATCH 014/371] Add test dependencies Add name of @PathVariable Signed-off-by: SirWayne --- .../SoftwareModuleResourceClient.java | 4 +- hawkbit-ddi-resource/pom.xml | 20 +--- .../mgmt/rest/api/MgmtDownloadRestApi.java | 2 +- ...PI.java => MgmtSoftwareModuleRestApi.java} | 2 +- hawkbit-mgmt-resource/pom.xml | 28 ++--- .../resource/MgmtSoftwareModuleMapper.java | 8 +- .../resource/MgmtSoftwareModuleResource.java | 4 +- .../MgmtDistributionSetResourceTest.java | 64 +---------- .../org/eclipse/hawkbit/TestDataUtil.java | 59 +++++++++++ hawkbit-rest-core/pom.xml | 2 +- .../resources/application-test.properties | 63 ----------- .../rest/api/SystemManagementRestApi.java | 2 +- hawkbit-system-resource/pom.xml | 100 ++++++++++++++++-- 13 files changed, 174 insertions(+), 184 deletions(-) rename hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/{MgmtSoftwareModuleRestAPI.java => MgmtSoftwareModuleRestApi.java} (99%) delete mode 100644 hawkbit-rest-core/src/test/resources/application-test.properties diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java index aaf589779..80fcf734e 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java @@ -8,13 +8,13 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestAPI; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the SoftwareModule resource of the management API. */ @FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/softwaremodules") -public interface SoftwareModuleResourceClient extends MgmtSoftwareModuleRestAPI { +public interface SoftwareModuleResourceClient extends MgmtSoftwareModuleRestApi { } diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index f73cb6c1e..d5ba2c21c 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -42,9 +42,10 @@ org.eclipse.hawkbit - hawkbit-rest-core + hawkbit-rest-core ${project.version} - test + tests + test org.springframework.boot @@ -151,19 +152,4 @@ test - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java index c7caed01b..85c498296 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java @@ -36,7 +36,7 @@ public interface MgmtDownloadRestApi { */ @RequestMapping(method = RequestMethod.GET, value = MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING) @ResponseBody - ResponseEntity downloadArtifactByDownloadId(@PathVariable final String downloadId, + ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId, final HttpServletResponse response); } 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 similarity index 99% rename from hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestAPI.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java index e452eb9a3..d5dbb6c7e 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 @@ -32,7 +32,7 @@ import org.springframework.web.multipart.MultipartFile; * */ @RequestMapping(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) -public interface MgmtSoftwareModuleRestAPI { +public interface MgmtSoftwareModuleRestApi { /** * Handles POST request for artifact upload. diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index cc95f8026..c52506e11 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -10,7 +10,7 @@ 0.2.0-SNAPSHOT hawkbit-mgmt-resource - hawkBit :: REST Resources + hawkBit :: REST Managment Resources @@ -31,11 +31,12 @@ - + org.eclipse.hawkbit - hawkbit-rest-core + hawkbit-rest-core ${project.version} - test + tests + test org.springframework.boot @@ -136,25 +137,10 @@ allure-junit-adaptor test - + org.springframework spring-context-support test - + - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - \ No newline at end of file diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java index b31fe068a..a100b6fb4 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java @@ -20,7 +20,7 @@ import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifactHash; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPost; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestAPI; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -140,9 +140,9 @@ public final class MgmtSoftwareModuleMapper { response.setType(baseSofwareModule.getType().getKey()); response.setVendor(baseSofwareModule.getVendor()); - response.add(linkTo(methodOn(MgmtSoftwareModuleRestAPI.class).getArtifacts(response.getModuleId())) + response.add(linkTo(methodOn(MgmtSoftwareModuleRestApi.class).getArtifacts(response.getModuleId())) .withRel(MgmtRestConstants.SOFTWAREMODULE_V1_ARTIFACT)); - response.add(linkTo(methodOn(MgmtSoftwareModuleRestAPI.class).getSoftwareModule(response.getModuleId())) + response.add(linkTo(methodOn(MgmtSoftwareModuleRestApi.class).getSoftwareModule(response.getModuleId())) .withRel("self")); response.add(linkTo( @@ -176,7 +176,7 @@ public final class MgmtSoftwareModuleMapper { MgmtRestModelMapper.mapBaseToBase(artifactRest, artifact); - artifactRest.add(linkTo(methodOn(MgmtSoftwareModuleRestAPI.class).getArtifact(artifact.getSoftwareModule().getId(), + artifactRest.add(linkTo(methodOn(MgmtSoftwareModuleRestApi.class).getArtifact(artifact.getSoftwareModule().getId(), artifact.getId())).withRel("self")); if (artifact instanceof LocalArtifact) { diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java index f4135744b..51b543366 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequestBodyPut; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; -import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestAPI; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -51,7 +51,7 @@ import org.springframework.web.multipart.MultipartFile; * */ @RestController -public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestAPI { +public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { private static final Logger LOG = LoggerFactory.getLogger(MgmtSoftwareModuleResource.class); @Autowired diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index 61a84fdd8..5017d4ff6 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -30,15 +30,8 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; -import org.eclipse.hawkbit.repository.ActionRepository; -import org.eclipse.hawkbit.repository.ControllerManagement; -import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; @@ -299,8 +292,8 @@ public class MgmtDistributionSetResourceTest extends AbstractIntegrationTest { // assign knownTargetId to distribution set deploymentManagement.assignDistributionSet(createdDs.getId(), knownTargetId); // make it in install state - sendUpdateActionStatusToTargets(controllerManagament, targetManagement, actionRepository, createdDs, - Lists.newArrayList(createTarget), Status.FINISHED, "some message"); + TestDataUtil.sendUpdateActionStatusToTargets(controllerManagament, targetManagement, actionRepository, + createdDs, Lists.newArrayList(createTarget), Status.FINISHED, "some message"); mvc.perform(get( MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/installedTargets")) @@ -399,7 +392,8 @@ public class MgmtDistributionSetResourceTest extends AbstractIntegrationTest { @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Ensures that single DS requested by ID is listed with expected payload.") public void getDistributionSet() throws Exception { - final DistributionSet set = createTestDistributionSet(softwareManagement, distributionSetManagement); + final DistributionSet set = TestDataUtil.createTestDistributionSet(softwareManagement, + distributionSetManagement); // perform request mvc.perform(get("/rest/v1/distributionsets/{dsId}", set.getId()).accept(MediaType.APPLICATION_JSON)) @@ -869,54 +863,4 @@ public class MgmtDistributionSetResourceTest extends AbstractIntegrationTest { return created; } - public static List sendUpdateActionStatusToTargets(final ControllerManagement controllerManagament, - final TargetManagement targetManagement, final ActionRepository actionRepository, final DistributionSet dsA, - final Iterable targs, final Status status, final String... msgs) { - final List result = new ArrayList(); - for (final Target t : targs) { - final List findByTarget = actionRepository.findByTarget(t); - for (final Action action : findByTarget) { - result.add(sendUpdateActionStatusToTarget(controllerManagament, targetManagement, status, action, t, - msgs)); - } - } - return result; - } - - private static Target sendUpdateActionStatusToTarget(final ControllerManagement controllerManagament, - final TargetManagement targetManagement, final Status status, final Action updActA, final Target t, - final String... msgs) { - updActA.setStatus(status); - - final ActionStatus statusMessages = new ActionStatus(); - statusMessages.setAction(updActA); - statusMessages.setOccurredAt(System.currentTimeMillis()); - statusMessages.setStatus(status); - for (final String msg : msgs) { - statusMessages.addMessage(msg); - } - controllerManagament.addUpdateActionStatus(statusMessages, updActA); - return targetManagement.findTargetByControllerID(t.getControllerId()); - } - - public static DistributionSet createTestDistributionSet(final SoftwareManagement softwareManagement, - final DistributionSetManagement distributionSetManagement) { - - DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); - set.setVersion("anotherVersion"); - set = distributionSetManagement.updateDistributionSet(set); - - set.getModules().forEach(module -> { - module.setDescription("updated description"); - softwareManagement.updateSoftwareModule(module); - }); - - // load also lazy stuff - set = distributionSetManagement.findDistributionSetByIdWithDetails(set.getId()); - - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(1); - return set; - } - } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java index 1787d29e4..7ce8283dc 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit; +import static org.fest.assertions.api.Assertions.assertThat; + import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; @@ -16,10 +18,15 @@ import java.util.Random; import java.util.UUID; import org.apache.commons.io.IOUtils; +import org.eclipse.hawkbit.repository.ActionRepository; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -27,6 +34,8 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import com.google.common.base.Strings; import com.google.common.collect.Lists; @@ -42,6 +51,56 @@ import net._01001111.text.LoremIpsum; public class TestDataUtil { private static final LoremIpsum LOREM = new LoremIpsum(); + public static DistributionSet createTestDistributionSet(final SoftwareManagement softwareManagement, + final DistributionSetManagement distributionSetManagement) { + final Pageable pageReq = new PageRequest(0, 400); + DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, + distributionSetManagement); + set.setVersion("anotherVersion"); + set = distributionSetManagement.updateDistributionSet(set); + + set.getModules().forEach(module -> { + module.setDescription("updated description"); + softwareManagement.updateSoftwareModule(module); + }); + + // load also lazy stuff + set = distributionSetManagement.findDistributionSetByIdWithDetails(set.getId()); + + assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(1); + return set; + } + + public static List sendUpdateActionStatusToTargets(final ControllerManagement controllerManagament, + final TargetManagement targetManagement, final ActionRepository actionRepository, final DistributionSet dsA, + final Iterable targs, final Status status, final String... msgs) { + final List result = new ArrayList(); + for (final Target t : targs) { + final List findByTarget = actionRepository.findByTarget(t); + for (final Action action : findByTarget) { + result.add(sendUpdateActionStatusToTarget(controllerManagament, targetManagement, status, action, t, + msgs)); + } + } + return result; + } + + private static Target sendUpdateActionStatusToTarget(final ControllerManagement controllerManagament, + final TargetManagement targetManagement, final Status status, final Action updActA, final Target t, + final String... msgs) { + updActA.setStatus(status); + + final ActionStatus statusMessages = new ActionStatus(); + statusMessages.setAction(updActA); + statusMessages.setOccurredAt(System.currentTimeMillis()); + statusMessages.setStatus(status); + for (final String msg : msgs) { + statusMessages.addMessage(msg); + } + controllerManagament.addUpdateActionStatus(statusMessages, updActA); + return targetManagement.findTargetByControllerID(t.getControllerId()); + } + public static List generateDistributionSets(final String suffix, final int number, final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml index f731a35a3..6cc9d432b 100644 --- a/hawkbit-rest-core/pom.xml +++ b/hawkbit-rest-core/pom.xml @@ -10,7 +10,7 @@ 0.2.0-SNAPSHOT hawkbit-rest-core - hawkBit :: REST Resources + hawkBit :: REST Core diff --git a/hawkbit-rest-core/src/test/resources/application-test.properties b/hawkbit-rest-core/src/test/resources/application-test.properties deleted file mode 100644 index 92506caa4..000000000 --- a/hawkbit-rest-core/src/test/resources/application-test.properties +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 2015 Bosch Software Innovations GmbH and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v10.html -# - -# used if IM profile is disabled -security.ignored=true - -# IM required for integration tests -spring.profiles.active=im,suiteembedded,artifactrepository,redis - -server.port=12222 - -spring.data.mongodb.uri=mongodb://localhost/spArtifactRepository${random.value} -spring.data.mongodb.port=28017 - - -# supported: H2, MYSQL -hawkbit.server.database=H2 -hawkbit.server.database.env=TEST -spring.main.show_banner=false - -hawkbit.server.ddi.security.authentication.header=true - -hawkbit.server.artifact.repo.upload.maxFileSize=5MB - -hawkbit.server.security.dos.maxStatusEntriesPerAction=100 - -hawkbit.server.security.dos.maxAttributeEntriesPerTarget=10 - -spring.jpa.database=${hawkbit.server.database} -#spring.jpa.show-sql=true - - -flyway.sqlMigrationSuffix=${spring.jpa.database}.sql - -# effective DB setting -spring.datasource.url=${${hawkbit.server.database}.spring.datasource.url} -spring.datasource.driverClassName=${${hawkbit.server.database}.spring.datasource.driverClassName} -spring.datasource.username=${${hawkbit.server.database}.spring.datasource.username} -spring.datasource.password=${${hawkbit.server.database}.spring.datasource.password} - -# H2 -##;AUTOCOMMIT=ON -H2.spring.datasource.url=jdbc:h2:mem:sp-db;DB_CLOSE_ON_EXIT=FALSE -#H2.spring.datasource.url=jdbc:h2:./db/sp-db;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;MVCC=TRUE -H2.spring.datasource.driverClassName=org.h2.Driver -H2.spring.datasource.username=sa -H2.spring.datasource.password=sa - -# MYSQL -MYSQL.spring.datasource.url=jdbc:mysql://localhost:3306/sp_test -MYSQL.spring.datasource.driverClassName=org.mariadb.jdbc.Driver -MYSQL.spring.datasource.username=root -MYSQL.spring.datasource.password= - -# SP Controller configuration -hawkbit.controller.pollingTime=00:01:00 -hawkbit.controller.pollingOverdueTime=00:01:00 diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java index 9e7864439..6185fceea 100644 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java @@ -33,7 +33,7 @@ public interface SystemManagementRestApi { * @return HttpStatus.OK */ @RequestMapping(method = RequestMethod.DELETE, value = "/tenants/{tenant}") - ResponseEntity deleteTenant(@PathVariable final String tenant); + ResponseEntity deleteTenant(@PathVariable("tenant") final String tenant); /** * Collects and returns system usage statistics. It provides a system wide diff --git a/hawkbit-system-resource/pom.xml b/hawkbit-system-resource/pom.xml index 6b02cf70c..7c00b3fec 100644 --- a/hawkbit-system-resource/pom.xml +++ b/hawkbit-system-resource/pom.xml @@ -10,7 +10,7 @@ 0.2.0-SNAPSHOT hawkbit-system-resource - hawkBit :: REST Resources + hawkBit :: System REST Resources @@ -33,25 +33,93 @@ org.eclipse.hawkbit - hawkbit-rest-core + hawkbit-rest-core ${project.version} - test + tests + test + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-logging + + + test + + + org.springframework.boot + spring-boot-starter-log4j2 + test + + + com.h2database + h2 + test + + + org.mariadb.jdbc + mariadb-java-client + test + + + javax.el + javax.el-api + test + + + org.springframework.security + spring-security-config + test + + + org.eclipse.hawkbit + hawkbit-repository + ${project.version} + tests + test + + + org.eclipse.hawkbit + hawkbit-http-security + ${project.version} + test + + + com.jayway.jsonpath + json-path + test + + + org.json + json + test + + + com.fasterxml.jackson.core + jackson-databind + test + + + com.fasterxml.jackson.core + jackson-core + test org.springframework.boot spring-boot-starter-test test - - org.easytesting - fest-assert-core + + org.springframework.security + spring-security-aspects test - - org.eclipse.hawkbit - hawkbit-repository - ${project.version} - tests + + org.easytesting + fest-assert-core test @@ -59,10 +127,20 @@ fest-assert test + + de.flapdoodle.embed + de.flapdoodle.embed.mongo + test + ru.yandex.qatools.allure allure-junit-adaptor test + + org.springframework + spring-context-support + test + \ No newline at end of file From bb0fb5da8d16f34aa376de87e7dde68e0ceef380 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 11:29:56 +0200 Subject: [PATCH 015/371] Add name of @PathVariable Signed-off-by: SirWayne --- .../rest/resource/DataConversionHelper.java | 6 +-- ...r.java => DdiArtifactStoreController.java} | 22 +++++----- ...Controller.java => DdiRootController.java} | 44 ++++++++----------- hawkbit-mgmt-resource/pom.xml | 7 ++- .../system/rest/api/SystemRestApi.java | 7 +-- .../rest/resource/SystemResourceTest.java | 10 ++--- 6 files changed, 47 insertions(+), 49 deletions(-) rename hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/{ArtifactStoreController.java => DdiArtifactStoreController.java} (84%) rename hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/{RootController.java => DdiRootController.java} (91%) 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 2fd151f6e..b662f2b5f 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 @@ -117,12 +117,12 @@ public final class DataConversionHelper { // have changed from 'soft' to 'forced' type and we need to // change the payload of the // response because of eTags. - result.add(linkTo(methodOn(RootController.class, tenantAware.getCurrentTenant()) + result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()) .getControllerBasedeploymentAction(target.getControllerId(), action.getId(), actions.hashCode(), null)).withRel(DdiRestConstants.DEPLOYMENT_BASE_ACTION)); addedUpdate = true; } else if (action.isCancelingOrCanceled() && !addedCancel) { - result.add(linkTo(methodOn(RootController.class, tenantAware.getCurrentTenant()) + result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()) .getControllerCancelAction(target.getControllerId(), action.getId(), null)) .withRel(DdiRestConstants.CANCEL_ACTION)); addedCancel = true; @@ -130,7 +130,7 @@ public final class DataConversionHelper { } if (target.getTargetInfo().isRequestControllerAttributes()) { - result.add(linkTo(methodOn(RootController.class, tenantAware.getCurrentTenant()).putConfigData(null, + result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()).putConfigData(null, target.getControllerId(), null)).withRel(DdiRestConstants.CONFIG_DATA_ACTION)); } return result; diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/ArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java similarity index 84% rename from hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/ArtifactStoreController.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 2a6d544ab..4c24b0238 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/ArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -32,21 +32,20 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.web.bind.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; /** - * The {@link ArtifactStoreController} of the HawkBit server controller API that - * is queried by the HawkBit target in order to download artifacts independent - * of their own individual resource. This is offered in addition to the - * {@link RootController#downloadArtifact(String, Long, Long, javax.servlet.http.HttpServletResponse)} + * The {@link DdiArtifactStoreController} of the HawkBit server controller API + * that is queried by the HawkBit target in order to download artifacts + * independent of their own individual resource. This is offered in addition to + * the + * {@link DdiRootController#downloadArtifact(String, Long, Long, javax.servlet.http.HttpServletResponse)} * for legacy controllers that can not be fed with a download URI at runtime. */ @RestController -public class ArtifactStoreController implements DdiArtifactStoreControllerRestApi { +public class DdiArtifactStoreController implements DdiArtifactStoreControllerRestApi { - private static final Logger LOG = LoggerFactory.getLogger(ArtifactStoreController.class); + private static final Logger LOG = LoggerFactory.getLogger(DdiArtifactStoreController.class); @Autowired private ArtifactManagement artifactManagement; @@ -61,9 +60,8 @@ public class ArtifactStoreController implements DdiArtifactStoreControllerRestAp private HawkbitSecurityProperties securityProperties; @Override - public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, - final HttpServletResponse response, final HttpServletRequest request, - @AuthenticationPrincipal final String targetid) { + public ResponseEntity downloadArtifactByFilename(final String fileName, final HttpServletResponse response, + final HttpServletRequest request, final String targetid) { ResponseEntity result; final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); @@ -100,7 +98,7 @@ public class ArtifactStoreController implements DdiArtifactStoreControllerRestAp } @Override - public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName, + public ResponseEntity downloadArtifactMD5ByFilename(final String fileName, final HttpServletResponse response) { final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/RootController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java similarity index 91% rename from hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/RootController.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java index 4f485984b..3a9e07d79 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/RootController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootController.java @@ -52,20 +52,19 @@ import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; /** - * The {@link RootController} of the hawkBit server DDI API that is queried by + * The {@link DdiRootController} of the hawkBit server DDI API that is queried by * the hawkBit controller in order to pull {@link Action}s that have to be * fulfilled and report status updates concerning the {@link Action} processing. * * Transactional (read-write) as all queries at least update the last poll time. */ @RestController -public class RootController implements DdiRootControllerRestApi { +public class DdiRootController implements DdiRootControllerRestApi { - private static final Logger LOG = LoggerFactory.getLogger(RootController.class); + private static final Logger LOG = LoggerFactory.getLogger(DdiRootController.class); private static final String GIVEN_ACTION_IS_NOT_ASSIGNED_TO_GIVEN_TARGET = "given action ({}) is not assigned to given target ({})."; @Autowired @@ -91,7 +90,7 @@ public class RootController implements DdiRootControllerRestApi { @Override public ResponseEntity> getSoftwareModulesArtifacts( - @PathVariable final String targetid, @PathVariable final Long softwareModuleId) { + final String targetid, final Long softwareModuleId) { LOG.debug("getSoftwareModulesArtifacts({})", targetid); final SoftwareModule softwareModule = softwareManagement.findSoftwareModuleById(softwareModuleId); @@ -107,7 +106,7 @@ public class RootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity getControllerBase(@PathVariable final String targetid, + public ResponseEntity getControllerBase(final String targetid, final HttpServletRequest request) { LOG.debug("getControllerBase({})", targetid); @@ -128,9 +127,8 @@ public class RootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity downloadArtifact(@PathVariable final String targetid, - @PathVariable final Long softwareModuleId, @PathVariable final String fileName, - final HttpServletResponse response, final HttpServletRequest request) { + public ResponseEntity downloadArtifact(final String targetid, final Long softwareModuleId, + final String fileName, final HttpServletResponse response, final HttpServletRequest request) { ResponseEntity result; final Target target = controllerManagement.updateLastTargetQuery(targetid, @@ -181,9 +179,8 @@ public class RootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity downloadArtifactMd5(@PathVariable final String targetid, - @PathVariable final Long softwareModuleId, @PathVariable final String fileName, - final HttpServletResponse response, final HttpServletRequest request) { + public ResponseEntity downloadArtifactMd5(final String targetid, final Long softwareModuleId, + final String fileName, final HttpServletResponse response, final HttpServletRequest request) { controllerManagement.updateLastTargetQuery(targetid, IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); @@ -206,10 +203,8 @@ public class RootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity getControllerBasedeploymentAction( - @PathVariable @NotEmpty final String targetid, @PathVariable @NotEmpty final Long actionId, - @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource, - final HttpServletRequest request) { + public ResponseEntity getControllerBasedeploymentAction(final String targetid, + final Long actionId, final int resource, final HttpServletRequest request) { LOG.debug("getControllerBasedeploymentAction({},{})", targetid, resource); final Target target = controllerManagement.updateLastTargetQuery(targetid, @@ -242,9 +237,8 @@ public class RootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, - @PathVariable final String targetid, @PathVariable @NotEmpty final Long actionId, - final HttpServletRequest request) { + public ResponseEntity postBasedeploymentActionFeedback(final DdiActionFeedback feedback, + final String targetid, final Long actionId, final HttpServletRequest request) { LOG.debug("provideBasedeploymentActionFeedback for target [{},{}]: {}", targetid, actionId, feedback); final Target target = controllerManagement.updateLastTargetQuery(targetid, @@ -277,8 +271,8 @@ public class RootController implements DdiRootControllerRestApi { } - private ActionStatus generateUpdateStatus(final DdiActionFeedback feedback, final String targetid, final Long actionid, - final Action action) { + private ActionStatus generateUpdateStatus(final DdiActionFeedback feedback, final String targetid, + final Long actionid, final Action action) { final ActionStatus actionStatus = new ActionStatus(); actionStatus.setAction(action); @@ -339,8 +333,8 @@ public class RootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity putConfigData(@Valid @RequestBody final DdiConfigData configData, - @PathVariable final String targetid, final HttpServletRequest request) { + public ResponseEntity putConfigData(final DdiConfigData configData, final String targetid, + final HttpServletRequest request) { controllerManagement.updateLastTargetQuery(targetid, IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); @@ -350,8 +344,8 @@ public class RootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity getControllerCancelAction(@PathVariable @NotEmpty final String targetid, - @PathVariable @NotEmpty final Long actionId, final HttpServletRequest request) { + public ResponseEntity getControllerCancelAction(final String targetid, final Long actionId, + final HttpServletRequest request) { LOG.debug("getControllerCancelAction({})", targetid); final Target target = controllerManagement.updateLastTargetQuery(targetid, diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index c52506e11..db9535591 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -29,9 +29,14 @@ hawkbit-rest-core ${project.version} + + commons-io + commons-io + 2.4 + - + org.eclipse.hawkbit hawkbit-rest-core ${project.version} diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java index aa764d82a..1f2c497e2 100644 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java +++ b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java @@ -50,7 +50,7 @@ public interface SystemRestApi { */ @RequestMapping(method = RequestMethod.DELETE, value = "/configs/{keyName}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity deleteConfigurationValue(@PathVariable final String keyName); + ResponseEntity deleteConfigurationValue(@PathVariable("keyName") final String keyName); /** * Handles the GET request of deleting a tenant specific configuration value @@ -64,7 +64,7 @@ public interface SystemRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/configs/{keyName}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getConfigurationValue(@PathVariable final String keyName); + ResponseEntity getConfigurationValue(@PathVariable("keyName") final String keyName); /** * Handles the GET request of deleting a tenant specific configuration value @@ -80,7 +80,8 @@ public interface SystemRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/configs/{keyName}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity updateConfigurationValue(@PathVariable final String keyName, + ResponseEntity updateConfigurationValue( + @PathVariable("keyName") final String keyName, @RequestBody final SystemTenantConfigurationValueRequest configurationValueRest); } \ No newline at end of file diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java index abb61ef67..8458153ea 100644 --- a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java +++ b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java @@ -65,7 +65,7 @@ public class SystemResourceTest extends AbstractIntegrationTest { tenantConfigurationManagement.addOrUpdateConfiguration(key, notGlobalValue); - mvc.perform(get(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}/", key.getKeyName())) + mvc.perform(get(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}/", key.getKeyName())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("value", equalTo(notGlobalValue))).andExpect(jsonPath("global", equalTo(false))) .andExpect(jsonPath("createdAt", notNullValue())).andExpect(jsonPath("createdBy", notNullValue())); @@ -78,7 +78,7 @@ public class SystemResourceTest extends AbstractIntegrationTest { final TenantConfigurationKey key = TenantConfigurationKey.AUTHENTICATION_MODE_HEADER_AUTHORITY_NAME; final String testValue = "12:12:12"; - mvc.perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}/", key.getKeyName()) + mvc.perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", key.getKeyName()) .content(String.format(BASE_JSON_REQUEST_STRING, testValue)).contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); @@ -99,7 +99,7 @@ public class SystemResourceTest extends AbstractIntegrationTest { assertThat(tenantConfigurationManagement.getConfigurationValue(key, String.class).getValue()) .isEqualTo(notGlobalValue); - mvc.perform(delete(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}/", key.getKeyName())) + mvc.perform(delete(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}/", key.getKeyName())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isNoContent()); assertThat(tenantConfigurationManagement.getConfigurationValue(key, String.class).isGlobal()).isEqualTo(true); @@ -115,7 +115,7 @@ public class SystemResourceTest extends AbstractIntegrationTest { final String testValue = "12:12:12"; final MvcResult mvcResult = mvc - .perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}", notExistingKey) + .perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", notExistingKey) .content(String.format(BASE_JSON_REQUEST_STRING, testValue)) .contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest()).andReturn(); @@ -134,7 +134,7 @@ public class SystemResourceTest extends AbstractIntegrationTest { final String testValue = "invalidFormattedDuration"; final MvcResult mvcResult = mvc - .perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{configId}", key.getKeyName()) + .perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", key.getKeyName()) .content(String.format(BASE_JSON_REQUEST_STRING, testValue)) .contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest()).andReturn(); From 2b3d9789786f65a1aad864ff27e4259b248796ea Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 13:00:54 +0200 Subject: [PATCH 016/371] =?UTF-8?q?Add=20signature=20from=20interface=20to?= =?UTF-8?q?=20the=20concret=20class,=20because=20of=20Spring=20MVC=20and?= =?UTF-8?q?=20parameter=20inheritance.=20"also=20actually=20doesn=E2=80=99?= =?UTF-8?q?t=20work=20with=20Spring=20MVC=20in=20its=20current=20form=20(m?= =?UTF-8?q?ethod=20parameter=20mapping=20is=20not=20inherited"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: SirWayne --- .../resource/DdiArtifactStoreController.java | 9 ++-- .../ddi/rest/resource/DdiRootController.java | 47 +++++++++++-------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 4c24b0238..024a32454 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -32,6 +32,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.web.bind.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; /** @@ -60,8 +62,9 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes private HawkbitSecurityProperties securityProperties; @Override - public ResponseEntity downloadArtifactByFilename(final String fileName, final HttpServletResponse response, - final HttpServletRequest request, final String targetid) { + public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, + final HttpServletResponse response, final HttpServletRequest request, + @AuthenticationPrincipal final String targetid) { ResponseEntity result; final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); @@ -98,7 +101,7 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes } @Override - public ResponseEntity downloadArtifactMD5ByFilename(final String fileName, + public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName, final HttpServletResponse response) { final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); 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 3a9e07d79..c9c4f1d92 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 @@ -52,11 +52,12 @@ import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; /** - * The {@link DdiRootController} of the hawkBit server DDI API that is queried by - * the hawkBit controller in order to pull {@link Action}s that have to be + * The {@link DdiRootController} of the hawkBit server DDI API that is queried + * by the hawkBit controller in order to pull {@link Action}s that have to be * fulfilled and report status updates concerning the {@link Action} processing. * * Transactional (read-write) as all queries at least update the last poll time. @@ -90,7 +91,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity> getSoftwareModulesArtifacts( - final String targetid, final Long softwareModuleId) { + @PathVariable("targetid") final String targetid, + @PathVariable("softwareModuleId") final Long softwareModuleId) { LOG.debug("getSoftwareModulesArtifacts({})", targetid); final SoftwareModule softwareModule = softwareManagement.findSoftwareModuleById(softwareModuleId); @@ -106,7 +108,7 @@ public class DdiRootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity getControllerBase(final String targetid, + public ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid, final HttpServletRequest request) { LOG.debug("getControllerBase({})", targetid); @@ -127,8 +129,10 @@ public class DdiRootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity downloadArtifact(final String targetid, final Long softwareModuleId, - final String fileName, final HttpServletResponse response, final HttpServletRequest request) { + public ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, + @PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("fileName") final String fileName, final HttpServletResponse response, + final HttpServletRequest request) { ResponseEntity result; final Target target = controllerManagement.updateLastTargetQuery(targetid, @@ -179,8 +183,10 @@ public class DdiRootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity downloadArtifactMd5(final String targetid, final Long softwareModuleId, - final String fileName, final HttpServletResponse response, final HttpServletRequest request) { + public ResponseEntity downloadArtifactMd5(@PathVariable("targetid") final String targetid, + @PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("fileName") final String fileName, final HttpServletResponse response, + final HttpServletRequest request) { controllerManagement.updateLastTargetQuery(targetid, IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); @@ -203,8 +209,10 @@ public class DdiRootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity getControllerBasedeploymentAction(final String targetid, - final Long actionId, final int resource, final HttpServletRequest request) { + public ResponseEntity getControllerBasedeploymentAction( + @PathVariable("targetid") final String targetid, @PathVariable("actionId") final Long actionId, + @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource, + final HttpServletRequest request) { LOG.debug("getControllerBasedeploymentAction({},{})", targetid, resource); final Target target = controllerManagement.updateLastTargetQuery(targetid, @@ -237,8 +245,9 @@ public class DdiRootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity postBasedeploymentActionFeedback(final DdiActionFeedback feedback, - final String targetid, final Long actionId, final HttpServletRequest request) { + public ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, + @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, + final HttpServletRequest request) { LOG.debug("provideBasedeploymentActionFeedback for target [{},{}]: {}", targetid, actionId, feedback); final Target target = controllerManagement.updateLastTargetQuery(targetid, @@ -333,8 +342,8 @@ public class DdiRootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity putConfigData(final DdiConfigData configData, final String targetid, - final HttpServletRequest request) { + public ResponseEntity putConfigData(@Valid @RequestBody final DdiConfigData configData, + @PathVariable("targetid") final String targetid, final HttpServletRequest request) { controllerManagement.updateLastTargetQuery(targetid, IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); @@ -344,8 +353,9 @@ public class DdiRootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity getControllerCancelAction(final String targetid, final Long actionId, - final HttpServletRequest request) { + public ResponseEntity getControllerCancelAction( + @PathVariable("targetid") @NotEmpty final String targetid, + @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request) { LOG.debug("getControllerCancelAction({})", targetid); final Target target = controllerManagement.updateLastTargetQuery(targetid, @@ -374,8 +384,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity postCancelActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, - @PathVariable @NotEmpty final String targetid, @PathVariable @NotEmpty final Long actionId, - final HttpServletRequest request) { + @PathVariable("targetid") @NotEmpty final String targetid, + @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request) { LOG.debug("provideCancelActionFeedback for target [{}]: {}", targetid, feedback); final Target target = controllerManagement.updateLastTargetQuery(targetid, @@ -454,5 +464,4 @@ public class DdiRootController implements DdiRootControllerRestApi { } return findAction; } - } From f33cb18a11f18a5f14e420733ddba1100f517474 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 21 Apr 2016 13:22:55 +0200 Subject: [PATCH 017/371] Added method signature form interface to implementation Signed-off-by: Jonathan Philip Knoblauch --- .../rest/resource/SystemManagementResource.java | 3 ++- .../hawkbit/system/rest/resource/SystemResource.java | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java index 074cf444d..6ea27d9ce 100644 --- a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java +++ b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java @@ -29,6 +29,7 @@ import org.springframework.cache.CacheManager; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; /** @@ -54,7 +55,7 @@ public class SystemManagementResource implements SystemManagementRestApi { * @return HttpStatus.OK */ @Override - public ResponseEntity deleteTenant(final String tenant) { + public ResponseEntity deleteTenant(@PathVariable("tenant") final String tenant) { systemManagement.deleteTenant(tenant); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java index ca9b84df4..4333cfefb 100644 --- a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java +++ b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java @@ -25,6 +25,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.ResourceSupport; import org.springframework.http.HttpStatus; 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.RestController; /** @@ -68,7 +70,7 @@ public class SystemResource implements SystemRestApi { * the response. */ @Override - public ResponseEntity deleteConfigurationValue(final String keyName) { + public ResponseEntity deleteConfigurationValue(@PathVariable("keyName") final String keyName) { final TenantConfigurationKey configKey = TenantConfigurationKey.fromKeyName(keyName); @@ -89,7 +91,8 @@ public class SystemResource implements SystemRestApi { * response. */ @Override - public ResponseEntity getConfigurationValue(final String keyName) { + public ResponseEntity getConfigurationValue( + @PathVariable("keyName") final String keyName) { final TenantConfigurationKey configKey = TenantConfigurationKey.fromKeyName(keyName); @@ -111,8 +114,9 @@ public class SystemResource implements SystemRestApi { * response. */ @Override - public ResponseEntity updateConfigurationValue(final String keyName, - final SystemTenantConfigurationValueRequest configurationValueRest) { + public ResponseEntity updateConfigurationValue( + @PathVariable("keyName") final String keyName, + @RequestBody final SystemTenantConfigurationValueRequest configurationValueRest) { final TenantConfigurationKey configKey = TenantConfigurationKey.fromKeyName(keyName); From 4f336e05c1b5093ec37b5d67b78dc7bb4a9fc93a Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 21 Apr 2016 13:35:17 +0200 Subject: [PATCH 018/371] Added slash to test Signed-off-by: Jonathan Philip Knoblauch --- .../hawkbit/system/rest/resource/SystemResourceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java index 8458153ea..3dc9613e2 100644 --- a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java +++ b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java @@ -78,7 +78,7 @@ public class SystemResourceTest extends AbstractIntegrationTest { final TenantConfigurationKey key = TenantConfigurationKey.AUTHENTICATION_MODE_HEADER_AUTHORITY_NAME; final String testValue = "12:12:12"; - mvc.perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", key.getKeyName()) + mvc.perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}/", key.getKeyName()) .content(String.format(BASE_JSON_REQUEST_STRING, testValue)).contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); From 2b6f7665e0c7a1ac354083ffa65679a4c8cd5a90 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 14:11:11 +0200 Subject: [PATCH 019/371] =?UTF-8?q?Add=20signature=20from=20interface=20to?= =?UTF-8?q?=20the=20concret=20class,=20because=20of=20Spring=20MVC=20and?= =?UTF-8?q?=20parameter=20inheritance.=20"also=20actually=20doesn=E2=80=99?= =?UTF-8?q?t=20work=20with=20Spring=20MVC=20in=20its=20current=20form=20(m?= =?UTF-8?q?ethod=20parameter=20mapping=20is=20not=20inherited"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: SirWayne --- .../rest/api/MgmtDistributionSetRestApi.java | 38 ++++----- .../resource/MgmtDistributionSetResource.java | 83 +++++++++++++------ .../MgmtDistributionSetTagResource.java | 48 +++++++---- .../MgmtDistributionSetTypeResource.java | 42 ++++++---- .../MgmtDownloadArtifactResource.java | 6 +- .../rest/resource/MgmtDownloadResource.java | 5 +- .../rest/resource/MgmtRolloutResource.java | 41 ++++++--- .../resource/MgmtSoftwareModuleResource.java | 52 +++++++----- .../MgmtSoftwareModuleTypeResource.java | 24 ++++-- .../rest/resource/MgmtTargetResource.java | 53 ++++++++---- .../rest/resource/MgmtTargetTagResource.java | 37 ++++++--- 11 files changed, 273 insertions(+), 156 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 26788760e..cd66b1aec 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 @@ -2,7 +2,7 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ @@ -55,7 +55,7 @@ public interface MgmtDistributionSetRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getDistributionSets( + 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_SORTING, required = false) final String sortParam, @@ -74,7 +74,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getDistributionSet( + ResponseEntity getDistributionSet( @PathVariable("distributionSetId") final Long distributionSetId); /** @@ -90,7 +90,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> createDistributionSets( + ResponseEntity> createDistributionSets( @RequestBody final List sets); /** @@ -102,7 +102,7 @@ public interface MgmtDistributionSetRestApi { * */ @RequestMapping(method = RequestMethod.DELETE, value = "/{distributionSetId}") - public ResponseEntity deleteDistributionSet(@PathVariable("distributionSetId") final Long distributionSetId); + ResponseEntity deleteDistributionSet(@PathVariable("distributionSetId") final Long distributionSetId); /** * Handles the UPDATE request for a single DistributionSet . @@ -117,7 +117,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{distributionSetId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity updateDistributionSet( + ResponseEntity updateDistributionSet( @PathVariable("distributionSetId") final Long distributionSetId, @RequestBody final MgmtDistributionSetRequestBodyPut toUpdate); @@ -145,7 +145,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/assignedTargets", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> getAssignedTargets( + ResponseEntity> getAssignedTargets( @PathVariable("distributionSetId") final Long distributionSetId, @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, @@ -176,7 +176,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/installedTargets", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> getInstalledTargets( + ResponseEntity> getInstalledTargets( @PathVariable("distributionSetId") final Long distributionSetId, @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, @@ -199,7 +199,7 @@ public interface MgmtDistributionSetRestApi { @RequestMapping(method = RequestMethod.POST, value = "/{distributionSetId}/assignedTargets", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity createAssignedTarget( + ResponseEntity createAssignedTarget( @PathVariable("distributionSetId") final Long distributionSetId, @RequestBody final List targetIds); @@ -225,8 +225,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/metadata", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> getMetadata( - @PathVariable("distributionSetId") final Long distributionSetId, + ResponseEntity> getMetadata(@PathVariable("distributionSetId") final Long distributionSetId, @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, @@ -244,8 +243,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/metadata/{metadataKey}", produces = { MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getMetadataValue( - @PathVariable("distributionSetId") final Long distributionSetId, + ResponseEntity getMetadataValue(@PathVariable("distributionSetId") final Long distributionSetId, @PathVariable("metadataKey") final String metadataKey); /** @@ -260,7 +258,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{distributionSetId}/metadata/{metadataKey}", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity updateMetadata(@PathVariable("distributionSetId") final Long distributionSetId, + ResponseEntity updateMetadata(@PathVariable("distributionSetId") final Long distributionSetId, @PathVariable("metadataKey") final String metadataKey, @RequestBody final MetadataRest metadata); /** @@ -273,7 +271,7 @@ public interface MgmtDistributionSetRestApi { * @return status OK if the delete request is successful */ @RequestMapping(method = RequestMethod.DELETE, value = "/{distributionSetId}/metadata/{metadataKey}") - public ResponseEntity deleteMetadata(@PathVariable("distributionSetId") final Long distributionSetId, + ResponseEntity deleteMetadata(@PathVariable("distributionSetId") final Long distributionSetId, @PathVariable("metadataKey") final String metadataKey); /** @@ -289,8 +287,7 @@ public interface MgmtDistributionSetRestApi { @RequestMapping(method = RequestMethod.POST, value = "/{distributionSetId}/metadata", consumes = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity> createMetadata( - @PathVariable("distributionSetId") final Long distributionSetId, + ResponseEntity> createMetadata(@PathVariable("distributionSetId") final Long distributionSetId, @RequestBody final List metadataRest); /** @@ -309,7 +306,7 @@ public interface MgmtDistributionSetRestApi { @RequestMapping(method = RequestMethod.POST, value = "/{distributionSetId}/assignedSM", consumes = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity assignSoftwareModules(@PathVariable("distributionSetId") final Long distributionSetId, + ResponseEntity assignSoftwareModules(@PathVariable("distributionSetId") final Long distributionSetId, @RequestBody final List softwareModuleIDs); /** @@ -327,8 +324,7 @@ public interface MgmtDistributionSetRestApi { * {@code distributionSetId} exists. */ @RequestMapping(method = RequestMethod.DELETE, value = "/{distributionSetId}/assignedSM/{softwareModuleId}") - public ResponseEntity deleteAssignSoftwareModules( - @PathVariable("distributionSetId") final Long distributionSetId, + ResponseEntity deleteAssignSoftwareModules(@PathVariable("distributionSetId") final Long distributionSetId, @PathVariable("softwareModuleId") final Long softwareModuleId); /** @@ -354,7 +350,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/assignedSM", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity> getAssignedSoftwareModules( + ResponseEntity> getAssignedSoftwareModules( @PathVariable("distributionSetId") final Long distributionSetId, @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, diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java index 2db11f489..42199181e 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java @@ -24,6 +24,7 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleAssigment; import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetFields; @@ -51,6 +52,9 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -79,8 +83,11 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity> getDistributionSets(final int pagingOffsetParam, - final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public 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_SORTING, required = false) final String sortParam, + @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -100,7 +107,8 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity getDistributionSet(final Long distributionSetId) { + public ResponseEntity getDistributionSet( + @PathVariable("distributionSetId") final Long distributionSetId) { final DistributionSet foundDs = findDistributionSetWithExceptionIfNotFound(distributionSetId); return new ResponseEntity<>(MgmtDistributionSetMapper.toResponse(foundDs), HttpStatus.OK); @@ -108,7 +116,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { @Override public ResponseEntity> createDistributionSets( - final List sets) { + @RequestBody final List sets) { LOG.debug("creating {} distribution sets", sets.size()); // set default Ds type if ds type is null @@ -124,7 +132,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity deleteDistributionSet(final Long distributionSetId) { + public ResponseEntity deleteDistributionSet(@PathVariable("distributionSetId") final Long distributionSetId) { final DistributionSet set = findDistributionSetWithExceptionIfNotFound(distributionSetId); this.distributionSetManagement.deleteDistributionSet(set); @@ -133,8 +141,9 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity updateDistributionSet(final Long distributionSetId, - final MgmtDistributionSetRequestBodyPut toUpdate) { + public ResponseEntity updateDistributionSet( + @PathVariable("distributionSetId") final Long distributionSetId, + @RequestBody final MgmtDistributionSetRequestBodyPut toUpdate) { final DistributionSet set = findDistributionSetWithExceptionIfNotFound(distributionSetId); if (toUpdate.getDescription() != null) { @@ -154,8 +163,12 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity> getAssignedTargets(final Long distributionSetId, - final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getAssignedTargets( + @PathVariable("distributionSetId") final Long distributionSetId, + @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) { // check if distribution set exists otherwise throw exception // immediately @@ -179,8 +192,12 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity> getInstalledTargets(final Long distributionSetId, - final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getInstalledTargets( + @PathVariable("distributionSetId") final Long distributionSetId, + @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) { // check if distribution set exists otherwise throw exception // immediately findDistributionSetWithExceptionIfNotFound(distributionSetId); @@ -206,8 +223,9 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity createAssignedTarget(final Long distributionSetId, - final List targetIds) { + public ResponseEntity createAssignedTarget( + @PathVariable("distributionSetId") final Long distributionSetId, + @RequestBody final List targetIds) { final DistributionSetAssignmentResult assignDistributionSet = this.deployManagament.assignDistributionSet( distributionSetId, @@ -220,8 +238,12 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity> getMetadata(final Long distributionSetId, - final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getMetadata( + @PathVariable("distributionSetId") final Long distributionSetId, + @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) { // check if distribution set exists otherwise throw exception // immediately @@ -250,7 +272,9 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity getMetadataValue(final Long distributionSetId, final String metadataKey) { + public ResponseEntity getMetadataValue( + @PathVariable("distributionSetId") final Long distributionSetId, + @PathVariable("metadataKey") final String metadataKey) { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); @@ -260,8 +284,8 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity updateMetadata(final Long distributionSetId, final String metadataKey, - final MetadataRest metadata) { + public ResponseEntity updateMetadata(@PathVariable("distributionSetId") final Long distributionSetId, + @PathVariable("metadataKey") final String metadataKey, @RequestBody final MetadataRest metadata) { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); @@ -271,7 +295,8 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity deleteMetadata(final Long distributionSetId, final String metadataKey) { + public ResponseEntity deleteMetadata(@PathVariable("distributionSetId") final Long distributionSetId, + @PathVariable("metadataKey") final String metadataKey) { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); @@ -280,8 +305,9 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity> createMetadata(final Long distributionSetId, - final List metadataRest) { + public ResponseEntity> createMetadata( + @PathVariable("distributionSetId") final Long distributionSetId, + @RequestBody final List metadataRest) { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); @@ -293,8 +319,8 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity assignSoftwareModules(final Long distributionSetId, - final List softwareModuleIDs) { + public ResponseEntity assignSoftwareModules(@PathVariable("distributionSetId") final Long distributionSetId, + @RequestBody final List softwareModuleIDs) { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); @@ -314,7 +340,9 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity deleteAssignSoftwareModules(final Long distributionSetId, final Long softwareModuleId) { + public ResponseEntity deleteAssignSoftwareModules( + @PathVariable("distributionSetId") final Long distributionSetId, + @PathVariable("softwareModuleId") final Long softwareModuleId) { // check if distribution set and software module exist otherwise throw // exception immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); @@ -324,8 +352,11 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity> getAssignedSoftwareModules(final Long distributionSetId, - final int pagingOffsetParam, final int pagingLimitParam, final String sortParam) { + public ResponseEntity> getAssignedSoftwareModules( + @PathVariable("distributionSetId") final Long distributionSetId, + @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) { // check if distribution set exists otherwise throw exception // immediately final DistributionSet foundDs = findDistributionSetWithExceptionIfNotFound(distributionSetId); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java index 5d0131fec..907bbb574 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtDistributionSetTagAssigmentRe import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTag; import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TagFields; @@ -36,6 +37,9 @@ import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -53,8 +57,11 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity> getDistributionSetTags(final int pagingOffsetParam, - final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getDistributionSetTags( + @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) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -80,13 +87,15 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity getDistributionSetTag(final Long distributionsetTagId) { + public ResponseEntity getDistributionSetTag( + @PathVariable("distributionsetTagId") final Long distributionsetTagId) { final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); return new ResponseEntity<>(MgmtTagMapper.toResponse(tag), HttpStatus.OK); } @Override - public ResponseEntity> createDistributionSetTags(final List tags) { + public ResponseEntity> createDistributionSetTags( + @RequestBody final List tags) { LOG.debug("creating {} ds tags", tags.size()); final List createdTags = this.tagManagement @@ -96,8 +105,9 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity updateDistributionSetTag(final Long distributionsetTagId, - final MgmtTagRequestBodyPut restDSTagRest) { + public ResponseEntity updateDistributionSetTag( + @PathVariable("distributionsetTagId") final Long distributionsetTagId, + @RequestBody final MgmtTagRequestBodyPut restDSTagRest) { LOG.debug("update {} ds tag", restDSTagRest); final DistributionSetTag distributionSetTag = findDistributionTagById(distributionsetTagId); @@ -111,7 +121,8 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity deleteDistributionSetTag(final Long distributionsetTagId) { + public ResponseEntity deleteDistributionSetTag( + @PathVariable("distributionsetTagId") final Long distributionsetTagId) { LOG.debug("Delete {} distribution set tag", distributionsetTagId); final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); @@ -121,15 +132,18 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity> getAssignedDistributionSets(final Long distributionsetTagId) { + public ResponseEntity> getAssignedDistributionSets( + @PathVariable("distributionsetTagId") final Long distributionsetTagId) { final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); return new ResponseEntity<>( - MgmtDistributionSetMapper.toResponseDistributionSets(tag.getAssignedToDistributionSet()), HttpStatus.OK); + MgmtDistributionSetMapper.toResponseDistributionSets(tag.getAssignedToDistributionSet()), + HttpStatus.OK); } @Override - public ResponseEntity toggleTagAssignment(final Long distributionsetTagId, - final List assignedDSRequestBodies) { + public ResponseEntity toggleTagAssignment( + @PathVariable("distributionsetTagId") final Long distributionsetTagId, + @RequestBody final List assignedDSRequestBodies) { LOG.debug("Toggle distribution set assignment {} for ds tag {}", assignedDSRequestBodies.size(), distributionsetTagId); @@ -151,8 +165,9 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity> assignDistributionSets(final Long distributionsetTagId, - final List assignedDSRequestBodies) { + public ResponseEntity> assignDistributionSets( + @PathVariable("distributionsetTagId") final Long distributionsetTagId, + @RequestBody final List assignedDSRequestBodies) { LOG.debug("Assign DistributionSet {} for ds tag {}", assignedDSRequestBodies.size(), distributionsetTagId); final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); @@ -163,7 +178,8 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity unassignDistributionSets(final Long distributionsetTagId) { + public ResponseEntity unassignDistributionSets( + @PathVariable("distributionsetTagId") final Long distributionsetTagId) { LOG.debug("Unassign all DS for ds tag {}", distributionsetTagId); final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); if (tag.getAssignedToDistributionSet() == null) { @@ -178,7 +194,9 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes } @Override - public ResponseEntity unassignDistributionSet(final Long distributionsetTagId, final Long distributionsetId) { + public ResponseEntity unassignDistributionSet( + @PathVariable("distributionsetTagId") final Long distributionsetTagId, + @PathVariable("distributionsetId") final Long distributionsetId) { LOG.debug("Unassign ds {} for ds tag {}", distributionsetId, distributionsetTagId); final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); this.distributionSetManagement.unAssignTag(distributionsetId, tag); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java index 0e5adccdc..8d5239d9e 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java @@ -86,14 +86,15 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR @Override public ResponseEntity getDistributionSetType( - @PathVariable final Long distributionSetTypeId) { + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); return new ResponseEntity<>(MgmtDistributionSetTypeMapper.toResponse(foundType), HttpStatus.OK); } @Override - public ResponseEntity deleteDistributionSetType(@PathVariable final Long distributionSetTypeId) { + public ResponseEntity deleteDistributionSetType( + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId) { final DistributionSetType module = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); distributionSetManagement.deleteDistributionSetType(module); @@ -103,7 +104,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR @Override public ResponseEntity updateDistributionSetType( - @PathVariable final Long distributionSetTypeId, + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @RequestBody final MgmtDistributionSetTypeRequestBodyPut restDistributionSetType) { final DistributionSetType type = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -115,7 +116,8 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR final DistributionSetType updatedDistributionSetType = distributionSetManagement .updateDistributionSetType(type); - return new ResponseEntity<>(MgmtDistributionSetTypeMapper.toResponse(updatedDistributionSetType), HttpStatus.OK); + return new ResponseEntity<>(MgmtDistributionSetTypeMapper.toResponse(updatedDistributionSetType), + HttpStatus.OK); } @Override @@ -140,7 +142,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR @Override public ResponseEntity> getMandatoryModules( - @PathVariable final Long distributionSetTypeId) { + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toListResponse(foundType.getMandatoryModuleTypes()), @@ -148,8 +150,9 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity getMandatoryModule(@PathVariable final Long distributionSetTypeId, - @PathVariable final Long softwareModuleTypeId) { + public ResponseEntity getMandatoryModule( + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, + @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -164,8 +167,9 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity getOptionalModule(@PathVariable final Long distributionSetTypeId, - @PathVariable final Long softwareModuleTypeId) { + public ResponseEntity getOptionalModule( + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, + @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -181,7 +185,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR @Override public ResponseEntity> getOptionalModules( - @PathVariable final Long distributionSetTypeId) { + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -190,8 +194,9 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity removeMandatoryModule(@PathVariable final Long distributionSetTypeId, - @PathVariable final Long softwareModuleTypeId) { + public ResponseEntity removeMandatoryModule( + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, + @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -210,8 +215,9 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity removeOptionalModule(@PathVariable final Long distributionSetTypeId, - @PathVariable final Long softwareModuleTypeId) { + public ResponseEntity removeOptionalModule( + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, + @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); final SoftwareModuleType foundSmType = findSoftwareModuleTypeWithExceptionIfNotFound(softwareModuleTypeId); @@ -229,8 +235,8 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity addMandatoryModule(@PathVariable final Long distributionSetTypeId, - @RequestBody final MgmtId smtId) { + public ResponseEntity addMandatoryModule( + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @RequestBody final MgmtId smtId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -244,8 +250,8 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity addOptionalModule(@PathVariable final Long distributionSetTypeId, - @RequestBody final MgmtId smtId) { + public ResponseEntity addOptionalModule( + @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @RequestBody final MgmtId smtId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java index ec06c3c8a..ddd7180cf 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java @@ -22,6 +22,7 @@ import org.eclipse.hawkbit.rest.util.RestResourceConversionHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @@ -53,8 +54,9 @@ public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi */ @Override @ResponseBody - public ResponseEntity downloadArtifact(final Long softwareModuleId, final Long artifactId, - final HttpServletResponse servletResponse, final HttpServletRequest request) { + public ResponseEntity downloadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("artifactId") final Long artifactId, final HttpServletResponse servletResponse, + final HttpServletRequest request) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId); if (null == module || !module.getLocalArtifact(artifactId).isPresent()) { diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java index ec2eced90..ca4959810 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java @@ -26,6 +26,8 @@ import org.springframework.cache.Cache; import org.springframework.cache.Cache.ValueWrapper; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** @@ -57,7 +59,8 @@ public class MgmtDownloadResource implements MgmtDownloadRestApi { * successful */ @Override - public ResponseEntity downloadArtifactByDownloadId(final String downloadId, + @ResponseBody + public ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId, final HttpServletResponse response) { try { final ValueWrapper cacheWrapper = cache.get(downloadId); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java index ba1017cf3..37d5c6fdc 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java @@ -15,6 +15,7 @@ import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutResponseBody; import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutRestRequestBody; import org.eclipse.hawkbit.mgmt.json.model.rolloutgroup.MgmtRolloutGroupResponseBody; import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRolloutRestApi; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; @@ -41,7 +42,9 @@ import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -63,8 +66,11 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity> getRollouts(final int pagingOffsetParam, - final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getRollouts( + @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) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -85,13 +91,14 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { } @Override - public ResponseEntity getRollout(final Long rolloutId) { + public ResponseEntity getRollout(@PathVariable("rolloutId") final Long rolloutId) { final Rollout findRolloutById = findRolloutOrThrowException(rolloutId); return new ResponseEntity<>(MgmtRolloutMapper.toResponseRollout(findRolloutById), HttpStatus.OK); } @Override - public ResponseEntity create(@RequestBody final MgmtRolloutRestRequestBody rolloutRequestBody) { + public ResponseEntity create( + @RequestBody final MgmtRolloutRestRequestBody rolloutRequestBody) { // first check the given RSQL query if it's well formed, otherwise and // exception is thrown @@ -142,7 +149,8 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { } @Override - public ResponseEntity start(final Long rolloutId, final boolean startAsync) { + public ResponseEntity start(@PathVariable("rolloutId") final Long rolloutId, + @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_ASYNC, defaultValue = "false") final boolean startAsync) { final Rollout rollout = findRolloutOrThrowException(rolloutId); if (startAsync) { this.rolloutManagement.startRolloutAsync(rollout); @@ -153,22 +161,26 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { } @Override - public ResponseEntity pause(final Long rolloutId) { + public ResponseEntity pause(@PathVariable("rolloutId") final Long rolloutId) { final Rollout rollout = findRolloutOrThrowException(rolloutId); this.rolloutManagement.pauseRollout(rollout); return ResponseEntity.ok().build(); } @Override - public ResponseEntity resume(final Long rolloutId) { + public ResponseEntity resume(@PathVariable("rolloutId") final Long rolloutId) { final Rollout rollout = findRolloutOrThrowException(rolloutId); this.rolloutManagement.resumeRollout(rollout); return ResponseEntity.ok().build(); } @Override - public ResponseEntity> getRolloutGroups(final Long rolloutId, - final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getRolloutGroups( + @PathVariable("rolloutId") final Long rolloutId, + @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) { final Rollout rollout = findRolloutOrThrowException(rolloutId); final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); @@ -191,15 +203,20 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { } @Override - public ResponseEntity getRolloutGroup(final Long rolloutId, final Long groupId) { + public ResponseEntity getRolloutGroup(@PathVariable("rolloutId") final Long rolloutId, + @PathVariable("groupId") final Long groupId) { findRolloutOrThrowException(rolloutId); final RolloutGroup rolloutGroup = findRolloutGroupOrThrowException(groupId); return ResponseEntity.ok(MgmtRolloutMapper.toResponseRolloutGroup(rolloutGroup)); } @Override - public ResponseEntity> getRolloutGroupTargets(final Long rolloutId, final Long groupId, - final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getRolloutGroupTargets(@PathVariable("rolloutId") final Long rolloutId, + @PathVariable("groupId") final Long groupId, + @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) { findRolloutOrThrowException(rolloutId); final RolloutGroup rolloutGroup = findRolloutGroupOrThrowException(groupId); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java index 51b543366..866120c5b 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java @@ -42,6 +42,7 @@ 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.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @@ -61,7 +62,7 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { private SoftwareManagement softwareManagement; @Override - public ResponseEntity uploadArtifact(@PathVariable final Long softwareModuleId, + public ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @RequestParam("file") final MultipartFile file, @RequestParam(value = "filename", required = false) final String optionalFileName, @RequestParam(value = "md5sum", required = false) final String md5Sum, @@ -92,15 +93,18 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity> getArtifacts(@PathVariable final Long softwareModuleId) { + @ResponseBody + public ResponseEntity> getArtifacts( + @PathVariable("softwareModuleId") final Long softwareModuleId) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); return new ResponseEntity<>(MgmtSoftwareModuleMapper.artifactsToResponse(module.getArtifacts()), HttpStatus.OK); } @Override - public ResponseEntity getArtifact(@PathVariable final Long softwareModuleId, - @PathVariable final Long artifactId) { + @ResponseBody + public ResponseEntity getArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("artifactId") final Long artifactId) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId); return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponse(module.getLocalArtifact(artifactId).get()), @@ -108,8 +112,9 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity deleteArtifact(@PathVariable final Long softwareModuleId, - @PathVariable final Long artifactId) { + @ResponseBody + public ResponseEntity deleteArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("artifactId") final Long artifactId) { findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId); artifactManagement.deleteLocalArtifact(artifactId); @@ -147,7 +152,8 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity getSoftwareModule(@PathVariable final Long softwareModuleId) { + public ResponseEntity getSoftwareModule( + @PathVariable("softwareModuleId") final Long softwareModuleId) { final SoftwareModule findBaseSoftareModule = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponse(findBaseSoftareModule), HttpStatus.OK); @@ -166,7 +172,8 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity updateSoftwareModule(@PathVariable final Long softwareModuleId, + public ResponseEntity updateSoftwareModule( + @PathVariable("softwareModuleId") final Long softwareModuleId, @RequestBody final MgmtSoftwareModuleRequestBodyPut restSoftwareModule) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); @@ -183,7 +190,7 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity deleteSoftwareModule(@PathVariable final Long softwareModuleId) { + public ResponseEntity deleteSoftwareModule(@PathVariable("softwareModuleId") final Long softwareModuleId) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); softwareManagement.deleteSoftwareModule(module); @@ -192,7 +199,8 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity> getMetadata(@PathVariable final Long softwareModuleId, + public ResponseEntity> getMetadata( + @PathVariable("softwareModuleId") final Long softwareModuleId, @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, @@ -222,19 +230,17 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity getMetadataValue(@PathVariable final Long softwareModuleId, - @PathVariable final String metadataKey) { - // check if distribution set exists otherwise throw exception - // immediately + public ResponseEntity getMetadataValue(@PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("metadataKey") final String metadataKey) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); - final SoftwareModuleMetadata findOne = softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(sw, metadataKey)); + final SoftwareModuleMetadata findOne = softwareManagement + .findSoftwareModuleMetadata(new SwMetadataCompositeKey(sw, metadataKey)); return ResponseEntity. ok(MgmtSoftwareModuleMapper.toResponseSwMetadata(findOne)); } @Override - public ResponseEntity updateMetadata(@PathVariable final Long softwareModuleId, - @PathVariable final String metadataKey, @RequestBody final MetadataRest metadata) { - // check if software module exists otherwise throw exception immediately + public ResponseEntity updateMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("metadataKey") final String metadataKey, @RequestBody final MetadataRest metadata) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final SoftwareModuleMetadata updated = softwareManagement .updateSoftwareModuleMetadata(new SoftwareModuleMetadata(metadataKey, sw, metadata.getValue())); @@ -242,18 +248,17 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity deleteMetadata(@PathVariable final Long softwareModuleId, - @PathVariable final String metadataKey) { - // check if software module exists otherwise throw exception immediately + public ResponseEntity deleteMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("metadataKey") final String metadataKey) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); softwareManagement.deleteSoftwareModuleMetadata(new SwMetadataCompositeKey(sw, metadataKey)); return ResponseEntity.ok().build(); } @Override - public ResponseEntity> createMetadata(@PathVariable final Long softwareModuleId, + public ResponseEntity> createMetadata( + @PathVariable("softwareModuleId") final Long softwareModuleId, @RequestBody final List metadataRest) { - // check if software module exists otherwise throw exception immediately final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final List created = softwareManagement @@ -273,4 +278,5 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } return module; } + } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java index ab23046b3..deba883f6 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java @@ -14,6 +14,7 @@ import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPut; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -30,6 +31,9 @@ import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -43,8 +47,11 @@ public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRes private SoftwareManagement softwareManagement; @Override - public ResponseEntity> getTypes(final int pagingOffsetParam, - final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getTypes( + @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) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -69,14 +76,16 @@ public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRes } @Override - public ResponseEntity getSoftwareModuleType(final Long softwareModuleTypeId) { + public ResponseEntity getSoftwareModuleType( + @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId) { final SoftwareModuleType foundType = findSoftwareModuleTypeWithExceptionIfNotFound(softwareModuleTypeId); return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toResponse(foundType), HttpStatus.OK); } @Override - public ResponseEntity deleteSoftwareModuleType(final Long softwareModuleTypeId) { + public ResponseEntity deleteSoftwareModuleType( + @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId) { final SoftwareModuleType module = findSoftwareModuleTypeWithExceptionIfNotFound(softwareModuleTypeId); this.softwareManagement.deleteSoftwareModuleType(module); @@ -85,8 +94,9 @@ public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRes } @Override - public ResponseEntity updateSoftwareModuleType(final Long softwareModuleTypeId, - final MgmtSoftwareModuleTypeRequestBodyPut restSoftwareModuleType) { + public ResponseEntity updateSoftwareModuleType( + @PathVariable("softwareModuleTypeId") final Long softwareModuleTypeId, + @RequestBody final MgmtSoftwareModuleTypeRequestBodyPut restSoftwareModuleType) { final SoftwareModuleType type = findSoftwareModuleTypeWithExceptionIfNotFound(softwareModuleTypeId); // only description can be modified @@ -100,7 +110,7 @@ public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRes @Override public ResponseEntity> createSoftwareModuleTypes( - final List softwareModuleTypes) { + @RequestBody final List softwareModuleTypes) { final List createdSoftwareModules = this.softwareManagement .createSoftwareModuleType(MgmtSoftwareModuleTypeMapper.smFromRequest(softwareModuleTypes)); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java index 449c57362..4a7c760e3 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java @@ -49,6 +49,8 @@ import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -66,7 +68,7 @@ public class MgmtTargetResource implements MgmtTargetRestApi { private DeploymentManagement deploymentManagement; @Override - public ResponseEntity getTarget(final String targetId) { + public ResponseEntity getTarget(@PathVariable("targetId") final String targetId) { final Target findTarget = findTargetWithExceptionIfNotFound(targetId); // to single response include poll status final MgmtTarget response = MgmtTargetMapper.toResponse(findTarget); @@ -77,8 +79,11 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity> getTargets(final int pagingOffsetParam, final int pagingLimitParam, - final String sortParam, final String rsqlParam) { + public ResponseEntity> getTargets( + @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) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -102,7 +107,7 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity> createTargets(final List targets) { + public ResponseEntity> createTargets(@RequestBody final List targets) { LOG.debug("creating {} targets", targets.size()); final Iterable createdTargets = this.targetManagement .createTargets(MgmtTargetMapper.fromRequest(targets)); @@ -111,7 +116,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity updateTarget(final String targetId, final MgmtTargetRequestBody targetRest) { + public ResponseEntity updateTarget(@PathVariable("targetId") final String targetId, + @RequestBody final MgmtTargetRequestBody targetRest) { final Target existingTarget = findTargetWithExceptionIfNotFound(targetId); LOG.debug("updating target {}", existingTarget.getId()); if (targetRest.getDescription() != null) { @@ -126,7 +132,7 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity deleteTarget(final String targetId) { + public ResponseEntity deleteTarget(@PathVariable("targetId") final String targetId) { final Target target = findTargetWithExceptionIfNotFound(targetId); this.targetManagement.deleteTargets(target.getId()); LOG.debug("{} target deleted, return status {}", targetId, HttpStatus.OK); @@ -134,7 +140,7 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity getAttributes(final String targetId) { + public ResponseEntity getAttributes(@PathVariable("targetId") final String targetId) { final Target foundTarget = findTargetWithExceptionIfNotFound(targetId); final Map controllerAttributes = foundTarget.getTargetInfo().getControllerAttributes(); if (controllerAttributes.isEmpty()) { @@ -148,8 +154,11 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity> getActionHistory(final String targetId, final int pagingOffsetParam, - final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getActionHistory(@PathVariable("targetId") final String targetId, + @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) { final Target foundTarget = findTargetWithExceptionIfNotFound(targetId); @@ -175,7 +184,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity getAction(final String targetId, final Long actionId) { + public ResponseEntity getAction(@PathVariable("targetId") final String targetId, + @PathVariable("actionId") final Long actionId) { final Target target = findTargetWithExceptionIfNotFound(targetId); final Action action = findActionWithExceptionIfNotFound(actionId); @@ -204,8 +214,9 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity cancelAction(final String targetId, final Long actionId, - @RequestParam(required = false, defaultValue = "false") final boolean force) { + public ResponseEntity cancelAction(@PathVariable("targetId") final String targetId, + @PathVariable("actionId") final Long actionId, + @RequestParam(value = "force", required = false, defaultValue = "false") final boolean force) { final Target target = findTargetWithExceptionIfNotFound(targetId); final Action action = findActionWithExceptionIfNotFound(actionId); @@ -221,8 +232,11 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity> getActionStatusList(final String targetId, final Long actionId, - final int pagingOffsetParam, final int pagingLimitParam, final String sortParam) { + public ResponseEntity> getActionStatusList( + @PathVariable("targetId") final String targetId, @PathVariable("actionId") final Long actionId, + @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) { final Target target = findTargetWithExceptionIfNotFound(targetId); @@ -247,7 +261,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity getAssignedDistributionSet(final String targetId) { + public ResponseEntity getAssignedDistributionSet( + @PathVariable("targetId") final String targetId) { final Target findTarget = findTargetWithExceptionIfNotFound(targetId); final MgmtDistributionSet distributionSetRest = MgmtDistributionSetMapper .toResponse(findTarget.getAssignedDistributionSet()); @@ -261,8 +276,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity postAssignedDistributionSet(final String targetId, - final MgmtDistributionSetAssigment dsId) { + public ResponseEntity postAssignedDistributionSet(@PathVariable("targetId") final String targetId, + @RequestBody final MgmtDistributionSetAssigment dsId) { findTargetWithExceptionIfNotFound(targetId); final ActionType type = (dsId.getType() != null) ? MgmtRestModelMapper.convertActionType(dsId.getType()) @@ -281,7 +296,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity getInstalledDistributionSet(final String targetId) { + public ResponseEntity getInstalledDistributionSet( + @PathVariable("targetId") final String targetId) { final Target findTarget = findTargetWithExceptionIfNotFound(targetId); final MgmtDistributionSet distributionSetRest = MgmtDistributionSetMapper .toResponse(findTarget.getTargetInfo().getInstalledDistributionSet()); @@ -309,4 +325,5 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } return findAction; } + } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java index d98518208..03265a76c 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java @@ -17,6 +17,7 @@ import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTag; import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTargetTagAssigmentResult; import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TagFields; @@ -36,7 +37,9 @@ import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -54,8 +57,11 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { private TargetManagement targetManagement; @Override - public ResponseEntity> getTargetTags(final int pagingOffsetParam, final int pagingLimitParam, - final String sortParam, final String rsqlParam) { + public ResponseEntity> getTargetTags( + @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) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -81,7 +87,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { } @Override - public ResponseEntity getTargetTag(final Long targetTagId) { + public ResponseEntity getTargetTag(@PathVariable("targetTagId") final Long targetTagId) { final TargetTag tag = findTargetTagById(targetTagId); return new ResponseEntity<>(MgmtTagMapper.toResponse(tag), HttpStatus.OK); } @@ -95,7 +101,8 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { } @Override - public ResponseEntity updateTagretTag(final Long targetTagId, final MgmtTagRequestBodyPut restTargetTagRest) { + public ResponseEntity updateTagretTag(@PathVariable("targetTagId") final Long targetTagId, + @RequestBody final MgmtTagRequestBodyPut restTargetTagRest) { LOG.debug("update {} target tag", restTargetTagRest); final TargetTag targetTag = findTargetTagById(targetTagId); @@ -108,7 +115,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { } @Override - public ResponseEntity deleteTargetTag(final Long targetTagId) { + public ResponseEntity deleteTargetTag(@PathVariable("targetTagId") final Long targetTagId) { LOG.debug("Delete {} target tag", targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); @@ -118,15 +125,16 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { } @Override - public ResponseEntity> getAssignedTargets(final Long targetTagId) { + public ResponseEntity> getAssignedTargets(@PathVariable("targetTagId") final Long targetTagId) { final TargetTag targetTag = findTargetTagById(targetTagId); return new ResponseEntity<>(MgmtTargetMapper.toResponseWithLinksAndPollStatus(targetTag.getAssignedToTargets()), HttpStatus.OK); } @Override - public ResponseEntity toggleTagAssignment(final Long targetTagId, - final List assignedTargetRequestBodies) { + public ResponseEntity toggleTagAssignment( + @PathVariable("targetTagId") final Long targetTagId, + @RequestBody final List assignedTargetRequestBodies) { LOG.debug("Toggle Target assignment {} for target tag {}", assignedTargetRequestBodies.size(), targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); @@ -140,8 +148,8 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { } @Override - public ResponseEntity> assignTargets(final Long targetTagId, - final List assignedTargetRequestBodies) { + public ResponseEntity> assignTargets(@PathVariable("targetTagId") final Long targetTagId, + @RequestBody final List assignedTargetRequestBodies) { LOG.debug("Assign Targets {} for target tag {}", assignedTargetRequestBodies.size(), targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); final List assignedTarget = this.targetManagement @@ -150,7 +158,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { } @Override - public ResponseEntity unassignTargets(final Long targetTagId) { + public ResponseEntity unassignTargets(@PathVariable("targetTagId") final Long targetTagId) { LOG.debug("Unassign all Targets for target tag {}", targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); if (targetTag.getAssignedToTargets() == null) { @@ -162,7 +170,8 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { } @Override - public ResponseEntity unassignTarget(final Long targetTagId, final String controllerId) { + public ResponseEntity unassignTarget(@PathVariable("targetTagId") final Long targetTagId, + @PathVariable("controllerId") final String controllerId) { LOG.debug("Unassign target {} for target tag {}", controllerId, targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); this.targetManagement.unAssignTag(controllerId, targetTag); @@ -177,8 +186,10 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { return tag; } - private List findTargetControllerIds(final List assignedTargetRequestBodies) { + private List findTargetControllerIds( + final List assignedTargetRequestBodies) { return assignedTargetRequestBodies.stream().map(request -> request.getControllerId()) .collect(Collectors.toList()); } + } From 5d30ea3d092aa9859cfad8af86edb1a52008cd05 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 14:36:00 +0200 Subject: [PATCH 020/371] Rename Mgmt MetaData Signed-off-by: SirWayne --- .../{MetadataRest.java => MgmtMetadata.java} | 2 +- .../mgmt/json/model/artifact/MgmtArtifact.java | 2 ++ .../rest/api/MgmtDistributionSetRestApi.java | 14 +++++++------- .../mgmt/rest/api/MgmtSoftwareModuleRestApi.java | 14 +++++++------- .../rest/resource/MgmtDistributionSetMapper.java | 16 ++++++++-------- .../resource/MgmtDistributionSetResource.java | 16 ++++++++-------- .../rest/resource/MgmtSoftwareModuleMapper.java | 14 +++++++------- .../resource/MgmtSoftwareModuleResource.java | 16 ++++++++-------- 8 files changed, 48 insertions(+), 46 deletions(-) rename hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/{MetadataRest.java => MgmtMetadata.java} (97%) diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MetadataRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtMetadata.java similarity index 97% rename from hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MetadataRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtMetadata.java index 70cfff0d0..6a6371d6b 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MetadataRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/MgmtMetadata.java @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class MetadataRest { +public class MgmtMetadata { @JsonProperty(required = true) private String key; diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java index 35ad382e7..0d9e83690 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java @@ -15,6 +15,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.annotation.JsonValue; /** @@ -22,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonValue; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) +@JsonRootName(value = "") public class MgmtArtifact extends MgmtBaseEntity { @JsonProperty(required = true) 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 cd66b1aec..0b960543c 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 @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; -import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtMetadata; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPost; @@ -225,7 +225,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/metadata", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - ResponseEntity> getMetadata(@PathVariable("distributionSetId") final Long distributionSetId, + ResponseEntity> getMetadata(@PathVariable("distributionSetId") final Long distributionSetId, @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, @@ -243,7 +243,7 @@ public interface MgmtDistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/metadata/{metadataKey}", produces = { MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getMetadataValue(@PathVariable("distributionSetId") final Long distributionSetId, + ResponseEntity getMetadataValue(@PathVariable("distributionSetId") final Long distributionSetId, @PathVariable("metadataKey") final String metadataKey); /** @@ -258,8 +258,8 @@ 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 MetadataRest metadata); + ResponseEntity updateMetadata(@PathVariable("distributionSetId") final Long distributionSetId, + @PathVariable("metadataKey") final String metadataKey, @RequestBody final MgmtMetadata metadata); /** * Deletes a single meta data entry from the distribution set. @@ -287,8 +287,8 @@ public interface MgmtDistributionSetRestApi { @RequestMapping(method = RequestMethod.POST, value = "/{distributionSetId}/metadata", consumes = { 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); + ResponseEntity> createMetadata(@PathVariable("distributionSetId") final Long distributionSetId, + @RequestBody final List metadataRest); /** * Assigns a list of software modules to a distribution set. 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 d5dbb6c7e..dab8cc594 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 @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; -import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtMetadata; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; @@ -214,7 +214,7 @@ public interface MgmtSoftwareModuleRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/metadata", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - ResponseEntity> getMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity> getMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, @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, @@ -232,7 +232,7 @@ public interface MgmtSoftwareModuleRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/metadata/{metadataKey}", produces = { MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getMetadataValue(@PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity getMetadataValue(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("metadataKey") final String metadataKey); /** @@ -247,8 +247,8 @@ 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 MetadataRest metadata); + ResponseEntity updateMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("metadataKey") final String metadataKey, @RequestBody final MgmtMetadata metadata); /** * Deletes a single meta data entry from the software module. @@ -276,7 +276,7 @@ public interface MgmtSoftwareModuleRestApi { @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/metadata", consumes = { 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); + ResponseEntity> createMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, + @RequestBody final List metadataRest); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java index 111ba00ae..6d2d890b2 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java @@ -14,7 +14,7 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtMetadata; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtTargetAssignmentResponseBody; @@ -128,16 +128,16 @@ public final class MgmtDistributionSetMapper { } /** - * From {@link MetadataRest} to {@link DistributionSetMetadata}. + * From {@link MgmtMetadata} to {@link DistributionSetMetadata}. * * @param ds * @param metadata * @return */ static List fromRequestDsMetadata(final DistributionSet ds, - final List metadata) { + final List metadata) { final List mappedList = new ArrayList<>(metadata.size()); - for (final MetadataRest metadataRest : metadata) { + for (final MgmtMetadata metadataRest : metadata) { if (metadataRest.getKey() == null) { throw new IllegalArgumentException("the key of the metadata must be present"); } @@ -204,16 +204,16 @@ public final class MgmtDistributionSetMapper { return response; } - static MetadataRest toResponseDsMetadata(final DistributionSetMetadata metadata) { - final MetadataRest metadataRest = new MetadataRest(); + static MgmtMetadata toResponseDsMetadata(final DistributionSetMetadata metadata) { + final MgmtMetadata metadataRest = new MgmtMetadata(); metadataRest.setKey(metadata.getId().getKey()); metadataRest.setValue(metadata.getValue()); return metadataRest; } - static List toResponseDsMetadata(final List metadata) { + static List toResponseDsMetadata(final List metadata) { - final List mappedList = new ArrayList<>(metadata.size()); + final List mappedList = new ArrayList<>(metadata.size()); for (final DistributionSetMetadata distributionSetMetadata : metadata) { mappedList.add(toResponseDsMetadata(distributionSetMetadata)); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java index 42199181e..17f4c3303 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtMetadata; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPost; @@ -238,7 +238,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity> getMetadata( + public ResponseEntity> getMetadata( @PathVariable("distributionSetId") final Long distributionSetId, @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, @@ -272,7 +272,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity getMetadataValue( + public ResponseEntity getMetadataValue( @PathVariable("distributionSetId") final Long distributionSetId, @PathVariable("metadataKey") final String metadataKey) { // check if distribution set exists otherwise throw exception @@ -280,12 +280,12 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); final DistributionSetMetadata findOne = this.distributionSetManagement .findOne(new DsMetadataCompositeKey(ds, metadataKey)); - return ResponseEntity. ok(MgmtDistributionSetMapper.toResponseDsMetadata(findOne)); + return ResponseEntity. ok(MgmtDistributionSetMapper.toResponseDsMetadata(findOne)); } @Override - public ResponseEntity updateMetadata(@PathVariable("distributionSetId") final Long distributionSetId, - @PathVariable("metadataKey") final String metadataKey, @RequestBody final MetadataRest metadata) { + public ResponseEntity updateMetadata(@PathVariable("distributionSetId") final Long distributionSetId, + @PathVariable("metadataKey") final String metadataKey, @RequestBody final MgmtMetadata metadata) { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); @@ -305,9 +305,9 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { } @Override - public ResponseEntity> createMetadata( + public ResponseEntity> createMetadata( @PathVariable("distributionSetId") final Long distributionSetId, - @RequestBody final List metadataRest) { + @RequestBody final List metadataRest) { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java index a100b6fb4..38b4ace75 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java @@ -14,7 +14,7 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtMetadata; import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifactHash; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; @@ -59,9 +59,9 @@ public final class MgmtSoftwareModuleMapper { } static List fromRequestSwMetadata(final SoftwareModule sw, - final List metadata) { + final List metadata) { final List mappedList = new ArrayList<>(metadata.size()); - for (final MetadataRest metadataRest : metadata) { + for (final MgmtMetadata metadataRest : metadata) { if (metadataRest.getKey() == null) { throw new IllegalArgumentException("the key of the metadata must be present"); } @@ -106,16 +106,16 @@ public final class MgmtSoftwareModuleMapper { return response; } - static List toResponseSwMetadata(final List metadata) { - final List mappedList = new ArrayList<>(metadata.size()); + static List toResponseSwMetadata(final List metadata) { + final List mappedList = new ArrayList<>(metadata.size()); for (final SoftwareModuleMetadata distributionSetMetadata : metadata) { mappedList.add(toResponseSwMetadata(distributionSetMetadata)); } return mappedList; } - static MetadataRest toResponseSwMetadata(final SoftwareModuleMetadata metadata) { - final MetadataRest metadataRest = new MetadataRest(); + static MgmtMetadata toResponseSwMetadata(final SoftwareModuleMetadata metadata) { + final MgmtMetadata metadataRest = new MgmtMetadata(); metadataRest.setKey(metadata.getId().getKey()); metadataRest.setValue(metadata.getValue()); return metadataRest; diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java index 866120c5b..75abe57f4 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.mgmt.rest.resource; import java.io.IOException; import java.util.List; -import org.eclipse.hawkbit.mgmt.json.model.MetadataRest; +import org.eclipse.hawkbit.mgmt.json.model.MgmtMetadata; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; @@ -199,7 +199,7 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity> getMetadata( + public ResponseEntity> getMetadata( @PathVariable("softwareModuleId") final Long softwareModuleId, @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, @@ -230,17 +230,17 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity getMetadataValue(@PathVariable("softwareModuleId") final Long softwareModuleId, + public ResponseEntity getMetadataValue(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("metadataKey") final String metadataKey) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final SoftwareModuleMetadata findOne = softwareManagement .findSoftwareModuleMetadata(new SwMetadataCompositeKey(sw, metadataKey)); - return ResponseEntity. ok(MgmtSoftwareModuleMapper.toResponseSwMetadata(findOne)); + return ResponseEntity. ok(MgmtSoftwareModuleMapper.toResponseSwMetadata(findOne)); } @Override - public ResponseEntity updateMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("metadataKey") final String metadataKey, @RequestBody final MetadataRest metadata) { + public ResponseEntity updateMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, + @PathVariable("metadataKey") final String metadataKey, @RequestBody final MgmtMetadata metadata) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final SoftwareModuleMetadata updated = softwareManagement .updateSoftwareModuleMetadata(new SoftwareModuleMetadata(metadataKey, sw, metadata.getValue())); @@ -256,9 +256,9 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { } @Override - public ResponseEntity> createMetadata( + public ResponseEntity> createMetadata( @PathVariable("softwareModuleId") final Long softwareModuleId, - @RequestBody final List metadataRest) { + @RequestBody final List metadataRest) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final List created = softwareManagement From 5fd7f3a5b38b4981d7d5c17ed49ae8c673772787 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 21 Apr 2016 14:50:48 +0200 Subject: [PATCH 021/371] Small UI inconsitencies and glitches cleanup - Consitent table muliselect Signed-off-by: Melanie Retter --- .../artifacts/event/SoftwareModuleEvent.java | 4 ++ .../event/SoftwareModuleTypeEvent.java | 2 +- .../smtable/SoftwareModuleTable.java | 12 ++++ .../smtable/SoftwareModuleTableLayout.java | 43 ++++++++++++- .../filterlayout/AbstractFilterButtons.java | 50 ++++++++++++++-- .../table/AbstractNamedVersionTable.java | 42 ++++++++++++- .../ui/common/table/AbstractTable.java | 1 + .../ui/common/table/AbstractTableLayout.java | 20 ++++++- .../dstable/DistributionSetTable.java | 14 +++++ .../dstable/DistributionSetTableLayout.java | 43 +++++++++++++ .../event/DistributionSetTableEvent.java | 60 +++++++++++++++++++ .../event/DistributionSetTypeEvent.java | 15 +---- .../event/SoftwareModuleTableEvent.java | 51 ++++++++++++++++ .../distributions/smtable/SwModuleTable.java | 17 +++++- .../smtable/SwModuleTableLayout.java | 42 +++++++++++++ .../management/dstable/DistributionTable.java | 8 +++ .../dstable/DistributionTableLayout.java | 41 +++++++++++++ .../event/DistributionTableEvent.java | 18 ++++++ .../management/targettable/TargetTable.java | 31 ++++++---- 19 files changed, 477 insertions(+), 37 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java index 95770cb8f..1764f8998 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java @@ -28,6 +28,10 @@ public class SoftwareModuleEvent extends BaseEntityEvent { private SoftwareModuleEventType softwareModuleEventType; + public SoftwareModuleEvent() { + super(null, null); + } + /** * Creates software module event. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java index 88e076775..f1b8deb72 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java @@ -25,7 +25,7 @@ public class SoftwareModuleTypeEvent { * */ public enum SoftwareModuleTypeEnum { - ADD_SOFTWARE_MODULE_TYPE, DELETE_SOFTWARE_MODULE_TYPE, UPDATE_SOFTWARE_MODULE_TYPE + ADD_SOFTWARE_MODULE_TYPE, DELETE_SOFTWARE_MODULE_TYPE, UPDATE_SOFTWARE_MODULE_TYPE, SELECT_ALL } private SoftwareModuleType softwareModuleType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java index 478438891..11ac5e571 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java @@ -35,6 +35,7 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; +import com.vaadin.event.Action; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; @@ -211,4 +212,15 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable * i is the id of the table */ -public abstract class AbstractNamedVersionTable extends AbstractTable { +public abstract class AbstractNamedVersionTable extends AbstractTable + implements Handler { private static final long serialVersionUID = 780050712209750719L; + protected ShortcutAction actionSelectAll; + + protected ShortcutAction actionUnSelectAll; + + /** + * Initialize the component. + */ + @Override + protected void init() { + super.init(); + actionSelectAll = new ShortcutAction(i18n.get("action.target.table.selectall")); + actionUnSelectAll = new ShortcutAction(i18n.get("action.target.table.clear")); + setMultiSelect(true); + setSelectable(true); + } + @Override protected List getTableVisibleColumns() { final List columnList = super.getTableVisibleColumns(); @@ -44,4 +64,24 @@ public abstract class AbstractNamedVersionTable extends Table { private static final Logger LOG = LoggerFactory.getLogger(AbstractTable.class); + // TODO MR should be private and use with getter/setter @Autowired protected transient EventBus.SessionEventBus eventBus; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java index b9fa20f03..fa847b4ba 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java @@ -9,8 +9,11 @@ package org.eclipse.hawkbit.ui.common.table; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; +import org.springframework.beans.factory.annotation.Autowired; +import org.vaadin.spring.events.EventBus; import com.vaadin.event.Action.Handler; +import com.vaadin.event.ShortcutAction; import com.vaadin.ui.Alignment; import com.vaadin.ui.Panel; import com.vaadin.ui.VerticalLayout; @@ -27,6 +30,15 @@ public abstract class AbstractTableLayout extends VerticalLayout { private static final long serialVersionUID = 8611248179949245460L; + /** + * action for the shortcut key ctrl + 'A'. + */ + protected static final ShortcutAction ACTION_CTRL_A = new ShortcutAction("Select All", ShortcutAction.KeyCode.A, + new int[] { ShortcutAction.ModifierKey.CTRL }); + + @Autowired + private transient EventBus.SessionEventBus eventBus; + private AbstractTableHeader tableHeader; private AbstractTable table; @@ -93,12 +105,14 @@ public abstract class AbstractTableLayout extends VerticalLayout { * @return reference of {@link Handler} to handler the short cut keys. * Default is null. */ - protected Handler getShortCutKeysHandler() { - return null; - } + protected abstract Handler getShortCutKeysHandler(); public void setShowFilterButtonVisible(final boolean visible) { tableHeader.setFilterButtonsIconVisible(visible); } + public EventBus.SessionEventBus getEventBus() { + return eventBus; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index 01c242247..56abe5d25 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -31,6 +31,8 @@ import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModule import org.eclipse.hawkbit.ui.common.table.AbstractNamedVersionTable; import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; +import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent; +import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent.DistributionSetComponentEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; import org.eclipse.hawkbit.ui.distributions.event.DragEvent; @@ -55,6 +57,7 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; +import com.vaadin.event.Action; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; @@ -472,4 +475,15 @@ public class DistributionSetTable extends AbstractNamedVersionTable { + + /** + * DistributionSet table components events. + * + */ + public enum DistributionSetComponentEvent { + SELECT_ALL + } + + private DistributionSetComponentEvent distributionSetComponentEvent; + + /** + * Constructor. + * + * @param eventType + * the event type. + * @param entity + * the entity + */ + public DistributionSetTableEvent(final BaseEntityEventType eventType, final DistributionSet entity) { + super(eventType, entity); + } + + /** + * The component event. + * + * @param DistributionSetTableEvent + * the distributionSet component event. + */ + public DistributionSetTableEvent(final DistributionSetComponentEvent distributionSetComponentEvent) { + super(null, null); + this.distributionSetComponentEvent = distributionSetComponentEvent; + } + + public DistributionSetComponentEvent getDistributionSetComponentEvent() { + return distributionSetComponentEvent; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java index 9cbd1f1bc..798d2a43d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java @@ -30,16 +30,11 @@ public class DistributionSetTypeEvent { private final DistributionSetTypeEnum distributionSetTypeEnum; - private String distributionSetTypeName; - /** * @param distributionSetTypeEnum - * @param distributionSetTypeName */ - public DistributionSetTypeEvent(final DistributionSetTypeEnum distributionSetTypeEnum, - final String distributionSetTypeName) { + public DistributionSetTypeEvent(final DistributionSetTypeEnum distributionSetTypeEnum) { this.distributionSetTypeEnum = distributionSetTypeEnum; - this.distributionSetTypeName = distributionSetTypeName; } /** @@ -52,14 +47,6 @@ public class DistributionSetTypeEvent { this.distributionSetType = distributionSetType; } - public String getDistributionSetTypeName() { - return distributionSetTypeName; - } - - public void setDistributionSetTypeName(final String distributionSetTypeName) { - this.distributionSetTypeName = distributionSetTypeName; - } - public DistributionSetType getDistributionSetType() { return distributionSetType; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java new file mode 100644 index 000000000..d3347d52f --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java @@ -0,0 +1,51 @@ +package org.eclipse.hawkbit.ui.distributions.event; + +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; + +/** + * + * + * + */ +public class SoftwareModuleTableEvent extends BaseEntityEvent { + + /** + * SoftwareModule table components events. + * + */ + public enum SoftwareModuleComponentEvent { + SELECT_ALL + } + + private SoftwareModuleComponentEvent softwareModuleComponentEvent; + + /** + * Constructor. + * + * @param eventType + * the event type. + * @param entity + * the entity + */ + public SoftwareModuleTableEvent(final BaseEntityEventType eventType, final SoftwareModule entity) { + super(eventType, entity); + } + + /** + * The component event. + * + * @param SoftwareModuleComponentEvent + * the softwareModule component event. + */ + public SoftwareModuleTableEvent(final SoftwareModuleComponentEvent softwareModuleComponentEvent) { + super(null, null); + this.softwareModuleComponentEvent = softwareModuleComponentEvent; + } + + public SoftwareModuleComponentEvent getSoftwareModuleComponentEvent() { + return softwareModuleComponentEvent; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java index eeea33723..d07111858 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java @@ -26,6 +26,8 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; import org.eclipse.hawkbit.ui.distributions.event.SaveActionWindowEvent; +import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleTableEvent; +import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleTableEvent.SoftwareModuleComponentEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -42,6 +44,8 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; +import com.vaadin.event.Action; +import com.vaadin.event.Action.Handler; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; @@ -62,7 +66,7 @@ import com.vaadin.ui.Window; */ @SpringComponent @ViewScope -public class SwModuleTable extends AbstractNamedVersionTable { +public class SwModuleTable extends AbstractNamedVersionTable implements Handler { private static final long serialVersionUID = 6785314784507424750L; @@ -388,4 +392,15 @@ public class SwModuleTable extends AbstractNamedVersionTable { + /** + * DistributionSet table components events. + * + */ + public enum DistributionTableComponentEvent { + SELECT_ALL + } + /** * Constructor. * @@ -31,4 +39,14 @@ public class DistributionTableEvent extends BaseEntityEvent { super(eventType, entity); } + /** + * The component event. + * + * @param DistributionSetTableEvent + * the distributionSet component event. + */ + public DistributionTableEvent(final DistributionTableComponentEvent distributionComponentEvent) { + super(null, null); + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 3b9c18952..7fb2446f0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -21,7 +21,6 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; -import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; @@ -63,7 +62,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; @@ -353,6 +351,7 @@ public class TargetTable extends AbstractTable implements }; } + // TODO MR private void onTargetDeletedEvent(final List events) { final LazyQueryContainer targetContainer = (LazyQueryContainer) getContainerDataSource(); final List visibleItemIds = (List) getVisibleItemIds(); @@ -928,16 +927,24 @@ public class TargetTable extends AbstractTable implements * Select all rows in the table. */ public void selectAll() { - final PageRequest pageRequest = new OffsetBasedPageRequest(0, size(), - new Sort(SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER, "createdAt")); - List targetIdList; - // is custom filter selected - if (managementUIState.getTargetTableFilters().getTargetFilterQuery().isPresent()) { - targetIdList = getTargetIdsByCustomFilters(pageRequest); - } else { - targetIdList = getTargetIdsBySimpleFilters(pageRequest); - } - setValue(targetIdList); + // final PageRequest pageRequest = new OffsetBasedPageRequest(0, size(), + // new Sort(SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER, + // "createdAt")); + // List targetIdList; + // // is custom filter selected + // if + // (managementUIState.getTargetTableFilters().getTargetFilterQuery().isPresent()) + // { + // targetIdList = getTargetIdsByCustomFilters(pageRequest); + // } else { + // targetIdList = getTargetIdsBySimpleFilters(pageRequest); + // } + // setValue(targetIdList); + + // TODO MR + // As Vaadin Table only returns the current ItemIds which are visible + // you don't need to search explicit for them. + setValue(getItemIds()); } private List getTargetIdsBySimpleFilters(final PageRequest pageRequest) { From 8995195e443bf713623930d6d89e1241118da08d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 15:53:02 +0200 Subject: [PATCH 022/371] Add springfox Signed-off-by: SirWayne --- hawkbit-ddi-resource/pom.xml | 6 +++++- hawkbit-mgmt-resource/pom.xml | 5 +++++ hawkbit-system-resource/pom.xml | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index d5ba2c21c..7524bcaf3 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -36,7 +36,11 @@ hawkbit-repository ${project.version} - + + io.springfox + springfox-core + 2.0.3 + diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index db9535591..5d248e7c1 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -34,6 +34,11 @@ commons-io 2.4 + + io.springfox + springfox-core + 2.0.3 + diff --git a/hawkbit-system-resource/pom.xml b/hawkbit-system-resource/pom.xml index 7c00b3fec..0c9fb5019 100644 --- a/hawkbit-system-resource/pom.xml +++ b/hawkbit-system-resource/pom.xml @@ -29,6 +29,11 @@ hawkbit-rest-core ${project.version} + + io.springfox + springfox-core + 2.0.3 + From 0c85f2bf8211739c82b92dc40c30c8e5e8ed371f Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 15:59:39 +0200 Subject: [PATCH 023/371] remove springfox and add spring-plugin-core Signed-off-by: SirWayne --- hawkbit-system-resource/pom.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hawkbit-system-resource/pom.xml b/hawkbit-system-resource/pom.xml index 0c9fb5019..440e327a3 100644 --- a/hawkbit-system-resource/pom.xml +++ b/hawkbit-system-resource/pom.xml @@ -29,10 +29,9 @@ hawkbit-rest-core ${project.version} - - io.springfox - springfox-core - 2.0.3 + + org.springframework.plugin + spring-plugin-core From e8c8b4d1a6490715cde52e04b5285b230d67c19b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 16:00:08 +0200 Subject: [PATCH 024/371] remove springfox and add spring-plugin-core Signed-off-by: SirWayne --- hawkbit-ddi-resource/pom.xml | 7 +++---- hawkbit-mgmt-resource/pom.xml | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index 7524bcaf3..1615cf697 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -36,10 +36,9 @@ hawkbit-repository ${project.version} - - io.springfox - springfox-core - 2.0.3 + + org.springframework.plugin + spring-plugin-core diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index 5d248e7c1..10ed70bbb 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -34,10 +34,9 @@ commons-io 2.4 - - io.springfox - springfox-core - 2.0.3 + + org.springframework.plugin + spring-plugin-core From e45306eafb92f302c37284f12dd2cfd50502c56d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 16:43:38 +0200 Subject: [PATCH 025/371] Fix Default Port for PopertyHandler Signed-off-by: SirWayne --- .../eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java | 7 ++++--- .../hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java index a1cb8bbd9..98f1930a6 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java @@ -17,7 +17,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties("hawkbit.artifact.url") public class ArtifactUrlHandlerProperties { private static final String DEFAULT_IP_LOCALHOST = "127.0.0.1"; - private static final String LOCALHOST = "localhost:8080"; + private static final String DEFAULT_PORT = "8080"; + private static final String LOCALHOST = "localhost"; private final Http http = new Http(); private final Https https = new Https(); @@ -86,7 +87,7 @@ public class ArtifactUrlHandlerProperties { public static class Http implements ProtocolProperties { private String hostname = LOCALHOST; private String ip = DEFAULT_IP_LOCALHOST; - private String port = ""; + private String port = DEFAULT_PORT; /** * An ant-URL pattern with placeholder to build the URL on. The URL can * have specific artifact placeholder. @@ -136,7 +137,7 @@ public class ArtifactUrlHandlerProperties { public static class Https implements ProtocolProperties { private String hostname = LOCALHOST; private String ip = DEFAULT_IP_LOCALHOST; - private String port = ""; + private String port = DEFAULT_PORT; /** * An ant-URL pattern with placeholder to build the URL on. The URL can * have specific artifact placeholder. diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index bfc560c38..27021d265 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -69,7 +69,7 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, UrlProtocol.HTTP); assertEquals("http is build incorrect", - "http://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + "http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" + localArtifact.getFilename(), url); @@ -81,7 +81,7 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, UrlProtocol.HTTPS); assertEquals("https is build incorrect", - "https://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + "https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" + localArtifact.getFilename(), url); From a615317ba44cc0585e691952e90dba0b8e8156b1 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 22 Apr 2016 12:24:11 +0200 Subject: [PATCH 026/371] Add Managment Default Feign Client Signed-off-by: SirWayne --- examples/hawkbit-mgmt-api-client/pom.xml | 5 + .../mgmt/client/MgmtDefaultFeignClient.java | 141 ++++++++++++++++++ ...=> MgmtDistributionSetClientResource.java} | 5 +- ...MgmtDistributionSetTagClientResource.java} | 5 +- ...gmtDistributionSetTypeClientResource.java} | 5 +- .../MgmtDownloadArtifactClientResource.java | 22 +++ .../resource/MgmtDownloadClientResource.java | 22 +++ ...nt.java => MgmtRolloutClientResource.java} | 5 +- ... => MgmtSoftwareModuleClientResource.java} | 5 +- ...MgmtSoftwareModuleTypeClientResource.java} | 5 +- ...ent.java => MgmtTargetClientResource.java} | 5 +- ....java => MgmtTargetTagClientResource.java} | 6 +- .../CreateStartedRolloutExample.java | 24 +-- .../GettingStartedDefaultScenario.java | 16 +- .../resource/DdiArtifactStoreController.java | 44 +++--- 15 files changed, 256 insertions(+), 59 deletions(-) create mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java rename examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{DistributionSetResourceClient.java => MgmtDistributionSetClientResource.java} (71%) rename examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{DistributionSetTagResourceClient.java => MgmtDistributionSetTagClientResource.java} (70%) rename examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{DistributionSetTypeResourceClient.java => MgmtDistributionSetTypeClientResource.java} (70%) create mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java create mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java rename examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{RolloutResourceClient.java => MgmtRolloutClientResource.java} (73%) rename examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{SoftwareModuleResourceClient.java => MgmtSoftwareModuleClientResource.java} (71%) rename examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{SoftwareModuleTypeResourceClient.java => MgmtSoftwareModuleTypeClientResource.java} (70%) rename examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{TargetResourceClient.java => MgmtTargetClientResource.java} (74%) rename examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{TargetTagResourceClient.java => MgmtTargetTagClientResource.java} (73%) diff --git a/examples/hawkbit-mgmt-api-client/pom.xml b/examples/hawkbit-mgmt-api-client/pom.xml index 051252d12..75e520ea6 100644 --- a/examples/hawkbit-mgmt-api-client/pom.xml +++ b/examples/hawkbit-mgmt-api-client/pom.xml @@ -66,6 +66,11 @@ 8.14.2 + + com.netflix.feign + feign-jackson + 8.14.2 + hibernate-validator org.hibernate diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java new file mode 100644 index 000000000..8bfc2ec52 --- /dev/null +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java @@ -0,0 +1,141 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.client; + +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetTagClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetTypeClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDownloadArtifactClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDownloadClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtRolloutClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleTypeClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetTagClientResource; +import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; + +import feign.Feign; +import feign.Feign.Builder; +import feign.Logger; +import feign.Logger.Level; +import feign.jackson.JacksonDecoder; +import feign.jackson.JacksonEncoder; + +/** + * + */ +public class MgmtDefaultFeignClient { + + private MgmtDistributionSetClientResource mgmtDistributionSetClientResource; + private MgmtDistributionSetTagClientResource mgmtDistributionSetTagClientResource; + private MgmtDistributionSetTypeClientResource mgmtDistributionSetTypeClientResource; + private MgmtRolloutClientResource mgmtRolloutClientResource; + private MgmtSoftwareModuleClientResource mgmtSoftwareModuleClientResource; + private MgmtSoftwareModuleTypeClientResource mgmtSoftwareModuleTypeClientResource; + private MgmtTargetClientResource mgmtTargetClientResource; + private MgmtTargetTagClientResource mgmtTargetTagClientResource; + private MgmtDownloadClientResource mgmtDownloadClientResource; + private MgmtDownloadArtifactClientResource mgmtDownloadArtifactClientResource; + + private final Builder feignBuilder; + private final String baseUrl; + + public MgmtDefaultFeignClient(final String baseUrl) { + feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) + .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) + .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()) + .decoder(new ResponseEntityDecoder(new JacksonDecoder())); + this.baseUrl = baseUrl; + } + + public Builder getFeignBuilder() { + return feignBuilder; + } + + public MgmtDistributionSetClientResource getMgmtDistributionSetClientResource() { + if (mgmtDistributionSetClientResource == null) { + mgmtDistributionSetClientResource = feignBuilder.target(MgmtDistributionSetClientResource.class, + this.baseUrl + MgmtDistributionSetClientResource.PATH); + } + return mgmtDistributionSetClientResource; + } + + public MgmtDistributionSetTagClientResource getMgmtDistributionSetTagClientResource() { + if (mgmtDistributionSetTagClientResource == null) { + mgmtDistributionSetTagClientResource = feignBuilder.target(MgmtDistributionSetTagClientResource.class, + this.baseUrl + MgmtDistributionSetTagClientResource.PATH); + } + return mgmtDistributionSetTagClientResource; + } + + public MgmtDistributionSetTypeClientResource getMgmtDistributionSetTypeClientResource() { + if (mgmtDistributionSetTypeClientResource == null) { + mgmtDistributionSetTypeClientResource = feignBuilder.target(MgmtDistributionSetTypeClientResource.class, + this.baseUrl + MgmtDistributionSetTypeClientResource.PATH); + } + return mgmtDistributionSetTypeClientResource; + } + + public MgmtRolloutClientResource getMgmtRolloutClientResource() { + if (mgmtRolloutClientResource == null) { + mgmtRolloutClientResource = feignBuilder.target(MgmtRolloutClientResource.class, + this.baseUrl + MgmtRolloutClientResource.PATH); + } + return mgmtRolloutClientResource; + } + + public MgmtSoftwareModuleClientResource getMgmtSoftwareModuleClientResource() { + if (mgmtSoftwareModuleClientResource == null) { + mgmtSoftwareModuleClientResource = feignBuilder.target(MgmtSoftwareModuleClientResource.class, + MgmtSoftwareModuleClientResource.PATH); + } + return mgmtSoftwareModuleClientResource; + } + + public MgmtSoftwareModuleTypeClientResource getMgmtSoftwareModuleTypeClientResource() { + if (mgmtSoftwareModuleTypeClientResource == null) { + mgmtSoftwareModuleTypeClientResource = feignBuilder.target(MgmtSoftwareModuleTypeClientResource.class, + this.baseUrl + MgmtSoftwareModuleTypeClientResource.PATH); + } + return mgmtSoftwareModuleTypeClientResource; + } + + public MgmtTargetClientResource getMgmtTargetClientResource() { + if (mgmtTargetClientResource == null) { + mgmtTargetClientResource = feignBuilder.target(MgmtTargetClientResource.class, + this.baseUrl + MgmtTargetClientResource.PATH); + } + return mgmtTargetClientResource; + } + + public MgmtTargetTagClientResource getMgmtTargetTagClientResource() { + if (mgmtTargetTagClientResource == null) { + mgmtTargetTagClientResource = feignBuilder.target(MgmtTargetTagClientResource.class, + this.baseUrl + MgmtTargetTagClientResource.PATH); + } + return mgmtTargetTagClientResource; + } + + public MgmtDownloadClientResource getMgmtDownloadClientResource() { + if (mgmtDownloadClientResource == null) { + mgmtDownloadClientResource = feignBuilder.target(MgmtDownloadClientResource.class, + this.baseUrl + MgmtDownloadClientResource.PATH); + } + return mgmtDownloadClientResource; + } + + public MgmtDownloadArtifactClientResource getMgmtDownloadArtifactClientResource() { + if (mgmtDownloadArtifactClientResource == null) { + mgmtDownloadArtifactClientResource = feignBuilder.target(MgmtDownloadArtifactClientResource.class, + this.baseUrl + MgmtDownloadArtifactClientResource.PATH); + } + return mgmtDownloadArtifactClientResource; + } + +} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java similarity index 71% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetResourceClient.java rename to examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java index 11df8c323..b513f43f1 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java @@ -14,7 +14,8 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the DistributionSet resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/distributionsets") -public interface DistributionSetResourceClient extends MgmtDistributionSetRestApi { +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtDistributionSetClientResource.PATH) +public interface MgmtDistributionSetClientResource extends MgmtDistributionSetRestApi { + static String PATH = "rest/v1/distributionsets"; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTagResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java similarity index 70% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTagResourceClient.java rename to examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java index 628304e26..6d4f60bb7 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTagResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java @@ -14,7 +14,8 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the DistributionSetTag resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/distributionsettags") -public interface DistributionSetTagResourceClient extends MgmtDistributionSetTagRestApi { +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtDistributionSetTagClientResource.PATH) +public interface MgmtDistributionSetTagClientResource extends MgmtDistributionSetTagRestApi { + static String PATH = "rest/v1/distributionsettags"; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTypeResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java similarity index 70% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTypeResourceClient.java rename to examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java index 871f79beb..fe745968f 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/DistributionSetTypeResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java @@ -15,7 +15,8 @@ import org.springframework.cloud.netflix.feign.FeignClient; * Client binding for the DistributionSetType resource of the management API. * */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/distributionsettypes") -public interface DistributionSetTypeResourceClient extends MgmtDistributionSetTypeRestApi { +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtDistributionSetTypeClientResource.PATH) +public interface MgmtDistributionSetTypeClientResource extends MgmtDistributionSetTypeRestApi { + static String PATH = "rest/v1/distributionsettypes"; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java new file mode 100644 index 000000000..3f7917f22 --- /dev/null +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.client.resource; + +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadArtifactRestApi; +import org.springframework.cloud.netflix.feign.FeignClient; + +/** + * + */ +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtDownloadArtifactClientResource.PATH) +public interface MgmtDownloadArtifactClientResource extends MgmtDownloadArtifactRestApi { + + static String PATH = "rest/v1/softwaremodules"; + +} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java new file mode 100644 index 000000000..2626b8a90 --- /dev/null +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.client.resource; + +import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadRestApi; +import org.springframework.cloud.netflix.feign.FeignClient; + +/** + * + */ +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtDownloadClientResource.PATH) +public interface MgmtDownloadClientResource extends MgmtDownloadRestApi { + + static String PATH = "api/v1/downloadserver/"; + +} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/RolloutResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java similarity index 73% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/RolloutResourceClient.java rename to examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java index 0a40ab107..430550b3a 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/RolloutResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java @@ -14,7 +14,8 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the Rollout resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/rollouts") -public interface RolloutResourceClient extends MgmtRolloutRestApi { +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRolloutClientResource.PATH) +public interface MgmtRolloutClientResource extends MgmtRolloutRestApi { + static String PATH = "rest/v1/rollouts"; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java similarity index 71% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java rename to examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java index 80fcf734e..d89f7e5f3 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java @@ -14,7 +14,8 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the SoftwareModule resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/softwaremodules") -public interface SoftwareModuleResourceClient extends MgmtSoftwareModuleRestApi { +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtSoftwareModuleClientResource.PATH) +public interface MgmtSoftwareModuleClientResource extends MgmtSoftwareModuleRestApi { + static String PATH = "rest/v1/softwaremodules"; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleTypeResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java similarity index 70% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleTypeResourceClient.java rename to examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java index 5fe0012f6..6d5ca476c 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SoftwareModuleTypeResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java @@ -14,7 +14,8 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the oftwareModuleType resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/softwaremoduletypes") -public interface SoftwareModuleTypeResourceClient extends MgmtSoftwareModuleTypeRestApi { +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtSoftwareModuleTypeClientResource.PATH) +public interface MgmtSoftwareModuleTypeClientResource extends MgmtSoftwareModuleTypeRestApi { + static String PATH = "rest/v1/softwaremoduletypes"; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java similarity index 74% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetResourceClient.java rename to examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java index 920666dd1..5d043afe2 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java @@ -14,7 +14,8 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the Target resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/targets") -public interface TargetResourceClient extends MgmtTargetRestApi { +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtTargetClientResource.PATH) +public interface MgmtTargetClientResource extends MgmtTargetRestApi { + static String PATH = "/rest/v1/targets"; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetTagResourceClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java similarity index 73% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetTagResourceClient.java rename to examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java index ad6a1dab9..475008cf3 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/TargetTagResourceClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java @@ -14,7 +14,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the TargetTag resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/targettags") -public interface TargetTagResourceClient extends MgmtTargetTagRestApi { - +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtTargetTagClientResource.PATH) +public interface MgmtTargetTagClientResource extends MgmtTargetTagRestApi { + static String PATH = "rest/v1/targettags"; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java index 0e1093f1d..2fd81736c 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java @@ -10,12 +10,12 @@ package org.eclipse.hawkbit.mgmt.client.scenarios; import java.util.List; -import org.eclipse.hawkbit.mgmt.client.resource.DistributionSetResourceClient; -import org.eclipse.hawkbit.mgmt.client.resource.DistributionSetTypeResourceClient; -import org.eclipse.hawkbit.mgmt.client.resource.RolloutResourceClient; -import org.eclipse.hawkbit.mgmt.client.resource.SoftwareModuleResourceClient; -import org.eclipse.hawkbit.mgmt.client.resource.SoftwareModuleTypeResourceClient; -import org.eclipse.hawkbit.mgmt.client.resource.TargetResourceClient; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetTypeClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtRolloutClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleTypeClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetTypeBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.RolloutBuilder; @@ -44,22 +44,22 @@ public class CreateStartedRolloutExample { private static final String DS_MODULE_TYPE = SM_MODULE_TYPE; @Autowired - private DistributionSetResourceClient distributionSetResource; + private MgmtDistributionSetClientResource distributionSetResource; @Autowired - private SoftwareModuleResourceClient softwareModuleResource; + private MgmtSoftwareModuleClientResource softwareModuleResource; @Autowired - private TargetResourceClient targetResource; + private MgmtTargetClientResource targetResource; @Autowired - private RolloutResourceClient rolloutResource; + private MgmtRolloutClientResource rolloutResource; @Autowired - private DistributionSetTypeResourceClient distributionSetTypeResource; + private MgmtDistributionSetTypeClientResource distributionSetTypeResource; @Autowired - private SoftwareModuleTypeResourceClient softwareModuleTypeResource; + private MgmtSoftwareModuleTypeClientResource softwareModuleTypeResource; /** * Run the Rollout scenario. diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java index 43a98aff4..77b426a2f 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java @@ -10,10 +10,10 @@ package org.eclipse.hawkbit.mgmt.client.scenarios; import java.util.List; -import org.eclipse.hawkbit.mgmt.client.resource.DistributionSetResourceClient; -import org.eclipse.hawkbit.mgmt.client.resource.DistributionSetTypeResourceClient; -import org.eclipse.hawkbit.mgmt.client.resource.SoftwareModuleResourceClient; -import org.eclipse.hawkbit.mgmt.client.resource.SoftwareModuleTypeResourceClient; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetTypeClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleTypeClientResource; import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetTypeBuilder; import org.eclipse.hawkbit.mgmt.client.resource.builder.SoftwareModuleAssigmentBuilder; @@ -50,16 +50,16 @@ public class GettingStartedDefaultScenario { private static final String DS_EXAMPLE_NAME = SM_EXAMPLE_NAME; @Autowired - private DistributionSetResourceClient distributionSetResource; + private MgmtDistributionSetClientResource distributionSetResource; @Autowired - private DistributionSetTypeResourceClient distributionSetTypeResource; + private MgmtDistributionSetTypeClientResource distributionSetTypeResource; @Autowired - private SoftwareModuleResourceClient softwareModuleResource; + private MgmtSoftwareModuleClientResource softwareModuleResource; @Autowired - private SoftwareModuleTypeResourceClient softwareModuleTypeResource; + private MgmtSoftwareModuleTypeClientResource softwareModuleTypeResource; /** * Run the default getting started scenario. diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 024a32454..5c1fbf561 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -65,39 +65,39 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, final HttpServletResponse response, final HttpServletRequest request, @AuthenticationPrincipal final String targetid) { - ResponseEntity result; final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); if (foundArtifacts.isEmpty()) { LOG.warn("Software artifact with name {} could not be found.", fileName); - result = new ResponseEntity<>(HttpStatus.NOT_FOUND); + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + + if (foundArtifacts.size() > 1) { + LOG.warn("Software artifact name {} is not unique. We will use the first entry.", fileName); + } + ResponseEntity result; + final LocalArtifact artifact = foundArtifacts.get(0); + + final String ifMatch = request.getHeader("If-Match"); + if (ifMatch != null && !RestResourceConversionHelper.matchesHttpHeader(ifMatch, artifact.getSha1Hash())) { + result = new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); } else { - if (foundArtifacts.size() > 1) { - LOG.warn("Software artifact name {} is not unique. We will use the first entry.", fileName); - } + final DbArtifact file = artifactManagement.loadLocalArtifactBinary(artifact); - final LocalArtifact artifact = foundArtifacts.get(0); - - final String ifMatch = request.getHeader("If-Match"); - if (ifMatch != null && !RestResourceConversionHelper.matchesHttpHeader(ifMatch, artifact.getSha1Hash())) { - result = new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); + // we set a download status only if we are aware of the + // targetid, i.e. authenticated and not anonymous + if (targetid != null && !"anonymous".equals(targetid)) { + final Action action = checkAndReportDownloadByTarget(request, targetid, artifact); + result = RestResourceConversionHelper.writeFileResponse(artifact, response, request, file, + cacheWriteNotify, action.getId()); } else { - final DbArtifact file = artifactManagement.loadLocalArtifactBinary(artifact); - - // we set a download status only if we are aware of the - // targetid, i.e. authenticated and not anonymous - if (targetid != null && !"anonymous".equals(targetid)) { - final Action action = checkAndReportDownloadByTarget(request, targetid, artifact); - result = RestResourceConversionHelper.writeFileResponse(artifact, response, request, file, - cacheWriteNotify, action.getId()); - } else { - result = RestResourceConversionHelper.writeFileResponse(artifact, response, request, file); - } - + result = RestResourceConversionHelper.writeFileResponse(artifact, response, request, file); } + } return result; + } @Override From 810900eee7c72e695b0af067721b8c3c81975439 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Fri, 22 Apr 2016 13:36:21 +0200 Subject: [PATCH 027/371] Removed http servlet response and request form method signature Signed-off-by: Jonathan Philip Knoblauch --- .../java/org/eclipse/hawkbit/app/Start.java | 2 +- .../hawkbit/ddi/client/Application.java | 27 +++++++++ .../eclipse/hawkbit/ddi/client/DdiClient.java | 23 ++------ .../hawkbit/example/ddi/client/AppTest.java | 2 +- .../ResourceControllerAutoConfiguration.java | 2 +- .../DdiArtifactStoreControllerRestApi.java | 15 ++--- .../rest/api/DdiRootControllerRestApi.java | 23 +++----- .../ddi/{annotation => }/EnableDdiApi.java | 2 +- .../rest/resource/DataConversionHelper.java | 8 +-- .../resource/DdiArtifactStoreController.java | 26 +++++--- .../ddi/rest/resource/DdiRootController.java | 59 +++++++++++-------- 11 files changed, 105 insertions(+), 84 deletions(-) rename hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/{annotation => }/EnableDdiApi.java (95%) diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java index 76d89af33..a8f2bc645 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.app; import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; -import org.eclipse.hawkbit.ddi.annotation.EnableDdiApi; +import org.eclipse.hawkbit.ddi.EnableDdiApi; import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; import org.eclipse.hawkbit.system.annotation.EnableSystemApi; import org.springframework.boot.SpringApplication; diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java index e230a77da..d8810f48b 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java @@ -3,9 +3,13 @@ */ package org.eclipse.hawkbit.ddi.client; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.context.annotation.Bean; + +import feign.Contract; /** * @author Jonathan Knoblauch @@ -15,8 +19,31 @@ import org.springframework.cloud.netflix.feign.EnableFeignClients; @EnableFeignClients public class Application { + @Autowired + private DdiClient ddiClient; + public static void main(final String[] args) { new SpringApplicationBuilder().showBanner(false).sources(Application.class).run(args); + + // TODO .encoder(new JacksonEncoder()) + // .decoder(new ResponseEntityDecoder(new JacksonDecoder())); + + } + + // @Bean + // public BasicAuthRequestInterceptor basicAuthRequestInterceptor() { + // return new BasicAuthRequestInterceptor(configuration.getUsername(), + // configuration.getPassword()); + // } + + @Bean + public ApplicationJsonRequestHeaderInterceptor jsonHeaderInterceptor() { + return new ApplicationJsonRequestHeaderInterceptor(); + } + + @Bean + public Contract feignContract() { + return new IgnoreMultipleConsumersProducersSpringMvcContract(); } } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java index 08b398b0f..22101681e 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java @@ -3,15 +3,12 @@ */ package org.eclipse.hawkbit.ddi.client; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase; import org.eclipse.hawkbit.ddi.rest.api.DdiRestConstants; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; import feign.Feign; import feign.Logger; @@ -19,13 +16,12 @@ import feign.Logger.Level; import feign.jackson.JacksonDecoder; import feign.jackson.JacksonEncoder; +@Component public class DdiClient { - @Autowired - private HttpServletRequest request; - - @Autowired - private HttpServletResponse response; + // + // @Autowired + // private HttpServletResponse response; private final String controllerId; private final String name; @@ -65,14 +61,7 @@ public class DdiClient { public void startDdiClient() { - // final HttpServletRequest request; - - // final HttpSession mySession = request.getSession(); - - // final HttpServletRequest request = new; - - final ResponseEntity response = rootControllerResourceClient.getControllerBase("test", - request); + final ResponseEntity response = rootControllerResourceClient.getControllerBase("test"); final DdiControllerBase controllerBase = response.getBody(); // TODO notify every 10 seconds on the rollout server diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java index 64f34c8ff..bb74c5dee 100644 --- a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java +++ b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java @@ -11,7 +11,7 @@ public class AppTest { @Test public void AppTest() { - final DdiClient ddiClient = new DdiClient("localhost:8080", "mytest", "mytest", "desc", "DEFAULT"); + final DdiClient ddiClient = new DdiClient("http://localhost:8080", "mytest", "mytest", "desc", "DEFAULT"); ddiClient.startDdiClient(); } diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java index 34ed5ddcd..afb90bd13 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.autoconfigure.web; -import org.eclipse.hawkbit.ddi.annotation.EnableDdiApi; +import org.eclipse.hawkbit.ddi.EnableDdiApi; import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; import org.eclipse.hawkbit.system.annotation.EnableSystemApi; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java index ffeef732f..ab49be1c1 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java @@ -8,9 +8,6 @@ */ package org.eclipse.hawkbit.ddi.rest.api; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -43,11 +40,10 @@ public interface DdiArtifactStoreControllerRestApi { * {@link HttpStatus#OK} or in case of partial download * {@link HttpStatus#PARTIAL_CONTENT}. */ - @RequestMapping(method = RequestMethod.GET, value = DdiRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME - + "/{fileName}") + @RequestMapping(method = RequestMethod.GET, value = DdiRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + "/{fileName}") @ResponseBody public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, - final HttpServletResponse response, final HttpServletRequest request, + @AuthenticationPrincipal final String targetid); /** @@ -60,10 +56,9 @@ public interface DdiArtifactStoreControllerRestApi { * * @return response of the servlet */ - @RequestMapping(method = RequestMethod.GET, value = DdiRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME - + "/{fileName}" + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX) + @RequestMapping(method = RequestMethod.GET, value = DdiRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + "/{fileName}" + + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX) @ResponseBody - public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName, - final HttpServletResponse response); + public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName); } 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 febdaa6b4..8ba4068a7 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 @@ -6,8 +6,6 @@ package org.eclipse.hawkbit.ddi.rest.api; import java.lang.annotation.Target; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import org.eclipse.hawkbit.ddi.json.model.DdiActionFeedback; @@ -60,8 +58,7 @@ public interface DdiRootControllerRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{targetid}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid, - final HttpServletRequest request); + ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid); /** * Handles GET {@link DdiArtifact} download request. This could be full or @@ -85,8 +82,7 @@ public interface DdiRootControllerRestApi { @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}") ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("fileName") final String fileName, final HttpServletResponse response, - final HttpServletRequest request); + @PathVariable("fileName") final String fileName); /** * Handles GET {@link DdiArtifact} MD5 checksum file download request. @@ -109,8 +105,7 @@ public interface DdiRootControllerRestApi { + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX, produces = MediaType.TEXT_PLAIN_VALUE) ResponseEntity downloadArtifactMd5(@PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("fileName") final String fileName, final HttpServletResponse response, - final HttpServletRequest request); + @PathVariable("fileName") final String fileName); /** * Resource for {@link SoftwareModule} {@link UpdateAction}s. @@ -134,8 +129,7 @@ public interface DdiRootControllerRestApi { ResponseEntity getControllerBasedeploymentAction( @PathVariable("targetid") @NotEmpty final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, - @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource, - final HttpServletRequest request); + @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource); /** * This is the feedback channel for the {@link DdiDeploymentBase} action. @@ -155,8 +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, - @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, - final HttpServletRequest request); + @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId); /** * This is the feedback channel for the config data action. @@ -173,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, - @PathVariable("targetid") final String targetid, final HttpServletRequest request); + @PathVariable("targetid") final String targetid); /** * {@link RequestMethod.GET} method for the {@link DdiCancel} action. @@ -190,7 +183,7 @@ public interface DdiRootControllerRestApi { @RequestMapping(value = "/{targetid}/" + DdiRestConstants.CANCEL_ACTION + "/{actionId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) ResponseEntity getControllerCancelAction(@PathVariable("targetid") @NotEmpty final String targetid, - @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request); + @PathVariable("actionId") @NotEmpty final Long actionId); /** * {@link RequestMethod.POST} method receiving the {@link DdiActionFeedback} @@ -212,6 +205,6 @@ public interface DdiRootControllerRestApi { + DdiRestConstants.FEEDBACK, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) ResponseEntity postCancelActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, @PathVariable("targetid") @NotEmpty final String targetid, - @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request); + @PathVariable("actionId") @NotEmpty final Long actionId); } diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/EnableDdiApi.java similarity index 95% rename from hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java rename to hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/EnableDdiApi.java index 1c41debc7..1d1e0a259 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/annotation/EnableDdiApi.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/EnableDdiApi.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.annotation; +package org.eclipse.hawkbit.ddi; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; 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 b662f2b5f..576e11348 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 @@ -118,12 +118,12 @@ public final class DataConversionHelper { // change the payload of the // response because of eTags. result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()) - .getControllerBasedeploymentAction(target.getControllerId(), action.getId(), actions.hashCode(), - null)).withRel(DdiRestConstants.DEPLOYMENT_BASE_ACTION)); + .getControllerBasedeploymentAction(target.getControllerId(), action.getId(), + actions.hashCode())).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(), null)) + .getControllerCancelAction(target.getControllerId(), action.getId())) .withRel(DdiRestConstants.CANCEL_ACTION)); addedCancel = true; } @@ -131,7 +131,7 @@ public final class DataConversionHelper { if (target.getTargetInfo().isRequestControllerAttributes()) { result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()).putConfigData(null, - target.getControllerId(), null)).withRel(DdiRestConstants.CONFIG_DATA_ACTION)); + target.getControllerId())).withRel(DdiRestConstants.CONFIG_DATA_ACTION)); } return result; } diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 024a32454..e45d3f5c8 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -35,6 +35,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.web.bind.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; /** * The {@link DdiArtifactStoreController} of the HawkBit server controller API @@ -61,10 +63,18 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes @Autowired private HawkbitSecurityProperties securityProperties; + private HttpServletResponse getResponse() { + return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getResponse(); + } + + private HttpServletRequest getRequest() { + return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + } + @Override public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, - final HttpServletResponse response, final HttpServletRequest request, @AuthenticationPrincipal final String targetid) { + ResponseEntity result; final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); @@ -79,7 +89,7 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes final LocalArtifact artifact = foundArtifacts.get(0); - final String ifMatch = request.getHeader("If-Match"); + final String ifMatch = getRequest().getHeader("If-Match"); if (ifMatch != null && !RestResourceConversionHelper.matchesHttpHeader(ifMatch, artifact.getSha1Hash())) { result = new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); } else { @@ -88,11 +98,12 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes // we set a download status only if we are aware of the // targetid, i.e. authenticated and not anonymous if (targetid != null && !"anonymous".equals(targetid)) { - final Action action = checkAndReportDownloadByTarget(request, targetid, artifact); - result = RestResourceConversionHelper.writeFileResponse(artifact, response, request, file, + final Action action = checkAndReportDownloadByTarget(getRequest(), targetid, artifact); + result = RestResourceConversionHelper.writeFileResponse(artifact, getResponse(), getRequest(), file, cacheWriteNotify, action.getId()); } else { - result = RestResourceConversionHelper.writeFileResponse(artifact, response, request, file); + result = RestResourceConversionHelper.writeFileResponse(artifact, getResponse(), getRequest(), + file); } } @@ -101,8 +112,7 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes } @Override - public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName, - final HttpServletResponse response) { + public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName) { final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); if (foundArtifacts.isEmpty()) { @@ -113,7 +123,7 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes } try { - DataConversionHelper.writeMD5FileResponse(fileName, response, foundArtifacts.get(0)); + DataConversionHelper.writeMD5FileResponse(fileName, getResponse(), foundArtifacts.get(0)); } catch (final IOException e) { LOG.error("Failed to stream MD5 File", e); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); 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 c9c4f1d92..7ef4f343d 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 @@ -54,6 +54,8 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; /** * The {@link DdiRootController} of the hawkBit server DDI API that is queried @@ -89,12 +91,22 @@ public class DdiRootController implements DdiRootControllerRestApi { @Autowired private ArtifactUrlHandler artifactUrlHandler; + private HttpServletResponse getResponse() { + return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getResponse(); + } + + private HttpServletRequest getRequest() { + return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + } + @Override public ResponseEntity> getSoftwareModulesArtifacts( @PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId) { LOG.debug("getSoftwareModulesArtifacts({})", targetid); + // SecurityContextHolder.getContext().getAuthentication(). + final SoftwareModule softwareModule = softwareManagement.findSoftwareModuleById(softwareModuleId); if (softwareModule == null) { @@ -108,18 +120,17 @@ public class DdiRootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid, - final HttpServletRequest request) { + public ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid) { LOG.debug("getControllerBase({})", targetid); final Target target = controllerManagement.findOrRegisterTargetIfItDoesNotexist(targetid, - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); if (target.getTargetInfo().getUpdateStatus() == TargetUpdateStatus.UNKNOWN) { LOG.debug("target with {} extsisted but was in status UNKNOWN -> REGISTERED)", targetid); controllerManagement.updateTargetStatus(target.getTargetInfo(), TargetUpdateStatus.REGISTERED, System.currentTimeMillis(), - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); } return new ResponseEntity<>( @@ -131,12 +142,11 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("fileName") final String fileName, final HttpServletResponse response, - final HttpServletRequest request) { + @PathVariable("fileName") final String fileName) { ResponseEntity result; final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); final SoftwareModule module = softwareManagement.findSoftwareModuleById(softwareModuleId); if (checkModule(fileName, module)) { @@ -146,12 +156,12 @@ public class DdiRootController implements DdiRootControllerRestApi { final LocalArtifact artifact = module.getLocalArtifactByFilename(fileName).get(); final DbArtifact file = artifactManagement.loadLocalArtifactBinary(artifact); - final String ifMatch = request.getHeader("If-Match"); + final String ifMatch = getRequest().getHeader("If-Match"); if (ifMatch != null && !RestResourceConversionHelper.matchesHttpHeader(ifMatch, artifact.getSha1Hash())) { result = new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); } else { - final Action action = checkAndLogDownload(request, target, module); - result = RestResourceConversionHelper.writeFileResponse(artifact, response, request, file, + final Action action = checkAndLogDownload(getRequest(), target, module); + result = RestResourceConversionHelper.writeFileResponse(artifact, getResponse(), getRequest(), file, cacheWriteNotify, action.getId()); } } @@ -185,10 +195,9 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity downloadArtifactMd5(@PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("fileName") final String fileName, final HttpServletResponse response, - final HttpServletRequest request) { + @PathVariable("fileName") final String fileName) { controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); final SoftwareModule module = softwareManagement.findSoftwareModuleById(softwareModuleId); @@ -198,7 +207,7 @@ public class DdiRootController implements DdiRootControllerRestApi { } try { - DataConversionHelper.writeMD5FileResponse(fileName, response, + DataConversionHelper.writeMD5FileResponse(fileName, getResponse(), module.getLocalArtifactByFilename(fileName).get()); } catch (final IOException e) { LOG.error("Failed to stream MD5 File", e); @@ -211,12 +220,11 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity getControllerBasedeploymentAction( @PathVariable("targetid") final String targetid, @PathVariable("actionId") final Long actionId, - @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource, - final HttpServletRequest request) { + @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource) { LOG.debug("getControllerBasedeploymentAction({},{})", targetid, resource); final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); final Action action = findActionWithExceptionIfNotFound(actionId); if (!action.getTarget().getId().equals(target.getId())) { @@ -246,12 +254,11 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity postBasedeploymentActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, - @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId, - final HttpServletRequest request) { + @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId) { LOG.debug("provideBasedeploymentActionFeedback for target [{},{}]: {}", targetid, actionId, feedback); final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); if (!actionId.equals(feedback.getId())) { LOG.warn( @@ -343,9 +350,9 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity putConfigData(@Valid @RequestBody final DdiConfigData configData, - @PathVariable("targetid") final String targetid, final HttpServletRequest request) { + @PathVariable("targetid") final String targetid) { controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); controllerManagement.updateControllerAttributes(targetid, configData.getData()); @@ -355,11 +362,11 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity getControllerCancelAction( @PathVariable("targetid") @NotEmpty final String targetid, - @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request) { + @PathVariable("actionId") @NotEmpty final Long actionId) { LOG.debug("getControllerCancelAction({})", targetid); final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); final Action action = findActionWithExceptionIfNotFound(actionId); if (!action.getTarget().getId().equals(target.getId())) { @@ -385,11 +392,11 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity postCancelActionFeedback(@Valid @RequestBody final DdiActionFeedback feedback, @PathVariable("targetid") @NotEmpty final String targetid, - @PathVariable("actionId") @NotEmpty final Long actionId, final HttpServletRequest request) { + @PathVariable("actionId") @NotEmpty final Long actionId) { LOG.debug("provideCancelActionFeedback for target [{}]: {}", targetid, feedback); final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); if (!actionId.equals(feedback.getId())) { LOG.warn( From 89f64a2d44fa1e14ae18c8ed935917c56fc91d2c Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Fri, 22 Apr 2016 14:36:29 +0200 Subject: [PATCH 028/371] Added new default feign client Signed-off-by: Jonathan Philip Knoblauch --- .../hawkbit/ddi/client/Application.java | 2 +- .../eclipse/hawkbit/ddi/client/DdiClient.java | 75 ------------------- .../ddi/client/DdiDefaultFeignClient.java | 53 +++++++++++++ .../hawkbit/ddi/client/DdiExampleClient.java | 45 +++++++++++ .../hawkbit/example/ddi/client/AppTest.java | 5 +- 5 files changed, 102 insertions(+), 78 deletions(-) delete mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java index d8810f48b..86ccf195e 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java @@ -20,7 +20,7 @@ import feign.Contract; public class Application { @Autowired - private DdiClient ddiClient; + private DdiExampleClient ddiClient; public static void main(final String[] args) { new SpringApplicationBuilder().showBanner(false).sources(Application.class).run(args); diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java deleted file mode 100644 index 22101681e..000000000 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiClient.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. - */ -package org.eclipse.hawkbit.ddi.client; - -import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; -import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase; -import org.eclipse.hawkbit.ddi.rest.api.DdiRestConstants; -import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Component; - -import feign.Feign; -import feign.Logger; -import feign.Logger.Level; -import feign.jackson.JacksonDecoder; -import feign.jackson.JacksonEncoder; - -@Component -public class DdiClient { - - // - // @Autowired - // private HttpServletResponse response; - - private final String controllerId; - private final String name; - private final String description; - private RootControllerResourceClient rootControllerResourceClient; - private String rootControllerResourcePath; - - public DdiClient(final String rolloutsUrl, final String controllerId, final String name, final String description, - final String tenant) { - super(); - this.controllerId = controllerId; - this.name = name; - this.description = description; - rootControllerResourcePath = rolloutsUrl + DdiRestConstants.BASE_V1_REQUEST_MAPPING; - rootControllerResourcePath = rootControllerResourcePath.replace("{tenant}", tenant); - - createFeignClient(); - } - - private void createFeignClient() { - - // BasicAuthRequestInterceptor TODO - - final Feign.Builder feignBuilder = Feign.builder() - .contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) - .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) - .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()) - .decoder(new ResponseEntityDecoder(new JacksonDecoder())); - // TODO implement feign client encoder to handle MultiPartFile - // .requestInterceptor(new BasicAuthRequestInterceptor(tenant + "\\" + - // user, password)) - - rootControllerResourceClient = feignBuilder.target(RootControllerResourceClient.class, - rootControllerResourcePath); - - } - - public void startDdiClient() { - - final ResponseEntity response = rootControllerResourceClient.getControllerBase("test"); - final DdiControllerBase controllerBase = response.getBody(); - - // TODO notify every 10 seconds on the rollout server - - // TODO if new update available -> start download and installation - // process - // report status messages - - } - -} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java new file mode 100644 index 000000000..4dd29d7c1 --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ddi.client; + +import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; +import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; + +import feign.Feign; +import feign.Feign.Builder; +import feign.Logger; +import feign.Logger.Level; +import feign.jackson.JacksonDecoder; +import feign.jackson.JacksonEncoder; + +/** + * @author Jonathan Knoblauch + * + */ +public class DdiDefaultFeignClient { + + private RootControllerResourceClient rootControllerResourceClient; + + private final Builder feignBuilder; + private final String baseUrl; + private final String tenant; + + public DdiDefaultFeignClient(final String baseUrl, final String tenant) { + feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) + .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) + .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()) + .decoder(new ResponseEntityDecoder(new JacksonDecoder())); + this.baseUrl = baseUrl; + this.tenant = tenant; + } + + public Builder getFeignBuilder() { + return feignBuilder; + } + + public RootControllerResourceClient getRootControllerResourceClient() { + + String rootControllerResourcePath = this.baseUrl + RootControllerResourceClient.PATH; + rootControllerResourcePath = rootControllerResourcePath.replace("{tenant}", tenant); + // TODO tenant null throw exception + if (rootControllerResourceClient == null) { + rootControllerResourceClient = feignBuilder.target(RootControllerResourceClient.class, + rootControllerResourcePath); + } + return rootControllerResourceClient; + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java new file mode 100644 index 000000000..c7b81e4fe --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ddi.client; + +import org.springframework.stereotype.Component; + +@Component +public class DdiExampleClient { + + private final String controllerId; + private final String name; + private final String description; + private final String baseUrl; + final DdiDefaultFeignClient ddiDefaultFeignClient; + + public DdiExampleClient(final String baseUrl, final String controllerId, final String name, + final String description, final String tenant) { + super(); + this.controllerId = controllerId; + this.name = name; + this.description = description; + this.baseUrl = baseUrl; + ddiDefaultFeignClient = new DdiDefaultFeignClient(baseUrl, tenant); + } + + public void startDdiClient() { + + // final ResponseEntity response = + + ddiDefaultFeignClient.getRootControllerResourceClient().getControllerBase(controllerId); + + // final DdiControllerBase controllerBase = response.getBody(); + + System.out.println("test"); + + // TODO notify every 10 seconds on the rollout server + + // TODO if new update available -> start download and installation + // process + // report status messages + + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java index bb74c5dee..bb369f478 100644 --- a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java +++ b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java @@ -1,6 +1,6 @@ package org.eclipse.hawkbit.example.ddi.client; -import org.eclipse.hawkbit.ddi.client.DdiClient; +import org.eclipse.hawkbit.ddi.client.DdiExampleClient; import org.junit.Test; /** @@ -11,7 +11,8 @@ public class AppTest { @Test public void AppTest() { - final DdiClient ddiClient = new DdiClient("http://localhost:8080", "mytest", "mytest", "desc", "DEFAULT"); + final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "mytest", "mytest", "desc", + "DEFAULT"); ddiClient.startDdiClient(); } From 5882c0444b8e379c116eab59e3f799946c976535 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 22 Apr 2016 15:18:17 +0200 Subject: [PATCH 029/371] Add baseUrl to Feign Client resource Signed-off-by: SirWayne --- .../org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java index 8bfc2ec52..ecd77f144 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java @@ -93,7 +93,7 @@ public class MgmtDefaultFeignClient { public MgmtSoftwareModuleClientResource getMgmtSoftwareModuleClientResource() { if (mgmtSoftwareModuleClientResource == null) { mgmtSoftwareModuleClientResource = feignBuilder.target(MgmtSoftwareModuleClientResource.class, - MgmtSoftwareModuleClientResource.PATH); + this.baseUrl + MgmtSoftwareModuleClientResource.PATH); } return mgmtSoftwareModuleClientResource; } From 946befb03882a54b0cdd85ee67189accd9d87dd1 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 22 Apr 2016 16:59:54 +0200 Subject: [PATCH 030/371] Add Jackson2HalModule module Signed-off-by: SirWayne --- .../hawkbit/mgmt/client/MgmtDefaultFeignClient.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java index ecd77f144..6425bad4d 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java @@ -19,6 +19,10 @@ import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleTypeClientReso import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetTagClientResource; import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; +import org.springframework.hateoas.hal.Jackson2HalModule; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import feign.Feign; import feign.Feign.Builder; @@ -47,10 +51,14 @@ public class MgmtDefaultFeignClient { private final String baseUrl; public MgmtDefaultFeignClient(final String baseUrl) { + final ObjectMapper mapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .registerModule(new Jackson2HalModule()); + feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()) - .decoder(new ResponseEntityDecoder(new JacksonDecoder())); + .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper))); this.baseUrl = baseUrl; } From c17bc98ecb20577df81594777765f442a2bf923b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 22 Apr 2016 17:49:33 +0200 Subject: [PATCH 031/371] Add RequestResponseContextHolder which hold the current response and request. Signed-off-by: SirWayne --- .../ResourceControllerAutoConfiguration.java | 33 +++++++++++ .../rest/api/MgmtDownloadArtifactRestApi.java | 6 +- .../MgmtDownloadArtifactResource.java | 13 +++-- .../resource/MgmtSoftwareModuleMapper.java | 11 ++-- .../hawkbit/rest/util/FilterHttpResponse.java | 54 ++++++++++++++++++ .../rest/util/HttpResponseFactoryBean.java | 55 +++++++++++++++++++ .../util/RequestResponseContextHolder.java | 35 ++++++++++++ 7 files changed, 191 insertions(+), 16 deletions(-) create mode 100644 hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FilterHttpResponse.java create mode 100644 hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/HttpResponseFactoryBean.java create mode 100644 hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java index 34ed5ddcd..41a06522b 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java @@ -8,12 +8,20 @@ */ package org.eclipse.hawkbit.autoconfigure.web; +import javax.servlet.http.HttpServletResponse; + import org.eclipse.hawkbit.ddi.annotation.EnableDdiApi; import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; +import org.eclipse.hawkbit.rest.util.FilterHttpResponse; +import org.eclipse.hawkbit.rest.util.HttpResponseFactoryBean; +import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; import org.eclipse.hawkbit.system.annotation.EnableSystemApi; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Scope; +import org.springframework.web.context.WebApplicationContext; /** * Auto-Configuration for enabling the REST-Resources. @@ -24,4 +32,29 @@ import org.springframework.context.annotation.Import; @Import({ EnableDdiApi.class, EnableMgmtApi.class, EnableSystemApi.class }) public class ResourceControllerAutoConfiguration { + /** + * Create filter for {@link HttpServletResponse}. + */ + @Bean + public FilterHttpResponse filterHttpResponse() { + return new FilterHttpResponse(); + } + + /** + * Create factory bean for {@link HttpServletResponse}. + */ + @Bean + public HttpResponseFactoryBean httpResponseFactoryBean() { + return new HttpResponseFactoryBean(); + } + + /** + * Create factory bean for {@link HttpServletResponse}. + */ + @Bean + @Scope(value = WebApplicationContext.SCOPE_REQUEST) + public RequestResponseContextHolder requestResponseContextHolder() { + return new RequestResponseContextHolder(); + } + } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java index e07d77f2f..4b50dc8f5 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java @@ -8,9 +8,6 @@ */ package org.eclipse.hawkbit.mgmt.rest.api; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -40,7 +37,6 @@ public interface MgmtDownloadArtifactRestApi { @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/artifacts/{artifactId}/download") @ResponseBody ResponseEntity downloadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("artifactId") final Long artifactId, final HttpServletResponse servletResponse, - final HttpServletRequest request); + @PathVariable("artifactId") final Long artifactId); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java index ddd7180cf..bef76d32f 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.mgmt.rest.resource; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadArtifactRestApi; @@ -18,6 +17,7 @@ import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; import org.eclipse.hawkbit.rest.util.RestResourceConversionHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -38,6 +38,9 @@ public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi @Autowired private ArtifactManagement artifactManagement; + @Autowired + private RequestResponseContextHolder requestResponseContextHolder; + /** * Handles the GET request for downloading an artifact. * @@ -55,8 +58,7 @@ public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi @Override @ResponseBody public ResponseEntity downloadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, - @PathVariable("artifactId") final Long artifactId, final HttpServletResponse servletResponse, - final HttpServletRequest request) { + @PathVariable("artifactId") final Long artifactId) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId); if (null == module || !module.getLocalArtifact(artifactId).isPresent()) { @@ -65,13 +67,14 @@ public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi final LocalArtifact artifact = module.getLocalArtifact(artifactId).get(); final DbArtifact file = artifactManagement.loadLocalArtifactBinary(artifact); - + final HttpServletRequest request = requestResponseContextHolder.getHttpServletRequest(); final String ifMatch = request.getHeader("If-Match"); if (ifMatch != null && !RestResourceConversionHelper.matchesHttpHeader(ifMatch, artifact.getSha1Hash())) { return new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); } - return RestResourceConversionHelper.writeFileResponse(artifact, servletResponse, request, file); + return RestResourceConversionHelper.writeFileResponse(artifact, + requestResponseContextHolder.getHttpServletResponse(), request, file); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java index 38b4ace75..5ca100ca9 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java @@ -145,8 +145,8 @@ public final class MgmtSoftwareModuleMapper { response.add(linkTo(methodOn(MgmtSoftwareModuleRestApi.class).getSoftwareModule(response.getModuleId())) .withRel("self")); - response.add(linkTo( - methodOn(MgmtSoftwareModuleTypeRestApi.class).getSoftwareModuleType(baseSofwareModule.getType().getId())) + response.add(linkTo(methodOn(MgmtSoftwareModuleTypeRestApi.class) + .getSoftwareModuleType(baseSofwareModule.getType().getId())) .withRel(MgmtRestConstants.SOFTWAREMODULE_V1_TYPE)); response.add(linkTo(methodOn(MgmtSoftwareModuleResource.class).getMetadata(response.getModuleId(), @@ -176,13 +176,12 @@ public final class MgmtSoftwareModuleMapper { MgmtRestModelMapper.mapBaseToBase(artifactRest, artifact); - artifactRest.add(linkTo(methodOn(MgmtSoftwareModuleRestApi.class).getArtifact(artifact.getSoftwareModule().getId(), - artifact.getId())).withRel("self")); + artifactRest.add(linkTo(methodOn(MgmtSoftwareModuleRestApi.class) + .getArtifact(artifact.getSoftwareModule().getId(), artifact.getId())).withRel("self")); if (artifact instanceof LocalArtifact) { artifactRest.add(linkTo(methodOn(MgmtDownloadArtifactResource.class) - .downloadArtifact(artifact.getSoftwareModule().getId(), artifact.getId(), null, null)) - .withRel("download")); + .downloadArtifact(artifact.getSoftwareModule().getId(), artifact.getId())).withRel("download")); } return artifactRest; diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FilterHttpResponse.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FilterHttpResponse.java new file mode 100644 index 000000000..7620e7404 --- /dev/null +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/FilterHttpResponse.java @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.rest.util; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletResponse; + +/** + * Filter is needed to autowire the {@link HttpServletResponse}. + * + */ +public class FilterHttpResponse implements Filter { + + private ThreadLocal threadLocalResponse = new ThreadLocal<>(); + + @Override + public void init(final FilterConfig filterConfig) throws ServletException { + // not needed + } + + @Override + public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) + throws IOException, ServletException { + try { + threadLocalResponse.set((HttpServletResponse) response); + chain.doFilter(request, response); + } finally { + threadLocalResponse.remove(); + } + } + + public HttpServletResponse getHttpServletReponse() { + return threadLocalResponse.get(); + } + + @Override + public void destroy() { + threadLocalResponse = null; + } + +} diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/HttpResponseFactoryBean.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/HttpResponseFactoryBean.java new file mode 100644 index 000000000..6df7987e6 --- /dev/null +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/HttpResponseFactoryBean.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.rest.util; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.NamedBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + * + * Factory bean to autowire the {@link HttpServletResponse}. + * + */ +public class HttpResponseFactoryBean implements FactoryBean, ApplicationContextAware, NamedBean { + + public static final String FACTORY_BEAN_NAME = "httpResponseFactoryBean"; + + private ApplicationContext applicationContext; + + @Override + public HttpServletResponse getObject() throws Exception { + return applicationContext.getBean(FilterHttpResponse.class).getHttpServletReponse(); + } + + @Override + public Class getObjectType() { + return HttpServletResponse.class; + } + + @Override + public boolean isSingleton() { + return false; + } + + @Override + public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + @Override + public String getBeanName() { + return FACTORY_BEAN_NAME; + } + +} diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java new file mode 100644 index 000000000..4c2dc5c5a --- /dev/null +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.rest.util; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials are made + * available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +public class RequestResponseContextHolder { + + @Autowired + private HttpServletRequest httpServletRequest; + + @Resource(name = HttpResponseFactoryBean.FACTORY_BEAN_NAME) + private HttpServletResponse httpServletResponse; + + public HttpServletRequest getHttpServletRequest() { + return httpServletRequest; + } + + public HttpServletResponse getHttpServletResponse() { + return httpServletResponse; + } +} From 1f5a27a2a879c5bb06ebb8c4767b68252ec701c6 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 22 Apr 2016 18:03:39 +0200 Subject: [PATCH 032/371] Add Scope and jackson dependency Signed-off-by: SirWayne --- examples/hawkbit-mgmt-api-client/pom.xml | 5 +++++ .../mgmt/rest/resource/MgmtDownloadArtifactResource.java | 3 +++ 2 files changed, 8 insertions(+) diff --git a/examples/hawkbit-mgmt-api-client/pom.xml b/examples/hawkbit-mgmt-api-client/pom.xml index 75e520ea6..70b394ac4 100644 --- a/examples/hawkbit-mgmt-api-client/pom.xml +++ b/examples/hawkbit-mgmt-api-client/pom.xml @@ -71,6 +71,11 @@ feign-jackson 8.14.2 + + com.fasterxml.jackson.core + jackson-databind + 2.5.5 + hibernate-validator org.hibernate diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java index bef76d32f..de01a917a 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java @@ -20,16 +20,19 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; import org.eclipse.hawkbit.rest.util.RestResourceConversionHelper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.WebApplicationContext; /** * */ @RestController +@Scope(value = WebApplicationContext.SCOPE_REQUEST) public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi { @Autowired From 0ea9e84322d20ba2b6eeb500224fef3138f543a7 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Fri, 22 Apr 2016 18:06:01 +0200 Subject: [PATCH 033/371] Implementation of controller example client Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-ddi-client/pom.xml | 10 ++- ...plicationJsonRequestHeaderInterceptor.java | 2 + .../ddi/client/DdiDefaultFeignClient.java | 12 ++- .../hawkbit/ddi/client/DdiExampleClient.java | 83 +++++++++++++++---- .../RootControllerResourceClient.java | 1 + .../hawkbit/example/ddi/client/AppTest.java | 7 +- .../hawkbit/ddi/json/model/DdiChunk.java | 12 ++- .../hawkbit/ddi/json/model/DdiConfig.java | 14 +++- .../ddi/json/model/DdiControllerBase.java | 14 +++- .../hawkbit/ddi/json/model/DdiDeployment.java | 10 ++- .../ddi/json/model/DdiDeploymentBase.java | 8 +- .../hawkbit/ddi/json/model/DdiPolling.java | 13 ++- 12 files changed, 150 insertions(+), 36 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index 8ce1749dd..bd87a65bc 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -37,19 +37,25 @@ com.netflix.feign feign-core - 8.16.0 + + 8.14.2 com.netflix.feign feign-jackson - 8.16.0 + + 8.14.2 javax.servlet javax.servlet-api + + org.springframework.plugin + spring-plugin-core + junit diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java index 680da74f1..df43444d6 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java @@ -22,6 +22,8 @@ public class ApplicationJsonRequestHeaderInterceptor implements RequestIntercept @Override public void apply(final RequestTemplate template) { template.header("Accept", MediaType.APPLICATION_JSON_VALUE); + // template.header("Accept", + // EnableHypermediaSupport.HypermediaType.HAL); template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java index 4dd29d7c1..73b1d4f81 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java @@ -5,6 +5,10 @@ package org.eclipse.hawkbit.ddi.client; import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; +import org.springframework.hateoas.hal.Jackson2HalModule; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import feign.Feign; import feign.Feign.Builder; @@ -26,12 +30,18 @@ public class DdiDefaultFeignClient { private final String tenant; public DdiDefaultFeignClient(final String baseUrl, final String tenant) { + + final ObjectMapper mapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .registerModule(new Jackson2HalModule()); + feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()) - .decoder(new ResponseEntityDecoder(new JacksonDecoder())); + .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper))); this.baseUrl = baseUrl; this.tenant = tenant; + } public Builder getFeignBuilder() { diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java index c7b81e4fe..c0fb6ff9c 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -3,36 +3,55 @@ */ package org.eclipse.hawkbit.ddi.client; -import org.springframework.stereotype.Component; +import java.util.regex.Pattern; -@Component -public class DdiExampleClient { +import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase; +import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase; +import org.springframework.hateoas.Link; +import org.springframework.http.ResponseEntity; + +//@Component +public class DdiExampleClient implements Runnable { private final String controllerId; - private final String name; - private final String description; - private final String baseUrl; + final DdiDefaultFeignClient ddiDefaultFeignClient; - public DdiExampleClient(final String baseUrl, final String controllerId, final String name, - final String description, final String tenant) { + public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant) { super(); this.controllerId = controllerId; - this.name = name; - this.description = description; - this.baseUrl = baseUrl; ddiDefaultFeignClient = new DdiDefaultFeignClient(baseUrl, tenant); } + @Override + public void run() { + + ResponseEntity response; + + for (int i = 0; i < 20; i++) { + + response = ddiDefaultFeignClient.getRootControllerResourceClient().getControllerBase(controllerId); + final DdiControllerBase controllerBase = response.getBody(); + final Link controllerDeploymentBaseLink = controllerBase.getLink("deploymentBase"); + + if (controllerDeploymentBaseLink != null) { + // TOD actung download nur einmal starten + startDownload(controllerDeploymentBaseLink); + } + + try { + Thread.sleep(2000); + } catch (final InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + } + public void startDdiClient() { - // final ResponseEntity response = - - ddiDefaultFeignClient.getRootControllerResourceClient().getControllerBase(controllerId); - - // final DdiControllerBase controllerBase = response.getBody(); - - System.out.println("test"); + // // TODO notify every 10 seconds on the rollout server @@ -42,4 +61,32 @@ public class DdiExampleClient { } + private void startDownload(final Link controllerDeploymentBaseLink) { + + // controllerDeploymentBaseLink. + + // final List varibles = controllerDeploymentBaseLink.get + + final String link = controllerDeploymentBaseLink.getHref(); + final String[] segs = link.split(Pattern.quote("/")); + final String[] ending = segs[8].split(Pattern.quote("?")); + final String actionId = ending[0]; + final String resource = ending[1].substring(2); + + final ResponseEntity respone = ddiDefaultFeignClient.getRootControllerResourceClient() + .getControllerBasedeploymentAction(controllerId, Long.valueOf(actionId), Integer.valueOf(resource)); + + final DdiDeploymentBase ddiDeploymentBase = respone.getBody(); + + final Link downloadLink = ddiDeploymentBase.getDeployment().getChunks().get(0).getArtifacts().get(0) + .getLink("download"); + + System.out.println("download startet ...."); + + } + + private void startSimulatedInstalltion() { + + } + } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java index 80b71dda9..69ae96d84 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java @@ -9,6 +9,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the Rootcontroller resource of the DDI API. */ + @FeignClient(url = "${hawkbit.url:localhost:8080}/" + RootControllerResourceClient.PATH) public interface RootControllerResourceClient extends DdiRootControllerRestApi { diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java index bb369f478..78608b11d 100644 --- a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java +++ b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java @@ -11,9 +11,10 @@ public class AppTest { @Test public void AppTest() { - final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "mytest", "mytest", "desc", - "DEFAULT"); - ddiClient.startDdiClient(); + final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "jktest", "DEFAULT"); + ddiClient.run(); + + System.out.println("next steps........................"); } } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java index 4ff9debe4..78de8591d 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java @@ -18,15 +18,19 @@ import javax.validation.constraints.NotNull; public class DdiChunk { @NotNull - private final String part; + private String part; @NotNull - private final String version; + private String version; @NotNull - private final String name; + private String name; - private final List artifacts; + private List artifacts; + + public DdiChunk() { + + } /** * Constructor. diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java index fa4f19882..5ec1b4dde 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java @@ -8,12 +8,20 @@ */ package org.eclipse.hawkbit.ddi.json.model; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + /** * Standard configuration for the target. */ +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) public class DdiConfig { - private final DdiPolling polling; + @JsonProperty + private DdiPolling polling; /** * Constructor. @@ -26,6 +34,10 @@ public class DdiConfig { this.polling = polling; } + public DdiConfig() { + + } + public DdiPolling getPolling() { return polling; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java index b044c3537..3f160157c 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java @@ -10,12 +10,20 @@ package org.eclipse.hawkbit.ddi.json.model; import org.springframework.hateoas.ResourceSupport; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + /** * {@link DdiControllerBase} resource content. */ +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) public class DdiControllerBase extends ResourceSupport { - private final DdiConfig config; + @JsonProperty + private DdiConfig config; /** * Constructor. @@ -28,6 +36,10 @@ public class DdiControllerBase extends ResourceSupport { this.config = config; } + public DdiControllerBase() { + + } + public DdiConfig getConfig() { return config; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java index 55538f8e2..7f8c84d39 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java @@ -17,11 +17,15 @@ import com.fasterxml.jackson.annotation.JsonValue; */ public class DdiDeployment { - private final HandlingType download; + private HandlingType download; - private final HandlingType update; + private HandlingType update; - private final List chunks; + private List chunks; + + public DdiDeployment() { + + } /** * Constructor. diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java index 25c7a62ed..4d89f759b 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java @@ -21,10 +21,10 @@ public class DdiDeploymentBase extends ResourceSupport { @JsonProperty("id") @NotNull - private final String deplyomentId; + private String deplyomentId; @NotNull - private final DdiDeployment deployment; + private DdiDeployment deployment; /** * Constructor. @@ -39,6 +39,10 @@ public class DdiDeploymentBase extends ResourceSupport { this.deployment = deployment; } + public DdiDeploymentBase() { + + } + public DdiDeployment getDeployment() { return deployment; } diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java index 4ad67d340..489178be8 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java @@ -8,12 +8,20 @@ */ package org.eclipse.hawkbit.ddi.json.model; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + /** * Polling interval for the SP target. */ +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) public class DdiPolling { - private final String sleep; + @JsonProperty + private String sleep; /** * Constructor. @@ -26,6 +34,9 @@ public class DdiPolling { this.sleep = sleep; } + public DdiPolling() { + } + public String getSleep() { return sleep; } From 347fb8d5fef2f55d727cbcd8f674a09544176e68 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Mon, 25 Apr 2016 09:15:23 +0200 Subject: [PATCH 034/371] Added new RequestResponseContextHolder to HTTP resources. Signed-off-by: Jonathan Philip Knoblauch --- .../resource/DdiArtifactStoreController.java | 33 +++++------ .../ddi/rest/resource/DdiRootController.java | 55 +++++++++++-------- 2 files changed, 48 insertions(+), 40 deletions(-) diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index e14522b28..b2954d363 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -12,7 +12,6 @@ import java.io.IOException; import java.util.List; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheWriteNotify; @@ -24,19 +23,20 @@ import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; import org.eclipse.hawkbit.rest.util.RestResourceConversionHelper; import org.eclipse.hawkbit.security.HawkbitSecurityProperties; import org.eclipse.hawkbit.util.IpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.web.bind.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.context.WebApplicationContext; /** * The {@link DdiArtifactStoreController} of the HawkBit server controller API @@ -47,6 +47,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; * for legacy controllers that can not be fed with a download URI at runtime. */ @RestController +@Scope(value = WebApplicationContext.SCOPE_REQUEST) public class DdiArtifactStoreController implements DdiArtifactStoreControllerRestApi { private static final Logger LOG = LoggerFactory.getLogger(DdiArtifactStoreController.class); @@ -63,13 +64,8 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes @Autowired private HawkbitSecurityProperties securityProperties; - private HttpServletResponse getResponse() { - return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getResponse(); - } - - private HttpServletRequest getRequest() { - return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); - } + @Autowired + private RequestResponseContextHolder requestResponseContextHolder; @Override public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, @@ -87,7 +83,7 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes ResponseEntity result; final LocalArtifact artifact = foundArtifacts.get(0); - final String ifMatch = getRequest().getHeader("If-Match"); + final String ifMatch = requestResponseContextHolder.getHttpServletRequest().getHeader("If-Match"); if (ifMatch != null && !RestResourceConversionHelper.matchesHttpHeader(ifMatch, artifact.getSha1Hash())) { result = new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); } else { @@ -96,11 +92,15 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes // we set a download status only if we are aware of the // targetid, i.e. authenticated and not anonymous if (targetid != null && !"anonymous".equals(targetid)) { - final Action action = checkAndReportDownloadByTarget(getRequest(), targetid, artifact); - result = RestResourceConversionHelper.writeFileResponse(artifact, getResponse(), getRequest(), file, - cacheWriteNotify, action.getId()); + final Action action = checkAndReportDownloadByTarget( + requestResponseContextHolder.getHttpServletRequest(), targetid, artifact); + result = RestResourceConversionHelper.writeFileResponse(artifact, + requestResponseContextHolder.getHttpServletResponse(), + requestResponseContextHolder.getHttpServletRequest(), file, cacheWriteNotify, action.getId()); } else { - result = RestResourceConversionHelper.writeFileResponse(artifact, getResponse(), getRequest(), file); + result = RestResourceConversionHelper.writeFileResponse(artifact, + requestResponseContextHolder.getHttpServletResponse(), + requestResponseContextHolder.getHttpServletRequest(), file); } } @@ -119,7 +119,8 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes } try { - DataConversionHelper.writeMD5FileResponse(fileName, getResponse(), foundArtifacts.get(0)); + DataConversionHelper.writeMD5FileResponse(fileName, requestResponseContextHolder.getHttpServletResponse(), + foundArtifacts.get(0)); } catch (final IOException e) { LOG.error("Failed to stream MD5 File", e); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); 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 7ef4f343d..3df0916c0 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 @@ -12,7 +12,6 @@ import java.io.IOException; import java.util.List; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import org.eclipse.hawkbit.api.ArtifactUrlHandler; @@ -40,6 +39,7 @@ import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; import org.eclipse.hawkbit.rest.util.RestResourceConversionHelper; import org.eclipse.hawkbit.security.HawkbitSecurityProperties; import org.eclipse.hawkbit.tenancy.TenantAware; @@ -48,14 +48,14 @@ import org.hibernate.validator.constraints.NotEmpty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.context.WebApplicationContext; /** * The {@link DdiRootController} of the hawkBit server DDI API that is queried @@ -65,6 +65,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; * Transactional (read-write) as all queries at least update the last poll time. */ @RestController +@Scope(value = WebApplicationContext.SCOPE_REQUEST) public class DdiRootController implements DdiRootControllerRestApi { private static final Logger LOG = LoggerFactory.getLogger(DdiRootController.class); @@ -91,13 +92,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @Autowired private ArtifactUrlHandler artifactUrlHandler; - private HttpServletResponse getResponse() { - return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getResponse(); - } - - private HttpServletRequest getRequest() { - return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); - } + @Autowired + private RequestResponseContextHolder requestResponseContextHolder; @Override public ResponseEntity> getSoftwareModulesArtifacts( @@ -124,13 +120,15 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("getControllerBase({})", targetid); final Target target = controllerManagement.findOrRegisterTargetIfItDoesNotexist(targetid, - IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), + securityProperties.getClients().getRemoteIpHeader())); if (target.getTargetInfo().getUpdateStatus() == TargetUpdateStatus.UNKNOWN) { LOG.debug("target with {} extsisted but was in status UNKNOWN -> REGISTERED)", targetid); controllerManagement.updateTargetStatus(target.getTargetInfo(), TargetUpdateStatus.REGISTERED, System.currentTimeMillis(), - IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), + securityProperties.getClients().getRemoteIpHeader())); } return new ResponseEntity<>( @@ -146,7 +144,8 @@ public class DdiRootController implements DdiRootControllerRestApi { ResponseEntity result; final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), + securityProperties.getClients().getRemoteIpHeader())); final SoftwareModule module = softwareManagement.findSoftwareModuleById(softwareModuleId); if (checkModule(fileName, module)) { @@ -156,13 +155,15 @@ public class DdiRootController implements DdiRootControllerRestApi { final LocalArtifact artifact = module.getLocalArtifactByFilename(fileName).get(); final DbArtifact file = artifactManagement.loadLocalArtifactBinary(artifact); - final String ifMatch = getRequest().getHeader("If-Match"); + final String ifMatch = requestResponseContextHolder.getHttpServletRequest().getHeader("If-Match"); if (ifMatch != null && !RestResourceConversionHelper.matchesHttpHeader(ifMatch, artifact.getSha1Hash())) { result = new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); } else { - final Action action = checkAndLogDownload(getRequest(), target, module); - result = RestResourceConversionHelper.writeFileResponse(artifact, getResponse(), getRequest(), file, - cacheWriteNotify, action.getId()); + final Action action = checkAndLogDownload(requestResponseContextHolder.getHttpServletRequest(), target, + module); + result = RestResourceConversionHelper.writeFileResponse(artifact, + requestResponseContextHolder.getHttpServletResponse(), + requestResponseContextHolder.getHttpServletRequest(), file, cacheWriteNotify, action.getId()); } } return result; @@ -197,7 +198,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("fileName") final String fileName) { controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), + securityProperties.getClients().getRemoteIpHeader())); final SoftwareModule module = softwareManagement.findSoftwareModuleById(softwareModuleId); @@ -207,7 +209,7 @@ public class DdiRootController implements DdiRootControllerRestApi { } try { - DataConversionHelper.writeMD5FileResponse(fileName, getResponse(), + DataConversionHelper.writeMD5FileResponse(fileName, requestResponseContextHolder.getHttpServletResponse(), module.getLocalArtifactByFilename(fileName).get()); } catch (final IOException e) { LOG.error("Failed to stream MD5 File", e); @@ -224,7 +226,8 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("getControllerBasedeploymentAction({},{})", targetid, resource); final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), + securityProperties.getClients().getRemoteIpHeader())); final Action action = findActionWithExceptionIfNotFound(actionId); if (!action.getTarget().getId().equals(target.getId())) { @@ -258,7 +261,8 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("provideBasedeploymentActionFeedback for target [{},{}]: {}", targetid, actionId, feedback); final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), + securityProperties.getClients().getRemoteIpHeader())); if (!actionId.equals(feedback.getId())) { LOG.warn( @@ -352,7 +356,8 @@ public class DdiRootController implements DdiRootControllerRestApi { public ResponseEntity putConfigData(@Valid @RequestBody final DdiConfigData configData, @PathVariable("targetid") final String targetid) { controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), + securityProperties.getClients().getRemoteIpHeader())); controllerManagement.updateControllerAttributes(targetid, configData.getData()); @@ -366,7 +371,8 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("getControllerCancelAction({})", targetid); final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), + securityProperties.getClients().getRemoteIpHeader())); final Action action = findActionWithExceptionIfNotFound(actionId); if (!action.getTarget().getId().equals(target.getId())) { @@ -396,7 +402,8 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("provideCancelActionFeedback for target [{}]: {}", targetid, feedback); final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(getRequest(), securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), + securityProperties.getClients().getRemoteIpHeader())); if (!actionId.equals(feedback.getId())) { LOG.warn( From 5cfb933ca1f8e39a70cf6decb4a471a36303847d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 25 Apr 2016 10:45:48 +0200 Subject: [PATCH 035/371] Add Rest configuration for test Signed-off-by: SirWayne --- .../ResourceControllerAutoConfiguration.java | 33 ------------ .../org/eclipse/hawkbit/ddi/EnableDdiApi.java | 3 ++ .../resource/DdiArtifactDownloadTest.java | 6 +-- .../rest/resource/DdiCancelActionTest.java | 6 +-- .../rest/resource/DdiDeploymentBaseTest.java | 6 +-- .../rest/resource/DdiRootControllerTest.java | 6 +-- .../mgmt/annotation/EnableMgmtApi.java | 3 ++ .../MgmtDistributionSetResourceTest.java | 4 +- .../MgmtDistributionSetTypeResourceTest.java | 4 +- .../resource/MgmtDownloadResourceTest.java | 23 ++++---- .../resource/MgmtRolloutResourceTest.java | 4 +- .../MgmtSoftwareModuleResourceTest.java | 4 +- .../MgmtSoftwareModuleTypeResourceTest.java | 4 +- .../rest/resource/MgmtTargetResourceTest.java | 4 +- .../hawkbit/AbstractIntegrationTest.java | 19 ++++--- .../rest/configuration/RestConfiguration.java | 52 +++++++++++++++++++ .../util/RequestResponseContextHolder.java | 12 ++++- .../rest/AbstractRestIntegrationTest.java | 32 ++++++++++++ ...bstractRestIntegrationTestWithMongoDB.java | 31 +++++++++++ .../system/annotation/EnableSystemApi.java | 3 ++ 20 files changed, 175 insertions(+), 84 deletions(-) create mode 100644 hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/configuration/RestConfiguration.java create mode 100644 hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java create mode 100644 hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java index ae92d3200..afb90bd13 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java @@ -8,20 +8,12 @@ */ package org.eclipse.hawkbit.autoconfigure.web; -import javax.servlet.http.HttpServletResponse; - import org.eclipse.hawkbit.ddi.EnableDdiApi; import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; -import org.eclipse.hawkbit.rest.util.FilterHttpResponse; -import org.eclipse.hawkbit.rest.util.HttpResponseFactoryBean; -import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; import org.eclipse.hawkbit.system.annotation.EnableSystemApi; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Scope; -import org.springframework.web.context.WebApplicationContext; /** * Auto-Configuration for enabling the REST-Resources. @@ -32,29 +24,4 @@ import org.springframework.web.context.WebApplicationContext; @Import({ EnableDdiApi.class, EnableMgmtApi.class, EnableSystemApi.class }) public class ResourceControllerAutoConfiguration { - /** - * Create filter for {@link HttpServletResponse}. - */ - @Bean - public FilterHttpResponse filterHttpResponse() { - return new FilterHttpResponse(); - } - - /** - * Create factory bean for {@link HttpServletResponse}. - */ - @Bean - public HttpResponseFactoryBean httpResponseFactoryBean() { - return new HttpResponseFactoryBean(); - } - - /** - * Create factory bean for {@link HttpServletResponse}. - */ - @Bean - @Scope(value = WebApplicationContext.SCOPE_REQUEST) - public RequestResponseContextHolder requestResponseContextHolder() { - return new RequestResponseContextHolder(); - } - } diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/EnableDdiApi.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/EnableDdiApi.java index 1d1e0a259..d9572166a 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/EnableDdiApi.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/EnableDdiApi.java @@ -13,8 +13,10 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.stereotype.Controller; /** @@ -25,6 +27,7 @@ import org.springframework.stereotype.Controller; @Retention(RetentionPolicy.RUNTIME) @Configuration @ComponentScan +@Import(RestConfiguration.class) public @interface EnableDdiApi { } diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java index af65b1351..6c3bdea4e 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java @@ -26,7 +26,6 @@ import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.RandomUtils; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; @@ -36,13 +35,13 @@ import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.junit.Test; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort.Direction; import org.springframework.http.MediaType; -import org.springframework.test.context.ActiveProfiles; import org.springframework.test.web.servlet.MvcResult; import com.google.common.base.Charsets; @@ -57,10 +56,9 @@ import ru.yandex.qatools.allure.annotations.Stories; /** * Test artifact downloads from the controller. */ -@ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Artifact Download Resource") -public class DdiArtifactDownloadTest extends AbstractIntegrationTestWithMongoDB { +public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMongoDB { public DdiArtifactDownloadTest() { LOG = LoggerFactory.getLogger(DdiArtifactDownloadTest.class); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java index ddd826e8a..9913d5e51 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java @@ -22,18 +22,17 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.Test; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; -import org.springframework.test.context.ActiveProfiles; import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; @@ -42,10 +41,9 @@ import ru.yandex.qatools.allure.annotations.Stories; /** * Test cancel action from the controller. */ -@ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Cancel Action Resource") -public class DdiCancelActionTest extends AbstractIntegrationTest { +public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Test @Description("Test of the controller can continue a started update even after a cancel command if it so desires.") diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index 5c89291cc..df75bc6b3 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -25,7 +25,6 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.RandomUtils; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; @@ -35,6 +34,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.fest.assertions.core.Condition; @@ -45,7 +45,6 @@ import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; -import org.springframework.test.context.ActiveProfiles; import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; @@ -54,10 +53,9 @@ import ru.yandex.qatools.allure.annotations.Stories; /** * Test deployment base from the controller. */ -@ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Deployment Action Resource") -public class DdiDeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { +public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoDB { @Test() @Description("Ensures that artifacts are not found, when softare module does not exists.") diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index 407ff63d0..8041e8b36 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -22,7 +22,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithSpringAuthorityRule; import org.eclipse.hawkbit.WithUser; @@ -32,6 +31,7 @@ import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; @@ -39,7 +39,6 @@ import org.eclipse.hawkbit.util.IpUtil; import org.junit.Test; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; -import org.springframework.test.context.ActiveProfiles; import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; @@ -48,10 +47,9 @@ import ru.yandex.qatools.allure.annotations.Stories; /** * Test the root controller resources. */ -@ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Root Poll Resource") -public class DdiRootControllerTest extends AbstractIntegrationTestWithMongoDB { +public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoDB { @Test @Description("Ensures that targets cannot be created e.g. in plug'n play scenarios when tenant does not exists but can be created if the tenant exists.") diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java index ee34a3988..2b7f754a8 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java @@ -13,8 +13,10 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.stereotype.Controller; /** @@ -29,6 +31,7 @@ import org.springframework.stereotype.Controller; @Retention(RetentionPolicy.RUNTIME) @Configuration @ComponentScan +@Import(RestConfiguration.class) public @interface EnableMgmtApi { } diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index 5017d4ff6..8cfef095e 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -26,7 +26,6 @@ import java.util.Iterator; import java.util.List; import java.util.Set; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; @@ -37,6 +36,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.json.JSONArray; @@ -55,7 +55,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Management API") @Stories("Distribution Set Resource") -public class MgmtDistributionSetResourceTest extends AbstractIntegrationTest { +public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest { @Test @Description("This test verifies the call of all Software Modules that are assiged to a Distribution Set through the RESTful API.") diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java index 8bc8c6ca9..dcd78513b 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java @@ -23,13 +23,13 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.json.JSONException; @@ -51,7 +51,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Management API") @Stories("Distribution Set Type Resource") -public class MgmtDistributionSetTypeResourceTest extends AbstractIntegrationTest { +public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegrationTest { @Test @WithUser(principal = "uploadTester", allSpPermissions = true) diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java index 1122f3ed4..17f23f888 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java @@ -11,7 +11,6 @@ package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.DownloadArtifactCache; @@ -20,6 +19,7 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.Before; import org.junit.Test; @@ -33,7 +33,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Management API") @Stories("Download Resource") -public class MgmtDownloadResourceTest extends AbstractIntegrationTestWithMongoDB { +public class MgmtDownloadResourceTest extends AbstractRestIntegrationTestWithMongoDB { @Autowired @Qualifier(CacheConstants.DOWNLOAD_ID_CACHE) @@ -58,9 +58,8 @@ public class MgmtDownloadResourceTest extends AbstractIntegrationTestWithMongoDB @Test @Description("This test verifies the call of download artifact without a valid download id fails.") public void testNoDownloadIdAvailable() throws Exception { - mvc.perform( - get(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, - downloadIdNotAvailable)) + mvc.perform(get(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, downloadIdNotAvailable)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); } @@ -68,16 +67,14 @@ public class MgmtDownloadResourceTest extends AbstractIntegrationTestWithMongoDB @Test @Description("This test verifies the call of download artifact works and the download id will be removed.") public void testDownload() throws Exception { - mvc.perform( - get(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, - downloadIdSha1)) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); + mvc.perform(get(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, downloadIdSha1)).andDo(MockMvcResultPrinter.print()) + .andExpect(status().isOk()); // because cache is empty - mvc.perform( - get(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, - downloadIdSha1)) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); + mvc.perform(get(MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE + + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING, downloadIdSha1)).andDo(MockMvcResultPrinter.print()) + .andExpect(status().isNotFound()); } diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index 35ab7a786..09281721c 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -21,7 +21,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.List; import java.util.concurrent.Callable; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; @@ -34,6 +33,7 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.eclipse.hawkbit.rest.util.SuccessCondition; @@ -52,7 +52,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Management API") @Stories("Rollout Resource") -public class MgmtRolloutResourceTest extends AbstractIntegrationTest { +public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { @Autowired private RolloutManagement rolloutManagement; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java index dbce7d90e..a63dd754f 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java @@ -32,7 +32,6 @@ import java.util.List; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.HashGeneratorUtils; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; @@ -46,6 +45,7 @@ import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; @@ -71,7 +71,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Management API") @Stories("Software Module Resource") -public class MgmtSoftwareModuleResourceTest extends AbstractIntegrationTestWithMongoDB { +public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestWithMongoDB { @Before public void assertPreparationOfRepo() { diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java index aa2cd68e2..b69558e59 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java @@ -23,11 +23,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.json.JSONException; @@ -48,7 +48,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Management API") @Stories("Software Module Type Resource") -public class MgmtSoftwareModuleTypeResourceTest extends AbstractIntegrationTest { +public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationTest { @Test @WithUser(principal = "uploadTester", allSpPermissions = true) diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index fff9d8d2e..c8d33edc9 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -29,7 +29,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.exception.SpServerError; @@ -46,6 +45,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.exception.MessageNotReadableException; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.eclipse.hawkbit.rest.util.JsonBuilder; @@ -76,7 +76,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Management API") @Stories("Target Resource") -public class MgmtTargetResourceTest extends AbstractIntegrationTest { +public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { private static final String TARGET_DESCRIPTION_TEST = "created in test"; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java index b7091edf8..060ce2402 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java @@ -73,6 +73,7 @@ import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.WebApplicationContext; @@ -181,11 +182,10 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Autowired protected TenantAwareCacheManager cacheManager; - + @Autowired protected TenantConfigurationManagement tenantConfigurationManagement; - @Autowired protected RolloutManagement rolloutManagement; @@ -223,12 +223,7 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Before public void before() throws Exception { - mvc = MockMvcBuilders.webAppContextSetup(context) - .addFilter(new DosFilter(100, 10, "127\\.0\\.0\\.1|\\[0:0:0:0:0:0:0:1\\]", "(^192\\.168\\.)", - "X-Forwarded-For")) - .addFilter(new ExcludePathAwareShallowETagFilter( - "/rest/v1/softwaremodules/{smId}/artifacts/{artId}/download", "/*/controller/artifacts/**")) - .build(); + mvc = createMvcWebAppContext().build(); standardDsType = securityRule.runAsPrivileged(() -> systemManagement.getTenantMetadata().getDefaultDsType()); @@ -245,6 +240,14 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { runtimeType = securityRule.runAsPrivileged(() -> softwareManagement.updateSoftwareModuleType(runtimeType)); } + protected DefaultMockMvcBuilder createMvcWebAppContext() { + return MockMvcBuilders.webAppContextSetup(context) + .addFilter(new DosFilter(100, 10, "127\\.0\\.0\\.1|\\[0:0:0:0:0:0:0:1\\]", "(^192\\.168\\.)", + "X-Forwarded-For")) + .addFilter(new ExcludePathAwareShallowETagFilter( + "/rest/v1/softwaremodules/{smId}/artifacts/{artId}/download", "/*/controller/artifacts/**")); + } + @BeforeClass public static void beforeClass() { createTestdatabaseAndStart(); diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/configuration/RestConfiguration.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/configuration/RestConfiguration.java new file mode 100644 index 000000000..e2c4ec2a1 --- /dev/null +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/configuration/RestConfiguration.java @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.rest.configuration; + +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.hawkbit.rest.util.FilterHttpResponse; +import org.eclipse.hawkbit.rest.util.HttpResponseFactoryBean; +import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import org.springframework.web.context.WebApplicationContext; + +/** + * Configuration for Rest api. + */ +@Configuration +public class RestConfiguration { + + /** + * Create filter for {@link HttpServletResponse}. + */ + @Bean + public FilterHttpResponse filterHttpResponse() { + return new FilterHttpResponse(); + } + + /** + * Create factory bean for {@link HttpServletResponse}. + */ + @Bean + public FactoryBean httpResponseFactoryBean() { + return new HttpResponseFactoryBean(); + } + + /** + * Create factory bean for {@link HttpServletResponse}. + */ + @Bean + @Scope(value = WebApplicationContext.SCOPE_REQUEST) + public RequestResponseContextHolder requestResponseContextHolder() { + return new RequestResponseContextHolder(); + } +} diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java index 4c2dc5c5a..07b6af58d 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java @@ -19,10 +19,8 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class RequestResponseContextHolder { - @Autowired private HttpServletRequest httpServletRequest; - @Resource(name = HttpResponseFactoryBean.FACTORY_BEAN_NAME) private HttpServletResponse httpServletResponse; public HttpServletRequest getHttpServletRequest() { @@ -32,4 +30,14 @@ public class RequestResponseContextHolder { public HttpServletResponse getHttpServletResponse() { return httpServletResponse; } + + @Autowired + public void setHttpServletRequest(final HttpServletRequest httpServletRequest) { + this.httpServletRequest = httpServletRequest; + } + + @Resource(name = HttpResponseFactoryBean.FACTORY_BEAN_NAME) + public void setHttpServletResponse(final HttpServletResponse httpServletResponse) { + this.httpServletResponse = httpServletResponse; + } } diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java new file mode 100644 index 000000000..763643ce1 --- /dev/null +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.rest; + +import org.eclipse.hawkbit.AbstractIntegrationTest; +import org.eclipse.hawkbit.rest.configuration.RestConfiguration; +import org.eclipse.hawkbit.rest.util.FilterHttpResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; + +/** + * Abstract Test for Rest tests. + */ +@SpringApplicationConfiguration(classes = { RestConfiguration.class }) +public abstract class AbstractRestIntegrationTest extends AbstractIntegrationTest { + + @Autowired + private FilterHttpResponse filterHttpResponse; + + @Override + protected DefaultMockMvcBuilder createMvcWebAppContext() { + return super.createMvcWebAppContext().addFilter(filterHttpResponse); + } + +} diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java new file mode 100644 index 000000000..893955f77 --- /dev/null +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.rest; + +import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.rest.configuration.RestConfiguration; +import org.eclipse.hawkbit.rest.util.FilterHttpResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; + +/** + * Abstract Test for Rest tests. + */ +@SpringApplicationConfiguration(classes = { RestConfiguration.class }) +public abstract class AbstractRestIntegrationTestWithMongoDB extends AbstractIntegrationTestWithMongoDB { + + @Autowired + private FilterHttpResponse filterHttpResponse; + + @Override + protected DefaultMockMvcBuilder createMvcWebAppContext() { + return super.createMvcWebAppContext().addFilter(filterHttpResponse); + } +} diff --git a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java index 209dfdd95..bf706bdc4 100644 --- a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java +++ b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java @@ -13,8 +13,10 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.stereotype.Controller; /** @@ -25,6 +27,7 @@ import org.springframework.stereotype.Controller; @Retention(RetentionPolicy.RUNTIME) @Configuration @ComponentScan +@Import(RestConfiguration.class) public @interface EnableSystemApi { } From 0fd2f7200f4e7920f9e9fbef6755211b76201a52 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 25 Apr 2016 11:12:04 +0200 Subject: [PATCH 036/371] Add test dependency Signed-off-by: SirWayne --- hawkbit-rest-core/pom.xml | 6 ++++++ .../eclipse/hawkbit/rest/AbstractRestIntegrationTest.java | 3 ++- .../rest/AbstractRestIntegrationTestWithMongoDB.java | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml index 6cc9d432b..2275a74a1 100644 --- a/hawkbit-rest-core/pom.xml +++ b/hawkbit-rest-core/pom.xml @@ -50,6 +50,12 @@ fest-assert test + + org.eclipse.hawkbit + hawkbit-repository + ${project.version} + tests + ru.yandex.qatools.allure allure-junit-adaptor diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java index 763643ce1..38f36859b 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java @@ -26,7 +26,8 @@ public abstract class AbstractRestIntegrationTest extends AbstractIntegrationTes @Override protected DefaultMockMvcBuilder createMvcWebAppContext() { - return super.createMvcWebAppContext().addFilter(filterHttpResponse); + final DefaultMockMvcBuilder createMvcWebAppContext = super.createMvcWebAppContext(); + return createMvcWebAppContext.addFilter(filterHttpResponse); } } diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java index 893955f77..9a25eb631 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java @@ -26,6 +26,7 @@ public abstract class AbstractRestIntegrationTestWithMongoDB extends AbstractInt @Override protected DefaultMockMvcBuilder createMvcWebAppContext() { - return super.createMvcWebAppContext().addFilter(filterHttpResponse); + DefaultMockMvcBuilder createMvcWebAppContext = super.createMvcWebAppContext(); + return createMvcWebAppContext.addFilter(filterHttpResponse); } } From a065a81aeddc0c54cac6003817230afbee16d404 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 10:56:33 +0200 Subject: [PATCH 037/371] Solvend maven depenency and added new DDI client functions Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-ddi-client/pom.xml | 78 +++++--- .../hawkbit/ddi/client/Application.java | 49 ----- ...plicationJsonRequestHeaderInterceptor.java | 7 +- .../hawkbit/ddi/client/DdiDecoder.java | 55 +++++ .../ddi/client/DdiDefaultFeignClient.java | 36 ++-- .../hawkbit/ddi/client/DdiExampleClient.java | 189 +++++++++++++----- .../RootControllerResourceClient.java | 7 +- .../strategy/DoNotSaveArtifactsStrategy.java | 29 +++ .../client/strategy/PersistenceStrategy.java | 23 +++ .../strategy/SaveArtifactsStrategy.java | 45 +++++ .../DdiArtifactStoreControllerRestApi.java | 4 +- .../rest/api/DdiRootControllerRestApi.java | 3 +- .../resource/DdiArtifactStoreController.java | 5 +- .../ddi/rest/resource/DdiRootController.java | 5 +- .../rest/api/MgmtDownloadArtifactRestApi.java | 4 +- .../MgmtDownloadArtifactResource.java | 4 +- .../util/RestResourceConversionHelper.java | 10 +- 17 files changed, 396 insertions(+), 157 deletions(-) delete mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index bd87a65bc..d2e9f7f72 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -1,17 +1,17 @@ - - 4.0.0 - - org.eclipse.hawkbit - hawkbit-examples-parent - 0.2.0-SNAPSHOT - - hawkbit-example-ddi-client + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-examples-parent + 0.2.0-SNAPSHOT + + hawkbit-example-ddi-client - hawkbit-example-ddi-client - - + hawkbit-example-ddi-client + + org.springframework.cloud @@ -22,32 +22,32 @@ - - - - org.eclipse.hawkbit + + + + org.eclipse.hawkbit hawkbit-ddi-api ${project.version} - + org.springframework.cloud spring-cloud-starter-feign - + com.netflix.feign feign-core - + 8.14.2 - + com.netflix.feign feign-jackson - - 8.14.2 + + 8.14.2 - + javax.servlet javax.servlet-api @@ -56,11 +56,29 @@ org.springframework.plugin spring-plugin-core - - - junit - junit - test - - + + com.fasterxml.jackson.core + jackson-databind + + + + + commons-io + commons-io + 2.5 + + + + + + junit + junit + test + + + ru.yandex.qatools.allure + allure-junit-adaptor + test + + diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java deleted file mode 100644 index 86ccf195e..000000000 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/Application.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. - */ -package org.eclipse.hawkbit.ddi.client; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.cloud.netflix.feign.EnableFeignClients; -import org.springframework.context.annotation.Bean; - -import feign.Contract; - -/** - * @author Jonathan Knoblauch - * - */ -@SpringBootApplication -@EnableFeignClients -public class Application { - - @Autowired - private DdiExampleClient ddiClient; - - public static void main(final String[] args) { - new SpringApplicationBuilder().showBanner(false).sources(Application.class).run(args); - - // TODO .encoder(new JacksonEncoder()) - // .decoder(new ResponseEntityDecoder(new JacksonDecoder())); - - } - - // @Bean - // public BasicAuthRequestInterceptor basicAuthRequestInterceptor() { - // return new BasicAuthRequestInterceptor(configuration.getUsername(), - // configuration.getPassword()); - // } - - @Bean - public ApplicationJsonRequestHeaderInterceptor jsonHeaderInterceptor() { - return new ApplicationJsonRequestHeaderInterceptor(); - } - - @Bean - public Contract feignContract() { - return new IgnoreMultipleConsumersProducersSpringMvcContract(); - } - -} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java index df43444d6..97a3e4395 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java @@ -21,10 +21,11 @@ public class ApplicationJsonRequestHeaderInterceptor implements RequestIntercept @Override public void apply(final RequestTemplate template) { - template.header("Accept", MediaType.APPLICATION_JSON_VALUE); - // template.header("Accept", - // EnableHypermediaSupport.HypermediaType.HAL); + template.header("Accept", MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_OCTET_STREAM_VALUE, + MediaType.TEXT_PLAIN_VALUE); + // template.header("Accept", MediaType.APPLICATION_OCTET_STREAM_VALUE); template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); + } } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java new file mode 100644 index 000000000..90fc0e7bd --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.Collection; +import java.util.Map; + +import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; +import org.springframework.hateoas.hal.Jackson2HalModule; +import org.springframework.http.ResponseEntity; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; + +import feign.FeignException; +import feign.Response; +import feign.codec.DecodeException; +import feign.codec.Decoder; +import feign.jackson.JacksonDecoder; + +/** + * Decoder for DDI client. + * + */ +public class DdiDecoder implements Decoder { + + ObjectMapper mapper; + + public DdiDecoder() { + mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .registerModule(new Jackson2HalModule()); + } + + @Override + public Object decode(final Response response, final Type type) throws IOException, DecodeException, FeignException { + + final Map> header = response.headers(); + final String contentType = String.valueOf(header.get("Content-Type")); + // TODO parameter verwenden + if (contentType.equals("[application/octet-stream]")) { + return ResponseEntity.ok(response.body().asInputStream()); + } + final ResponseEntityDecoder responseEntityDecoder = new ResponseEntityDecoder(new JacksonDecoder(mapper)); + return responseEntityDecoder.decode(response, type); + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java index 73b1d4f81..d6e9dde96 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java @@ -1,20 +1,19 @@ /** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.ddi.client; import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; -import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; -import org.springframework.hateoas.hal.Jackson2HalModule; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; import feign.Feign; import feign.Feign.Builder; import feign.Logger; import feign.Logger.Level; -import feign.jackson.JacksonDecoder; import feign.jackson.JacksonEncoder; /** @@ -30,15 +29,18 @@ public class DdiDefaultFeignClient { private final String tenant; public DdiDefaultFeignClient(final String baseUrl, final String tenant) { - - final ObjectMapper mapper = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .registerModule(new Jackson2HalModule()); - feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) - .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()) - .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper))); + .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()).decoder(new DdiDecoder()); + + if (baseUrl == null) { + throw new IllegalStateException("A baseUrl has to be set"); + } + + if (tenant == null) { + throw new IllegalStateException("A tenant has to be set"); + } + this.baseUrl = baseUrl; this.tenant = tenant; @@ -50,10 +52,12 @@ public class DdiDefaultFeignClient { public RootControllerResourceClient getRootControllerResourceClient() { - String rootControllerResourcePath = this.baseUrl + RootControllerResourceClient.PATH; - rootControllerResourcePath = rootControllerResourcePath.replace("{tenant}", tenant); // TODO tenant null throw exception if (rootControllerResourceClient == null) { + + String rootControllerResourcePath = this.baseUrl + RootControllerResourceClient.PATH; + rootControllerResourcePath = rootControllerResourcePath.replace("{tenant}", tenant); + rootControllerResourceClient = feignBuilder.target(RootControllerResourceClient.class, rootControllerResourcePath); } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java index c0fb6ff9c..e0a01e814 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -1,26 +1,51 @@ /** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.ddi.client; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; import java.util.regex.Pattern; +import org.eclipse.hawkbit.ddi.client.strategy.PersistenceStrategy; +import org.eclipse.hawkbit.ddi.json.model.DdiActionFeedback; +import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; +import org.eclipse.hawkbit.ddi.json.model.DdiChunk; import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase; import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase; +import org.eclipse.hawkbit.ddi.json.model.DdiResult; +import org.eclipse.hawkbit.ddi.json.model.DdiResult.FinalResult; +import org.eclipse.hawkbit.ddi.json.model.DdiStatus; +import org.eclipse.hawkbit.ddi.json.model.DdiStatus.ExecutionStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.hateoas.Link; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -//@Component public class DdiExampleClient implements Runnable { + private static final Logger LOGGER = LoggerFactory.getLogger(DdiExampleClient.class); + private final String controllerId; + private Long actionIdOfLastInstalltion; + private final DdiDefaultFeignClient ddiDefaultFeignClient; + private final long pollingIntervalInMillis; + private final PersistenceStrategy persistenceStrategy; - final DdiDefaultFeignClient ddiDefaultFeignClient; - - public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant) { - super(); + public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, + final long pollingIntervalInMillis, final PersistenceStrategy persistenceStrategy) { this.controllerId = controllerId; - ddiDefaultFeignClient = new DdiDefaultFeignClient(baseUrl, tenant); + this.ddiDefaultFeignClient = new DdiDefaultFeignClient(baseUrl, tenant); + this.actionIdOfLastInstalltion = null; + this.pollingIntervalInMillis = pollingIntervalInMillis; + this.persistenceStrategy = persistenceStrategy; } @Override @@ -28,65 +53,139 @@ public class DdiExampleClient implements Runnable { ResponseEntity response; - for (int i = 0; i < 20; i++) { - + while (!Thread.currentThread().isInterrupted()) { response = ddiDefaultFeignClient.getRootControllerResourceClient().getControllerBase(controllerId); final DdiControllerBase controllerBase = response.getBody(); final Link controllerDeploymentBaseLink = controllerBase.getLink("deploymentBase"); if (controllerDeploymentBaseLink != null) { - // TOD actung download nur einmal starten - startDownload(controllerDeploymentBaseLink); + final Long actionId = getActionIdOutOfLink(controllerDeploymentBaseLink); + final Integer resource = getResourceOutOfLink(controllerDeploymentBaseLink); + if (actionId != actionIdOfLastInstalltion) { + + startDownload(actionId, resource); + + simulateSuccessfulInstallation(actionId); + + actionIdOfLastInstalltion = actionId; + } } try { - Thread.sleep(2000); + Thread.sleep(pollingIntervalInMillis); + System.out.println("polling ..."); } catch (final InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + LOGGER.error("Error during sleep"); } } } - public void startDdiClient() { - - // - - // TODO notify every 10 seconds on the rollout server - - // TODO if new update available -> start download and installation - // process - // report status messages - - } - - private void startDownload(final Link controllerDeploymentBaseLink) { - - // controllerDeploymentBaseLink. - - // final List varibles = controllerDeploymentBaseLink.get - - final String link = controllerDeploymentBaseLink.getHref(); - final String[] segs = link.split(Pattern.quote("/")); - final String[] ending = segs[8].split(Pattern.quote("?")); - final String actionId = ending[0]; - final String resource = ending[1].substring(2); + private void startDownload(final Long actionId, final Integer resource) { + // resource has not been downloaded and installed final ResponseEntity respone = ddiDefaultFeignClient.getRootControllerResourceClient() .getControllerBasedeploymentAction(controllerId, Long.valueOf(actionId), Integer.valueOf(resource)); - final DdiDeploymentBase ddiDeploymentBase = respone.getBody(); - - final Link downloadLink = ddiDeploymentBase.getDeployment().getChunks().get(0).getArtifacts().get(0) - .getLink("download"); - - System.out.println("download startet ...."); - + final List chunks = ddiDeploymentBase.getDeployment().getChunks(); + for (final DdiChunk chunk : chunks) { + final List artifactList = chunk.getArtifacts(); + final Link downloadLink = ddiDeploymentBase.getDeployment().getChunks().get(0).getArtifacts().get(0) + .getLink("download-http"); + final String[] downloadLinkSep = downloadLink.getHref().split(Pattern.quote("/")); + final Long softwareModuleId = Long.valueOf(downloadLinkSep[8]); + // download all artifacts + for (final DdiArtifact ddiArtifact : artifactList) { + downloadArtifact(actionId, softwareModuleId, ddiArtifact.getFilename()); + } + } } - private void startSimulatedInstalltion() { + private void downloadArtifact(final Long actionId, final Long softwareModuleId, final String artifact) { + sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, + "Starting download of artifact " + artifact); + System.out.println("Starting download for artifact " + artifact); + + final ResponseEntity responseDownloadArtifact = ddiDefaultFeignClient + .getRootControllerResourceClient().downloadArtifact(controllerId, softwareModuleId, artifact); + final HttpStatus statsuCode = responseDownloadArtifact.getStatusCode(); + System.out.println("Finished download with stataus " + statsuCode); + persistenceStrategy.handleInputStream(responseDownloadArtifact.getBody(), artifact); + + sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, "Downloaded artifact " + artifact); } + private void sendFeedBackMessage(final Long actionId, final ExecutionStatus executionStatus, + final FinalResult finalResult, final String message) { + + final DdiResult result = new DdiResult(finalResult, null); + final List details = new ArrayList<>(); + details.add(message); + final DdiStatus ddiStatus = new DdiStatus(executionStatus, result, details); + final String time = null; + final DdiActionFeedback feedback = new DdiActionFeedback(actionId, time, ddiStatus); + final ResponseEntity response = ddiDefaultFeignClient.getRootControllerResourceClient() + .postBasedeploymentActionFeedback(feedback, controllerId, actionId); + + final HttpStatus statsuCode = response.getStatusCode(); + System.out.println("Message send with stataus " + statsuCode); + } + + private void simulateSuccessfulInstallation(final Long actionId) { + sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.SUCESS, + "Simulated installation successful"); + } + + private Long getActionIdOutOfLink(final Link controllerDeploymentBaseLink) { + final String[] ending = splitControllerDeploymentBaseLinkInActionIdAndResource(controllerDeploymentBaseLink); + return Long.valueOf(ending[0]); + } + + private Integer getResourceOutOfLink(final Link controllerDeploymentBaseLink) { + final String[] ending = splitControllerDeploymentBaseLinkInActionIdAndResource(controllerDeploymentBaseLink); + return Integer.valueOf(ending[1].substring(2)); + } + + private String[] splitControllerDeploymentBaseLinkInActionIdAndResource(final Link controllerDeploymentBaseLink) { + final String link = controllerDeploymentBaseLink.getHref(); + final String[] segments = link.split(Pattern.quote("/")); + return segments[8].split(Pattern.quote("?")); + } + + // private RootControllerResourceClient getDownloadFeignClient() { + // + // final Builder feignBuilder = Feign.builder().contract(new + // IgnoreMultipleConsumersProducersSpringMvcContract()) + // .requestInterceptor(new + // ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) + // .logger(new Logger.ErrorLogger()).encoder(new + // JacksonEncoder()).decoder(new Decoder() { + // @Override + // public Object decode(final Response response, final Type type) + // throws IOException, DecodeException, FeignException { + // + // // TODO download + // final InputStream stream = response.body().asInputStream(); + // + // final FileSystem local = FileSystems.getDefault(); + // + // System.out.println("Status is " + response.status()); + // + // final ResponseEntity test = new ResponseEntity( + // HttpStatus.valueOf(response.status())); + // + // return test; + // } + // }); + // + // final RootControllerResourceClient rootControllerResourceClient = + // feignBuilder + // .target(RootControllerResourceClient.class, + // "http://localhost:8080/DEFAULT/controller/v1"); + // + // return rootControllerResourceClient; + // + // } + } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java index 69ae96d84..76867af98 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java @@ -1,5 +1,10 @@ /** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.ddi.client.resource; diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java new file mode 100644 index 000000000..15ea10829 --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client.strategy; + +import java.io.InputStream; + +/** + * @author Jonathan Knoblauch + * + */ +public class DoNotSaveArtifactsStrategy implements PersistenceStrategy { + + @Override + public String getPersistenceStrategy() { + return "nosave"; + } + + @Override + public void handleInputStream(final InputStream in, final String artifactName) { + // down but do not save + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java new file mode 100644 index 000000000..1c5c309e1 --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client.strategy; + +import java.io.InputStream; + +/** + * @author Jonathan Knoblauch + * + */ +public interface PersistenceStrategy { + + public String getPersistenceStrategy(); + + public void handleInputStream(InputStream in, String artifactName); + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java new file mode 100644 index 000000000..ad1c573b1 --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client.strategy; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import com.google.common.io.ByteStreams; + +/** + * @author Jonathan Knoblauch + * + */ +public class SaveArtifactsStrategy implements PersistenceStrategy { + + @Override + public String getPersistenceStrategy() { + + return "save"; + } + + @Override + public void handleInputStream(final InputStream in, final String artifactName) { + + final File file = new File("C:\\testdownload\\" + artifactName); + + try { + final OutputStream out = new FileOutputStream(file); + ByteStreams.copy(in, out); + } catch (final IOException e) { + e.printStackTrace(); + // TODO throw + } + } + +} diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java index ab49be1c1..dc8b4bf96 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ddi.rest.api; +import java.io.InputStream; + import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -42,7 +44,7 @@ public interface DdiArtifactStoreControllerRestApi { */ @RequestMapping(method = RequestMethod.GET, value = DdiRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + "/{fileName}") @ResponseBody - public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, + public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, @AuthenticationPrincipal final String targetid); 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 8ba4068a7..45382faf5 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 @@ -3,6 +3,7 @@ */ package org.eclipse.hawkbit.ddi.rest.api; +import java.io.InputStream; import java.lang.annotation.Target; import java.util.List; @@ -80,7 +81,7 @@ public interface DdiRootControllerRestApi { * {@link HttpStatus#PARTIAL_CONTENT}. */ @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/{fileName}") - ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, + ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("fileName") final String fileName); diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index b2954d363..8552e686d 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ddi.rest.resource; import java.io.IOException; +import java.io.InputStream; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -68,7 +69,7 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes private RequestResponseContextHolder requestResponseContextHolder; @Override - public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, + public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, @AuthenticationPrincipal final String targetid) { final List foundArtifacts = artifactManagement.findLocalArtifactByFilename(fileName); @@ -80,7 +81,7 @@ public class DdiArtifactStoreController implements DdiArtifactStoreControllerRes if (foundArtifacts.size() > 1) { LOG.warn("Software artifact name {} is not unique. We will use the first entry.", fileName); } - ResponseEntity result; + ResponseEntity result; final LocalArtifact artifact = foundArtifacts.get(0); final String ifMatch = requestResponseContextHolder.getHttpServletRequest().getHeader("If-Match"); 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 3df0916c0..c3aea102e 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 @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ddi.rest.resource; import java.io.IOException; +import java.io.InputStream; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -138,10 +139,10 @@ public class DdiRootController implements DdiRootControllerRestApi { } @Override - public ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, + public ResponseEntity downloadArtifact(@PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("fileName") final String fileName) { - ResponseEntity result; + ResponseEntity result; final Target target = controllerManagement.updateLastTargetQuery(targetid, IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java index 4b50dc8f5..ea6dccc7e 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadArtifactRestApi.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.mgmt.rest.api; +import java.io.InputStream; + import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -36,7 +38,7 @@ public interface MgmtDownloadArtifactRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/artifacts/{artifactId}/download") @ResponseBody - ResponseEntity downloadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + ResponseEntity downloadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("artifactId") final Long artifactId); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java index de01a917a..077efa84c 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.mgmt.rest.resource; +import java.io.InputStream; + import javax.servlet.http.HttpServletRequest; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; @@ -60,7 +62,7 @@ public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi */ @Override @ResponseBody - public ResponseEntity downloadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + public ResponseEntity downloadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("artifactId") final Long artifactId) { final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId); diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java index 827506048..96f30cc87 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java @@ -61,7 +61,7 @@ public final class RestResourceConversionHelper { * * @return http code */ - public static ResponseEntity writeFileResponse(final LocalArtifact artifact, + public static ResponseEntity writeFileResponse(final LocalArtifact artifact, final HttpServletResponse servletResponse, final HttpServletRequest request, final DbArtifact file) { return writeFileResponse(artifact, servletResponse, request, file, null, null); } @@ -96,11 +96,11 @@ public final class RestResourceConversionHelper { * * @see https://tools.ietf.org/html/rfc7233 */ - public static ResponseEntity writeFileResponse(final LocalArtifact artifact, + public static ResponseEntity writeFileResponse(final LocalArtifact artifact, final HttpServletResponse response, final HttpServletRequest request, final DbArtifact file, final CacheWriteNotify cacheWriteNotify, final Long statusId) { - ResponseEntity result = null; + ResponseEntity result = null; final String etag = artifact.getSha1Hash(); final Long lastModified = artifact.getLastModifiedAt() != null ? artifact.getLastModifiedAt() @@ -181,9 +181,9 @@ public final class RestResourceConversionHelper { } } - private static ResponseEntity extractRange(final HttpServletResponse response, final long length, + private static ResponseEntity extractRange(final HttpServletResponse response, final long length, final List ranges, final String range) { - ResponseEntity result = null; + ResponseEntity result = null; if (ranges.isEmpty()) { for (final String part : range.substring(6).split(",")) { long start = sublong(part, 0, part.indexOf('-')); From d67e0c6381535716c23aaa5bff06bd3720a9bcf0 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 11:06:28 +0200 Subject: [PATCH 038/371] Added maven dependency guava to pom Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-ddi-client/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index d2e9f7f72..7aa779493 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -67,6 +67,10 @@ commons-io 2.5 + + com.google.guava + guava + From 05d9536caef5374bb3eb383ee2dcb51d83b84357 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 11:14:23 +0200 Subject: [PATCH 039/371] Comment test out and add null check for tenant and baseUrl Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-ddi-client/pom.xml | 6 ++++++ .../ddi/client/DdiDefaultFeignClient.java | 18 ++++-------------- .../hawkbit/example/ddi/client/AppTest.java | 14 ++++++++------ 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index 7aa779493..f2eb9bb16 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -71,6 +71,12 @@ com.google.guava guava + + commons-lang + commons-lang + 2.3 + + diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java index d6e9dde96..7a042d7eb 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.ddi.client; +import org.apache.commons.lang.Validate; import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; import feign.Feign; @@ -17,7 +18,7 @@ import feign.Logger.Level; import feign.jackson.JacksonEncoder; /** - * @author Jonathan Knoblauch + * TODO * */ public class DdiDefaultFeignClient { @@ -32,18 +33,10 @@ public class DdiDefaultFeignClient { feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()).decoder(new DdiDecoder()); - - if (baseUrl == null) { - throw new IllegalStateException("A baseUrl has to be set"); - } - - if (tenant == null) { - throw new IllegalStateException("A tenant has to be set"); - } - + Validate.notNull(baseUrl, "A baseUrl has to be set"); + Validate.notNull(tenant, "A tenant has to be set"); this.baseUrl = baseUrl; this.tenant = tenant; - } public Builder getFeignBuilder() { @@ -52,12 +45,9 @@ public class DdiDefaultFeignClient { public RootControllerResourceClient getRootControllerResourceClient() { - // TODO tenant null throw exception if (rootControllerResourceClient == null) { - String rootControllerResourcePath = this.baseUrl + RootControllerResourceClient.PATH; rootControllerResourcePath = rootControllerResourcePath.replace("{tenant}", tenant); - rootControllerResourceClient = feignBuilder.target(RootControllerResourceClient.class, rootControllerResourcePath); } diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java index 78608b11d..09f82fa6d 100644 --- a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java +++ b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java @@ -1,6 +1,5 @@ package org.eclipse.hawkbit.example.ddi.client; -import org.eclipse.hawkbit.ddi.client.DdiExampleClient; import org.junit.Test; /** @@ -10,11 +9,14 @@ public class AppTest { @Test public void AppTest() { - - final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "jktest", "DEFAULT"); - ddiClient.run(); - - System.out.println("next steps........................"); + // final DdiExampleClient ddiClient = new + // DdiExampleClient("http://localhost:8080/", "Einstein1", "DEFAULT", + // 2000, + // new SaveArtifactsStrategy()); + // final Thread thread = new Thread(ddiClient); + // thread.run(); + // + // System.out.println("next steps........................"); } } From 99f0a4e882d01716bc5fd96691fc61def98c82fa Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 14:08:42 +0200 Subject: [PATCH 040/371] Extenden functions of DDI client - polling time is taken form server - client can be stopped my call from out side Signed-off-by: Jonathan Philip Knoblauch --- ...plicationJsonRequestHeaderInterceptor.java | 2 - .../hawkbit/ddi/client/DdiDecoder.java | 4 +- .../hawkbit/ddi/client/DdiExampleClient.java | 82 ++++++++----------- .../strategy/DoNotSaveArtifactsStrategy.java | 7 +- .../client/strategy/PersistenceStrategy.java | 5 +- .../strategy/SaveArtifactsStrategy.java | 23 ++---- 6 files changed, 43 insertions(+), 80 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java index 97a3e4395..5f7f46013 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java @@ -23,9 +23,7 @@ public class ApplicationJsonRequestHeaderInterceptor implements RequestIntercept public void apply(final RequestTemplate template) { template.header("Accept", MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_OCTET_STREAM_VALUE, MediaType.TEXT_PLAIN_VALUE); - // template.header("Accept", MediaType.APPLICATION_OCTET_STREAM_VALUE); template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); - } } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java index 90fc0e7bd..47a59a667 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java @@ -33,6 +33,7 @@ import feign.jackson.JacksonDecoder; public class DdiDecoder implements Decoder { ObjectMapper mapper; + private final String octentTypeOctetStream = "[application/octet-stream]"; public DdiDecoder() { mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) @@ -44,8 +45,7 @@ public class DdiDecoder implements Decoder { final Map> header = response.headers(); final String contentType = String.valueOf(header.get("Content-Type")); - // TODO parameter verwenden - if (contentType.equals("[application/octet-stream]")) { + if (contentType.equals(octentTypeOctetStream)) { return ResponseEntity.ok(response.body().asInputStream()); } final ResponseEntityDecoder responseEntityDecoder = new ResponseEntityDecoder(new JacksonDecoder(mapper)); diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java index e0a01e814..ae33f1c39 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -8,7 +8,9 @@ */ package org.eclipse.hawkbit.ddi.client; +import java.io.IOException; import java.io.InputStream; +import java.time.LocalTime; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; @@ -36,9 +38,11 @@ public class DdiExampleClient implements Runnable { private final String controllerId; private Long actionIdOfLastInstalltion; private final DdiDefaultFeignClient ddiDefaultFeignClient; - private final long pollingIntervalInMillis; + private long pollingIntervalInMillis; private final PersistenceStrategy persistenceStrategy; + private STATUS clientStatus; + public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, final long pollingIntervalInMillis, final PersistenceStrategy persistenceStrategy) { this.controllerId = controllerId; @@ -46,27 +50,28 @@ public class DdiExampleClient implements Runnable { this.actionIdOfLastInstalltion = null; this.pollingIntervalInMillis = pollingIntervalInMillis; this.persistenceStrategy = persistenceStrategy; + this.clientStatus = STATUS.DOWN; } @Override public void run() { + clientStatus = STATUS.UP; + ResponseEntity response = ddiDefaultFeignClient.getRootControllerResourceClient() + .getControllerBase(controllerId); + final String pollingTime = response.getBody().getConfig().getPolling().getSleep(); + final LocalTime localtime = LocalTime.parse(pollingTime); + pollingIntervalInMillis = localtime.toNanoOfDay(); - ResponseEntity response; - - while (!Thread.currentThread().isInterrupted()) { + while (clientStatus == STATUS.UP) { response = ddiDefaultFeignClient.getRootControllerResourceClient().getControllerBase(controllerId); - final DdiControllerBase controllerBase = response.getBody(); - final Link controllerDeploymentBaseLink = controllerBase.getLink("deploymentBase"); + // final DdiControllerBase controllerBase = response.getBody(); + final Link controllerDeploymentBaseLink = response.getBody().getLink("deploymentBase"); if (controllerDeploymentBaseLink != null) { final Long actionId = getActionIdOutOfLink(controllerDeploymentBaseLink); final Integer resource = getResourceOutOfLink(controllerDeploymentBaseLink); if (actionId != actionIdOfLastInstalltion) { - startDownload(actionId, resource); - - simulateSuccessfulInstallation(actionId); - actionIdOfLastInstalltion = actionId; } } @@ -81,9 +86,12 @@ public class DdiExampleClient implements Runnable { } + public void stop() { + clientStatus = STATUS.DOWN; + } + private void startDownload(final Long actionId, final Integer resource) { - // resource has not been downloaded and installed final ResponseEntity respone = ddiDefaultFeignClient.getRootControllerResourceClient() .getControllerBasedeploymentAction(controllerId, Long.valueOf(actionId), Integer.valueOf(resource)); final DdiDeploymentBase ddiDeploymentBase = respone.getBody(); @@ -94,7 +102,6 @@ public class DdiExampleClient implements Runnable { .getLink("download-http"); final String[] downloadLinkSep = downloadLink.getHref().split(Pattern.quote("/")); final Long softwareModuleId = Long.valueOf(downloadLinkSep[8]); - // download all artifacts for (final DdiArtifact ddiArtifact : artifactList) { downloadArtifact(actionId, softwareModuleId, ddiArtifact.getFilename()); } @@ -111,9 +118,17 @@ public class DdiExampleClient implements Runnable { .getRootControllerResourceClient().downloadArtifact(controllerId, softwareModuleId, artifact); final HttpStatus statsuCode = responseDownloadArtifact.getStatusCode(); System.out.println("Finished download with stataus " + statsuCode); - persistenceStrategy.handleInputStream(responseDownloadArtifact.getBody(), artifact); + try { + persistenceStrategy.handleInputStream(responseDownloadArtifact.getBody(), artifact); + } catch (final IOException e) { + sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.FAILURE, + "Downloaded of artifact " + artifact + " failed"); + return; + } sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, "Downloaded artifact " + artifact); + + simulateSuccessfulInstallation(actionId); } private void sendFeedBackMessage(final Long actionId, final ExecutionStatus executionStatus, @@ -127,14 +142,12 @@ public class DdiExampleClient implements Runnable { final DdiActionFeedback feedback = new DdiActionFeedback(actionId, time, ddiStatus); final ResponseEntity response = ddiDefaultFeignClient.getRootControllerResourceClient() .postBasedeploymentActionFeedback(feedback, controllerId, actionId); - final HttpStatus statsuCode = response.getStatusCode(); System.out.println("Message send with stataus " + statsuCode); } private void simulateSuccessfulInstallation(final Long actionId) { - sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.SUCESS, - "Simulated installation successful"); + sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.SUCESS, "Simulated installation successful"); } private Long getActionIdOutOfLink(final Link controllerDeploymentBaseLink) { @@ -153,39 +166,8 @@ public class DdiExampleClient implements Runnable { return segments[8].split(Pattern.quote("?")); } - // private RootControllerResourceClient getDownloadFeignClient() { - // - // final Builder feignBuilder = Feign.builder().contract(new - // IgnoreMultipleConsumersProducersSpringMvcContract()) - // .requestInterceptor(new - // ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) - // .logger(new Logger.ErrorLogger()).encoder(new - // JacksonEncoder()).decoder(new Decoder() { - // @Override - // public Object decode(final Response response, final Type type) - // throws IOException, DecodeException, FeignException { - // - // // TODO download - // final InputStream stream = response.body().asInputStream(); - // - // final FileSystem local = FileSystems.getDefault(); - // - // System.out.println("Status is " + response.status()); - // - // final ResponseEntity test = new ResponseEntity( - // HttpStatus.valueOf(response.status())); - // - // return test; - // } - // }); - // - // final RootControllerResourceClient rootControllerResourceClient = - // feignBuilder - // .target(RootControllerResourceClient.class, - // "http://localhost:8080/DEFAULT/controller/v1"); - // - // return rootControllerResourceClient; - // - // } + public enum STATUS { + UP, DOWN; + } } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java index 15ea10829..0e9ea82e1 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java @@ -16,14 +16,9 @@ import java.io.InputStream; */ public class DoNotSaveArtifactsStrategy implements PersistenceStrategy { - @Override - public String getPersistenceStrategy() { - return "nosave"; - } - @Override public void handleInputStream(final InputStream in, final String artifactName) { - // down but do not save + // do nothing } } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java index 1c5c309e1..c8080a1d6 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.ddi.client.strategy; +import java.io.IOException; import java.io.InputStream; /** @@ -16,8 +17,6 @@ import java.io.InputStream; */ public interface PersistenceStrategy { - public String getPersistenceStrategy(); - - public void handleInputStream(InputStream in, String artifactName); + public void handleInputStream(InputStream in, String artifactName) throws IOException; } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java index ad1c573b1..dbf13ef9c 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java @@ -15,6 +15,7 @@ import java.io.InputStream; import java.io.OutputStream; import com.google.common.io.ByteStreams; +import com.google.common.io.Files; /** * @author Jonathan Knoblauch @@ -23,23 +24,11 @@ import com.google.common.io.ByteStreams; public class SaveArtifactsStrategy implements PersistenceStrategy { @Override - public String getPersistenceStrategy() { - - return "save"; - } - - @Override - public void handleInputStream(final InputStream in, final String artifactName) { - - final File file = new File("C:\\testdownload\\" + artifactName); - - try { - final OutputStream out = new FileOutputStream(file); - ByteStreams.copy(in, out); - } catch (final IOException e) { - e.printStackTrace(); - // TODO throw - } + public void handleInputStream(final InputStream in, final String artifactName) throws IOException { + final File tempDir = Files.createTempDir(); + final File file = new File(tempDir + "\\" + artifactName); + final OutputStream out = new FileOutputStream(file); + ByteStreams.copy(in, out); } } From 8addb05f090f687b0847df861ebd0b8c24d53018 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 14:57:39 +0200 Subject: [PATCH 041/371] Added javadoc and logger to ddi client Signed-off-by: Jonathan Philip Knoblauch --- .../ddi/client/DdiDefaultFeignClient.java | 13 ++++- .../hawkbit/ddi/client/DdiExampleClient.java | 54 ++++++++++++------- .../strategy/DoNotSaveArtifactsStrategy.java | 7 +-- .../client/strategy/PersistenceStrategy.java | 12 ++++- .../strategy/SaveArtifactsStrategy.java | 4 +- 5 files changed, 61 insertions(+), 29 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java index 7a042d7eb..7c4c87708 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java @@ -18,8 +18,7 @@ import feign.Logger.Level; import feign.jackson.JacksonEncoder; /** - * TODO - * + * Default implementation of DDI client. */ public class DdiDefaultFeignClient { @@ -39,10 +38,20 @@ public class DdiDefaultFeignClient { this.tenant = tenant; } + /** + * Get the feign builder. + * + * @return the feign builder + */ public Builder getFeignBuilder() { return feignBuilder; } + /** + * Get the rootController resource client. + * + * @return the rootController resource client + */ public RootControllerResourceClient getRootControllerResourceClient() { if (rootControllerResourceClient == null) { diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java index ae33f1c39..ad9f086bb 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ddi.client; import java.io.IOException; import java.io.InputStream; +import java.time.LocalDateTime; import java.time.LocalTime; import java.util.ArrayList; import java.util.List; @@ -31,6 +32,9 @@ import org.springframework.hateoas.Link; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +/** + * DDI example client based on defualt DDI feign client. + */ public class DdiExampleClient implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(DdiExampleClient.class); @@ -38,17 +42,26 @@ public class DdiExampleClient implements Runnable { private final String controllerId; private Long actionIdOfLastInstalltion; private final DdiDefaultFeignClient ddiDefaultFeignClient; - private long pollingIntervalInMillis; private final PersistenceStrategy persistenceStrategy; - private STATUS clientStatus; + /** + * Constructor for the DDI example client. + * + * @param baseUrl + * the base url of the hawkBit server + * @param controllerId + * the controller id that will be simulated + * @param tenant + * the tenant + * @param persistenceStrategy + * the persistence strategy for downloading artifacts + */ public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, - final long pollingIntervalInMillis, final PersistenceStrategy persistenceStrategy) { + final PersistenceStrategy persistenceStrategy) { this.controllerId = controllerId; this.ddiDefaultFeignClient = new DdiDefaultFeignClient(baseUrl, tenant); this.actionIdOfLastInstalltion = null; - this.pollingIntervalInMillis = pollingIntervalInMillis; this.persistenceStrategy = persistenceStrategy; this.clientStatus = STATUS.DOWN; } @@ -56,15 +69,13 @@ public class DdiExampleClient implements Runnable { @Override public void run() { clientStatus = STATUS.UP; - ResponseEntity response = ddiDefaultFeignClient.getRootControllerResourceClient() - .getControllerBase(controllerId); - final String pollingTime = response.getBody().getConfig().getPolling().getSleep(); - final LocalTime localtime = LocalTime.parse(pollingTime); - pollingIntervalInMillis = localtime.toNanoOfDay(); - + ResponseEntity response; while (clientStatus == STATUS.UP) { + LOGGER.info(" Controller {} polling from hawkBit server", controllerId); response = ddiDefaultFeignClient.getRootControllerResourceClient().getControllerBase(controllerId); - // final DdiControllerBase controllerBase = response.getBody(); + final String pollingTime = response.getBody().getConfig().getPolling().getSleep(); + final LocalTime localtime = LocalTime.parse(pollingTime); + final long pollingIntervalInMillis = localtime.toNanoOfDay(); final Link controllerDeploymentBaseLink = response.getBody().getLink("deploymentBase"); if (controllerDeploymentBaseLink != null) { @@ -78,14 +89,15 @@ public class DdiExampleClient implements Runnable { try { Thread.sleep(pollingIntervalInMillis); - System.out.println("polling ..."); } catch (final InterruptedException e) { LOGGER.error("Error during sleep"); } } - } + /** + * Stop the DDI example client + */ public void stop() { clientStatus = STATUS.DOWN; } @@ -112,12 +124,12 @@ public class DdiExampleClient implements Runnable { sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, "Starting download of artifact " + artifact); - System.out.println("Starting download for artifact " + artifact); + LOGGER.info("Starting download of artifact " + artifact); final ResponseEntity responseDownloadArtifact = ddiDefaultFeignClient .getRootControllerResourceClient().downloadArtifact(controllerId, softwareModuleId, artifact); final HttpStatus statsuCode = responseDownloadArtifact.getStatusCode(); - System.out.println("Finished download with stataus " + statsuCode); + LOGGER.info("Finished download with stataus {}", statsuCode); try { persistenceStrategy.handleInputStream(responseDownloadArtifact.getBody(), artifact); @@ -138,12 +150,11 @@ public class DdiExampleClient implements Runnable { final List details = new ArrayList<>(); details.add(message); final DdiStatus ddiStatus = new DdiStatus(executionStatus, result, details); - final String time = null; + final String time = String.valueOf(LocalDateTime.now()); final DdiActionFeedback feedback = new DdiActionFeedback(actionId, time, ddiStatus); - final ResponseEntity response = ddiDefaultFeignClient.getRootControllerResourceClient() - .postBasedeploymentActionFeedback(feedback, controllerId, actionId); - final HttpStatus statsuCode = response.getStatusCode(); - System.out.println("Message send with stataus " + statsuCode); + ddiDefaultFeignClient.getRootControllerResourceClient().postBasedeploymentActionFeedback(feedback, controllerId, + actionId); + LOGGER.info("Sent feedback message to HaktBit"); } private void simulateSuccessfulInstallation(final Long actionId) { @@ -166,6 +177,9 @@ public class DdiExampleClient implements Runnable { return segments[8].split(Pattern.quote("?")); } + /** + * Enum for DDI running status. + */ public enum STATUS { UP, DOWN; diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java index 0e9ea82e1..80743c99e 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java @@ -8,16 +8,17 @@ */ package org.eclipse.hawkbit.ddi.client.strategy; +import java.io.IOException; import java.io.InputStream; /** - * @author Jonathan Knoblauch - * + * Implementation of {@link PersistenceStrategy} for not downloading any + * artifacts. */ public class DoNotSaveArtifactsStrategy implements PersistenceStrategy { @Override - public void handleInputStream(final InputStream in, final String artifactName) { + public void handleInputStream(final InputStream in, final String artifactName) throws IOException { // do nothing } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java index c8080a1d6..e5a3a60d0 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java @@ -12,11 +12,19 @@ import java.io.IOException; import java.io.InputStream; /** - * @author Jonathan Knoblauch - * + * Interface of persistence strategy. */ public interface PersistenceStrategy { + /** + * Method handling the artifact download. + * + * @param in + * the input stream + * @param artifactName + * the name of the artifact + * @throws IOException + */ public void handleInputStream(InputStream in, String artifactName) throws IOException; } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java index dbf13ef9c..2ae7987cb 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java @@ -18,8 +18,8 @@ import com.google.common.io.ByteStreams; import com.google.common.io.Files; /** - * @author Jonathan Knoblauch - * + * Implementation of {@link PersistenceStrategy} for downloading artifacts to + * the temp directory. */ public class SaveArtifactsStrategy implements PersistenceStrategy { From c2649b4b54dbeb7eaee7c3a4b6e5b7d0301aafaf Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 26 Apr 2016 16:19:37 +0200 Subject: [PATCH 042/371] Add example feign core project add system client api Signed-off-by: SirWayne --- examples/hawkbit-example-ddi-client/pom.xml | 5 + ...ava => DdiAcceptedRequestInterceptor.java} | 56 ++++--- .../ddi/client/DdiDefaultFeignClient.java | 5 +- .../hawkbit-example-feign-core-client/pom.xml | 47 ++++++ ...plicationJsonRequestHeaderInterceptor.java | 56 +++---- .../core/client/FeignClientConfiguration.java | 32 ++++ ...leConsumersProducersSpringMvcContract.java | 86 +++++----- examples/hawkbit-mgmt-api-client/pom.xml | 10 ++ .../hawkbit/mgmt/client/Application.java | 13 +- ...leConsumersProducersSpringMvcContract.java | 43 ----- .../mgmt/client/MgmtDefaultFeignClient.java | 149 ------------------ .../MgmtSoftwareModuleClientResource.java | 16 ++ .../client/resource/SystemClientResource.java | 21 +++ .../SystemManagementClientResource.java | 22 +++ .../json/model/artifact/MgmtArtifact.java | 7 +- ...Rest.java => MgmtDistributionSetType.java} | 2 +- .../api/MgmtDistributionSetTypeRestApi.java | 10 +- .../mgmt/rest/api/MgmtDownloadRestApi.java | 5 +- .../rest/api/MgmtSoftwareModuleRestApi.java | 3 +- .../MgmtDistributionSetTypeMapper.java | 14 +- .../MgmtDistributionSetTypeResource.java | 12 +- .../rest/resource/MgmtDownloadResource.java | 15 +- hawkbit-repository/pom.xml | 6 - pom.xml | 2 +- 24 files changed, 294 insertions(+), 343 deletions(-) rename examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/{ApplicationJsonRequestHeaderInterceptor.java => DdiAcceptedRequestInterceptor.java} (69%) create mode 100644 examples/hawkbit-example-feign-core-client/pom.xml rename examples/{hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt => hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core}/client/ApplicationJsonRequestHeaderInterceptor.java (92%) create mode 100644 examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java rename examples/{hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi => hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core}/client/IgnoreMultipleConsumersProducersSpringMvcContract.java (94%) delete mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/IgnoreMultipleConsumersProducersSpringMvcContract.java delete mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java create mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java create mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java rename hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/{MgmtDistributionSetTypeRest.java => MgmtDistributionSetType.java} (95%) diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index f2eb9bb16..c6acefb00 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -24,6 +24,11 @@ + + org.eclipse.hawkbit + hawkbit-example-feign-core-client + ${project.version} + org.eclipse.hawkbit hawkbit-ddi-api diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java similarity index 69% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java rename to examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java index 5f7f46013..962ffd7a6 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java @@ -1,29 +1,27 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client; - -import org.springframework.http.MediaType; - -import feign.RequestInterceptor; -import feign.RequestTemplate; - -/** - * An feign request interceptor to set the defined {@code Accept} and - * {@code Content-Type} headers for each request to {@code application/json}. - */ -public class ApplicationJsonRequestHeaderInterceptor implements RequestInterceptor { - - @Override - public void apply(final RequestTemplate template) { - template.header("Accept", MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_OCTET_STREAM_VALUE, - MediaType.TEXT_PLAIN_VALUE); - template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); - } - -} +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client; + +import org.springframework.http.MediaType; + +import feign.RequestInterceptor; +import feign.RequestTemplate; + +/** + * + * + */ +public class DdiAcceptedRequestInterceptor implements RequestInterceptor { + + @Override + public void apply(final RequestTemplate template) { + template.header("Accept", MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_OCTET_STREAM_VALUE, + MediaType.TEXT_PLAIN_VALUE); + } +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java index 7c4c87708..c9af1cb09 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java @@ -10,6 +10,8 @@ package org.eclipse.hawkbit.ddi.client; import org.apache.commons.lang.Validate; import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; +import org.eclipse.hawkbit.feign.core.client.ApplicationJsonRequestHeaderInterceptor; +import org.eclipse.hawkbit.feign.core.client.IgnoreMultipleConsumersProducersSpringMvcContract; import feign.Feign; import feign.Feign.Builder; @@ -30,7 +32,8 @@ public class DdiDefaultFeignClient { public DdiDefaultFeignClient(final String baseUrl, final String tenant) { feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) - .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) + .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()) + .requestInterceptor(new DdiAcceptedRequestInterceptor()).logLevel(Level.FULL) .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()).decoder(new DdiDecoder()); Validate.notNull(baseUrl, "A baseUrl has to be set"); Validate.notNull(tenant, "A tenant has to be set"); diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-feign-core-client/pom.xml new file mode 100644 index 000000000..e9981829c --- /dev/null +++ b/examples/hawkbit-example-feign-core-client/pom.xml @@ -0,0 +1,47 @@ + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-examples-parent + 0.2.0-SNAPSHOT + + + hawkbit-example-feign-core-client + hawkbit-example-feign-core-client + + + + + org.springframework.cloud + spring-cloud-netflix + 1.0.7.RELEASE + pom + import + + + + + + + com.netflix.feign + feign-core + + + 8.14.2 + + + com.netflix.feign + feign-jackson + 8.14.2 + + + com.fasterxml.jackson.core + jackson-databind + + + org.springframework.cloud + spring-cloud-starter-feign + + + diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java similarity index 92% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ApplicationJsonRequestHeaderInterceptor.java rename to examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java index 75f3b0dd1..ac1353fa1 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ApplicationJsonRequestHeaderInterceptor.java +++ b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java @@ -1,28 +1,28 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.mgmt.client; - -import org.springframework.http.MediaType; - -import feign.RequestInterceptor; -import feign.RequestTemplate; - -/** - * An feign request interceptor to set the defined {@code Accept} and - * {@code Content-Type} headers for each request to {@code application/json}. - */ -public class ApplicationJsonRequestHeaderInterceptor implements RequestInterceptor { - - @Override - public void apply(final RequestTemplate template) { - template.header("Accept", MediaType.APPLICATION_JSON_VALUE); - template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); - } - -} +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.feign.core.client; + +import org.springframework.http.MediaType; + +import feign.RequestInterceptor; +import feign.RequestTemplate; + +/** + * An feign request interceptor to set the defined {@code Accept} and + * {@code Content-Type} headers for each request to {@code application/json}. + */ +public class ApplicationJsonRequestHeaderInterceptor implements RequestInterceptor { + + @Override + public void apply(final RequestTemplate template) { + template.header("Accept", MediaType.APPLICATION_JSON_VALUE); + template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); + } + +} diff --git a/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java new file mode 100644 index 000000000..83bee36b1 --- /dev/null +++ b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.feign.core.client; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import feign.Contract; + +/** + * + * + */ +@Configuration +public class FeignClientConfiguration { + + @Bean + public ApplicationJsonRequestHeaderInterceptor jsonHeaderInterceptor() { + return new ApplicationJsonRequestHeaderInterceptor(); + } + + @Bean + public Contract feignContract() { + return new IgnoreMultipleConsumersProducersSpringMvcContract(); + } +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java similarity index 94% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java rename to examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java index c1c24b9ec..e7d8890b1 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java +++ b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java @@ -1,43 +1,43 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.netflix.feign.support.SpringMvcContract; - -import feign.MethodMetadata; - -/** - * Own implementation of the {@link SpringMvcContract} which catches the - * {@link IllegalStateException} which occurs due multiple produces and consumes - * values in the request-mapping - * annoation.https://github.com/spring-cloud/spring-cloud-netflix/issues/808 - */ -public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvcContract { - - private static final Logger LOGGER = LoggerFactory - .getLogger(IgnoreMultipleConsumersProducersSpringMvcContract.class); - - @Override - protected void processAnnotationOnMethod(final MethodMetadata data, final Annotation methodAnnotation, - final Method method) { - try { - super.processAnnotationOnMethod(data, methodAnnotation, method); - } catch (final IllegalStateException e) { - // ignore illegalstateexception here because it's thrown because of - // multiple consumers and produces, see - // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 - LOGGER.trace(e.getMessage(), e); - } - } -} +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.feign.core.client; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.netflix.feign.support.SpringMvcContract; + +import feign.MethodMetadata; + +/** + * Own implementation of the {@link SpringMvcContract} which catches the + * {@link IllegalStateException} which occurs due multiple produces and consumes + * values in the request-mapping + * annoation.https://github.com/spring-cloud/spring-cloud-netflix/issues/808 + */ +public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvcContract { + + private static final Logger LOGGER = LoggerFactory + .getLogger(IgnoreMultipleConsumersProducersSpringMvcContract.class); + + @Override + protected void processAnnotationOnMethod(final MethodMetadata data, final Annotation methodAnnotation, + final Method method) { + try { + super.processAnnotationOnMethod(data, methodAnnotation, method); + } catch (final IllegalStateException e) { + // ignore illegalstateexception here because it's thrown because of + // multiple consumers and produces, see + // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 + LOGGER.trace(e.getMessage(), e); + } + } +} diff --git a/examples/hawkbit-mgmt-api-client/pom.xml b/examples/hawkbit-mgmt-api-client/pom.xml index 70b394ac4..1b7ff72ec 100644 --- a/examples/hawkbit-mgmt-api-client/pom.xml +++ b/examples/hawkbit-mgmt-api-client/pom.xml @@ -55,11 +55,21 @@ + + org.eclipse.hawkbit + hawkbit-example-feign-core-client + ${project.version} + org.eclipse.hawkbit hawkbit-mgmt-api ${project.version} + + org.eclipse.hawkbit + hawkbit-system-api + ${project.version} + com.netflix.feign feign-core diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java index 27584b50a..15d6ff10a 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java @@ -17,13 +17,14 @@ import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; -import feign.Contract; import feign.auth.BasicAuthRequestInterceptor; @SpringBootApplication @EnableFeignClients @EnableConfigurationProperties(ClientConfigurationProperties.class) +@Configuration public class Application implements CommandLineRunner { @Autowired @@ -56,16 +57,6 @@ public class Application implements CommandLineRunner { return new BasicAuthRequestInterceptor(configuration.getUsername(), configuration.getPassword()); } - @Bean - public ApplicationJsonRequestHeaderInterceptor jsonHeaderInterceptor() { - return new ApplicationJsonRequestHeaderInterceptor(); - } - - @Bean - public Contract feignContract() { - return new IgnoreMultipleConsumersProducersSpringMvcContract(); - } - private boolean containsArg(final String containsArg, final String... args) { for (final String arg : args) { if (arg.equalsIgnoreCase(containsArg)) { diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/IgnoreMultipleConsumersProducersSpringMvcContract.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/IgnoreMultipleConsumersProducersSpringMvcContract.java deleted file mode 100644 index c796aa019..000000000 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/IgnoreMultipleConsumersProducersSpringMvcContract.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.mgmt.client; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.netflix.feign.support.SpringMvcContract; - -import feign.MethodMetadata; - -/** - * Own implementation of the {@link SpringMvcContract} which catches the - * {@link IllegalStateException} which occurs due multiple produces and consumes - * values in the request-mapping - * annoation.https://github.com/spring-cloud/spring-cloud-netflix/issues/808 - */ -public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvcContract { - - private static final Logger LOGGER = LoggerFactory - .getLogger(IgnoreMultipleConsumersProducersSpringMvcContract.class); - - @Override - protected void processAnnotationOnMethod(final MethodMetadata data, final Annotation methodAnnotation, - final Method method) { - try { - super.processAnnotationOnMethod(data, methodAnnotation, method); - } catch (final IllegalStateException e) { - // ignore illegalstateexception here because it's thrown because of - // multiple consumers and produces, see - // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 - LOGGER.trace(e.getMessage(), e); - } - } -} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java deleted file mode 100644 index 6425bad4d..000000000 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java +++ /dev/null @@ -1,149 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.mgmt.client; - -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetTagClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetTypeClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDownloadArtifactClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDownloadClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtRolloutClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleTypeClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetTagClientResource; -import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; -import org.springframework.hateoas.hal.Jackson2HalModule; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; - -import feign.Feign; -import feign.Feign.Builder; -import feign.Logger; -import feign.Logger.Level; -import feign.jackson.JacksonDecoder; -import feign.jackson.JacksonEncoder; - -/** - * - */ -public class MgmtDefaultFeignClient { - - private MgmtDistributionSetClientResource mgmtDistributionSetClientResource; - private MgmtDistributionSetTagClientResource mgmtDistributionSetTagClientResource; - private MgmtDistributionSetTypeClientResource mgmtDistributionSetTypeClientResource; - private MgmtRolloutClientResource mgmtRolloutClientResource; - private MgmtSoftwareModuleClientResource mgmtSoftwareModuleClientResource; - private MgmtSoftwareModuleTypeClientResource mgmtSoftwareModuleTypeClientResource; - private MgmtTargetClientResource mgmtTargetClientResource; - private MgmtTargetTagClientResource mgmtTargetTagClientResource; - private MgmtDownloadClientResource mgmtDownloadClientResource; - private MgmtDownloadArtifactClientResource mgmtDownloadArtifactClientResource; - - private final Builder feignBuilder; - private final String baseUrl; - - public MgmtDefaultFeignClient(final String baseUrl) { - final ObjectMapper mapper = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .registerModule(new Jackson2HalModule()); - - feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) - .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) - .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()) - .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper))); - this.baseUrl = baseUrl; - } - - public Builder getFeignBuilder() { - return feignBuilder; - } - - public MgmtDistributionSetClientResource getMgmtDistributionSetClientResource() { - if (mgmtDistributionSetClientResource == null) { - mgmtDistributionSetClientResource = feignBuilder.target(MgmtDistributionSetClientResource.class, - this.baseUrl + MgmtDistributionSetClientResource.PATH); - } - return mgmtDistributionSetClientResource; - } - - public MgmtDistributionSetTagClientResource getMgmtDistributionSetTagClientResource() { - if (mgmtDistributionSetTagClientResource == null) { - mgmtDistributionSetTagClientResource = feignBuilder.target(MgmtDistributionSetTagClientResource.class, - this.baseUrl + MgmtDistributionSetTagClientResource.PATH); - } - return mgmtDistributionSetTagClientResource; - } - - public MgmtDistributionSetTypeClientResource getMgmtDistributionSetTypeClientResource() { - if (mgmtDistributionSetTypeClientResource == null) { - mgmtDistributionSetTypeClientResource = feignBuilder.target(MgmtDistributionSetTypeClientResource.class, - this.baseUrl + MgmtDistributionSetTypeClientResource.PATH); - } - return mgmtDistributionSetTypeClientResource; - } - - public MgmtRolloutClientResource getMgmtRolloutClientResource() { - if (mgmtRolloutClientResource == null) { - mgmtRolloutClientResource = feignBuilder.target(MgmtRolloutClientResource.class, - this.baseUrl + MgmtRolloutClientResource.PATH); - } - return mgmtRolloutClientResource; - } - - public MgmtSoftwareModuleClientResource getMgmtSoftwareModuleClientResource() { - if (mgmtSoftwareModuleClientResource == null) { - mgmtSoftwareModuleClientResource = feignBuilder.target(MgmtSoftwareModuleClientResource.class, - this.baseUrl + MgmtSoftwareModuleClientResource.PATH); - } - return mgmtSoftwareModuleClientResource; - } - - public MgmtSoftwareModuleTypeClientResource getMgmtSoftwareModuleTypeClientResource() { - if (mgmtSoftwareModuleTypeClientResource == null) { - mgmtSoftwareModuleTypeClientResource = feignBuilder.target(MgmtSoftwareModuleTypeClientResource.class, - this.baseUrl + MgmtSoftwareModuleTypeClientResource.PATH); - } - return mgmtSoftwareModuleTypeClientResource; - } - - public MgmtTargetClientResource getMgmtTargetClientResource() { - if (mgmtTargetClientResource == null) { - mgmtTargetClientResource = feignBuilder.target(MgmtTargetClientResource.class, - this.baseUrl + MgmtTargetClientResource.PATH); - } - return mgmtTargetClientResource; - } - - public MgmtTargetTagClientResource getMgmtTargetTagClientResource() { - if (mgmtTargetTagClientResource == null) { - mgmtTargetTagClientResource = feignBuilder.target(MgmtTargetTagClientResource.class, - this.baseUrl + MgmtTargetTagClientResource.PATH); - } - return mgmtTargetTagClientResource; - } - - public MgmtDownloadClientResource getMgmtDownloadClientResource() { - if (mgmtDownloadClientResource == null) { - mgmtDownloadClientResource = feignBuilder.target(MgmtDownloadClientResource.class, - this.baseUrl + MgmtDownloadClientResource.PATH); - } - return mgmtDownloadClientResource; - } - - public MgmtDownloadArtifactClientResource getMgmtDownloadArtifactClientResource() { - if (mgmtDownloadArtifactClientResource == null) { - mgmtDownloadArtifactClientResource = feignBuilder.target(MgmtDownloadArtifactClientResource.class, - this.baseUrl + MgmtDownloadArtifactClientResource.PATH); - } - return mgmtDownloadArtifactClientResource; - } - -} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java index d89f7e5f3..cc6dbd477 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java @@ -8,8 +8,17 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; +import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi; import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import feign.Param; /** * Client binding for the SoftwareModule resource of the management API. @@ -18,4 +27,11 @@ import org.springframework.cloud.netflix.feign.FeignClient; public interface MgmtSoftwareModuleClientResource extends MgmtSoftwareModuleRestApi { static String PATH = "rest/v1/softwaremodules"; + + @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts") + ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + @Param("file") final MultipartFile file, + @RequestParam(value = "filename", required = false) final String optionalFileName, + @RequestParam(value = "md5sum", required = false) final String md5Sum, + @RequestParam(value = "sha1sum", required = false) final String sha1Sum); } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java new file mode 100644 index 000000000..01510e279 --- /dev/null +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.client.resource; + +import org.eclipse.hawkbit.system.rest.api.SystemRestApi; +import org.springframework.cloud.netflix.feign.FeignClient; + +/** + * Client binding for the {@link SystemRestApi}. + * + */ +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + SystemClientResource.PATH) +public interface SystemClientResource extends SystemRestApi { + static String PATH = "rest/v1/system"; +} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java new file mode 100644 index 000000000..5047619bc --- /dev/null +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.client.resource; + +import org.eclipse.hawkbit.system.rest.api.SystemManagementRestApi; +import org.springframework.cloud.netflix.feign.FeignClient; + +/** + * Client binding for the {@link SystemManagementRestApi}. + * + */ +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + SystemManagementClientResource.PATH) +public interface SystemManagementClientResource extends SystemManagementRestApi { + static String PATH = "system/admin"; + +} diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java index 0d9e83690..2bcf3c059 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java @@ -15,7 +15,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.annotation.JsonValue; /** @@ -23,7 +22,6 @@ import com.fasterxml.jackson.annotation.JsonValue; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonRootName(value = "") public class MgmtArtifact extends MgmtBaseEntity { @JsonProperty(required = true) @@ -41,6 +39,11 @@ public class MgmtArtifact extends MgmtBaseEntity { @JsonProperty private Long size; + public MgmtArtifact() { + super(); + // need for json encoder + } + /** * @param type * the type to set diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetType.java similarity index 95% rename from hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetType.java index 5717863d1..acc4dbb59 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetType.java @@ -25,7 +25,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class MgmtDistributionSetTypeRest extends MgmtNamedEntity { +public class MgmtDistributionSetType extends MgmtNamedEntity { @JsonProperty(value = "id", required = true) private Long moduleId; 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 28af107f7..84fe8c4e7 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 @@ -14,7 +14,7 @@ import org.eclipse.hawkbit.mgmt.json.model.MgmtId; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPut; -import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -54,7 +54,7 @@ public interface MgmtDistributionSetTypeRestApi { * response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> getDistributionSetTypes( + ResponseEntity> getDistributionSetTypes( @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, @@ -73,7 +73,7 @@ public interface MgmtDistributionSetTypeRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getDistributionSetType( + ResponseEntity getDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId); /** @@ -99,7 +99,7 @@ public interface MgmtDistributionSetTypeRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{distributionSetTypeId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity updateDistributionSetType( + ResponseEntity updateDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @RequestBody final MgmtDistributionSetTypeRequestBodyPut restDistributionSetType); @@ -116,7 +116,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( + ResponseEntity> createDistributionSetTypes( @RequestBody final List distributionSetTypes); /** diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java index 85c498296..52cd1c991 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java @@ -8,8 +8,6 @@ */ package org.eclipse.hawkbit.mgmt.rest.api; -import javax.servlet.http.HttpServletResponse; - import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -36,7 +34,6 @@ public interface MgmtDownloadRestApi { */ @RequestMapping(method = RequestMethod.GET, value = MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING) @ResponseBody - ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId, - final HttpServletResponse response); + ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId); } 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 dab8cc594..eb601487b 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 @@ -53,8 +53,7 @@ public interface MgmtSoftwareModuleRestApi { * failure the JsonResponseExceptionHandler is handling the * response. */ - @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts", produces = { - "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) + @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts") ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @RequestParam("file") final MultipartFile file, @RequestParam(value = "filename", required = false) final String optionalFileName, diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java index 244f07095..d3046f149 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java @@ -15,7 +15,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; -import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -76,24 +76,24 @@ final class MgmtDistributionSetTypeMapper { return result; } - static List toTypesResponse(final List types) { - final List response = new ArrayList<>(); + static List toTypesResponse(final List types) { + final List response = new ArrayList<>(); for (final DistributionSetType dsType : types) { response.add(toResponse(dsType)); } return response; } - static List toListResponse(final List types) { - final List response = new ArrayList<>(); + static List toListResponse(final List types) { + final List response = new ArrayList<>(); for (final DistributionSetType dsType : types) { response.add(toResponse(dsType)); } return response; } - static MgmtDistributionSetTypeRest toResponse(final DistributionSetType type) { - final MgmtDistributionSetTypeRest result = new MgmtDistributionSetTypeRest(); + static MgmtDistributionSetType toResponse(final DistributionSetType type) { + final MgmtDistributionSetType result = new MgmtDistributionSetType(); MgmtRestModelMapper.mapNamedToNamed(result, type); result.setKey(type.getKey()); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java index 8d5239d9e..baa6f2955 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java @@ -14,7 +14,7 @@ import org.eclipse.hawkbit.mgmt.json.model.MgmtId; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPut; -import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; @@ -56,7 +56,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity> getDistributionSetTypes( + public ResponseEntity> getDistributionSetTypes( @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, @@ -79,13 +79,13 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR countModulesAll = distributionSetManagement.countDistributionSetTypesAll(); } - final List rest = MgmtDistributionSetTypeMapper + final List rest = MgmtDistributionSetTypeMapper .toListResponse(findModuleTypessAll.getContent()); return new ResponseEntity<>(new PagedList<>(rest, countModulesAll), HttpStatus.OK); } @Override - public ResponseEntity getDistributionSetType( + public ResponseEntity getDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -103,7 +103,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity updateDistributionSetType( + public ResponseEntity updateDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @RequestBody final MgmtDistributionSetTypeRequestBodyPut restDistributionSetType) { final DistributionSetType type = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -121,7 +121,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity> createDistributionSetTypes( + public ResponseEntity> createDistributionSetTypes( @RequestBody final List distributionSetTypes) { final List createdSoftwareModules = distributionSetManagement.createDistributionSetTypes( diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java index ca4959810..10cd2db3b 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java @@ -10,25 +10,26 @@ package org.eclipse.hawkbit.mgmt.rest.resource; import java.io.IOException; -import javax.servlet.http.HttpServletResponse; - import org.apache.commons.io.IOUtils; import org.eclipse.hawkbit.artifact.repository.ArtifactRepository; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.DownloadArtifactCache; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadRestApi; +import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.cache.Cache; import org.springframework.cache.Cache.ValueWrapper; +import org.springframework.context.annotation.Scope; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.WebApplicationContext; /** * A resource for download artifacts. @@ -37,6 +38,7 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController +@Scope(value = WebApplicationContext.SCOPE_REQUEST) public class MgmtDownloadResource implements MgmtDownloadRestApi { private static final Logger LOGGER = LoggerFactory.getLogger(MgmtDownloadResource.class); @@ -48,6 +50,9 @@ public class MgmtDownloadResource implements MgmtDownloadRestApi { @Qualifier(CacheConstants.DOWNLOAD_ID_CACHE) private Cache cache; + @Autowired + private RequestResponseContextHolder requestResponseContextHolder; + /** * Handles the GET request for downloading an artifact. * @@ -60,8 +65,7 @@ public class MgmtDownloadResource implements MgmtDownloadRestApi { */ @Override @ResponseBody - public ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId, - final HttpServletResponse response) { + public ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId) { try { final ValueWrapper cacheWrapper = cache.get(downloadId); if (cacheWrapper == null) { @@ -87,7 +91,8 @@ public class MgmtDownloadResource implements MgmtDownloadRestApi { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } try { - IOUtils.copy(artifact.getFileInputStream(), response.getOutputStream()); + IOUtils.copy(artifact.getFileInputStream(), + requestResponseContextHolder.getHttpServletResponse().getOutputStream()); } catch (final IOException e) { LOGGER.error("Cannot copy streams", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); diff --git a/hawkbit-repository/pom.xml b/hawkbit-repository/pom.xml index b70e00f28..28d20af3e 100644 --- a/hawkbit-repository/pom.xml +++ b/hawkbit-repository/pom.xml @@ -130,12 +130,6 @@ spring-context-support test - - org.eclipse.hawkbit - hawkbit-rest-api - ${project.version} - test - ru.yandex.qatools.allure allure-junit-adaptor diff --git a/pom.xml b/pom.xml index 0260683ba..a95832c79 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ hawkbit-autoconfigure hawkbit-cache-redis hawkbit-test-report - examples + From fd2312f0ffa7a94e60c66c16b029c42d56ca6119 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 16:57:40 +0200 Subject: [PATCH 043/371] Changed feign client calls to keep client up when download failed Signed-off-by: Jonathan Philip Knoblauch --- .../hawkbit/ddi/client/DdiExampleClient.java | 69 +++++++++++-------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java index ad9f086bb..0303fe627 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; +import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; import org.eclipse.hawkbit.ddi.client.strategy.PersistenceStrategy; import org.eclipse.hawkbit.ddi.json.model.DdiActionFeedback; import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; @@ -41,9 +42,11 @@ public class DdiExampleClient implements Runnable { private final String controllerId; private Long actionIdOfLastInstalltion; - private final DdiDefaultFeignClient ddiDefaultFeignClient; + private final RootControllerResourceClient rootControllerResourceClient; private final PersistenceStrategy persistenceStrategy; - private STATUS clientStatus; + private DdiClientStatus clientStatus; + + private FinalResult finalReusltOfCurrentUpdate; /** * Constructor for the DDI example client. @@ -60,33 +63,34 @@ public class DdiExampleClient implements Runnable { public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, final PersistenceStrategy persistenceStrategy) { this.controllerId = controllerId; - this.ddiDefaultFeignClient = new DdiDefaultFeignClient(baseUrl, tenant); + this.rootControllerResourceClient = new DdiDefaultFeignClient(baseUrl, tenant) + .getRootControllerResourceClient(); this.actionIdOfLastInstalltion = null; this.persistenceStrategy = persistenceStrategy; - this.clientStatus = STATUS.DOWN; + this.clientStatus = DdiClientStatus.DOWN; } @Override public void run() { - clientStatus = STATUS.UP; + clientStatus = DdiClientStatus.UP; ResponseEntity response; - while (clientStatus == STATUS.UP) { + while (clientStatus == DdiClientStatus.UP) { LOGGER.info(" Controller {} polling from hawkBit server", controllerId); - response = ddiDefaultFeignClient.getRootControllerResourceClient().getControllerBase(controllerId); - final String pollingTime = response.getBody().getConfig().getPolling().getSleep(); - final LocalTime localtime = LocalTime.parse(pollingTime); + response = rootControllerResourceClient.getControllerBase(controllerId); + final String pollingTimeFormReponse = response.getBody().getConfig().getPolling().getSleep(); + final LocalTime localtime = LocalTime.parse(pollingTimeFormReponse); final long pollingIntervalInMillis = localtime.toNanoOfDay(); final Link controllerDeploymentBaseLink = response.getBody().getLink("deploymentBase"); - if (controllerDeploymentBaseLink != null) { final Long actionId = getActionIdOutOfLink(controllerDeploymentBaseLink); final Integer resource = getResourceOutOfLink(controllerDeploymentBaseLink); if (actionId != actionIdOfLastInstalltion) { + finalReusltOfCurrentUpdate = FinalResult.NONE; startDownload(actionId, resource); + finishUpdateProcess(actionId); actionIdOfLastInstalltion = actionId; } } - try { Thread.sleep(pollingIntervalInMillis); } catch (final InterruptedException e) { @@ -99,12 +103,12 @@ public class DdiExampleClient implements Runnable { * Stop the DDI example client */ public void stop() { - clientStatus = STATUS.DOWN; + clientStatus = DdiClientStatus.DOWN; } private void startDownload(final Long actionId, final Integer resource) { - final ResponseEntity respone = ddiDefaultFeignClient.getRootControllerResourceClient() + final ResponseEntity respone = rootControllerResourceClient .getControllerBasedeploymentAction(controllerId, Long.valueOf(actionId), Integer.valueOf(resource)); final DdiDeploymentBase ddiDeploymentBase = respone.getBody(); final List chunks = ddiDeploymentBase.getDeployment().getChunks(); @@ -115,7 +119,9 @@ public class DdiExampleClient implements Runnable { final String[] downloadLinkSep = downloadLink.getHref().split(Pattern.quote("/")); final Long softwareModuleId = Long.valueOf(downloadLinkSep[8]); for (final DdiArtifact ddiArtifact : artifactList) { - downloadArtifact(actionId, softwareModuleId, ddiArtifact.getFilename()); + if (finalReusltOfCurrentUpdate != FinalResult.FAILURE) { + downloadArtifact(actionId, softwareModuleId, ddiArtifact.getFilename()); + } } } } @@ -126,39 +132,46 @@ public class DdiExampleClient implements Runnable { "Starting download of artifact " + artifact); LOGGER.info("Starting download of artifact " + artifact); - final ResponseEntity responseDownloadArtifact = ddiDefaultFeignClient - .getRootControllerResourceClient().downloadArtifact(controllerId, softwareModuleId, artifact); + final ResponseEntity responseDownloadArtifact = rootControllerResourceClient + .downloadArtifact(controllerId, softwareModuleId, artifact); final HttpStatus statsuCode = responseDownloadArtifact.getStatusCode(); LOGGER.info("Finished download with stataus {}", statsuCode); try { persistenceStrategy.handleInputStream(responseDownloadArtifact.getBody(), artifact); + sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, + "Downloaded artifact " + artifact); } catch (final IOException e) { - sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.FAILURE, - "Downloaded of artifact " + artifact + " failed"); - return; + sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, + "Downloaded of artifact " + artifact + "failed"); + finalReusltOfCurrentUpdate = FinalResult.FAILURE; } - sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, "Downloaded artifact " + artifact); - simulateSuccessfulInstallation(actionId); } private void sendFeedBackMessage(final Long actionId, final ExecutionStatus executionStatus, final FinalResult finalResult, final String message) { - final DdiResult result = new DdiResult(finalResult, null); final List details = new ArrayList<>(); details.add(message); final DdiStatus ddiStatus = new DdiStatus(executionStatus, result, details); final String time = String.valueOf(LocalDateTime.now()); final DdiActionFeedback feedback = new DdiActionFeedback(actionId, time, ddiStatus); - ddiDefaultFeignClient.getRootControllerResourceClient().postBasedeploymentActionFeedback(feedback, controllerId, - actionId); + rootControllerResourceClient.postBasedeploymentActionFeedback(feedback, controllerId, actionId); LOGGER.info("Sent feedback message to HaktBit"); } - private void simulateSuccessfulInstallation(final Long actionId) { - sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.SUCESS, "Simulated installation successful"); + private void finishUpdateProcess(final Long actionId) { + + if (finalReusltOfCurrentUpdate == FinalResult.FAILURE) { + sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.FAILURE, "Error during update process"); + } + + if (finalReusltOfCurrentUpdate == FinalResult.NONE) { + sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.SUCESS, + "Simulated installation successful"); + } + } private Long getActionIdOutOfLink(final Link controllerDeploymentBaseLink) { @@ -180,8 +193,8 @@ public class DdiExampleClient implements Runnable { /** * Enum for DDI running status. */ - public enum STATUS { - + public enum DdiClientStatus { UP, DOWN; } + } From e5ddf075be5384d6fe828cf8c3e9b1503d5bad07 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 27 Apr 2016 08:39:12 +0200 Subject: [PATCH 044/371] remove leading slash of path, because other resources also don't have the leading slash Signed-off-by: Michael Hirsch --- .../hawkbit/mgmt/client/resource/MgmtTargetClientResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java index 5d043afe2..19f78a12f 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java @@ -17,5 +17,5 @@ import org.springframework.cloud.netflix.feign.FeignClient; @FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtTargetClientResource.PATH) public interface MgmtTargetClientResource extends MgmtTargetRestApi { - static String PATH = "/rest/v1/targets"; + static String PATH = "rest/v1/targets"; } From 3574bdcc585abcf4bf986f567a0cfbbf3a049a49 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 27 Apr 2016 11:22:42 +0200 Subject: [PATCH 045/371] add authentication intercepter for ddi-client to authenticate e.g. via security token, correct parsing server poll time Signed-off-by: Michael Hirsch --- .../ddi/client/DdiDefaultFeignClient.java | 11 ++++++ .../hawkbit/ddi/client/DdiExampleClient.java | 26 ++++++++++++-- .../AuthenticationInterceptor.java | 19 ++++++++++ .../AuthenticationInterceptorFactory.java | 34 ++++++++++++++++++ ...ecurityTokenAuthenticationInterceptor.java | 35 +++++++++++++++++++ 5 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java index c9af1cb09..d156e8eb5 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ddi.client; import org.apache.commons.lang.Validate; +import org.eclipse.hawkbit.ddi.client.authenctication.AuthenticationInterceptor; import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; import org.eclipse.hawkbit.feign.core.client.ApplicationJsonRequestHeaderInterceptor; import org.eclipse.hawkbit.feign.core.client.IgnoreMultipleConsumersProducersSpringMvcContract; @@ -31,10 +32,20 @@ public class DdiDefaultFeignClient { private final String tenant; public DdiDefaultFeignClient(final String baseUrl, final String tenant) { + this(baseUrl, tenant, null); + } + + public DdiDefaultFeignClient(final String baseUrl, final String tenant, + final AuthenticationInterceptor authenticationInterceptor) { feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()) .requestInterceptor(new DdiAcceptedRequestInterceptor()).logLevel(Level.FULL) .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()).decoder(new DdiDecoder()); + + if (authenticationInterceptor != null) { + feignBuilder.requestInterceptor(authenticationInterceptor); + } + Validate.notNull(baseUrl, "A baseUrl has to be set"); Validate.notNull(tenant, "A tenant has to be set"); this.baseUrl = baseUrl; diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java index 0303fe627..6b407f74d 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -12,10 +12,12 @@ import java.io.IOException; import java.io.InputStream; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; +import org.eclipse.hawkbit.ddi.client.authenctication.AuthenticationInterceptor; import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; import org.eclipse.hawkbit.ddi.client.strategy.PersistenceStrategy; import org.eclipse.hawkbit.ddi.json.model.DdiActionFeedback; @@ -62,8 +64,28 @@ public class DdiExampleClient implements Runnable { */ public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, final PersistenceStrategy persistenceStrategy) { + this(baseUrl, controllerId, tenant, persistenceStrategy, null); + } + + /** + * Constructor for the DDI example client. + * + * @param baseUrl + * the base url of the hawkBit server + * @param controllerId + * the controller id that will be simulated + * @param tenant + * the tenant + * @param persistenceStrategy + * the persistence strategy for downloading artifacts + * @param authenticationInterceptor + * the authentication intercepter to authenticate the DDI client, + * might be {@code null} + */ + public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, + final PersistenceStrategy persistenceStrategy, final AuthenticationInterceptor authenticationInterceptor) { this.controllerId = controllerId; - this.rootControllerResourceClient = new DdiDefaultFeignClient(baseUrl, tenant) + this.rootControllerResourceClient = new DdiDefaultFeignClient(baseUrl, tenant, authenticationInterceptor) .getRootControllerResourceClient(); this.actionIdOfLastInstalltion = null; this.persistenceStrategy = persistenceStrategy; @@ -79,7 +101,7 @@ public class DdiExampleClient implements Runnable { response = rootControllerResourceClient.getControllerBase(controllerId); final String pollingTimeFormReponse = response.getBody().getConfig().getPolling().getSleep(); final LocalTime localtime = LocalTime.parse(pollingTimeFormReponse); - final long pollingIntervalInMillis = localtime.toNanoOfDay(); + final long pollingIntervalInMillis = localtime.getLong(ChronoField.MILLI_OF_DAY); final Link controllerDeploymentBaseLink = response.getBody().getLink("deploymentBase"); if (controllerDeploymentBaseLink != null) { final Long actionId = getActionIdOutOfLink(controllerDeploymentBaseLink); diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java new file mode 100644 index 000000000..f1a746c1b --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client.authenctication; + +import feign.RequestInterceptor; + +/** + * An DdiClient authentication intercepter to provide credential information + * e.g. in http-headers. + */ +public interface AuthenticationInterceptor extends RequestInterceptor { + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java new file mode 100644 index 000000000..5d2fb6706 --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client.authenctication; + +/** + * A factory to create {@link AuthenticationInterceptor}s. + */ +public class AuthenticationInterceptorFactory { + + private AuthenticationInterceptorFactory() { + // factory class no public constructor + } + + /** + * Creates a new {@link AuthenticationInterceptor} to authenticate a + * Ddi-Client via a target-security-token HTTP authorization header. + * + * @param targetSecurityToken + * the target-security-token to be added to the HTTP + * 'TargetToken' authorization header + * @return the authentication interceptor which can be used to authenticate + * an Ddi-Client + */ + public static AuthenticationInterceptor createTargetSecurityAuthenticator(final String targetSecurityToken) { + return new TargetSecurityTokenAuthenticationInterceptor(targetSecurityToken); + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java new file mode 100644 index 000000000..93559dd6d --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client.authenctication; + +import com.google.common.net.HttpHeaders; + +import feign.RequestTemplate; + +/** + * Implementation of the {@link AuthenticationInterceptor} to add a given + * target-security-token to the HTTP authorization header. + */ +class TargetSecurityTokenAuthenticationInterceptor implements AuthenticationInterceptor { + + private final String targetSecurityToken; + + /** + * @param targetSecurityToken + * the security token to add to the authorization header + */ + TargetSecurityTokenAuthenticationInterceptor(final String targetSecurityToken) { + this.targetSecurityToken = targetSecurityToken; + } + + @Override + public void apply(final RequestTemplate template) { + template.header(HttpHeaders.AUTHORIZATION, "TargetToken " + targetSecurityToken); + } +} From 6cbbcffc9d036ca59c00392d265e973bc078d12c Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 27 Apr 2016 11:38:50 +0200 Subject: [PATCH 046/371] Added inputstream download not on disk and final result validation. Signed-off-by: Jonathan Philip Knoblauch --- .../hawkbit/ddi/client/DdiExampleClient.java | 23 +++++++++++-------- .../strategy/DoNotSaveArtifactsStrategy.java | 5 +++- .../strategy/SaveArtifactsStrategy.java | 2 +- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java index 0303fe627..129fd422d 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -45,8 +45,8 @@ public class DdiExampleClient implements Runnable { private final RootControllerResourceClient rootControllerResourceClient; private final PersistenceStrategy persistenceStrategy; private DdiClientStatus clientStatus; - - private FinalResult finalReusltOfCurrentUpdate; + private final DdiDefaultFeignClient sdiDefaultFeignClient; + private FinalResult finalResultOfCurrentUpdate; /** * Constructor for the DDI example client. @@ -63,13 +63,18 @@ public class DdiExampleClient implements Runnable { public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, final PersistenceStrategy persistenceStrategy) { this.controllerId = controllerId; - this.rootControllerResourceClient = new DdiDefaultFeignClient(baseUrl, tenant) - .getRootControllerResourceClient(); + sdiDefaultFeignClient = new DdiDefaultFeignClient(baseUrl, tenant); + + this.rootControllerResourceClient = sdiDefaultFeignClient.getRootControllerResourceClient(); this.actionIdOfLastInstalltion = null; this.persistenceStrategy = persistenceStrategy; this.clientStatus = DdiClientStatus.DOWN; } + public DdiDefaultFeignClient getSdiDefaultFeignClient() { + return sdiDefaultFeignClient; + } + @Override public void run() { clientStatus = DdiClientStatus.UP; @@ -85,7 +90,7 @@ public class DdiExampleClient implements Runnable { final Long actionId = getActionIdOutOfLink(controllerDeploymentBaseLink); final Integer resource = getResourceOutOfLink(controllerDeploymentBaseLink); if (actionId != actionIdOfLastInstalltion) { - finalReusltOfCurrentUpdate = FinalResult.NONE; + finalResultOfCurrentUpdate = FinalResult.NONE; startDownload(actionId, resource); finishUpdateProcess(actionId); actionIdOfLastInstalltion = actionId; @@ -119,7 +124,7 @@ public class DdiExampleClient implements Runnable { final String[] downloadLinkSep = downloadLink.getHref().split(Pattern.quote("/")); final Long softwareModuleId = Long.valueOf(downloadLinkSep[8]); for (final DdiArtifact ddiArtifact : artifactList) { - if (finalReusltOfCurrentUpdate != FinalResult.FAILURE) { + if (finalResultOfCurrentUpdate != FinalResult.FAILURE) { downloadArtifact(actionId, softwareModuleId, ddiArtifact.getFilename()); } } @@ -144,7 +149,7 @@ public class DdiExampleClient implements Runnable { } catch (final IOException e) { sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, "Downloaded of artifact " + artifact + "failed"); - finalReusltOfCurrentUpdate = FinalResult.FAILURE; + finalResultOfCurrentUpdate = FinalResult.FAILURE; } } @@ -163,11 +168,11 @@ public class DdiExampleClient implements Runnable { private void finishUpdateProcess(final Long actionId) { - if (finalReusltOfCurrentUpdate == FinalResult.FAILURE) { + if (finalResultOfCurrentUpdate == FinalResult.FAILURE) { sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.FAILURE, "Error during update process"); } - if (finalReusltOfCurrentUpdate == FinalResult.NONE) { + if (finalResultOfCurrentUpdate == FinalResult.NONE) { sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.SUCESS, "Simulated installation successful"); } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java index 80743c99e..447885715 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java @@ -19,7 +19,10 @@ public class DoNotSaveArtifactsStrategy implements PersistenceStrategy { @Override public void handleInputStream(final InputStream in, final String artifactName) throws IOException { - // do nothing + + while (in.read() != -1) { + ; + } } } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java index 2ae7987cb..2908ee29f 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java @@ -26,7 +26,7 @@ public class SaveArtifactsStrategy implements PersistenceStrategy { @Override public void handleInputStream(final InputStream in, final String artifactName) throws IOException { final File tempDir = Files.createTempDir(); - final File file = new File(tempDir + "\\" + artifactName); + final File file = new File(tempDir, artifactName); final OutputStream out = new FileOutputStream(file); ByteStreams.copy(in, out); } From a288fb1476991179b4cf4f2e47214243d631438f Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 27 Apr 2016 15:02:09 +0200 Subject: [PATCH 047/371] New names for persistenceArtifactStrategy interfaces and implementations Signed-off-by: Jonathan Philip Knoblauch --- .../hawkbit/ddi/client/DdiExampleClient.java | 36 +++++++++++-------- ...java => ArtifactsPersistenceStrategy.java} | 2 +- ...sStrategy.java => DoNotSaveArtifacts.java} | 4 +-- ... SaveArtifactsToLocalTempDirectories.java} | 4 +-- .../hawkbit/example/ddi/client/AppTest.java | 6 ++-- 5 files changed, 29 insertions(+), 23 deletions(-) rename examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/{PersistenceStrategy.java => ArtifactsPersistenceStrategy.java} (94%) rename examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/{DoNotSaveArtifactsStrategy.java => DoNotSaveArtifacts.java} (80%) rename examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/{SaveArtifactsStrategy.java => SaveArtifactsToLocalTempDirectories.java} (84%) diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java index 190ea622b..5945fef5d 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -19,7 +19,7 @@ import java.util.regex.Pattern; import org.eclipse.hawkbit.ddi.client.authenctication.AuthenticationInterceptor; import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; -import org.eclipse.hawkbit.ddi.client.strategy.PersistenceStrategy; +import org.eclipse.hawkbit.ddi.client.strategy.ArtifactsPersistenceStrategy; import org.eclipse.hawkbit.ddi.json.model.DdiActionFeedback; import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; import org.eclipse.hawkbit.ddi.json.model.DdiChunk; @@ -45,12 +45,12 @@ public class DdiExampleClient implements Runnable { private final String controllerId; private Long actionIdOfLastInstalltion; private final RootControllerResourceClient rootControllerResourceClient; - private final PersistenceStrategy persistenceStrategy; + private final ArtifactsPersistenceStrategy persistenceStrategy; private DdiClientStatus clientStatus; - + private FinalResult finalResultOfCurrentUpdate; - /** + /** * Constructor for the DDI example client. * * @param baseUrl @@ -63,7 +63,7 @@ public class DdiExampleClient implements Runnable { * the persistence strategy for downloading artifacts */ public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, - final PersistenceStrategy persistenceStrategy) { + final ArtifactsPersistenceStrategy persistenceStrategy) { this(baseUrl, controllerId, tenant, persistenceStrategy, null); } @@ -83,7 +83,7 @@ public class DdiExampleClient implements Runnable { * might be {@code null} */ public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, - final PersistenceStrategy persistenceStrategy, final AuthenticationInterceptor authenticationInterceptor) { + final ArtifactsPersistenceStrategy persistenceStrategy, final AuthenticationInterceptor authenticationInterceptor) { this.controllerId = controllerId; this.rootControllerResourceClient = new DdiDefaultFeignClient(baseUrl, tenant, authenticationInterceptor) .getRootControllerResourceClient(); @@ -129,26 +129,32 @@ public class DdiExampleClient implements Runnable { } private void startDownload(final Long actionId, final Integer resource) { - final ResponseEntity respone = rootControllerResourceClient .getControllerBasedeploymentAction(controllerId, Long.valueOf(actionId), Integer.valueOf(resource)); final DdiDeploymentBase ddiDeploymentBase = respone.getBody(); final List chunks = ddiDeploymentBase.getDeployment().getChunks(); for (final DdiChunk chunk : chunks) { final List artifactList = chunk.getArtifacts(); - final Link downloadLink = ddiDeploymentBase.getDeployment().getChunks().get(0).getArtifacts().get(0) - .getLink("download-http"); - final String[] downloadLinkSep = downloadLink.getHref().split(Pattern.quote("/")); - final Long softwareModuleId = Long.valueOf(downloadLinkSep[8]); - for (final DdiArtifact ddiArtifact : artifactList) { - if (finalResultOfCurrentUpdate != FinalResult.FAILURE) { - downloadArtifact(actionId, softwareModuleId, ddiArtifact.getFilename()); + if (artifactList.isEmpty()) { + sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, + "No artifacts to download for softwaremodule " + chunk.getName()); + } else { + for (final DdiArtifact ddiArtifact : artifactList) { + if (finalResultOfCurrentUpdate != FinalResult.FAILURE) { + downloadArtifact(actionId, ddiArtifact); + } } } + } } - private void downloadArtifact(final Long actionId, final Long softwareModuleId, final String artifact) { + private void downloadArtifact(final Long actionId, final DdiArtifact ddiArtifact) { + + final String artifact = ddiArtifact.getFilename(); + final Link downloadLink = ddiArtifact.getLink("download-http"); + final String[] downloadLinkSep = downloadLink.getHref().split(Pattern.quote("/")); + final Long softwareModuleId = Long.valueOf(downloadLinkSep[8]); sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, "Starting download of artifact " + artifact); diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java similarity index 94% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java rename to examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java index e5a3a60d0..347b01bcc 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/PersistenceStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java @@ -14,7 +14,7 @@ import java.io.InputStream; /** * Interface of persistence strategy. */ -public interface PersistenceStrategy { +public interface ArtifactsPersistenceStrategy { /** * Method handling the artifact download. diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java similarity index 80% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java rename to examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java index 447885715..7e5d72c4a 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifactsStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java @@ -12,10 +12,10 @@ import java.io.IOException; import java.io.InputStream; /** - * Implementation of {@link PersistenceStrategy} for not downloading any + * Implementation of {@link ArtifactsPersistenceStrategy} for not downloading any * artifacts. */ -public class DoNotSaveArtifactsStrategy implements PersistenceStrategy { +public class DoNotSaveArtifacts implements ArtifactsPersistenceStrategy { @Override public void handleInputStream(final InputStream in, final String artifactName) throws IOException { diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java similarity index 84% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java rename to examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java index 2908ee29f..11ac5698b 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java @@ -18,10 +18,10 @@ import com.google.common.io.ByteStreams; import com.google.common.io.Files; /** - * Implementation of {@link PersistenceStrategy} for downloading artifacts to + * Implementation of {@link ArtifactsPersistenceStrategy} for downloading artifacts to * the temp directory. */ -public class SaveArtifactsStrategy implements PersistenceStrategy { +public class SaveArtifactsToLocalTempDirectories implements ArtifactsPersistenceStrategy { @Override public void handleInputStream(final InputStream in, final String artifactName) throws IOException { diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java index 2644f9d28..13eaa66d3 100644 --- a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java +++ b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java @@ -1,7 +1,7 @@ package org.eclipse.hawkbit.example.ddi.client; import org.eclipse.hawkbit.ddi.client.DdiExampleClient; -import org.eclipse.hawkbit.ddi.client.strategy.SaveArtifactsStrategy; +import org.eclipse.hawkbit.ddi.client.strategy.SaveArtifactsToLocalTempDirectories; import org.junit.Test; /** @@ -11,8 +11,8 @@ public class AppTest { @Test public void AppTest() { - final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "Einstein15", "DEFAULT", - new SaveArtifactsStrategy()); + final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "Einstein17", "DEFAULT", + new SaveArtifactsToLocalTempDirectories()); final Thread thread = new Thread(ddiClient); thread.run(); From 906321218d79b99f7de87392526322000ae7aa4a Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 27 Apr 2016 15:25:39 +0200 Subject: [PATCH 048/371] Extend rest enitity builder Signed-off-by: SirWayne --- .../builder/DistributionSetBuilder.java | 16 +++++++-- .../builder/DistributionSetTypeBuilder.java | 27 ++++++++++---- .../resource/builder/RolloutBuilder.java | 14 +++++++- .../builder/SoftwareModuleBuilder.java | 36 +++++++++++++++---- 4 files changed, 77 insertions(+), 16 deletions(-) diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java index 56c0ddbf8..d1b3fad35 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java @@ -24,6 +24,7 @@ public class DistributionSetBuilder { private String name; private String version; private String type; + private String description; private final List modules = new ArrayList<>(); /** @@ -63,10 +64,20 @@ public class DistributionSetBuilder { return this; } + /** + * @param description + * the description + * @return the builder itself + */ + public DistributionSetBuilder description(final String description) { + this.description = description; + return this; + } + /** * Builds a list with a single entry of - * {@link MgmtDistributionSetRequestBodyPost} which can directly be used to post - * on the RESTful-API. + * {@link MgmtDistributionSetRequestBodyPost} which can directly be used to + * post on the RESTful-API. * * @return a single entry list of {@link MgmtDistributionSetRequestBodyPost} */ @@ -98,6 +109,7 @@ public class DistributionSetBuilder { body.setName(prefixName); body.setVersion(version); body.setType(type); + body.setDescription(description); body.setModules(modules); return body; } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java index 909e08470..e08240de3 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java @@ -25,6 +25,7 @@ public class DistributionSetTypeBuilder { private String key; private String name; + private String description; private final List mandatorymodules = Lists.newArrayList(); private final List optionalmodules = Lists.newArrayList(); @@ -48,6 +49,16 @@ public class DistributionSetTypeBuilder { return this; } + /** + * @param description + * the description + * @return the builder itself + */ + public DistributionSetTypeBuilder description(final String description) { + this.description = description; + return this; + } + /** * @param softwareModuleTypeIds * the IDs of the software module types which should be mandatory @@ -81,20 +92,21 @@ public class DistributionSetTypeBuilder { /** * Builds a list with a single entry of - * {@link MgmtDistributionSetTypeRequestBodyPost} which can directly be used in - * the RESTful-API. + * {@link MgmtDistributionSetTypeRequestBodyPost} which can directly be used + * in the RESTful-API. * - * @return a single entry list of {@link MgmtDistributionSetTypeRequestBodyPost} + * @return a single entry list of + * {@link MgmtDistributionSetTypeRequestBodyPost} */ public List build() { return Lists.newArrayList(doBuild(name, key)); } /** - * Builds a list of multiple {@link MgmtDistributionSetTypeRequestBodyPost} to - * create multiple distribution set types at once. An increasing number will - * be added to the name and key of the distribution set type. The optional - * and mandatory software module types will remain the same. + * Builds a list of multiple {@link MgmtDistributionSetTypeRequestBodyPost} + * to create multiple distribution set types at once. An increasing number + * will be added to the name and key of the distribution set type. The + * optional and mandatory software module types will remain the same. * * @param count * the amount of distribution sets type body which should be @@ -114,6 +126,7 @@ public class DistributionSetTypeBuilder { final MgmtDistributionSetTypeRequestBodyPost body = new MgmtDistributionSetTypeRequestBodyPost(); body.setKey(prefixKey); body.setName(prefixName); + body.setDescription(description); body.setMandatorymodules(mandatorymodules); body.setOptionalmodules(optionalmodules); return body; diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java index e9f8431d8..9ba378192 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java @@ -9,8 +9,8 @@ package org.eclipse.hawkbit.mgmt.client.resource.builder; import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutCondition; -import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutRestRequestBody; import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutCondition.Condition; +import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutRestRequestBody; /** * @@ -25,6 +25,7 @@ public class RolloutBuilder { private long distributionSetId; private String successThreshold; private String errorThreshold; + private String description; /** * @param name @@ -57,6 +58,16 @@ public class RolloutBuilder { return this; } + /** + * @param description + * the description + * @return the builder itself + */ + public RolloutBuilder description(final String description) { + this.description = description; + return this; + } + /** * @param distributionSetId * the ID of the distribution set to assign to the target in the @@ -105,6 +116,7 @@ public class RolloutBuilder { body.setAmountGroups(groupSize); body.setTargetFilterQuery(targetFilterQuery); body.setDistributionSetId(distributionSetId); + body.setDescription(description); body.setSuccessCondition(new MgmtRolloutCondition(Condition.THRESHOLD, successThreshold)); body.setErrorCondition(new MgmtRolloutCondition(Condition.THRESHOLD, errorThreshold)); return body; diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java index d1b38b2b6..6f243d08a 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java @@ -26,6 +26,8 @@ public class SoftwareModuleBuilder { private String name; private String version; private String type; + private String vendor; + private String description; /** * @param name @@ -58,10 +60,30 @@ public class SoftwareModuleBuilder { return this; } + /** + * @param vendor + * the vendor + * @return the builder itself + */ + public SoftwareModuleBuilder vendor(final String vendor) { + this.vendor = vendor; + return this; + } + + /** + * @param description + * the description + * @return the builder itself + */ + public SoftwareModuleBuilder description(final String description) { + this.description = description; + return this; + } + /** * Builds a list with a single entry of - * {@link MgmtSoftwareModuleRequestBodyPost} which can directly be used in the - * RESTful-API. + * {@link MgmtSoftwareModuleRequestBodyPost} which can directly be used in + * the RESTful-API. * * @return a single entry list of {@link MgmtSoftwareModuleRequestBodyPost} */ @@ -70,10 +92,10 @@ public class SoftwareModuleBuilder { } /** - * Builds a list of multiple {@link MgmtSoftwareModuleRequestBodyPost} to create - * multiple software module at once. An increasing number will be added to - * the name of the software module. The version and type will remain the - * same. + * Builds a list of multiple {@link MgmtSoftwareModuleRequestBodyPost} to + * create multiple software module at once. An increasing number will be + * added to the name of the software module. The version and type will + * remain the same. * * @param count * the amount of software module body which should be created @@ -93,6 +115,8 @@ public class SoftwareModuleBuilder { body.setName(prefixName); body.setVersion(version); body.setType(type); + body.setVendor(vendor); + body.setDescription(description); return body; } From 3851a6c1dfae45511d407ec03efdcfea55da99cb Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 27 Apr 2016 16:47:14 +0200 Subject: [PATCH 049/371] Fixed sonar issues and added javadoc Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-ddi-client/pom.xml | 18 +++++----- .../client/DdiAcceptedRequestInterceptor.java | 27 --------------- .../hawkbit/ddi/client/DdiDecoder.java | 11 +++--- .../ddi/client/DdiDefaultFeignClient.java | 26 ++++++++++---- .../hawkbit/ddi/client/DdiExampleClient.java | 34 +++++++++++-------- .../RootControllerResourceClient.java | 5 +-- ...RootControllerResourceClientConstants.java | 21 ++++++++++++ .../ArtifactsPersistenceStrategy.java | 1 + 8 files changed, 75 insertions(+), 68 deletions(-) delete mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index c6acefb00..661d59f8f 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -73,16 +73,14 @@ 2.5 - com.google.guava - guava - - - commons-lang - commons-lang - 2.3 - - - + com.google.guava + guava + + + commons-lang + commons-lang + 2.3 + diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java deleted file mode 100644 index 3e82618c0..000000000 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client; - -import org.springframework.http.MediaType; - -import feign.RequestInterceptor; -import feign.RequestTemplate; - -/** - * - * - */ -public class DdiAcceptedRequestInterceptor implements RequestInterceptor { - - @Override - public void apply(final RequestTemplate template) { - template.header("Accept", MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_OCTET_STREAM_VALUE, - MediaType.TEXT_PLAIN_VALUE); - } -} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java index 47a59a667..79f0758e0 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java @@ -20,9 +20,7 @@ import org.springframework.http.ResponseEntity; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import feign.FeignException; import feign.Response; -import feign.codec.DecodeException; import feign.codec.Decoder; import feign.jackson.JacksonDecoder; @@ -32,8 +30,9 @@ import feign.jackson.JacksonDecoder; */ public class DdiDecoder implements Decoder { - ObjectMapper mapper; - private final String octentTypeOctetStream = "[application/octet-stream]"; + private static final String OCTET_STREAM = "[application/octet-stream]"; + + private final ObjectMapper mapper; public DdiDecoder() { mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) @@ -41,11 +40,11 @@ public class DdiDecoder implements Decoder { } @Override - public Object decode(final Response response, final Type type) throws IOException, DecodeException, FeignException { + public Object decode(final Response response, final Type type) throws IOException { final Map> header = response.headers(); final String contentType = String.valueOf(header.get("Content-Type")); - if (contentType.equals(octentTypeOctetStream)) { + if (contentType.equals(OCTET_STREAM)) { return ResponseEntity.ok(response.body().asInputStream()); } final ResponseEntityDecoder responseEntityDecoder = new ResponseEntityDecoder(new JacksonDecoder(mapper)); diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java index d156e8eb5..e579c07b5 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ddi.client; import org.apache.commons.lang.Validate; import org.eclipse.hawkbit.ddi.client.authenctication.AuthenticationInterceptor; import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; +import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClientConstants; import org.eclipse.hawkbit.feign.core.client.ApplicationJsonRequestHeaderInterceptor; import org.eclipse.hawkbit.feign.core.client.IgnoreMultipleConsumersProducersSpringMvcContract; @@ -26,26 +27,39 @@ import feign.jackson.JacksonEncoder; public class DdiDefaultFeignClient { private RootControllerResourceClient rootControllerResourceClient; - private final Builder feignBuilder; private final String baseUrl; private final String tenant; + /** + * Constructor for default DDI feign client with no authentication. + * + * @param baseUrl + * the base url of the client + * @param tenant + * the tenant + */ public DdiDefaultFeignClient(final String baseUrl, final String tenant) { this(baseUrl, tenant, null); } + /** + * Constructor for default DDI feign client with authentication. + * + * @param baseUrl + * the base url of the client + * @param tenant + * the tenant + * @param authenticationInterceptor + */ public DdiDefaultFeignClient(final String baseUrl, final String tenant, final AuthenticationInterceptor authenticationInterceptor) { feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) - .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()) - .requestInterceptor(new DdiAcceptedRequestInterceptor()).logLevel(Level.FULL) + .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()).decoder(new DdiDecoder()); - if (authenticationInterceptor != null) { feignBuilder.requestInterceptor(authenticationInterceptor); } - Validate.notNull(baseUrl, "A baseUrl has to be set"); Validate.notNull(tenant, "A tenant has to be set"); this.baseUrl = baseUrl; @@ -69,7 +83,7 @@ public class DdiDefaultFeignClient { public RootControllerResourceClient getRootControllerResourceClient() { if (rootControllerResourceClient == null) { - String rootControllerResourcePath = this.baseUrl + RootControllerResourceClient.PATH; + String rootControllerResourcePath = this.baseUrl + RootControllerResourceClientConstants.PATH; rootControllerResourcePath = rootControllerResourcePath.replace("{tenant}", tenant); rootControllerResourceClient = feignBuilder.target(RootControllerResourceClient.class, rootControllerResourcePath); diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java index 5945fef5d..2c0421067 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java @@ -47,7 +47,6 @@ public class DdiExampleClient implements Runnable { private final RootControllerResourceClient rootControllerResourceClient; private final ArtifactsPersistenceStrategy persistenceStrategy; private DdiClientStatus clientStatus; - private FinalResult finalResultOfCurrentUpdate; /** @@ -83,7 +82,8 @@ public class DdiExampleClient implements Runnable { * might be {@code null} */ public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, - final ArtifactsPersistenceStrategy persistenceStrategy, final AuthenticationInterceptor authenticationInterceptor) { + final ArtifactsPersistenceStrategy persistenceStrategy, + final AuthenticationInterceptor authenticationInterceptor) { this.controllerId = controllerId; this.rootControllerResourceClient = new DdiDefaultFeignClient(baseUrl, tenant, authenticationInterceptor) .getRootControllerResourceClient(); @@ -130,22 +130,25 @@ public class DdiExampleClient implements Runnable { private void startDownload(final Long actionId, final Integer resource) { final ResponseEntity respone = rootControllerResourceClient - .getControllerBasedeploymentAction(controllerId, Long.valueOf(actionId), Integer.valueOf(resource)); + .getControllerBasedeploymentAction(controllerId, actionId, resource); final DdiDeploymentBase ddiDeploymentBase = respone.getBody(); final List chunks = ddiDeploymentBase.getDeployment().getChunks(); for (final DdiChunk chunk : chunks) { - final List artifactList = chunk.getArtifacts(); - if (artifactList.isEmpty()) { - sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, - "No artifacts to download for softwaremodule " + chunk.getName()); - } else { - for (final DdiArtifact ddiArtifact : artifactList) { - if (finalResultOfCurrentUpdate != FinalResult.FAILURE) { - downloadArtifact(actionId, ddiArtifact); - } - } - } + downloadArtifacts(chunk, actionId); + } + } + private void downloadArtifacts(final DdiChunk chunk, final Long actionId) { + final List artifactList = chunk.getArtifacts(); + if (artifactList.isEmpty()) { + sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, + "No artifacts to download for softwaremodule " + chunk.getName()); + return; + } + for (final DdiArtifact ddiArtifact : artifactList) { + if (finalResultOfCurrentUpdate != FinalResult.FAILURE) { + downloadArtifact(actionId, ddiArtifact); + } } } @@ -170,8 +173,9 @@ public class DdiExampleClient implements Runnable { sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, "Downloaded artifact " + artifact); } catch (final IOException e) { + LOGGER.error("Download of artifact failed", e); sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, - "Downloaded of artifact " + artifact + "failed"); + "Download of artifact " + artifact + "failed"); finalResultOfCurrentUpdate = FinalResult.FAILURE; } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java index 76867af98..db41a6e86 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java @@ -14,10 +14,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the Rootcontroller resource of the DDI API. */ - -@FeignClient(url = "${hawkbit.url:localhost:8080}/" + RootControllerResourceClient.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + RootControllerResourceClientConstants.PATH) public interface RootControllerResourceClient extends DdiRootControllerRestApi { - static String PATH = "{tenant}/controller/v1"; - } diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java new file mode 100644 index 000000000..d902c2da0 --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ddi.client.resource; + +/** + * + * Constants for RootController resource client. + */ +public class RootControllerResourceClientConstants { + + public static final String PATH = "{tenant}/controller/v1"; + + /** + * Default constructor. + */ + private RootControllerResourceClientConstants() { + + } + +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java index 347b01bcc..d7e99522e 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java @@ -14,6 +14,7 @@ import java.io.InputStream; /** * Interface of persistence strategy. */ +@FunctionalInterface public interface ArtifactsPersistenceStrategy { /** From f86f615c917dc334c28dd20858f340ac594e9b10 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 27 Apr 2016 17:34:07 +0200 Subject: [PATCH 050/371] Set MediaTye json for file upload Signed-off-by: SirWayne --- .../hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 eb601487b..dab8cc594 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 @@ -53,7 +53,8 @@ public interface MgmtSoftwareModuleRestApi { * failure the JsonResponseExceptionHandler is handling the * response. */ - @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts") + @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts", produces = { + "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @RequestParam("file") final MultipartFile file, @RequestParam(value = "filename", required = false) final String optionalFileName, From a958576e2e2aae05ee49773fecc735ab189ebcaf Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 28 Apr 2016 07:39:36 +0200 Subject: [PATCH 051/371] Moved dependencies to parent pom and added missing dependency Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-ddi-client/pom.xml | 1 - .../resource/RootControllerResourceClientConstants.java | 2 +- .../org/eclipse/hawkbit/example/ddi/client/AppTest.java | 2 +- pom.xml | 8 ++++++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index 661d59f8f..88e262d79 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -79,7 +79,6 @@ commons-lang commons-lang - 2.3 diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java index d902c2da0..0611c4a09 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java @@ -12,7 +12,7 @@ public class RootControllerResourceClientConstants { public static final String PATH = "{tenant}/controller/v1"; /** - * Default constructor. + * Private constructor to prevent instantiation. */ private RootControllerResourceClientConstants() { diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java index 13eaa66d3..92bd7c75b 100644 --- a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java +++ b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java @@ -11,7 +11,7 @@ public class AppTest { @Test public void AppTest() { - final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "Einstein17", "DEFAULT", + final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "Einstein21", "DEFAULT", new SaveArtifactsToLocalTempDirectories()); final Thread thread = new Thread(ddiClient); thread.run(); diff --git a/pom.xml b/pom.xml index a95832c79..69a49a042 100644 --- a/pom.xml +++ b/pom.xml @@ -106,6 +106,7 @@ 1.1 1.1.1 3.4 + 2.3 20141113 2.0.0 @@ -552,13 +553,16 @@ - org.apache.commons commons-lang3 ${commons-lang3.version} - + + commons-lang + commons-lang + ${commons.lang} + org.springframework.boot spring-boot-starter-test From f5ee78bb954c221c23d1c9208fe18c4344d95eed Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 28 Apr 2016 07:44:14 +0200 Subject: [PATCH 052/371] Removed test class and added missing dependency Signed-off-by: Jonathan Philip Knoblauch --- .../hawkbit/example/ddi/client/AppTest.java | 22 ------------------- .../hawkbit-example-feign-core-client/pom.xml | 4 ++++ 2 files changed, 4 insertions(+), 22 deletions(-) delete mode 100644 examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java deleted file mode 100644 index 92bd7c75b..000000000 --- a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.eclipse.hawkbit.example.ddi.client; - -import org.eclipse.hawkbit.ddi.client.DdiExampleClient; -import org.eclipse.hawkbit.ddi.client.strategy.SaveArtifactsToLocalTempDirectories; -import org.junit.Test; - -/** - * Unit test for simple App. - */ -public class AppTest { - - @Test - public void AppTest() { - final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "Einstein21", "DEFAULT", - new SaveArtifactsToLocalTempDirectories()); - final Thread thread = new Thread(ddiClient); - thread.run(); - - System.out.println("next steps........................"); - } - -} diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-feign-core-client/pom.xml index 91f6c53c1..0c08fa774 100644 --- a/examples/hawkbit-example-feign-core-client/pom.xml +++ b/examples/hawkbit-example-feign-core-client/pom.xml @@ -43,5 +43,9 @@ org.springframework.cloud spring-cloud-starter-feign + + org.slf4j + slf4j-api + From d7d48df47d8f579c0bb2c0df5aeced0cfc87855b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 09:50:48 +0200 Subject: [PATCH 053/371] Fix dependencies Signed-off-by: SirWayne --- examples/hawkbit-mgmt-api-client/pom.xml | 5 ----- examples/pom.xml | 3 ++- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/examples/hawkbit-mgmt-api-client/pom.xml b/examples/hawkbit-mgmt-api-client/pom.xml index 1b7ff72ec..b42f1c335 100644 --- a/examples/hawkbit-mgmt-api-client/pom.xml +++ b/examples/hawkbit-mgmt-api-client/pom.xml @@ -102,11 +102,6 @@ org.springframework.boot spring-boot-starter-logging - - com.google.collections - google-collections - 1.0-rc2 - org.springframework.boot spring-boot-configuration-processor diff --git a/examples/pom.xml b/examples/pom.xml index ae10dac0c..df660580a 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -22,10 +22,11 @@ pom + hawkbit-example-feign-core-client hawkbit-device-simulator hawkbit-example-app hawkbit-mgmt-api-client - hawkbit-example-ddi-client + hawkbit-example-ddi-client \ No newline at end of file From 306b0ae8058ce82420ce052042960123ee7deb94 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 10:35:20 +0200 Subject: [PATCH 054/371] Fix dependencies Signed-off-by: SirWayne --- examples/hawkbit-mgmt-api-client/pom.xml | 8 ++++---- .../java/org/eclipse/hawkbit/mgmt/client/Application.java | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/examples/hawkbit-mgmt-api-client/pom.xml b/examples/hawkbit-mgmt-api-client/pom.xml index b42f1c335..1ea36626b 100644 --- a/examples/hawkbit-mgmt-api-client/pom.xml +++ b/examples/hawkbit-mgmt-api-client/pom.xml @@ -98,10 +98,10 @@ org.springframework.cloud spring-cloud-starter-feign - - org.springframework.boot - spring-boot-starter-logging - + + + + org.springframework.boot spring-boot-configuration-processor diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java index 15d6ff10a..74f9deda0 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.mgmt.client; +import org.eclipse.hawkbit.feign.core.client.FeignClientConfiguration; import org.eclipse.hawkbit.mgmt.client.scenarios.CreateStartedRolloutExample; import org.eclipse.hawkbit.mgmt.client.scenarios.GettingStartedDefaultScenario; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +19,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import feign.auth.BasicAuthRequestInterceptor; @@ -25,6 +27,7 @@ import feign.auth.BasicAuthRequestInterceptor; @EnableFeignClients @EnableConfigurationProperties(ClientConfigurationProperties.class) @Configuration +@Import(FeignClientConfiguration.class) public class Application implements CommandLineRunner { @Autowired From a23da8202f6788ce53507414ae06d6bc433db5b5 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 12:44:13 +0200 Subject: [PATCH 055/371] 1. Rename mgmt api client 2. Split the spring boot application and the client api resources to 2 projects Signed-off-by: SirWayne --- .../core/client/FeignClientConfiguration.java | 6 ++ .../.gitignore | 0 examples/hawkbit-example-mgmt-client/pom.xml | 59 +++++++++++++++++++ .../MgmtDistributionSetClientResource.java | 0 .../MgmtDistributionSetTagClientResource.java | 0 ...MgmtDistributionSetTypeClientResource.java | 0 .../MgmtDownloadArtifactClientResource.java | 0 .../resource/MgmtDownloadClientResource.java | 0 .../resource/MgmtRolloutClientResource.java | 0 .../MgmtSoftwareModuleClientResource.java | 0 .../MgmtSoftwareModuleTypeClientResource.java | 0 .../resource/MgmtTargetClientResource.java | 0 .../resource/MgmtTargetTagClientResource.java | 0 .../client/resource/SystemClientResource.java | 0 .../SystemManagementClientResource.java | 0 .../builder/DistributionSetBuilder.java | 0 .../builder/DistributionSetTypeBuilder.java | 0 .../resource/builder/RolloutBuilder.java | 0 .../SoftwareModuleAssigmentBuilder.java | 0 .../builder/SoftwareModuleBuilder.java | 0 .../builder/SoftwareModuleTypeBuilder.java | 0 .../client/resource/builder/TagBuilder.java | 0 .../resource/builder/TargetBuilder.java | 0 .../CreateStartedRolloutExample.java | 2 - .../GettingStartedDefaultScenario.java | 2 - .../.gitignore | 3 + .../README.md | 0 .../pom.xml | 22 ++----- .../hawkbit/mgmt/client/Application.java | 12 ++++ .../client/ClientConfigurationProperties.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 0 examples/pom.xml | 3 +- 33 files changed, 88 insertions(+), 21 deletions(-) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/.gitignore (100%) create mode 100644 examples/hawkbit-example-mgmt-client/pom.xml rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java (98%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java (99%) create mode 100644 examples/hawkbit-example-mgmt-spring-client/.gitignore rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-spring-client}/README.md (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-spring-client}/pom.xml (84%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-spring-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java (87%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-spring-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-spring-client}/src/main/resources/application.properties (100%) rename examples/{hawkbit-mgmt-api-client => hawkbit-example-mgmt-spring-client}/src/main/resources/logback.xml (100%) diff --git a/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java index dc926cdbf..2723a251e 100644 --- a/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java +++ b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java @@ -8,16 +8,22 @@ */ package org.eclipse.hawkbit.feign.core.client; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.cloud.netflix.feign.FeignClientsConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import feign.Contract; +import feign.Feign; /** * * */ @Configuration +@ConditionalOnClass(Feign.class) +@Import(FeignClientsConfiguration.class) public class FeignClientConfiguration { @Bean diff --git a/examples/hawkbit-mgmt-api-client/.gitignore b/examples/hawkbit-example-mgmt-client/.gitignore similarity index 100% rename from examples/hawkbit-mgmt-api-client/.gitignore rename to examples/hawkbit-example-mgmt-client/.gitignore diff --git a/examples/hawkbit-example-mgmt-client/pom.xml b/examples/hawkbit-example-mgmt-client/pom.xml new file mode 100644 index 000000000..c566441de --- /dev/null +++ b/examples/hawkbit-example-mgmt-client/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-examples-parent + 0.2.0-SNAPSHOT + + jar + hawkbit-example-mgmt-client + hawkBit Management client API + + + + org.eclipse.hawkbit + hawkbit-example-feign-core-client + ${project.version} + + + org.eclipse.hawkbit + hawkbit-mgmt-api + ${project.version} + + + org.eclipse.hawkbit + hawkbit-system-api + ${project.version} + + + com.netflix.feign + feign-core + + 8.14.2 + + + com.netflix.feign + feign-jackson + 8.14.2 + + + com.fasterxml.jackson.core + jackson-databind + + + hibernate-validator + org.hibernate + + + \ No newline at end of file diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java similarity index 98% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java index 2fd81736c..90d61471e 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java @@ -28,13 +28,11 @@ 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.stereotype.Component; /** * Example for creating and starting a Rollout. * */ -@Component public class CreateStartedRolloutExample { /* known software module type name and key */ diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java similarity index 99% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java rename to examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java index 77b426a2f..fdb824e8e 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java @@ -25,14 +25,12 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModule import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; /** * * Default getting started scenario. * */ -@Component public class GettingStartedDefaultScenario { private static final Logger LOGGER = LoggerFactory.getLogger(GettingStartedDefaultScenario.class); diff --git a/examples/hawkbit-example-mgmt-spring-client/.gitignore b/examples/hawkbit-example-mgmt-spring-client/.gitignore new file mode 100644 index 000000000..4b9b73073 --- /dev/null +++ b/examples/hawkbit-example-mgmt-spring-client/.gitignore @@ -0,0 +1,3 @@ +/target/ +/bin/ +/.apt_generated/ diff --git a/examples/hawkbit-mgmt-api-client/README.md b/examples/hawkbit-example-mgmt-spring-client/README.md similarity index 100% rename from examples/hawkbit-mgmt-api-client/README.md rename to examples/hawkbit-example-mgmt-spring-client/README.md diff --git a/examples/hawkbit-mgmt-api-client/pom.xml b/examples/hawkbit-example-mgmt-spring-client/pom.xml similarity index 84% rename from examples/hawkbit-mgmt-api-client/pom.xml rename to examples/hawkbit-example-mgmt-spring-client/pom.xml index 1ea36626b..975423a7f 100644 --- a/examples/hawkbit-mgmt-api-client/pom.xml +++ b/examples/hawkbit-example-mgmt-spring-client/pom.xml @@ -17,7 +17,7 @@ 0.2.0-SNAPSHOT jar - hawkbit-mgmt-api-client + hawkbit-example-mgmt-spring-client hawkBit Management API example client @@ -57,17 +57,7 @@ org.eclipse.hawkbit - hawkbit-example-feign-core-client - ${project.version} - - - org.eclipse.hawkbit - hawkbit-mgmt-api - ${project.version} - - - org.eclipse.hawkbit - hawkbit-system-api + hawkbit-example-mgmt-client ${project.version} @@ -98,10 +88,10 @@ org.springframework.cloud spring-cloud-starter-feign - - - - + + org.springframework.boot + spring-boot-starter-logging + org.springframework.boot spring-boot-configuration-processor diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java b/examples/hawkbit-example-mgmt-spring-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java similarity index 87% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java rename to examples/hawkbit-example-mgmt-spring-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java index 74f9deda0..7e1f191a9 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java +++ b/examples/hawkbit-example-mgmt-spring-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java @@ -13,6 +13,7 @@ import org.eclipse.hawkbit.mgmt.client.scenarios.CreateStartedRolloutExample; import org.eclipse.hawkbit.mgmt.client.scenarios.GettingStartedDefaultScenario; import org.springframework.beans.factory.annotation.Autowired; 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; @@ -27,6 +28,7 @@ import feign.auth.BasicAuthRequestInterceptor; @EnableFeignClients @EnableConfigurationProperties(ClientConfigurationProperties.class) @Configuration +@AutoConfigureAfter(FeignClientConfiguration.class) @Import(FeignClientConfiguration.class) public class Application implements CommandLineRunner { @@ -60,6 +62,16 @@ public class Application implements CommandLineRunner { return new BasicAuthRequestInterceptor(configuration.getUsername(), configuration.getPassword()); } + @Bean + public GettingStartedDefaultScenario gettingStartedDefaultScenario() { + return new GettingStartedDefaultScenario(); + } + + @Bean + public CreateStartedRolloutExample createStartedRolloutExample() { + return new CreateStartedRolloutExample(); + } + private boolean containsArg(final String containsArg, final String... args) { for (final String arg : args) { if (arg.equalsIgnoreCase(containsArg)) { diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java b/examples/hawkbit-example-mgmt-spring-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java rename to examples/hawkbit-example-mgmt-spring-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java diff --git a/examples/hawkbit-mgmt-api-client/src/main/resources/application.properties b/examples/hawkbit-example-mgmt-spring-client/src/main/resources/application.properties similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/resources/application.properties rename to examples/hawkbit-example-mgmt-spring-client/src/main/resources/application.properties diff --git a/examples/hawkbit-mgmt-api-client/src/main/resources/logback.xml b/examples/hawkbit-example-mgmt-spring-client/src/main/resources/logback.xml similarity index 100% rename from examples/hawkbit-mgmt-api-client/src/main/resources/logback.xml rename to examples/hawkbit-example-mgmt-spring-client/src/main/resources/logback.xml diff --git a/examples/pom.xml b/examples/pom.xml index df660580a..3006c6f31 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -25,7 +25,8 @@ hawkbit-example-feign-core-client hawkbit-device-simulator hawkbit-example-app - hawkbit-mgmt-api-client + hawkbit-example-mgmt-client + hawkbit-example-mgmt-spring-client hawkbit-example-ddi-client From 3c46c8902fbebed7f428a248e00df062641a3db6 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 12:58:27 +0200 Subject: [PATCH 056/371] Add examples to pom Signed-off-by: SirWayne --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 69a49a042..479bb074e 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ hawkbit-autoconfigure hawkbit-cache-redis hawkbit-test-report - + examples From 1e6f9b5747b41cb0d1e81782597f3e5ed797af52 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 13:18:27 +0200 Subject: [PATCH 057/371] Add dependency Signed-off-by: SirWayne --- examples/hawkbit-example-mgmt-client/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/hawkbit-example-mgmt-client/pom.xml b/examples/hawkbit-example-mgmt-client/pom.xml index c566441de..77b914696 100644 --- a/examples/hawkbit-example-mgmt-client/pom.xml +++ b/examples/hawkbit-example-mgmt-client/pom.xml @@ -36,6 +36,10 @@ hawkbit-system-api ${project.version} + + com.google.guava + guava + com.netflix.feign feign-core From 474a496e8dbd7cfaf5f1625a6969a8c45be26ef1 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 28 Apr 2016 14:18:26 +0200 Subject: [PATCH 058/371] Added README.md Signed-off-by: Jonathan Philip Knoblauch --- examples/hawkbit-example-ddi-client/README.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 examples/hawkbit-example-ddi-client/README.md diff --git a/examples/hawkbit-example-ddi-client/README.md b/examples/hawkbit-example-ddi-client/README.md new file mode 100644 index 000000000..7463e5fd0 --- /dev/null +++ b/examples/hawkbit-example-ddi-client/README.md @@ -0,0 +1,30 @@ +# Eclipse.IoT hawkBit - Example DDI Client + +The hawkBit Example DDI Client is an implementation of a simulated device/controller that communicates with the hawkBit server via the DDI API. + +# Compile, Run and Getting Started + +#### Build hawkbit-example-ddi-client + +``` +$ cd hawkbit/examples/hawkbit-example-ddi-client +$ mvn clean install +``` + +#### Run hawkBit Example DDI Client + +Start the [hawkBit example app](../hawkbit-example-app). + +Create an instance of the hawkBit Example DDI Client and run it as thread e.g. in the ExecutorService. + +``` +DdiExampleClient ddiExampleClient = new DdiExampleClient("http://localhost:8080/", "controllerIdName", "DEFAULT", new DoNotSaveArtifacts()); +ExecutorService executorService = Executors.newFixedThreadPool(1); +executorService.execute(ddiExampleClient); +``` + +#### Getting started with hawkBit Example DDI Client + +After the hawkBit Example DDI Client has started it will poll once against the given hawkBit server and form then on depending on your polling configuration. +Once the hawkBit Example DDI Client has polled successful your will see a target in the deployment view regarding the given controller id of your hawkBit Example DDI Client. + From 8e8545092f7240a0ef0a09687e0a0b4fd558e4df Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 28 Apr 2016 14:42:04 +0200 Subject: [PATCH 059/371] Updated README.md for examples Signed-off-by: Jonathan Philip Knoblauch --- examples/README.md | 7 +++++-- examples/hawkbit-example-ddi-client/README.md | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/examples/README.md b/examples/README.md index 0d6e0c18a..de9cbcab8 100644 --- a/examples/README.md +++ b/examples/README.md @@ -2,8 +2,11 @@ Example projects that show how _hawkBit_ can be used to create, run or access an _hawkBit_ empowered update server. +- `hawkbit-custom-theme-example` : Example for a customized theme for Management UI. - `hawkbit-device-simulator` : Simulates device software updates, leveraging the hawkBit device integration options. - `hawkbit-example-app` : Allows you to run a Spring Boot and hawkBit based update server. Includes all _hawkBit_ interfaces, i.e. DDI, DMF, Mgmt-API, Mgmt-UI. -- `hawkbit-custom-theme-example` : Example for a customized theme for Management UI. -- `hawkbit-mgmt-api-client` : Example client for the _hawkBit_ Management API. +- `hawkbit-example-ddi-client` : Example _hawkBit_ DDI client based on the _hawkBit_ DDI API. +- `hawkbit-example-feign-core-client` : Core resources for the examples. +- `hawkbit-example-mgmt-client` : Example client for the _hawkBit_ Management API +- `hawkbit-example-mgmt-spring-client` : Example client for the _hawkBit_ Management API based on Spring boot. diff --git a/examples/hawkbit-example-ddi-client/README.md b/examples/hawkbit-example-ddi-client/README.md index 7463e5fd0..7d4301fbb 100644 --- a/examples/hawkbit-example-ddi-client/README.md +++ b/examples/hawkbit-example-ddi-client/README.md @@ -26,5 +26,5 @@ executorService.execute(ddiExampleClient); #### Getting started with hawkBit Example DDI Client After the hawkBit Example DDI Client has started it will poll once against the given hawkBit server and form then on depending on your polling configuration. -Once the hawkBit Example DDI Client has polled successful your will see a target in the deployment view regarding the given controller id of your hawkBit Example DDI Client. +After the hawkBit Example DDI Client has polled successful your will see a target in the deployment view regarding the given controller id of your hawkBit Example DDI Client. From a6386ecdff8f9a382d9cec816737d7e747c31e02 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 16:20:14 +0200 Subject: [PATCH 060/371] Remove unused dependencies Signed-off-by: SirWayne --- hawkbit-rest-core/pom.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml index 2275a74a1..ab322d6e9 100644 --- a/hawkbit-rest-core/pom.xml +++ b/hawkbit-rest-core/pom.xml @@ -35,14 +35,6 @@ tomcat-embed-core provided - - org.springframework.data - spring-data-commons - - - org.springframework - spring-web - From f5cf4d811fd70f6b0a262c9dc59a6d94d187c83c Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 16:23:07 +0200 Subject: [PATCH 061/371] Remove unused dependencies Signed-off-by: SirWayne --- .../hawkbit-example-feign-core-client/pom.xml | 69 +++++++------------ hawkbit-rest-core/pom.xml | 13 +++- 2 files changed, 34 insertions(+), 48 deletions(-) diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-feign-core-client/pom.xml index 0c08fa774..5aca58f05 100644 --- a/examples/hawkbit-example-feign-core-client/pom.xml +++ b/examples/hawkbit-example-feign-core-client/pom.xml @@ -1,51 +1,30 @@ + - 4.0.0 - - org.eclipse.hawkbit - hawkbit-examples-parent - 0.2.0-SNAPSHOT - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.eclipse.hawkbit + hawkbit-examples-parent + 0.2.0-SNAPSHOT + - hawkbit-example-feign-core-client - hawkbit-example-feign-core-client + hawkbit-example-feign-core-client + hawkbit-example-feign-core-client - - - - org.springframework.cloud - spring-cloud-netflix - 1.0.7.RELEASE - pom - import - - - - - - com.netflix.feign - feign-core - - - 8.14.2 - - - com.netflix.feign - feign-jackson - 8.14.2 - - - com.fasterxml.jackson.core - jackson-databind - - - org.springframework.cloud - spring-cloud-starter-feign - - - org.slf4j - slf4j-api + + + com.netflix.feign + feign-core - + diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml index ab322d6e9..a4a421f0d 100644 --- a/hawkbit-rest-core/pom.xml +++ b/hawkbit-rest-core/pom.xml @@ -1,6 +1,13 @@ - + 4.0.0 From 5b9e6ddb9df47d1eacbfa56cebd86af86b423267 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 28 Apr 2016 16:26:44 +0200 Subject: [PATCH 062/371] Updates Readme.md Signed-off-by: Jonathan Philip Knoblauch --- README.md | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 0a9b0b4c6..ee6c27c3d 100644 --- a/README.md +++ b/README.md @@ -57,16 +57,29 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v # Modules -`hawkbit-core` : core elements. -`hawkbit-security-core` : core security elements. -`hawkbit-security-integration` : security integration elements to integrate security into hawkbit. -`hawkbit-artifact-repository-mongo` : artifact repository implementation to mongoDB. -`hawkbit-autoconfigure` : spring-boot auto-configuration. + +`examples` : HawkBit examples +`hawkbit-artifact-repository-mongo` : Artifact repository implementation to mongoDB. +`hawkbit-autoconfigure` : Spring-boot auto-configuration. +`hawkbit-cache-redis` : Spring cache manager configuration and implementation with redis, distributed cache and distributed events. +`hawkbit-core` : Core elements. +`hawkbit-ddi-api` : The hawkBit DDI API. +`hawkbit-ddi-resource` : Implementation of the hawkBit DDI API +`hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. `hawkbit-dmf-api` : API for the Device Management Integration. -`hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. -`hawkbit-repository` : repository implemenation based on SQL for all meta-data. -`hawkbit-http-security` : implementation for security filters for HTTP. -`hawkbit-rest-api` : API classes for the REST Management API. -`hawkbit-rest-resource` : HTTP REST endpoints for the Management and the Direct Device API. +`hawkbit-http-security` : Implementation for security filters for HTTP. +`hawkbit-mgmt-api` : The hawkBit Management API +`hawkbit-mgmt-resource` : Implementation of the hawkBit Management API +`hawkbit-repository` : Repository implementation based on SQL for all meta-data. +`hawkbit-rest-core` : Core elements for the rest modules. +`hawkbit-security-core` : Core security elements. +`hawkbit-security-integration` : Security integration elements to integrate security into hawkbit. +`hawkbit-system-api` : The hawkBit System API +`hawkbit-system-resource` : Implementation of the hawkBit System API +`hawkbit-test-report` : Test reports `hawkbit-ui` : Vaadin UI. -`hawkbit-cache-redis` : spring cache manager configuration and implementation with redis, distributed cache and distributed events. + + + + + From aefdcdfbcdc60c3d652dde41893df4f966bf63c5 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 16:42:20 +0200 Subject: [PATCH 063/371] Remove unused dependencies Signed-off-by: SirWayne --- .../hawkbit-example-feign-core-client/pom.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-feign-core-client/pom.xml index 5aca58f05..5fb983236 100644 --- a/examples/hawkbit-example-feign-core-client/pom.xml +++ b/examples/hawkbit-example-feign-core-client/pom.xml @@ -25,6 +25,21 @@ com.netflix.feign feign-core + + 8.14.2 + + + org.springframework + spring-web + + + org.springframework.cloud + spring-cloud-netflix-core + 1.0.7.RELEASE + + + org.slf4j + slf4j-api From 2b1bfd83ab11c5a846c6c61dda7cc4c935fcfc35 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 18:17:11 +0200 Subject: [PATCH 064/371] Add feign slf4j Signed-off-by: SirWayne --- examples/hawkbit-example-feign-core-client/pom.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-feign-core-client/pom.xml index 5fb983236..4f29a198d 100644 --- a/examples/hawkbit-example-feign-core-client/pom.xml +++ b/examples/hawkbit-example-feign-core-client/pom.xml @@ -38,8 +38,9 @@ 1.0.7.RELEASE - org.slf4j - slf4j-api + com.netflix.feign + feign-slf4j + 8.14.2 From 4560856e895defb6acb676e4f57f5380f2ca923c Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 18:30:31 +0200 Subject: [PATCH 065/371] Add feign version into examples parent pom Signed-off-by: SirWayne --- examples/hawkbit-example-ddi-client/pom.xml | 6 ---- .../hawkbit-example-feign-core-client/pom.xml | 3 -- examples/hawkbit-example-mgmt-client/pom.xml | 2 -- .../pom.xml | 4 --- examples/pom.xml | 29 +++++++++++++++++++ 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index 88e262d79..02841d0c6 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -41,16 +41,10 @@ com.netflix.feign feign-core - - - 8.14.2 com.netflix.feign feign-jackson - - - 8.14.2 javax.servlet diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-feign-core-client/pom.xml index 4f29a198d..49c08fd9c 100644 --- a/examples/hawkbit-example-feign-core-client/pom.xml +++ b/examples/hawkbit-example-feign-core-client/pom.xml @@ -25,8 +25,6 @@ com.netflix.feign feign-core - - 8.14.2 org.springframework @@ -40,7 +38,6 @@ com.netflix.feign feign-slf4j - 8.14.2 diff --git a/examples/hawkbit-example-mgmt-client/pom.xml b/examples/hawkbit-example-mgmt-client/pom.xml index 77b914696..446ee55da 100644 --- a/examples/hawkbit-example-mgmt-client/pom.xml +++ b/examples/hawkbit-example-mgmt-client/pom.xml @@ -44,12 +44,10 @@ com.netflix.feign feign-core - 8.14.2 com.netflix.feign feign-jackson - 8.14.2 com.fasterxml.jackson.core diff --git a/examples/hawkbit-example-mgmt-spring-client/pom.xml b/examples/hawkbit-example-mgmt-spring-client/pom.xml index 975423a7f..73f7ba248 100644 --- a/examples/hawkbit-example-mgmt-spring-client/pom.xml +++ b/examples/hawkbit-example-mgmt-spring-client/pom.xml @@ -63,18 +63,14 @@ com.netflix.feign feign-core - - 8.14.2 com.netflix.feign feign-jackson - 8.14.2 com.fasterxml.jackson.core jackson-databind - 2.5.5 hibernate-validator diff --git a/examples/pom.xml b/examples/pom.xml index 3006c6f31..32356e8a6 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -29,5 +29,34 @@ hawkbit-example-mgmt-spring-client hawkbit-example-ddi-client + + + + 8.14.2 + + + + + + com.netflix.feign + feign-core + + + ${feign.version} + + + com.netflix.feign + feign-jackson + + + ${feign.version} + + + com.netflix.feign + feign-slf4j + ${feign.version} + + + \ No newline at end of file From 37e576103a3a16630372b9196265d1dbfad58a09 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 18:38:19 +0200 Subject: [PATCH 066/371] Add feign version into examples parent pom Signed-off-by: SirWayne --- examples/hawkbit-example-feign-core-client/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-feign-core-client/pom.xml index 49c08fd9c..5514db95d 100644 --- a/examples/hawkbit-example-feign-core-client/pom.xml +++ b/examples/hawkbit-example-feign-core-client/pom.xml @@ -34,6 +34,10 @@ org.springframework.cloud spring-cloud-netflix-core 1.0.7.RELEASE + + + org.slf4j + slf4j-api com.netflix.feign From f33c8c05e2c33ba07b870014e6601bd60afc3dae Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 3 May 2016 12:52:53 +0200 Subject: [PATCH 067/371] Add download server api Signed-off-by: SirWayne --- examples/hawkbit-custom-theme-example/pom.xml | 2 +- examples/hawkbit-example-app/pom.xml | 2 +- hawkbit-autoconfigure/pom.xml | 2 +- hawkbit-ddi-api/pom.xml | 5 --- .../ddi/rest/api/DdiRestConstants.java | 28 +++--------- hawkbit-ddi-dl-api/pom.xml | 29 +++++++++++++ .../DdiDlArtifactStoreControllerRestApi.java | 26 ++++-------- .../ddi/dl/rest/api/DdiDlRestConstants.java | 40 ++++++++++++++++++ hawkbit-ddi-resource/pom.xml | 5 +++ .../rest/resource/DataConversionHelper.java | 7 +-- .../resource/DdiArtifactStoreController.java | 4 +- {hawkbit-ui => hawkbit-mgmt-ui}/.gitignore | 0 {hawkbit-ui => hawkbit-mgmt-ui}/pom.xml | 2 +- .../src/main/.gitignore | 0 .../push/AsyncVaadinServletConfiguration.java | 0 .../SpringSecurityAtmosphereInterceptor.java | 0 .../repository/OffsetBasedPageRequest.java | 0 .../repository/SpPermissionChecker.java | 0 .../eclipse/hawkbit/ui/AppWidgetSet.gwt.xml | 0 .../eclipse/hawkbit/ui/DefaultHawkbitUI.java | 0 .../hawkbit/ui/DispatcherRunnable.java | 0 .../org/eclipse/hawkbit/ui/ErrorView.java | 0 .../hawkbit/ui/HawkbitEventProvider.java | 0 .../org/eclipse/hawkbit/ui/HawkbitUI.java | 0 .../eclipse/hawkbit/ui/UIEventProvider.java | 0 .../org/eclipse/hawkbit/ui/UiProperties.java | 0 .../ui/artifacts/UploadArtifactView.java | 0 .../artifacts/UploadArtifactViewMenuItem.java | 0 .../artifacts/details/ArtifactBeanQuery.java | 0 .../details/ArtifactDetailsLayout.java | 0 .../artifacts/event/ArtifactDetailsEvent.java | 0 .../ui/artifacts/event/SMFilterEvent.java | 0 .../artifacts/event/SoftwareModuleEvent.java | 0 .../event/SoftwareModuleTypeEvent.java | 0 .../event/UploadArtifactUIEvent.java | 0 .../event/UploadViewAcceptCriteria.java | 0 .../footer/SMDeleteActionsLayout.java | 0 .../UploadViewConfirmationWindowLayout.java | 0 .../smtable/BaseSwModuleBeanQuery.java | 0 .../smtable/ProxyBaseSoftwareModuleItem.java | 0 .../SoftwareModuleAddUpdateWindow.java | 0 .../smtable/SoftwareModuleDetails.java | 0 .../smtable/SoftwareModuleTable.java | 0 .../smtable/SoftwareModuleTableHeader.java | 0 .../smtable/SoftwareModuleTableLayout.java | 0 .../CreateUpdateSoftwareTypeLayout.java | 0 .../smtype/SMTypeFilterButtonClick.java | 0 .../artifacts/smtype/SMTypeFilterButtons.java | 0 .../artifacts/smtype/SMTypeFilterHeader.java | 0 .../artifacts/smtype/SMTypeFilterLayout.java | 0 .../artifacts/state/ArtifactUploadState.java | 0 .../ui/artifacts/state/CustomFile.java | 0 .../state/SoftwareModuleFilters.java | 0 .../upload/UploadConfirmationwindow.java | 0 .../ui/artifacts/upload/UploadHandler.java | 0 .../ui/artifacts/upload/UploadLayout.java | 0 .../artifacts/upload/UploadResultWindow.java | 0 .../ui/artifacts/upload/UploadStatus.java | 0 .../upload/UploadStatusInfoWindow.java | 0 .../ui/common/AbstractAcceptCriteria.java | 0 .../hawkbit/ui/common/ConfirmationDialog.java | 0 .../hawkbit/ui/common/CoordinatesToColor.java | 0 .../common/DistributionSetTypeBeanQuery.java | 0 .../ui/common/ManagmentEntityState.java | 0 .../common/SoftwareModuleTypeBeanQuery.java | 0 .../AbstractConfirmationWindowLayout.java | 0 .../confirmwindow/layout/ConfirmationTab.java | 0 .../layout/ConfirmationWindowEvents.java | 0 ...amedVersionedEntityTableDetailsLayout.java | 0 .../AbstractTableDetailsLayout.java | 0 .../SoftwareModuleDetailsTable.java | 0 .../AbstractFilterButtonClickBehaviour.java | 0 .../filterlayout/AbstractFilterButtons.java | 0 .../filterlayout/AbstractFilterHeader.java | 0 .../filterlayout/AbstractFilterLayout.java | 0 .../AbstractFilterMultiButtonClick.java | 0 .../AbstractFilterSingleButtonClick.java | 0 .../footer/AbstractDeleteActionsLayout.java | 0 .../hawkbit/ui/common/grid/AbstractGrid.java | 0 .../ui/common/grid/AbstractGridHeader.java | 0 .../ui/common/grid/AbstractGridLayout.java | 0 .../table/AbstractNamedVersionTable.java | 0 .../ui/common/table/AbstractTable.java | 0 .../ui/common/table/AbstractTableHeader.java | 0 .../ui/common/table/AbstractTableLayout.java | 0 .../ui/common/table/BaseEntityEvent.java | 0 .../ui/common/table/BaseEntityEventType.java | 0 .../common/tagdetails/AbstractTagToken.java | 0 .../tagdetails/AbstractTargetTagToken.java | 0 .../tagdetails/DistributionTagToken.java | 0 .../ui/common/tagdetails/TargetTagToken.java | 0 .../components/DistributionSetInfoPanel.java | 0 .../ui/components/ProxyDistribution.java | 0 .../hawkbit/ui/components/ProxyTarget.java | 0 .../ui/components/ProxyTargetFilter.java | 0 .../ui/components/SPNotificationMessage.java | 0 .../components/SPTargetAttributesLayout.java | 0 .../hawkbit/ui/components/SPUIButton.java | 0 .../hawkbit/ui/components/SPUICheckBox.java | 0 .../ui/components/SPUIComponentProvider.java | 0 .../ui/components/SPUIErrorHandler.java | 0 .../ui/components/SPUIHorizontalLayout.java | 0 .../hawkbit/ui/components/SPUITabSheet.java | 0 .../components/SPUITableHorizonatlLayout.java | 0 .../ui/components/SPUIUpdateLogLayout.java | 0 .../CustomRendererWidgetSet.gwt.xml | 0 .../client/HtmlButtonRendererConnector.java | 0 .../client/HtmlLabelRendererConnector.java | 0 .../client/LinkRendererConnector.java | 0 .../client/renderers/HtmlButtonRenderer.java | 0 .../client/renderers/HtmlLabelRenderer.java | 0 .../client/renderers/LinkRenderer.java | 0 .../renderers/HtmlButtonRenderer.java | 0 .../renderers/HtmlLabelRenderer.java | 0 .../renderers/LinkRenderer.java | 0 .../ui/decorators/SPUIButtonDecorator.java | 0 .../SPUIButtonStyleLargeIconNoBorder.java | 0 .../SPUIButtonStylePrimarySmall.java | 0 .../ui/decorators/SPUIButtonStyleSmall.java | 0 .../SPUIButtonStyleSmallNoBorder.java | 0 .../SPUIButtonStyleSmallNoBorderUH.java | 0 .../SPUIButtonStyleSmallNoBorderUHS.java | 0 .../ui/decorators/SPUIButtonStyleTiny.java | 0 .../ui/decorators/SPUIComboBoxDecorator.java | 0 .../ui/decorators/SPUIEmbedDecorator.java | 0 .../hawkbit/ui/decorators/SPUIEmbedValue.java | 0 .../decorators/SPUIHeaderLayoutDecorator.java | 0 .../ui/decorators/SPUILabelDecorator.java | 0 .../ui/decorators/SPUITagButtonStyle.java | 0 .../ui/decorators/SPUITextAreaDecorator.java | 0 .../ui/decorators/SPUITextFieldDecorator.java | 0 .../ui/decorators/SPUIWindowDecorator.java | 0 .../ui/distributions/DistributionsView.java | 0 .../DistributionsViewMenuItem.java | 0 .../CreateUpdateDistSetTypeLayout.java | 0 .../disttype/DSTypeFilterButtonClick.java | 0 .../disttype/DSTypeFilterButtons.java | 0 .../disttype/DSTypeFilterHeader.java | 0 .../disttype/DSTypeFilterLayout.java | 0 .../dstable/DistributionSetDetails.java | 0 .../dstable/DistributionSetTable.java | 0 .../dstable/DistributionSetTableHeader.java | 0 .../dstable/DistributionSetTableLayout.java | 0 .../dstable/ManageDistBeanQuery.java | 0 .../event/DistributionSetTypeEvent.java | 0 .../event/DistributionsUIEvent.java | 0 .../DistributionsViewAcceptCriteria.java | 0 .../ui/distributions/event/DragEvent.java | 0 .../event/SaveActionWindowEvent.java | 0 .../SoftwareModuleAssignmentDiscardEvent.java | 0 .../distributions/event/SwModuleUIEvent.java | 0 .../footer/DSDeleteActionsLayout.java | 0 ...DistributionsConfirmationWindowLayout.java | 0 .../smtable/ProxyBaseSwModuleItem.java | 0 .../smtable/SwModuleBeanQuery.java | 0 .../smtable/SwModuleDetails.java | 0 .../distributions/smtable/SwModuleTable.java | 0 .../smtable/SwModuleTableHeader.java | 0 .../smtable/SwModuleTableLayout.java | 0 .../smtype/DistSMTypeFilterButtonClick.java | 0 .../smtype/DistSMTypeFilterButtons.java | 0 .../smtype/DistSMTypeFilterHeader.java | 0 .../smtype/DistSMTypeFilterLayout.java | 0 .../state/ManageDistFilters.java | 0 .../state/ManageDistUIState.java | 0 .../state/ManageSoftwareModuleFilters.java | 0 .../hawkbit/ui/filter/FilterExpression.java | 0 .../eclipse/hawkbit/ui/filter/Filters.java | 0 .../ui/filter/target/CustomTargetFilter.java | 0 .../filter/target/TargetSearchTextFilter.java | 0 .../ui/filter/target/TargetStatusFilter.java | 0 .../ui/filter/target/TargetTagFilter.java | 0 .../CreateOrUpdateFilterHeader.java | 0 .../CreateOrUpdateFilterTable.java | 0 .../CustomTargetBeanQuery.java | 0 .../FilterManagementView.java | 0 .../FilterManagementViewMenuItem.java | 0 .../FilterQueryValidation.java | 0 .../TargetFilterBeanQuery.java | 0 .../filtermanagement/TargetFilterHeader.java | 0 .../filtermanagement/TargetFilterTable.java | 0 .../ui/filtermanagement/TokenDescription.java | 0 .../ui/filtermanagement/ValidationResult.java | 0 .../event/CustomFilterUIEvent.java | 0 .../footer/TargetFilterCountMessageLabel.java | 0 .../state/FilterManagementUIState.java | 0 .../hawkbit/ui/login/HawkbitLoginUI.java | 0 .../eclipse/hawkbit/ui/login/LoginView.java | 0 .../hawkbit/ui/management/DeploymentView.java | 0 .../ui/management/DeploymentViewMenuItem.java | 0 .../actionhistory/ActionHistoryComponent.java | 0 .../actionhistory/ActionHistoryHeader.java | 0 .../actionhistory/ActionHistoryTable.java | 0 .../DistributionAddUpdateWindowLayout.java | 0 .../dstable/DistributionBeanQuery.java | 0 .../dstable/DistributionDetails.java | 0 .../management/dstable/DistributionTable.java | 0 .../dstable/DistributionTableHeader.java | 0 .../dstable/DistributionTableLayout.java | 0 ...eateUpdateDistributionTagLayoutWindow.java | 0 .../dstag/DistributionTagBeanQuery.java | 0 .../dstag/DistributionTagButtonClick.java | 0 .../dstag/DistributionTagButtons.java | 0 .../dstag/DistributionTagHeader.java | 0 .../dstag/DistributionTagLayout.java | 0 .../event/BulkUploadPopupEvent.java | 0 .../BulkUploadValidationMessageEvent.java | 0 .../event/DistributionTableEvent.java | 0 .../event/DistributionTableFilterEvent.java | 0 .../event/DistributionTagDropEvent.java | 0 .../ui/management/event/DragEvent.java | 0 .../management/event/ManagementUIEvent.java | 0 .../event/ManagementViewAcceptCriteria.java | 0 .../ui/management/event/PinUnpinEvent.java | 0 .../event/SaveActionWindowEvent.java | 0 .../event/TargetAddUpdateWindowEvent.java | 0 .../management/event/TargetFilterEvent.java | 0 .../ui/management/event/TargetTableEvent.java | 0 .../footer/ActionTypeOptionGroupLayout.java | 0 .../management/footer/CountMessageLabel.java | 0 .../footer/DeleteActionsLayout.java | 0 .../footer/DeleteActionsLayoutHelper.java | 0 .../ManangementConfirmationWindowLayout.java | 0 .../state/DistributionTableFilters.java | 0 .../management/state/ManagementUIState.java | 0 .../ui/management/state/TargetBulkUpload.java | 0 .../state/TargetFilterParameters.java | 0 .../management/state/TargetTableFilters.java | 0 .../management/tag/CreateUpdateTagLayout.java | 0 .../hawkbit/ui/management/tag/ProxyTag.java | 0 .../management/tag/SpColorPickerPreview.java | 0 .../hawkbit/ui/management/tag/TagIdName.java | 0 .../targettable/BulkUploadHandler.java | 0 .../TargetAddUpdateWindowLayout.java | 0 .../targettable/TargetBeanQuery.java | 0 .../targettable/TargetBulkTokenTags.java | 0 .../TargetBulkUpdateWindowLayout.java | 0 .../management/targettable/TargetDetails.java | 0 .../management/targettable/TargetTable.java | 0 .../targettable/TargetTableHeader.java | 0 .../targettable/TargetTableLayout.java | 0 .../AbstractTargetTagFilterLayout.java | 0 .../CreateUpdateTargetTagLayout.java | 0 .../CustomTargetTagFilterButtonClick.java | 0 .../targettag/FilterByStatusLayout.java | 0 .../targettag/MultipleTargetFilter.java | 0 .../targettag/TargetFilterQueryButtons.java | 0 .../targettag/TargetTagBeanQuery.java | 0 .../targettag/TargetTagFilterButtonClick.java | 0 .../targettag/TargetTagFilterButtons.java | 0 .../targettag/TargetTagFilterHeader.java | 0 .../targettag/TargetTagFilterLayout.java | 0 .../hawkbit/ui/menu/DashboardEvent.java | 0 .../hawkbit/ui/menu/DashboardMenu.java | 0 .../hawkbit/ui/menu/DashboardMenuItem.java | 0 .../ui/push/DelayedEventBusPushStrategy.java | 0 .../hawkbit/ui/push/EventPushStrategy.java | 0 .../ui/rollout/DistributionBarHelper.java | 0 .../hawkbit/ui/rollout/RolloutView.java | 0 .../ui/rollout/RolloutViewMenuItem.java | 0 .../hawkbit/ui/rollout/StatusFontIcon.java | 0 .../ui/rollout/event/RolloutEvent.java | 0 .../rollout/AddUpdateRolloutWindowLayout.java | 0 .../rollout/DistributionBeanQuery.java | 0 .../ui/rollout/rollout/ProxyRollout.java | 0 .../ui/rollout/rollout/RolloutBeanQuery.java | 0 .../ui/rollout/rollout/RolloutListGrid.java | 0 .../ui/rollout/rollout/RolloutListHeader.java | 0 .../ui/rollout/rollout/RolloutListView.java | 0 .../rolloutgroup/ProxyRolloutGroup.java | 0 .../rolloutgroup/RolloutGroupBeanQuery.java | 0 .../rolloutgroup/RolloutGroupListGrid.java | 0 .../rolloutgroup/RolloutGroupsListHeader.java | 0 .../rolloutgroup/RolloutGroupsListView.java | 0 .../RolloutGroupTargetsBeanQuery.java | 0 .../RolloutGroupTargetsCountLabelMessage.java | 0 .../RolloutGroupTargetsListGrid.java | 0 .../RolloutGroupTargetsListHeader.java | 0 .../RolloutGroupTargetsListView.java | 0 .../ui/rollout/state/RolloutUIState.java | 0 .../AuthenticationConfigurationView.java | 0 .../BaseConfigurationView.java | 0 .../ConfigurationGroup.java | 0 .../ConfigurationItem.java | 0 .../DefaultDistributionSetTypeLayout.java | 0 .../PollingConfigurationView.java | 0 .../TenantConfigurationDashboardView.java | 0 ...antConfigurationDashboardViewMenuItem.java | 0 ...AuthenticationTenantConfigurationItem.java | 0 ...wnloadAuthenticationConfigurationItem.java | 0 .../AuthenticationConfigurationItem.java | 0 ...ficateAuthenticationConfigurationItem.java | 0 ...yTokenAuthenticationConfigurationItem.java | 0 ...yTokenAuthenticationConfigurationItem.java | 0 .../polling/DurationConfigField.java | 0 .../polling/DurationField.java | 0 .../hawkbit/ui/themes/HawkbitTheme.java | 0 .../hawkbit/ui/utils/HawkbitCommonUtil.java | 0 .../org/eclipse/hawkbit/ui/utils/I18N.java | 0 .../hawkbit/ui/utils/NamingThreadFactory.java | 0 .../hawkbit/ui/utils/NotificationMessage.java | 0 .../hawkbit/ui/utils/SPDateTimeUtil.java | 0 .../ui/utils/SPUIButtonDefinitions.java | 0 .../ui/utils/SPUIComponetIdProvider.java | 0 .../hawkbit/ui/utils/SPUIDefinitions.java | 0 .../ui/utils/SPUILabelDefinitions.java | 0 .../ui/utils/SPUIStyleDefinitions.java | 0 .../ui/utils/SPUITargetDefinitions.java | 0 .../hawkbit/ui/utils/SpringContextHelper.java | 0 .../eclipse/hawkbit/ui/utils/TableColumn.java | 0 .../hawkbit/ui/utils/UINotification.java | 0 .../src/main/resources/VAADIN/.gitignore | 0 .../VAADIN/themes/hawkbit/.gitignore | 0 .../hawkbit/customstyles/accordion.scss | 0 .../hawkbit/customstyles/action-history.scss | 0 .../hawkbit/customstyles/artifact-upload.scss | 0 .../hawkbit/customstyles/colorpicker.scss | 0 .../themes/hawkbit/customstyles/common.scss | 0 .../hawkbit/customstyles/dashboardview.scss | 0 .../hawkbit/customstyles/drop-hint.scss | 0 .../customstyles/filter-layout-styles.scss | 0 .../hawkbit/customstyles/filter-status.scss | 0 .../hawkbit/customstyles/footer-common.scss | 0 .../hawkbit/customstyles/generic-styles.scss | 0 .../customstyles/hawkbitvariables.scss | 0 .../themes/hawkbit/customstyles/login.scss | 0 .../themes/hawkbit/customstyles/others.scss | 0 .../hawkbit/customstyles/popup-common.scss | 0 .../hawkbit/customstyles/popup-window.scss | 0 .../themes/hawkbit/customstyles/rollout.scss | 0 .../customstyles/statusprogressbar.scss | 0 .../hawkbit/customstyles/systemconfig.scss | 0 .../hawkbit/customstyles/table-common.scss | 0 .../hawkbit/customstyles/table-content.scss | 0 .../customstyles/table-header-common.scss | 0 .../themes/hawkbit/customstyles/table.scss | 0 .../themes/hawkbit/customstyles/tags.scss | 0 .../customstyles/target-filter-query.scss | 0 .../VAADIN/themes/hawkbit/hawkbittheme.scss | 0 .../hawkbit/images/lightCorner_selected1.png | Bin .../themes/hawkbit/images/lightCorner_top.png | Bin .../hawkbit/images/profile-pic-57px.jpg | Bin .../VAADIN/themes/hawkbit/layouts/footer.html | 0 .../VAADIN/themes/hawkbit/styles.scss | 0 .../src/main/resources/messages.properties | 0 .../src/main/resources/messages_de.properties | 0 .../src/main/resources/messages_en.properties | 0 ...ringSecurityAtmosphereInterceptorTest.java | 0 .../ui/utils/NamingThreadFactoryTest.java | 0 .../ui/utils/SPUIComponentProviderTest.java | 0 pom.xml | 3 +- 351 files changed, 101 insertions(+), 54 deletions(-) create mode 100644 hawkbit-ddi-dl-api/pom.xml rename hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java => hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlArtifactStoreControllerRestApi.java (66%) create mode 100644 hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlRestConstants.java rename {hawkbit-ui => hawkbit-mgmt-ui}/.gitignore (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/pom.xml (99%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/.gitignore (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/.gitignore (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/.gitignore (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/VAADIN/themes/hawkbit/styles.scss (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/messages.properties (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/messages_de.properties (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/main/resources/messages_en.properties (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java (100%) rename {hawkbit-ui => hawkbit-mgmt-ui}/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java (100%) diff --git a/examples/hawkbit-custom-theme-example/pom.xml b/examples/hawkbit-custom-theme-example/pom.xml index 7caa99ba2..2cbee5c0a 100644 --- a/examples/hawkbit-custom-theme-example/pom.xml +++ b/examples/hawkbit-custom-theme-example/pom.xml @@ -66,7 +66,7 @@ org.eclipse.hawkbit - hawkbit-ui + hawkbit-mgmt-ui ${project.version} diff --git a/examples/hawkbit-example-app/pom.xml b/examples/hawkbit-example-app/pom.xml index 86ce5d9eb..efbcf9e9e 100644 --- a/examples/hawkbit-example-app/pom.xml +++ b/examples/hawkbit-example-app/pom.xml @@ -84,7 +84,7 @@ org.eclipse.hawkbit - hawkbit-ui + hawkbit-mgmt-ui ${project.version} diff --git a/hawkbit-autoconfigure/pom.xml b/hawkbit-autoconfigure/pom.xml index 3fb623978..446fb3f56 100644 --- a/hawkbit-autoconfigure/pom.xml +++ b/hawkbit-autoconfigure/pom.xml @@ -40,7 +40,7 @@ org.eclipse.hawkbit - hawkbit-ui + hawkbit-mgmt-ui ${project.version} true diff --git a/hawkbit-ddi-api/pom.xml b/hawkbit-ddi-api/pom.xml index e91053fc5..969f0d930 100644 --- a/hawkbit-ddi-api/pom.xml +++ b/hawkbit-ddi-api/pom.xml @@ -33,11 +33,6 @@ javax.validation validation-api - - javax.servlet - javax.servlet-api - provided - org.hibernate hibernate-validator diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRestConstants.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRestConstants.java index f6356c466..25be5b1f8 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRestConstants.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiRestConstants.java @@ -18,11 +18,6 @@ public final class DdiRestConstants { */ public static final String BASE_V1_REQUEST_MAPPING = "/{tenant}/controller/v1"; - /** - * The base URL mapping of the artifact repository rest resources. - */ - public static final String ARTIFACTS_V1_REQUEST_MAPPING = "/{tenant}/controller/artifacts/v1"; - /** * Deployment action resources. */ @@ -38,28 +33,17 @@ public final class DdiRestConstants { */ public static final String FEEDBACK = "feedback"; - /** - * Config data action resources. - */ - public static final String CONFIG_DATA_ACTION = "configData"; - - /** - * The artifact URL mapping rest resource. - */ - public static final String ARTIFACT_DOWNLOAD = "artifact"; - - /** - * The artifact by filename URL mapping rest resource. - */ - public static final String ARTIFACT_DOWNLOAD_BY_FILENAME = "/filename"; - /** * File suffix for MDH hash download (see Linux md5sum). */ public static final String ARTIFACT_MD5_DWNL_SUFFIX = ".MD5SUM"; - // constant class, private constructor. - private DdiRestConstants() { + /** + * Config data action resources. + */ + public static final String CONFIG_DATA_ACTION = "configData"; + private DdiRestConstants() { + // constant class, private constructor. } } diff --git a/hawkbit-ddi-dl-api/pom.xml b/hawkbit-ddi-dl-api/pom.xml new file mode 100644 index 000000000..f53b4e0d1 --- /dev/null +++ b/hawkbit-ddi-dl-api/pom.xml @@ -0,0 +1,29 @@ + + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-parent + 0.2.0-SNAPSHOT + + hawkbit-ddi-dl-api + hawkBit :: DDI Download Server (DL) API + + + + org.springframework.security + spring-security-web + + + diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java b/hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlArtifactStoreControllerRestApi.java similarity index 66% rename from hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java rename to hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlArtifactStoreControllerRestApi.java index dc8b4bf96..da938b2d1 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/rest/api/DdiArtifactStoreControllerRestApi.java +++ b/hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlArtifactStoreControllerRestApi.java @@ -6,11 +6,10 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ddi.rest.api; +package org.eclipse.hawkbit.ddi.dl.rest.api; import java.io.InputStream; -import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.web.bind.annotation.AuthenticationPrincipal; @@ -22,19 +21,15 @@ import org.springframework.web.bind.annotation.ResponseBody; /** * REST resource handling for artifact download operations. */ -@RequestMapping(DdiRestConstants.ARTIFACTS_V1_REQUEST_MAPPING) -public interface DdiArtifactStoreControllerRestApi { +@RequestMapping(DdiDlRestConstants.ARTIFACTS_V1_REQUEST_MAPPING) +public interface DdiDlArtifactStoreControllerRestApi { /** - * Handles GET {@link DdiArtifact} download request. This could be full or - * partial download request. + * Handles GET download request. This could be full or partial download + * request. * * @param fileName * to search for - * @param response - * to write to - * @param request - * from the client * @param targetid * of authenticated target * @@ -42,24 +37,21 @@ public interface DdiArtifactStoreControllerRestApi { * {@link HttpStatus#OK} or in case of partial download * {@link HttpStatus#PARTIAL_CONTENT}. */ - @RequestMapping(method = RequestMethod.GET, value = DdiRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + "/{fileName}") + @RequestMapping(method = RequestMethod.GET, value = DdiDlRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + "/{fileName}") @ResponseBody public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, - @AuthenticationPrincipal final String targetid); /** - * Handles GET {@link DdiArtifact} MD5 checksum file download request. + * Handles GET MD5 checksum file download request. * * @param fileName * to search for - * @param response - * to write to * * @return response of the servlet */ - @RequestMapping(method = RequestMethod.GET, value = DdiRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + "/{fileName}" - + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX) + @RequestMapping(method = RequestMethod.GET, value = DdiDlRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + "/{fileName}" + + DdiDlRestConstants.ARTIFACT_MD5_DWNL_SUFFIX) @ResponseBody public ResponseEntity downloadArtifactMD5ByFilename(@PathVariable("fileName") final String fileName); diff --git a/hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlRestConstants.java b/hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlRestConstants.java new file mode 100644 index 000000000..40ba5050f --- /dev/null +++ b/hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlRestConstants.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.dl.rest.api; + +/** + * Constants for the direct device integration rest resources. + */ +public final class DdiDlRestConstants { + + /** + * The base URL mapping of the artifact repository rest resources. + */ + public static final String ARTIFACTS_V1_REQUEST_MAPPING = "/{tenant}/controller/artifacts/v1"; + + /** + * The artifact URL mapping rest resource. + */ + public static final String ARTIFACT_DOWNLOAD = "artifact"; + + /** + * The artifact by filename URL mapping rest resource. + */ + public static final String ARTIFACT_DOWNLOAD_BY_FILENAME = "/filename"; + + /** + * File suffix for MDH hash download (see Linux md5sum). + */ + public static final String ARTIFACT_MD5_DWNL_SUFFIX = ".MD5SUM"; + + // constant class, private constructor. + private DdiDlRestConstants() { + + } +} diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index 1615cf697..f3eb5c2c7 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -26,6 +26,11 @@ hawkbit-ddi-api ${project.version} + + org.eclipse.hawkbit + hawkbit-ddi-dl-api + ${project.version} + org.eclipse.hawkbit hawkbit-rest-core 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 576e11348..f05bb6d98 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 @@ -20,6 +20,7 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.api.UrlProtocol; +import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlRestConstants; import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; import org.eclipse.hawkbit.ddi.json.model.DdiArtifactHash; import org.eclipse.hawkbit.ddi.json.model.DdiChunk; @@ -93,9 +94,9 @@ public final class DataConversionHelper { final String linkHttps = artifactUrlHandler.getUrl(targetid, artifact.getSoftwareModule().getId(), artifact.getFilename(), artifact.getSha1Hash(), UrlProtocol.HTTPS); file.add(new Link(linkHttps).withRel("download")); - file.add(new Link(linkHttps + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum")); + file.add(new Link(linkHttps + DdiDlRestConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum")); file.add(new Link(linkHttp).withRel("download-http")); - file.add(new Link(linkHttp + DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum-http")); + file.add(new Link(linkHttp + DdiDlRestConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum-http")); files.add(file); }); @@ -147,7 +148,7 @@ public final class DataConversionHelper { final StringBuilder header = new StringBuilder(); header.append("attachment;filename="); header.append(fileName); - header.append(DdiRestConstants.ARTIFACT_MD5_DWNL_SUFFIX); + header.append(DdiDlRestConstants.ARTIFACT_MD5_DWNL_SUFFIX); response.setContentLength(content.length); response.setHeader("Content-Disposition", header.toString()); diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 8552e686d..ede05d685 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -16,7 +16,7 @@ import javax.servlet.http.HttpServletRequest; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheWriteNotify; -import org.eclipse.hawkbit.ddi.rest.api.DdiArtifactStoreControllerRestApi; +import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlArtifactStoreControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.model.Action; @@ -49,7 +49,7 @@ import org.springframework.web.context.WebApplicationContext; */ @RestController @Scope(value = WebApplicationContext.SCOPE_REQUEST) -public class DdiArtifactStoreController implements DdiArtifactStoreControllerRestApi { +public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerRestApi { private static final Logger LOG = LoggerFactory.getLogger(DdiArtifactStoreController.class); diff --git a/hawkbit-ui/.gitignore b/hawkbit-mgmt-ui/.gitignore similarity index 100% rename from hawkbit-ui/.gitignore rename to hawkbit-mgmt-ui/.gitignore diff --git a/hawkbit-ui/pom.xml b/hawkbit-mgmt-ui/pom.xml similarity index 99% rename from hawkbit-ui/pom.xml rename to hawkbit-mgmt-ui/pom.xml index e0bde576a..1c8b8e1ea 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-mgmt-ui/pom.xml @@ -16,7 +16,7 @@ hawkbit-parent 0.2.0-SNAPSHOT - hawkbit-ui + hawkbit-mgmt-ui hawkBit :: UI Bosch IoT Software Provisioning server web application diff --git a/hawkbit-ui/src/main/.gitignore b/hawkbit-mgmt-ui/src/main/.gitignore similarity index 100% rename from hawkbit-ui/src/main/.gitignore rename to hawkbit-mgmt-ui/src/main/.gitignore diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java b/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java similarity index 100% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java rename to hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java diff --git a/hawkbit-ui/src/main/resources/VAADIN/.gitignore b/hawkbit-mgmt-ui/src/main/resources/VAADIN/.gitignore similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/.gitignore rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/.gitignore diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/.gitignore b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/.gitignore similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/.gitignore rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/.gitignore diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/styles.scss b/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/styles.scss similarity index 100% rename from hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/styles.scss rename to hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/styles.scss diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-mgmt-ui/src/main/resources/messages.properties similarity index 100% rename from hawkbit-ui/src/main/resources/messages.properties rename to hawkbit-mgmt-ui/src/main/resources/messages.properties diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-mgmt-ui/src/main/resources/messages_de.properties similarity index 100% rename from hawkbit-ui/src/main/resources/messages_de.properties rename to hawkbit-mgmt-ui/src/main/resources/messages_de.properties diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-mgmt-ui/src/main/resources/messages_en.properties similarity index 100% rename from hawkbit-ui/src/main/resources/messages_en.properties rename to hawkbit-mgmt-ui/src/main/resources/messages_en.properties diff --git a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java b/hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java similarity index 100% rename from hawkbit-ui/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java rename to hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java diff --git a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java b/hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java similarity index 100% rename from hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java rename to hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java diff --git a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java b/hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java similarity index 100% rename from hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java rename to hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java diff --git a/pom.xml b/pom.xml index 479bb074e..cb97ca6d4 100644 --- a/pom.xml +++ b/pom.xml @@ -32,13 +32,14 @@ hawkbit-mgmt-api hawkbit-mgmt-resource hawkbit-ddi-api + hawkbit-ddi-dl-api hawkbit-ddi-resource hawkbit-dmf-api hawkbit-dmf-amqp hawkbit-repository hawkbit-security-integration hawkbit-http-security - hawkbit-ui + hawkbit-mgmt-ui hawkbit-artifact-repository-mongo hawkbit-autoconfigure hawkbit-cache-redis From 36d43d1e620f424a2fb9a2d76aa246901a168c58 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 3 May 2016 13:06:42 +0200 Subject: [PATCH 068/371] Update description Signed-off-by: SirWayne --- hawkbit-mgmt-resource/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index 10ed70bbb..4e5302e23 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -10,7 +10,7 @@ 0.2.0-SNAPSHOT hawkbit-mgmt-resource - hawkBit :: REST Managment Resources + hawkBit :: REST Mgmt Resources From 07d55a78af0540728d54c0472ad8f2c248801ee0 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 3 May 2016 13:33:56 +0200 Subject: [PATCH 069/371] Update dependencies Signed-off-by: SirWayne --- examples/hawkbit-example-ddi-client/pom.xml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index 02841d0c6..3da11adaf 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -61,11 +61,6 @@ - - commons-io - commons-io - 2.5 - com.google.guava guava @@ -75,16 +70,5 @@ commons-lang - - - junit - junit - test - - - ru.yandex.qatools.allure - allure-junit-adaptor - test - From 1086f29e5aff34d275b022fe19bb870cafce53fe Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 3 May 2016 13:35:29 +0200 Subject: [PATCH 070/371] Fix #99 split rest modules Signed-off-by: SirWayne --- hawkbit-ddi-dl-api/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/hawkbit-ddi-dl-api/pom.xml b/hawkbit-ddi-dl-api/pom.xml index f53b4e0d1..704267927 100644 --- a/hawkbit-ddi-dl-api/pom.xml +++ b/hawkbit-ddi-dl-api/pom.xml @@ -8,7 +8,6 @@ http://www.eclipse.org/legal/epl-v10.html --> - 4.0.0 From 2341bc8737734c571cb5f9b0cc38387c25664216 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 3 May 2016 13:46:10 +0200 Subject: [PATCH 071/371] Update Readme.md and added new Readme.md to new modules. Signed-off-by: Jonathan Philip Knoblauch --- README.md | 40 +++++++++---------- examples/README.md | 6 +-- examples/hawkbit-example-ddi-client/README.md | 5 +-- .../README.md | 13 ++++++ .../hawkbit-example-mgmt-client/README.md | 15 +++++++ .../README.md | 4 +- hawkbit-ddi-api/README.md | 12 ++++++ hawkbit-ddi-resource/README.md | 13 ++++++ hawkbit-mgmt-api/README.md | 14 +++++++ hawkbit-mgmt-resource/README.md | 13 ++++++ hawkbit-system-api/README.md | 14 +++++++ hawkbit-system-resource/README.md | 13 ++++++ 12 files changed, 134 insertions(+), 28 deletions(-) create mode 100644 examples/hawkbit-example-feign-core-client/README.md create mode 100644 examples/hawkbit-example-mgmt-client/README.md create mode 100644 hawkbit-ddi-api/README.md create mode 100644 hawkbit-ddi-resource/README.md create mode 100644 hawkbit-mgmt-api/README.md create mode 100644 hawkbit-mgmt-resource/README.md create mode 100644 hawkbit-system-api/README.md create mode 100644 hawkbit-system-resource/README.md diff --git a/README.md b/README.md index ee6c27c3d..ab90e4263 100644 --- a/README.md +++ b/README.md @@ -58,26 +58,26 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v # Modules -`examples` : HawkBit examples -`hawkbit-artifact-repository-mongo` : Artifact repository implementation to mongoDB. -`hawkbit-autoconfigure` : Spring-boot auto-configuration. -`hawkbit-cache-redis` : Spring cache manager configuration and implementation with redis, distributed cache and distributed events. -`hawkbit-core` : Core elements. -`hawkbit-ddi-api` : The hawkBit DDI API. -`hawkbit-ddi-resource` : Implementation of the hawkBit DDI API -`hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. -`hawkbit-dmf-api` : API for the Device Management Integration. -`hawkbit-http-security` : Implementation for security filters for HTTP. -`hawkbit-mgmt-api` : The hawkBit Management API -`hawkbit-mgmt-resource` : Implementation of the hawkBit Management API -`hawkbit-repository` : Repository implementation based on SQL for all meta-data. -`hawkbit-rest-core` : Core elements for the rest modules. -`hawkbit-security-core` : Core security elements. -`hawkbit-security-integration` : Security integration elements to integrate security into hawkbit. -`hawkbit-system-api` : The hawkBit System API -`hawkbit-system-resource` : Implementation of the hawkBit System API -`hawkbit-test-report` : Test reports -`hawkbit-ui` : Vaadin UI. +* `examples` : HawkBit examples +* `hawkbit-artifact-repository-mongo` : Artifact repository implementation to mongoDB. +* `hawkbit-autoconfigure` : Spring-boot auto-configuration. +* `hawkbit-cache-redis` : Spring cache manager configuration and implementation with redis, distributed cache and distributed events. +* `hawkbit-core` : Core elements. +* `hawkbit-ddi-api` : The hawkBit DDI API. +* `hawkbit-ddi-resource` : Implementation of the hawkBit DDI API +* `hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. +* `hawkbit-dmf-api` : API for the Device Management Integration. +* `hawkbit-http-security` : Implementation for security filters for HTTP. +* `hawkbit-mgmt-api` : The hawkBit Management API +* `hawkbit-mgmt-resource` : Implementation of the hawkBit Management API +* `hawkbit-repository` : Repository implementation based on SQL for all meta-data. +* `hawkbit-rest-core` : Core elements for the rest modules. +* `hawkbit-security-core` : Core security elements. +* `hawkbit-security-integration` : Security integration elements to integrate security into hawkbit. +* `hawkbit-system-api` : The hawkBit System API +* `hawkbit-system-resource` : Implementation of the hawkBit System API +* `hawkbit-test-report` : Test reports +* `hawkbit-ui` : Vaadin UI. diff --git a/examples/README.md b/examples/README.md index de9cbcab8..ce8d26962 100644 --- a/examples/README.md +++ b/examples/README.md @@ -4,9 +4,9 @@ Example projects that show how _hawkBit_ can be used to create, run or access an - `hawkbit-custom-theme-example` : Example for a customized theme for Management UI. - `hawkbit-device-simulator` : Simulates device software updates, leveraging the hawkBit device integration options. -- `hawkbit-example-app` : Allows you to run a Spring Boot and hawkBit based update server. Includes all _hawkBit_ interfaces, i.e. DDI, DMF, Mgmt-API, Mgmt-UI. -- `hawkbit-example-ddi-client` : Example _hawkBit_ DDI client based on the _hawkBit_ DDI API. +- `hawkbit-example-app` : Allows you to run the Spring Boot hawkBit app. Includes all _hawkBit_ interfaces, i.e. DDI, DMF, Mgmt-API, Mgmt-UI. +- `hawkbit-example-ddi-client` : Example _hawkBit_ DDI client based on the _hawkBit_ DDI API. Includes simulation of target. - `hawkbit-example-feign-core-client` : Core resources for the examples. - `hawkbit-example-mgmt-client` : Example client for the _hawkBit_ Management API -- `hawkbit-example-mgmt-spring-client` : Example client for the _hawkBit_ Management API based on Spring boot. +- `hawkbit-example-mgmt-spring-client` : Example client for the _hawkBit_ Management API based on Spring Boot. diff --git a/examples/hawkbit-example-ddi-client/README.md b/examples/hawkbit-example-ddi-client/README.md index 7d4301fbb..8b016ed5e 100644 --- a/examples/hawkbit-example-ddi-client/README.md +++ b/examples/hawkbit-example-ddi-client/README.md @@ -1,6 +1,6 @@ # Eclipse.IoT hawkBit - Example DDI Client -The hawkBit Example DDI Client is an implementation of a simulated device/controller that communicates with the hawkBit server via the DDI API. +The hawkBit Example DDI Client is an implementation of a simulated device/target that communicates with the hawkBit server via the DDI API. # Compile, Run and Getting Started @@ -25,6 +25,5 @@ executorService.execute(ddiExampleClient); #### Getting started with hawkBit Example DDI Client -After the hawkBit Example DDI Client has started it will poll once against the given hawkBit server and form then on depending on your polling configuration. -After the hawkBit Example DDI Client has polled successful your will see a target in the deployment view regarding the given controller id of your hawkBit Example DDI Client. +After the hawkBit Example DDI Client has started it will poll once against the given hawkBit server and form then depending on your polling configuration. After the hawkBit Example DDI Client has polled successful you will see a target in the deployment view regarding the given controller id of your hawkBit Example DDI Client. You can know assign a distributionSet to the target and let the hawkBit Example DDI Client simulated an update. diff --git a/examples/hawkbit-example-feign-core-client/README.md b/examples/hawkbit-example-feign-core-client/README.md new file mode 100644 index 000000000..27d1ea04e --- /dev/null +++ b/examples/hawkbit-example-feign-core-client/README.md @@ -0,0 +1,13 @@ +# Eclipse.IoT hawkBit - Example Feign Core Client + +This modules contains core resources that are needed by the hawkBit Example DDI Client and the hawkBit Example Management Spring Client. + +# Compile + +#### Build hawkbit-example-feign-core-client + +``` +$ cd hawkbit/examples/hawkbit-example-feign-core-client +$ mvn clean install +``` + diff --git a/examples/hawkbit-example-mgmt-client/README.md b/examples/hawkbit-example-mgmt-client/README.md new file mode 100644 index 000000000..b73ddd96b --- /dev/null +++ b/examples/hawkbit-example-mgmt-client/README.md @@ -0,0 +1,15 @@ +# Eclipse.IoT hawkBit - Example Management Client + +This modules contains an example feign client implementation based on the Mgmt API. + +Powered by [Feign](https://github.com/Netflix/feign). + +# Compile + +#### Build hawkbit-example-mgmt-client + +``` +$ cd hawkbit/examples/hawkbit-example-mgmt-client +$ mvn clean install +``` + diff --git a/examples/hawkbit-example-mgmt-spring-client/README.md b/examples/hawkbit-example-mgmt-spring-client/README.md index ac8e7a4cd..9e11e212d 100644 --- a/examples/hawkbit-example-mgmt-spring-client/README.md +++ b/examples/hawkbit-example-mgmt-spring-client/README.md @@ -1,6 +1,6 @@ -# hawkBit Management API example client +# Eclipse.IoT hawkBit - Management API Example Client -Example client that shows how to efficiently use the hawkBit management API. +Example Spring Boot client that shows how to efficiently use the hawkBit Example Management Client and the hawkBit Management API. Powered by [Feign](https://github.com/Netflix/feign). diff --git a/hawkbit-ddi-api/README.md b/hawkbit-ddi-api/README.md new file mode 100644 index 000000000..b47b74895 --- /dev/null +++ b/hawkbit-ddi-api/README.md @@ -0,0 +1,12 @@ +# Eclipse.IoT hawkBit - DDI API + +The Direct Device Integration (DDI) API is used by devices for communicating with the HawkBit Update Server through HTTP. + +# Compile + +#### Build hawkbit-ddi-api + +``` +$ cd hawkbit/hawkbit-ddi-api +$ mvn clean install +``` diff --git a/hawkbit-ddi-resource/README.md b/hawkbit-ddi-resource/README.md new file mode 100644 index 000000000..865b2946f --- /dev/null +++ b/hawkbit-ddi-resource/README.md @@ -0,0 +1,13 @@ +# Eclipse.IoT hawkBit - DDI Resource + +This is the server-side implementation of the hawkBit DDI API that is used by devices for communicating with the HawkBit Update Server through HTTP. + +# Compile + +#### Build hawkbit-ddi-resource + +``` +$ cd hawkbit/hawkbit-ddi-resource +$ mvn clean install +``` + diff --git a/hawkbit-mgmt-api/README.md b/hawkbit-mgmt-api/README.md new file mode 100644 index 000000000..eeb51c145 --- /dev/null +++ b/hawkbit-mgmt-api/README.md @@ -0,0 +1,14 @@ +# Eclipse.IoT hawkBit - Mgmt API + +This Management (Mgmt) API is used to manage and monitor the HawkBit Update Server via HTTP. This API allows Create/Read/Update/Delete operations for provisioning targets (i.e. devices) and repository content (i.e. software). + + +# Compile + +#### Build hawkbit-mgmt-api + +``` +$ cd hawkbit/hawkbit-mgmt-api +$ mvn clean install +``` + diff --git a/hawkbit-mgmt-resource/README.md b/hawkbit-mgmt-resource/README.md new file mode 100644 index 000000000..3bad53d61 --- /dev/null +++ b/hawkbit-mgmt-resource/README.md @@ -0,0 +1,13 @@ +# Eclipse.IoT hawkBit - Mgmt Resource + +This is the server-side implementation of the hawkBit Mgmt API that is used to manage and monitor the HawkBit Update Server via HTTP. + +# Compile + +#### Build hawkbit-mgmt-resource + +``` +$ cd hawkbit/hawkbit-mgmt-resource +$ mvn clean install +``` + diff --git a/hawkbit-system-api/README.md b/hawkbit-system-api/README.md new file mode 100644 index 000000000..41b1a8416 --- /dev/null +++ b/hawkbit-system-api/README.md @@ -0,0 +1,14 @@ +# Eclipse.IoT hawkBit - System API + +The System API is used to configurate the hawkBit Update Server. This includes tenants specific operations as well as system wide operations. + + +# Compile + +#### Build hawkbit-system-api + +``` +$ cd hawkbit/hawkbit-system-api +$ mvn clean install +``` + diff --git a/hawkbit-system-resource/README.md b/hawkbit-system-resource/README.md new file mode 100644 index 000000000..20eaf5c6b --- /dev/null +++ b/hawkbit-system-resource/README.md @@ -0,0 +1,13 @@ +# Eclipse.IoT hawkBit - System Resource + +This is the server-side implementation of the hawkBit System API that is used to configurate the hawkBit Update Server + +# Compile + +#### Build hawkbit-system-resource + +``` +$ cd hawkbit/hawkbit-system-resource +$ mvn clean install +``` + From 3299906d4d5d64a1509dbf616bd9ce89a4543049 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 3 May 2016 14:01:42 +0200 Subject: [PATCH 072/371] Added new readme.md for DDI download API and updated existing readme.md Signed-off-by: Jonathan Philip Knoblauch --- README.md | 7 ++++--- hawkbit-ddi-dl-api/README.md | 12 ++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 hawkbit-ddi-dl-api/README.md diff --git a/README.md b/README.md index ab90e4263..31d853dc8 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v # Modules -* `examples` : HawkBit examples +* `examples` : hawkBit examples * `hawkbit-artifact-repository-mongo` : Artifact repository implementation to mongoDB. * `hawkbit-autoconfigure` : Spring-boot auto-configuration. * `hawkbit-cache-redis` : Spring cache manager configuration and implementation with redis, distributed cache and distributed events. @@ -70,14 +70,15 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v * `hawkbit-http-security` : Implementation for security filters for HTTP. * `hawkbit-mgmt-api` : The hawkBit Management API * `hawkbit-mgmt-resource` : Implementation of the hawkBit Management API +* `hawkbit-mgmt-ui` : Vaadin UI. * `hawkbit-repository` : Repository implementation based on SQL for all meta-data. * `hawkbit-rest-core` : Core elements for the rest modules. * `hawkbit-security-core` : Core security elements. -* `hawkbit-security-integration` : Security integration elements to integrate security into hawkbit. +* `hawkbit-security-integration` : Security integration elements to integrate security into hawkBit. * `hawkbit-system-api` : The hawkBit System API * `hawkbit-system-resource` : Implementation of the hawkBit System API * `hawkbit-test-report` : Test reports -* `hawkbit-ui` : Vaadin UI. + diff --git a/hawkbit-ddi-dl-api/README.md b/hawkbit-ddi-dl-api/README.md new file mode 100644 index 000000000..703ef2916 --- /dev/null +++ b/hawkbit-ddi-dl-api/README.md @@ -0,0 +1,12 @@ +# Eclipse.IoT hawkBit - DDI Download API + +This module is part of the Direct Device Integration (DDI) API and is used by devices/targets for downloading artifacts through HTTP. + +# Compile + +#### Build hawkbit-ddi-dl-api + +``` +$ cd hawkbit/hawkbit-ddi-dl-api +$ mvn clean install +``` From a1edaf2be95ae2eeb5013318eb4f2e83486ebc73 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 3 May 2016 14:07:25 +0200 Subject: [PATCH 073/371] Fix #99 split rest modules and ddi-dl client resource Signed-off-by: SirWayne --- examples/hawkbit-example-ddi-client/pom.xml | 5 +++++ ...ArtifactStoreControllerResourceClient.java | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/DdiDlArtifactStoreControllerResourceClient.java diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index 3da11adaf..cd9613457 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -34,6 +34,11 @@ hawkbit-ddi-api ${project.version} + + org.eclipse.hawkbit + hawkbit-ddi-dl-api + ${project.version} + org.springframework.cloud spring-cloud-starter-feign diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/DdiDlArtifactStoreControllerResourceClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/DdiDlArtifactStoreControllerResourceClient.java new file mode 100644 index 000000000..c37602d7a --- /dev/null +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/DdiDlArtifactStoreControllerResourceClient.java @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client.resource; + +import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlArtifactStoreControllerRestApi; +import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlRestConstants; +import org.springframework.cloud.netflix.feign.FeignClient; + +/** + * Client binding for the artifact store controller resource of the DDI-DL API. + */ +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + DdiDlRestConstants.ARTIFACTS_V1_REQUEST_MAPPING) +public interface DdiDlArtifactStoreControllerResourceClient extends DdiDlArtifactStoreControllerRestApi { + +} From 51466967bd222b9236d205e1a120802cba766d50 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 3 May 2016 14:13:26 +0200 Subject: [PATCH 074/371] Updated readme.me showing new module in parent and in ddi-resource Signed-off-by: Jonathan Philip Knoblauch --- README.md | 1 + hawkbit-ddi-resource/README.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 31d853dc8..a6928b3f2 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v * `hawkbit-cache-redis` : Spring cache manager configuration and implementation with redis, distributed cache and distributed events. * `hawkbit-core` : Core elements. * `hawkbit-ddi-api` : The hawkBit DDI API. +* `hawkbit-ddi-dl-api` : The hawkBit DDI Download API. * `hawkbit-ddi-resource` : Implementation of the hawkBit DDI API * `hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. * `hawkbit-dmf-api` : API for the Device Management Integration. diff --git a/hawkbit-ddi-resource/README.md b/hawkbit-ddi-resource/README.md index 865b2946f..3cfb443cd 100644 --- a/hawkbit-ddi-resource/README.md +++ b/hawkbit-ddi-resource/README.md @@ -1,6 +1,6 @@ # Eclipse.IoT hawkBit - DDI Resource -This is the server-side implementation of the hawkBit DDI API that is used by devices for communicating with the HawkBit Update Server through HTTP. +This is the server-side implementation of the hawkBit DDI API and the hawkBit DDI Download API that is used by devices for communicating with the HawkBit Update Server through HTTP. # Compile From a18bd9ac219c563fcc31ca6af4f783baa1481a90 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 4 May 2016 12:50:15 +0200 Subject: [PATCH 075/371] Modify module name Signed-off-by: SirWayne --- hawkbit-mgmt-ui/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-mgmt-ui/pom.xml b/hawkbit-mgmt-ui/pom.xml index 1c8b8e1ea..7b79b9008 100644 --- a/hawkbit-mgmt-ui/pom.xml +++ b/hawkbit-mgmt-ui/pom.xml @@ -17,7 +17,7 @@ 0.2.0-SNAPSHOT hawkbit-mgmt-ui - hawkBit :: UI + hawkBit :: Mgmt UI Bosch IoT Software Provisioning server web application From 8a976cabadba6d454718daf05e8ef6948a5c7d5c Mon Sep 17 00:00:00 2001 From: Asharani Date: Thu, 5 May 2016 16:28:12 +0530 Subject: [PATCH 076/371] Minimize/Maximize upload status popup intial commit Signed-off-by: Asharani --- .../event/UploadArtifactUIEvent.java | 2 +- .../artifacts/state/ArtifactUploadState.java | 39 ++- .../ui/artifacts/upload/UploadHandler.java | 27 +- .../ui/artifacts/upload/UploadLayout.java | 125 ++++++-- .../upload/UploadStatusInfoWindow.java | 272 ++++++++++++++---- .../artifacts/upload/UploadStatusObject.java | 71 +++++ .../footer/AbstractDeleteActionsLayout.java | 8 +- .../ui/common/grid/AbstractGridLayout.java | 3 +- .../FilterManagementView.java | 3 +- .../ui/utils/SPUIComponetIdProvider.java | 21 ++ .../ui/utils/SPUIStyleDefinitions.java | 9 +- 11 files changed, 480 insertions(+), 100 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java index 3d75b67a7..de8f5867b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java @@ -16,5 +16,5 @@ package org.eclipse.hawkbit.ui.artifacts.event; */ public enum UploadArtifactUIEvent { - SHOW_DROP_HINTS, HIDE_DROP_HINTS, SOFTWARE_DRAG_START, SOFTWARE_TYPE_DRAG_START, UPDATE_UPLOAD_COUNT, ENABLE_PROCESS_BUTTON, HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DISCARD_DELETE_SOFTWARE, DISCARD_ALL_DELETE_SOFTWARE, DELETED_ALL_SOFWARE, DISABLE_PROCESS_BUTTON, DISCARD_DELETE_SOFTWARE_TYPE, DISCARD_ALL_DELETE_SOFTWARE_TYPE, DELETED_ALL_SOFWARE_TYPE + SHOW_DROP_HINTS, HIDE_DROP_HINTS, SOFTWARE_DRAG_START, SOFTWARE_TYPE_DRAG_START, UPDATE_UPLOAD_COUNT, ENABLE_PROCESS_BUTTON, HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DISCARD_DELETE_SOFTWARE, DISCARD_ALL_DELETE_SOFTWARE, DELETED_ALL_SOFWARE, DISABLE_PROCESS_BUTTON, DISCARD_DELETE_SOFTWARE_TYPE, DISCARD_ALL_DELETE_SOFTWARE_TYPE, DELETED_ALL_SOFWARE_TYPE,MINIMIZED_STATUS_POPUP,MAXIMIZED_STATUS_POPUP,UPLOAD_FINISHED,UPLOAD_STARTED, UPLOAD_STREAMINING_FINISHED } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java index f82ce9ccf..ae6a5860e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java @@ -9,14 +9,17 @@ package org.eclipse.hawkbit.ui.artifacts.state; import java.io.Serializable; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.ui.artifacts.upload.UploadStatusObject; import org.eclipse.hawkbit.ui.common.ManagmentEntityState; import org.springframework.beans.factory.annotation.Autowired; @@ -58,8 +61,42 @@ public class ArtifactUploadState implements ManagmentEntityState, Serializ private final Set selectedDeleteSWModuleTypes = new HashSet<>(); private boolean noDataAvilableSoftwareModule = Boolean.FALSE; + + private boolean isStatusPopupMinimized = Boolean.FALSE; + + private boolean isUploadCompleted = Boolean.FALSE; + + private List uploadedFileStatusList = new ArrayList<>(); + + public List getUploadedFileStatusList() { + return uploadedFileStatusList; + } + + public void setUploadedFileStatusList(List uploadedFileStatusList) { + this.uploadedFileStatusList = uploadedFileStatusList; + } + + public boolean isUploadCompleted() { + return isUploadCompleted; + } + + public void setUploadCompleted(boolean isUploadCompleted) { + this.isUploadCompleted = isUploadCompleted; + } - /** + + public void setStatusPopupMinimized(boolean isStatusPopupMinimized) { + this.isStatusPopupMinimized = isStatusPopupMinimized; + } + + public boolean isStatusPopupMinimized() { + return isStatusPopupMinimized; + } + + + + + /** * Set software. * * @return diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index 8c1feeb33..976d5ac27 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -13,11 +13,13 @@ import java.io.OutputStream; import org.eclipse.hawkbit.repository.exception.ArtifactUploadFailedException; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.state.CustomFile; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.vaadin.spring.events.EventBus; import com.vaadin.server.StreamVariable; import com.vaadin.ui.Upload; @@ -66,6 +68,8 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene private volatile boolean interrupted = false; private String failureReason; private final I18N i18n; + private transient EventBus.SessionEventBus eventBus; + UploadHandler(final String fileName, final long fileSize, final UploadLayout view, final UploadStatusInfoWindow infoWindow, final long maxSize, final Upload upload, final String mimeType) { @@ -78,7 +82,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene this.upload = upload; this.mimeType = mimeType; this.i18n = SpringContextHelper.getBean(I18N.class); - + this.eventBus = SpringContextHelper.getBean(EventBus.SessionEventBus.class); } /** @@ -166,7 +170,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene if (view.enableProcessBtn()) { infoWindow.uploadSessionFinished(); } - view.updateActionCount(); + eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED); // display the duplicate message after streaming all files view.displayDuplicateValidationMessage(); @@ -237,10 +241,12 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public void updateProgress(final long readBytes, final long contentLength) { if (readBytes > maxSize || contentLength > maxSize) { LOG.error("User tried to upload more than was allowed ({}).", maxSize); + view.decreaseNumberOfFileUploadsExpected(); final SoftwareModule sw = view.getSoftwareModuleSelected(); view.getFileSelected().remove(new CustomFile(fileName, sw.getName(), sw.getVersion())); view.updateActionCount(); + failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); infoWindow.uploadFailed(fileName, failureReason); upload.interruptUpload(); @@ -261,10 +267,12 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public void onProgress(final StreamingProgressEvent event) { if (event.getBytesReceived() > maxSize || event.getContentLength() > maxSize) { LOG.error("User tried to upload more than was allowed ({}).", maxSize); + view.decreaseNumberOfFileUploadsExpected(); final SoftwareModule sw = view.getSoftwareModuleSelected(); view.getFileSelected().remove(new CustomFile(fileName, sw.getName(), sw.getVersion())); - view.updateActionCount(); + eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED); + failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); infoWindow.uploadFailed(event.getFileName(), failureReason); interrupted = true; @@ -285,11 +293,19 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public void streamingFailed(final StreamingErrorEvent event) { LOG.info("Streaming failed for file :{}", event.getFileName()); + view.decreaseNumberOfFileUploadsExpected(); final SoftwareModule sw = view.getSoftwareModuleSelected(); view.getFileSelected().remove(new CustomFile(fileName, sw.getName(), sw.getVersion())); - view.updateActionCount(); - infoWindow.uploadFailed(event.getFileName(), failureReason); + eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED); + + if (failureReason != null) { + // Display custom error message + infoWindow.uploadFailed(event.getFileName(), failureReason); + } else { + // internal upload error + infoWindow.uploadFailed(event.getFileName(), event.getException().getMessage()); + } // check if we are finished if (view.enableProcessBtn()) { infoWindow.uploadSessionFinished(); @@ -299,6 +315,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene LOG.info("Streaming failed due to :{}", event.getException()); } + /** * Upload failed for {@link Upload} variant. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index 7376cce13..340f66287 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -103,7 +103,7 @@ public class UploadLayout extends VerticalLayout { private final List duplicateFileNamesList = new ArrayList<>(); - private Button processBtn; + private Button processBtn ; private Button discardBtn; @@ -119,6 +119,8 @@ public class UploadLayout extends VerticalLayout { private Boolean hasDirectory = Boolean.FALSE; + private Button uploadStatusButton; + /** * Initialize the upload layout. */ @@ -127,12 +129,13 @@ public class UploadLayout extends VerticalLayout { createComponents(); buildLayout(); updateActionCount(); + restoreState(); eventBus.subscribe(this); ui = UI.getCurrent(); } private void createComponents() { - + createUploadStatusButton(); createProcessButton(); createDiscardBtn(); } @@ -154,12 +157,15 @@ public class UploadLayout extends VerticalLayout { fileUploadLayout = new HorizontalLayout(); fileUploadLayout.setSpacing(true); + fileUploadLayout.addStyleName(SPUIStyleDefinitions.FOOTER_LAYOUT); fileUploadLayout.addComponent(upload); fileUploadLayout.setComponentAlignment(upload, Alignment.MIDDLE_LEFT); fileUploadLayout.addComponent(processBtn); fileUploadLayout.setComponentAlignment(processBtn, Alignment.MIDDLE_RIGHT); fileUploadLayout.addComponent(discardBtn); fileUploadLayout.setComponentAlignment(discardBtn, Alignment.MIDDLE_RIGHT); + fileUploadLayout.addComponent(uploadStatusButton); + fileUploadLayout.setComponentAlignment(uploadStatusButton, Alignment.MIDDLE_RIGHT); setMargin(false); /* create drag-drop wrapper for drop area */ @@ -167,7 +173,13 @@ public class UploadLayout extends VerticalLayout { dropAreaWrapper.setDropHandler(new DropAreahandler()); setSizeFull(); setSpacing(true); + } + private void restoreState() { + if (artifactUploadState.isStatusPopupMinimized()) { + showUploadStatusButton(); + setUploadStatusButtonIconToFinished(); + } } public DragAndDropWrapper getDropAreaWrapper() { @@ -324,8 +336,8 @@ public class UploadLayout extends VerticalLayout { final SoftwareModule selectedSoftwareModule = artifactUploadState.getSelectedBaseSoftwareModule().get(); - final String currentBaseSoftwareModuleKey = HawkbitCommonUtil - .getFormattedNameVersion(selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); + final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( + selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); final CustomFile customFile = new CustomFile(name, size, tempFile.getAbsolutePath(), selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion(), mimeType); @@ -403,8 +415,8 @@ public class UploadLayout extends VerticalLayout { public Boolean checkIfFileIsDuplicate(final String name) { Boolean isDuplicate = false; final SoftwareModule selectedSoftwareModule = artifactUploadState.getSelectedBaseSoftwareModule().get(); - final String currentBaseSoftwareModuleKey = HawkbitCommonUtil - .getFormattedNameVersion(selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); + final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( + selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); for (final CustomFile customFile : artifactUploadState.getFileSelected()) { final String fileSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( @@ -469,8 +481,8 @@ public class UploadLayout extends VerticalLayout { void updateFileSize(final String name, final long size) { final SoftwareModule selectedSoftwareModule = artifactUploadState.getSelectedBaseSoftwareModule().get(); - final String currentBaseSoftwareModuleKey = HawkbitCommonUtil - .getFormattedNameVersion(selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); + final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( + selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); for (final CustomFile customFile : artifactUploadState.getFileSelected()) { final String fileSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( @@ -507,9 +519,10 @@ public class UploadLayout extends VerticalLayout { if (event.getButton().equals(discardBtn)) { if (artifactUploadState.getFileSelected().isEmpty()) { uiNotification.displayValidationError(i18n.get("message.error.noFileSelected")); - } else { clearFileList(); + uploadInfoWindow.clearWindow(); + hideUploadStatusButton(); } } } @@ -536,12 +549,12 @@ public class UploadLayout extends VerticalLayout { private void setConfirmationPopupHeightWidth(final float newWidth, final float newHeight) { if (currentUploadConfirmationwindow != null) { - currentUploadConfirmationwindow.getUploadArtifactDetails().setWidth(HawkbitCommonUtil - .getArtifactUploadPopupWidth(newWidth, SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_WIDTH), - Unit.PIXELS); - currentUploadConfirmationwindow.getUploadDetailsTable().setHeight(HawkbitCommonUtil - .getArtifactUploadPopupHeight(newHeight, SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_HEIGHT), - Unit.PIXELS); + currentUploadConfirmationwindow.getUploadArtifactDetails().setWidth( + HawkbitCommonUtil.getArtifactUploadPopupWidth(newWidth, + SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_WIDTH), Unit.PIXELS); + currentUploadConfirmationwindow.getUploadDetailsTable().setHeight( + HawkbitCommonUtil.getArtifactUploadPopupHeight(newHeight, + SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_HEIGHT), Unit.PIXELS); } } @@ -558,10 +571,12 @@ public class UploadLayout extends VerticalLayout { && currentUploadConfirmationwindow.getCurrentUploadResultWindow() != null) { final UploadResultWindow uploadResultWindow = currentUploadConfirmationwindow .getCurrentUploadResultWindow(); - uploadResultWindow.getUploadResultsWindow().setWidth(HawkbitCommonUtil.getArtifactUploadPopupWidth(newWidth, - SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_WIDTH), Unit.PIXELS); - uploadResultWindow.getUploadResultTable().setHeight(HawkbitCommonUtil.getArtifactUploadPopupHeight( - newHeight, SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_HEIGHT), Unit.PIXELS); + uploadResultWindow.getUploadResultsWindow().setWidth( + HawkbitCommonUtil.getArtifactUploadPopupWidth(newWidth, + SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_WIDTH), Unit.PIXELS); + uploadResultWindow.getUploadResultTable().setHeight( + HawkbitCommonUtil.getArtifactUploadPopupHeight(newHeight, + SPUIDefinitions.MIN_UPLOAD_CONFIRMATION_POPUP_HEIGHT), Unit.PIXELS); } } @@ -572,8 +587,8 @@ public class UploadLayout extends VerticalLayout { } else { currentUploadConfirmationwindow = new UploadConfirmationwindow(this, artifactUploadState); UI.getCurrent().addWindow(currentUploadConfirmationwindow.getUploadConfrimationWindow()); - setConfirmationPopupHeightWidth(Page.getCurrent().getBrowserWindowWidth(), - Page.getCurrent().getBrowserWindowHeight()); + setConfirmationPopupHeightWidth(Page.getCurrent().getBrowserWindowWidth(), Page.getCurrent() + .getBrowserWindowHeight()); } } } @@ -608,7 +623,20 @@ public class UploadLayout extends VerticalLayout { void onEvent(final UploadArtifactUIEvent event) { if (event == UploadArtifactUIEvent.DELETED_ALL_SOFWARE) { ui.access(() -> updateActionCount()); + } else if (event == UploadArtifactUIEvent.MINIMIZED_STATUS_POPUP) { + ui.access(() -> showUploadStatusButton()); + } else if (event == UploadArtifactUIEvent.MAXIMIZED_STATUS_POPUP) { + ui.access(() -> maximizeStatusPopup()); + } else if (event == UploadArtifactUIEvent.UPLOAD_FINISHED) { + ui.access(() -> setUploadStatusButtonIconToFinished()); + } else if (event == UploadArtifactUIEvent.UPLOAD_STARTED) { + ui.access(() -> setUploadStatusButtonIconToInProgress()); + }else if (event == UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED) { + //TODO re-check + updateActionCount(); + enableProcessBtn(); } + } @PreDestroy @@ -637,8 +665,8 @@ public class UploadLayout extends VerticalLayout { * @param selectedBaseSoftwareModule */ public void refreshArtifactDetailsLayout(final SoftwareModule selectedBaseSoftwareModule) { - eventBus.publish(this, - new SoftwareModuleEvent(SoftwareModuleEventType.ARTIFACTS_CHANGED, selectedBaseSoftwareModule)); + eventBus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.ARTIFACTS_CHANGED, + selectedBaseSoftwareModule)); } /** @@ -655,4 +683,55 @@ public class UploadLayout extends VerticalLayout { public void setHasDirectory(final Boolean hasDirectory) { this.hasDirectory = hasDirectory; } + + private void createUploadStatusButton() { + uploadStatusButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.UPLOAD_STATUS_BUTTON, "", "", "", + false, null, SPUIButtonStyleSmall.class); + uploadStatusButton.setStyleName(SPUIStyleDefinitions.ACTION_BUTTON); + uploadStatusButton.addStyleName(SPUIStyleDefinitions.UPLOAD_PROGRESS_INDICATOR_STYLE); + uploadStatusButton.setWidth("100px"); + uploadStatusButton.setHtmlContentAllowed(true); + uploadStatusButton.addClickListener(event -> onClickOfUploadStatusButton()); + uploadStatusButton.setVisible(false); + } + + private void onClickOfUploadStatusButton() { + artifactUploadState.setStatusPopupMinimized(false); + eventBus.publish(this, UploadArtifactUIEvent.MAXIMIZED_STATUS_POPUP); + } + + private void showUploadStatusButton() { + if (uploadStatusButton == null) { + return; + } + uploadStatusButton.setVisible(true); + } + + private void hideUploadStatusButton() { + if (uploadStatusButton == null) { + return; + } + uploadStatusButton.setVisible(false); + } + + private void maximizeStatusPopup() { + hideUploadStatusButton(); + uploadInfoWindow.maximizeStatusPopup(); + } + + private void setUploadStatusButtonIconToFinished() { + if (uploadStatusButton == null) { + return; + } + uploadStatusButton.removeStyleName(SPUIStyleDefinitions.UPLOAD_PROGRESS_INDICATOR_STYLE); + uploadStatusButton.setIcon(FontAwesome.UPLOAD); + } + + private void setUploadStatusButtonIconToInProgress() { + if (uploadStatusButton == null) { + return; + } + uploadStatusButton.addStyleName(SPUIStyleDefinitions.UPLOAD_PROGRESS_INDICATOR_STYLE); + uploadStatusButton.setIcon(null); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java index 8b36ef39e..4693ab3dc 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java @@ -8,20 +8,37 @@ */ package org.eclipse.hawkbit.ui.artifacts.upload; -import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import java.util.List; +import java.util.stream.Collectors; +import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; +import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; +import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; +import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import org.springframework.beans.factory.annotation.Autowired; +import org.vaadin.spring.events.EventBus; + +import com.vaadin.data.Container.Indexed; import com.vaadin.data.Item; import com.vaadin.data.util.IndexedContainer; import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.window.WindowMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Grid; import com.vaadin.ui.Grid.SelectionMode; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; import com.vaadin.ui.renderers.HtmlRenderer; import com.vaadin.ui.renderers.ProgressBarRenderer; +import com.vaadin.ui.themes.ValoTheme; import elemental.json.JsonValue; @@ -34,7 +51,13 @@ import elemental.json.JsonValue; @ViewScope @SpringComponent -public class UploadStatusInfoWindow extends Window implements Window.CloseListener, Window.WindowModeChangeListener { +public class UploadStatusInfoWindow extends Window { + + @Autowired + private transient EventBus.SessionEventBus eventBus; + + @Autowired + private ArtifactUploadState artifactUploadState; private static final String PROGRESS = "Progress"; @@ -52,39 +75,105 @@ public class UploadStatusInfoWindow extends Window implements Window.CloseListen private volatile boolean errorOccured = false; + private Button minimizeButton; + + private VerticalLayout mainLayout; + + private Label windowCaption; + + private Button closeButton; + + private Button resizeButton; + /** * Default Constructor. */ UploadStatusInfoWindow() { - super("Upload Status"); + super(); - addStyleName(SPUIStyleDefinitions.UPLOAD_INFO); - center(); - setImmediate(true); - setResizable(true); - setDraggable(true); - setClosable(true); - uploads = new IndexedContainer(); - uploads.addContainerProperty(STATUS, String.class, "Active"); - uploads.addContainerProperty(FILE_NAME, String.class, null); - uploads.addContainerProperty(PROGRESS, Double.class, 0D); - uploads.addContainerProperty(REASON, String.class, ""); + setPopupProperties(); + createStatusPopupHeaderComponents(); - grid = new Grid(uploads); - grid.addStyleName(SPUIStyleDefinitions.UPLOAD_STATUS_GRID); - grid.setSelectionMode(SelectionMode.NONE); - grid.getColumn(STATUS).setRenderer(new StatusRenderer()); - grid.getColumn(PROGRESS).setRenderer(new ProgressBarRenderer()); - setColumnWidth(); - grid.setFrozenColumnCount(4); - grid.setColumnOrder(STATUS, PROGRESS, FILE_NAME, REASON); - grid.setHeaderVisible(true); - grid.setImmediate(true); + mainLayout = new VerticalLayout(); + mainLayout.setSpacing(Boolean.TRUE); + mainLayout.setSizeUndefined(); setPopupSizeInMinMode(); - setContent(grid); - addCloseListener(this); - addWindowModeChangeListener(this); + uploads = getGridContainer(); + grid = createGrid(); + setGridColumnProperties(); + + mainLayout.addComponents(getCaptionLayout(), grid); + mainLayout.setExpandRatio(grid, 1.0F); + setContent(mainLayout); + } + + private void restoreState() { + Indexed container = grid.getContainerDataSource(); + if (container.getItemIds().isEmpty()) { + container.removeAllItems(); + for (UploadStatusObject statusObject : artifactUploadState.getUploadedFileStatusList()) { + Item item = container.addItem(statusObject.getFilename()); + item.getItemProperty(REASON).setValue(statusObject.getReason() != null ? statusObject.getReason() : ""); + item.getItemProperty(STATUS).setValue(statusObject.getStatus()); + item.getItemProperty(PROGRESS).setValue(statusObject.getProgress()); + item.getItemProperty(FILE_NAME).setValue(statusObject.getFilename()); + } + artifactUploadState.setUploadCompleted(true); + minimizeButton.setEnabled(false); + } + } + + private void setPopupProperties() { + addStyleName(SPUIStyleDefinitions.UPLOAD_INFO); + setImmediate(true); + setResizable(false); + setDraggable(true); + setClosable(false); + } + + private void setGridColumnProperties() { + grid.getColumn(STATUS).setRenderer(new StatusRenderer()); + grid.getColumn(PROGRESS).setRenderer(new ProgressBarRenderer()); + grid.setColumnOrder(STATUS, PROGRESS, FILE_NAME, REASON); + setColumnWidth(); + grid.setFrozenColumnCount(4); + } + + private Grid createGrid() { + Grid statusGrid = new Grid(uploads); + statusGrid.addStyleName(SPUIStyleDefinitions.UPLOAD_STATUS_GRID); + statusGrid.setSelectionMode(SelectionMode.NONE); + statusGrid.setHeaderVisible(true); + statusGrid.setImmediate(true); + statusGrid.setSizeFull(); + return statusGrid; + } + + private IndexedContainer getGridContainer() { + IndexedContainer uploadContainer = new IndexedContainer(); + uploadContainer.addContainerProperty(STATUS, String.class, "Active"); + uploadContainer.addContainerProperty(FILE_NAME, String.class, null); + uploadContainer.addContainerProperty(PROGRESS, Double.class, 0D); + uploadContainer.addContainerProperty(REASON, String.class, ""); + return uploadContainer; + } + + private HorizontalLayout getCaptionLayout() { + final HorizontalLayout captionLayout = new HorizontalLayout(); + captionLayout.setSizeFull(); + captionLayout.setHeight("36px"); + captionLayout.addComponents(windowCaption, minimizeButton, resizeButton, closeButton); + captionLayout.setExpandRatio(windowCaption, 1.0F); + captionLayout.addStyleName("v-window-header"); + return captionLayout; + } + + private void createStatusPopupHeaderComponents() { + minimizeButton = getMinimizeButton(); + windowCaption = new Label("Upload status"); + closeButton = getCloseButton(); + resizeButton = getResizeButton(); } private void setColumnWidth() { @@ -99,15 +188,13 @@ public class UploadStatusInfoWindow extends Window implements Window.CloseListen grid.getColumn(PROGRESS).setWidthUndefined(); grid.getColumn(FILE_NAME).setWidthUndefined(); grid.getColumn(REASON).setWidthUndefined(); - } private static class StatusRenderer extends HtmlRenderer { @Override public JsonValue encode(final String value) { - - String result = ""; + String result ; switch (value) { case "Finished": result = "
" + FontAwesome.CHECK_CIRCLE.getHtml() + "
"; @@ -129,28 +216,52 @@ public class UploadStatusInfoWindow extends Window implements Window.CloseListen void uploadSessionFinished() { if (!errorOccured) { close(); + eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_FINISHED); + artifactUploadState.setUploadCompleted(true); + minimizeButton.setEnabled(false); } } void uploadSessionStarted() { close(); + openWindow(); + minimizeButton.setEnabled(true); + eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STARTED); + artifactUploadState.setUploadCompleted(false); + } + + void openWindow() { UI.getCurrent().addWindow(this); center(); } + void maximizeStatusPopup() { + openWindow(); + restoreState(); + } + void uploadStarted(final String filename) { final Item item = uploads.addItem(filename); item.getItemProperty(FILE_NAME).setValue(filename); grid.scrollToEnd(); - + UploadStatusObject uploadStatus = new UploadStatusObject(filename); + uploadStatus.setStatus("Active"); + artifactUploadState.getUploadedFileStatusList().add(uploadStatus); } void updateProgress(final String filename, final long readBytes, final long contentLength) { final Item item = uploads.getItem(filename); if (item != null) { - item.getItemProperty(PROGRESS).setValue((double) readBytes / (double) contentLength); - + double progress = (double) readBytes / (double) contentLength; + item.getItemProperty(PROGRESS).setValue(progress); + List uploadStatusObjectList = (List) artifactUploadState + .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) + .collect(Collectors.toList()); + if (!uploadStatusObjectList.isEmpty()) { + UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); + uploadStatusObject.setProgress(progress); + } } } @@ -163,8 +274,15 @@ public class UploadStatusInfoWindow extends Window implements Window.CloseListen public void uploadSucceeded(final String filename) { final Item item = uploads.getItem(filename); if (item != null) { - item.getItemProperty(STATUS).setValue("Finished"); - + String status = "Finished"; + item.getItemProperty(STATUS).setValue(status); + List uploadStatusObjectList = (List) artifactUploadState + .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) + .collect(Collectors.toList()); + if (!uploadStatusObjectList.isEmpty()) { + UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); + uploadStatusObject.setStatus(status); + } } } @@ -175,51 +293,81 @@ public class UploadStatusInfoWindow extends Window implements Window.CloseListen errorOccured = true; } item.getItemProperty(REASON).setValue(errorReason); - item.getItemProperty(STATUS).setValue("Failed"); - + String status = "Failed"; + item.getItemProperty(STATUS).setValue(status); + List uploadStatusObjectList = (List) artifactUploadState + .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) + .collect(Collectors.toList()); + if (!uploadStatusObjectList.isEmpty()) { + UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); + uploadStatusObject.setStatus(status); + uploadStatusObject.setReason(errorReason); + } } } - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.Window.CloseListener#windowClose(com.vaadin.ui.Window. - * CloseEvent) - */ - @Override - public void windowClose(final CloseEvent e) { - clearWindow(); - } - - private void clearWindow() { + protected void clearWindow() { errorOccured = false; uploads.removeAllItems(); setWindowMode(WindowMode.NORMAL); + this.close(); + artifactUploadState.getUploadedFileStatusList().clear(); } - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.Window.WindowModeChangeListener#windowModeChanged(com. - * vaadin.ui.Window. WindowModeChangeEvent) - */ - @Override - public void windowModeChanged(final WindowModeChangeEvent event) { - if (event.getWindow().getWindowMode() == WindowMode.MAXIMIZED) { + private void setPopupSizeInMinMode() { + mainLayout.setWidth(800, Unit.PIXELS); + mainLayout.setHeight(510, Unit.PIXELS); + } + + private Button getMinimizeButton() { + final Button minimizeBtn = SPUIComponentProvider.getButton( + SPUIComponetIdProvider.UPLOAD_STATUS_POPUP_MINIMIZE_BUTTON_ID, "", "", "", true, FontAwesome.MINUS, + SPUIButtonStyleSmallNoBorder.class); + minimizeBtn.addStyleName(ValoTheme.BUTTON_BORDERLESS); + minimizeBtn.addClickListener(event -> minimizeWindow()); + minimizeBtn.setEnabled(true); + return minimizeBtn; + } + + private Button getResizeButton() { + final Button resizeBtn = SPUIComponentProvider.getButton( + SPUIComponetIdProvider.UPLOAD_STATUS_POPUP_RESIZE_BUTTON_ID, "", "", "", true, FontAwesome.EXPAND, + SPUIButtonStyleSmallNoBorder.class); + resizeBtn.addStyleName(ValoTheme.BUTTON_BORDERLESS); + resizeBtn.addClickListener(event -> resizeWindow(event)); + return resizeBtn; + } + + private void resizeWindow(ClickEvent event) { + if (event.getButton().getIcon() == FontAwesome.EXPAND) { + event.getButton().setIcon(FontAwesome.COMPRESS); + setWindowMode(WindowMode.MAXIMIZED); resetColumnWidth(); grid.getColumn(STATUS).setExpandRatio(0); grid.getColumn(PROGRESS).setExpandRatio(1); grid.getColumn(FILE_NAME).setExpandRatio(2); grid.getColumn(REASON).setExpandRatio(3); - grid.setSizeFull(); + mainLayout.setSizeFull(); } else { + event.getButton().setIcon(FontAwesome.EXPAND); + setWindowMode(WindowMode.NORMAL); setColumnWidth(); setPopupSizeInMinMode(); } } - private void setPopupSizeInMinMode() { - grid.setWidth(800, Unit.PIXELS); - grid.setHeight(510, Unit.PIXELS); + private void minimizeWindow() { + this.close(); + artifactUploadState.setStatusPopupMinimized(true); + eventBus.publish(this, UploadArtifactUIEvent.MINIMIZED_STATUS_POPUP); + } + + private Button getCloseButton() { + final Button closeBtn = SPUIComponentProvider.getButton( + SPUIComponetIdProvider.UPLOAD_STATUS_POPUP_CLOSE_BUTTON_ID, "", "", "", true, FontAwesome.TIMES, + SPUIButtonStyleSmallNoBorder.class); + closeBtn.addStyleName(ValoTheme.BUTTON_BORDERLESS); + closeBtn.addClickListener(event -> clearWindow()); + return closeBtn; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java new file mode 100644 index 000000000..80c71fe7b --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java @@ -0,0 +1,71 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.artifacts.upload; + +public class UploadStatusObject { + private String status; + private Double progress; + private String filename; + private String reason; + + public UploadStatusObject(String status, Double progress, String fileName, String reason) { + this(fileName); + this.status = status; + this.progress = progress; + this.reason = reason; + } + + public UploadStatusObject(String fileName) { + this.filename = fileName; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Double getProgress() { + return progress; + } + + public void setProgress(Double progress) { + this.progress = progress; + } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + + @Override + public boolean equals(Object obj) { + if (this == null || obj == null) { + return false; + } + if (obj instanceof UploadStatusObject && this.getFilename() == ((UploadStatusObject) obj).getFilename()) { + return true; + } + return false; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java index 75bd43447..09ab92cee 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java @@ -130,7 +130,7 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme addComponent(hLayout); setComponentAlignment(hLayout, Alignment.BOTTOM_CENTER); } - setStyleName("footer-layout"); + setStyleName(SPUIStyleDefinitions.FOOTER_LAYOUT); setWidth("100%"); } @@ -168,7 +168,7 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme final Button button = SPUIComponentProvider.getButton(SPUIComponetIdProvider.BULK_UPLOAD_STATUS_BUTTON, "", "", "", false, null, SPUIButtonStyleSmall.class); button.setStyleName(SPUIStyleDefinitions.ACTION_BUTTON); - button.addStyleName(SPUIStyleDefinitions.BULK_UPLOAD_PROGRESS_INDICATOR_STYLE); + button.addStyleName(SPUIStyleDefinitions.UPLOAD_PROGRESS_INDICATOR_STYLE); button.setWidth("100px"); button.setHtmlContentAllowed(true); button.addClickListener(event -> onClickBulkUploadNotificationButton()); @@ -199,7 +199,7 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme if (bulkUploadStatusButton == null) { return; } - bulkUploadStatusButton.removeStyleName(SPUIStyleDefinitions.BULK_UPLOAD_PROGRESS_INDICATOR_STYLE); + bulkUploadStatusButton.removeStyleName(SPUIStyleDefinitions.UPLOAD_PROGRESS_INDICATOR_STYLE); bulkUploadStatusButton.setIcon(FontAwesome.UPLOAD); } @@ -207,7 +207,7 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme if (bulkUploadStatusButton == null) { return; } - bulkUploadStatusButton.addStyleName(SPUIStyleDefinitions.BULK_UPLOAD_PROGRESS_INDICATOR_STYLE); + bulkUploadStatusButton.addStyleName(SPUIStyleDefinitions.UPLOAD_PROGRESS_INDICATOR_STYLE); bulkUploadStatusButton.setIcon(null); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java index 98c14e698..308bbeec4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ui.common.grid; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import com.vaadin.ui.Alignment; import com.vaadin.ui.HorizontalLayout; @@ -72,7 +73,7 @@ public abstract class AbstractGridLayout extends VerticalLayout { final Label countMessageLabel = getCountMessageLabel(); countMessageLabel.setId(SPUIComponetIdProvider.ROLLOUT_GROUP_TARGET_LABEL); rolloutGroupTargetsCountLayout.addComponent(getCountMessageLabel()); - rolloutGroupTargetsCountLayout.setStyleName("footer-layout"); + rolloutGroupTargetsCountLayout.setStyleName(SPUIStyleDefinitions.FOOTER_LAYOUT); rolloutGroupTargetsCountLayout.setWidth("100%"); return rolloutGroupTargetsCountLayout; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java index 06cbe4d69..99c586070 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java @@ -14,6 +14,7 @@ import org.eclipse.hawkbit.ui.HawkbitUI; import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; import org.eclipse.hawkbit.ui.filtermanagement.footer.TargetFilterCountMessageLabel; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; @@ -151,7 +152,7 @@ public class FilterManagementView extends VerticalLayout implements View { private HorizontalLayout addTargetFilterMessageLabel() { final HorizontalLayout messageLabelLayout = new HorizontalLayout(); messageLabelLayout.addComponent(targetFilterCountMessageLabel); - messageLabelLayout.addStyleName("footer-layout"); + messageLabelLayout.addStyleName(SPUIStyleDefinitions.FOOTER_LAYOUT); return messageLabelLayout; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java index 48e501e1d..7c25bf90a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java @@ -883,6 +883,27 @@ public final class SPUIComponetIdProvider { */ public static final String VALIDATION_STATUS_ICON_ID = "validation.status.icon"; + /** + * Artifact upload status popup - minimize button id. + */ + public static final String UPLOAD_STATUS_POPUP_MINIMIZE_BUTTON_ID = "artifact.upload.minimize.button.id"; + + /** + * Artifact upload status popup - close button id. + */ + public static final String UPLOAD_STATUS_POPUP_CLOSE_BUTTON_ID = "artifact.upload.close.button.id"; + + /** + * Artifact upload status popup - resize button id. + */ + public static final String UPLOAD_STATUS_POPUP_RESIZE_BUTTON_ID = "artifact.upload.resize.button.id"; + + /** + * Artifact upload view - upload status button id. + */ + public static final String UPLOAD_STATUS_BUTTON = "artficat.upload.status.button.id"; + + /** * /* Private Constructor. */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java index c50135251..ac713a07c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java @@ -240,9 +240,9 @@ public final class SPUIStyleDefinitions { public static final String DISABLE_ACTION_TYPE_LAYOUT = "disable-action-type-layout"; /** - * Bulk upload progress indicator style. + * Upload progress indicator style. */ - public static final String BULK_UPLOAD_PROGRESS_INDICATOR_STYLE = "app-loading"; + public static final String UPLOAD_PROGRESS_INDICATOR_STYLE = "app-loading"; /** * Target filter search progress indicator style. @@ -293,6 +293,11 @@ public final class SPUIStyleDefinitions { * Status pending icon. */ public static final String STATUS_ICON_PENDING = "statusIconPending"; + + /** + * Footer layout style. + */ + public static final String FOOTER_LAYOUT = "footer-layout"; /** * Constructor. From 68ab2eb30e71f404c8caadd4c47f7e6bce09e788 Mon Sep 17 00:00:00 2001 From: Asharani Date: Fri, 6 May 2016 10:28:50 +0530 Subject: [PATCH 077/371] Set error message from exception Signed-off-by: Asharani --- .../hawkbit/ui/artifacts/upload/UploadHandler.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index 976d5ac27..c48dac834 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -333,8 +333,12 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene final SoftwareModule sw = view.getSoftwareModuleSelected(); view.getFileSelected().remove(new CustomFile(fileName, sw.getName(), sw.getVersion())); } - view.updateActionCount(); - infoWindow.uploadFailed(event.getFilename(), failureReason); + eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED); + if (failureReason != null) { + infoWindow.uploadFailed(event.getFilename(), failureReason); + } else { + infoWindow.uploadFailed(event.getFilename(), event.getReason().getMessage()); + } LOG.info("Upload failed for file :{}", event.getReason()); } From 205216f7dda581a6d3ef1788e74592bc8c07c28b Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Fri, 6 May 2016 16:08:16 +0200 Subject: [PATCH 078/371] Added @SuppressWarnings annotation and reseted readme.md in hawkbit parent Signed-off-by: Jonathan Philip Knoblauch --- README.md | 43 ++++++------------- .../java/org/eclipse/hawkbit/app/Start.java | 2 + .../builder/DistributionSetBuilder.java | 2 + .../builder/DistributionSetTypeBuilder.java | 2 + .../resource/builder/RolloutBuilder.java | 2 + .../SoftwareModuleAssigmentBuilder.java | 2 + .../builder/SoftwareModuleBuilder.java | 2 + .../builder/SoftwareModuleTypeBuilder.java | 15 ++++--- .../client/resource/builder/TagBuilder.java | 12 +++--- .../resource/builder/TargetBuilder.java | 12 +++--- 10 files changed, 49 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index a6928b3f2..e61e5e9d1 100644 --- a/README.md +++ b/README.md @@ -52,36 +52,21 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v * The master branch contains future development towards 0.2. We are currently focusing on: * Rollout Management for large scale rollouts. * Clustering capabilities for the update server. - * Upgrade of Spring Boot and Vaadin depedencies. + * Upgrade of Spring Boot and Vaadin dependencies. * And of course tons of usability improvements and bug fixes. # Modules - -* `examples` : hawkBit examples -* `hawkbit-artifact-repository-mongo` : Artifact repository implementation to mongoDB. -* `hawkbit-autoconfigure` : Spring-boot auto-configuration. -* `hawkbit-cache-redis` : Spring cache manager configuration and implementation with redis, distributed cache and distributed events. -* `hawkbit-core` : Core elements. -* `hawkbit-ddi-api` : The hawkBit DDI API. -* `hawkbit-ddi-dl-api` : The hawkBit DDI Download API. -* `hawkbit-ddi-resource` : Implementation of the hawkBit DDI API -* `hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. -* `hawkbit-dmf-api` : API for the Device Management Integration. -* `hawkbit-http-security` : Implementation for security filters for HTTP. -* `hawkbit-mgmt-api` : The hawkBit Management API -* `hawkbit-mgmt-resource` : Implementation of the hawkBit Management API -* `hawkbit-mgmt-ui` : Vaadin UI. -* `hawkbit-repository` : Repository implementation based on SQL for all meta-data. -* `hawkbit-rest-core` : Core elements for the rest modules. -* `hawkbit-security-core` : Core security elements. -* `hawkbit-security-integration` : Security integration elements to integrate security into hawkBit. -* `hawkbit-system-api` : The hawkBit System API -* `hawkbit-system-resource` : Implementation of the hawkBit System API -* `hawkbit-test-report` : Test reports - - - - - - +`hawkbit-core` : internal interfaces and utility classes.. +`hawkbit-security-core` : authentication and authorization. +`hawkbit-security-integration` : authentication and authorization integrated with the APIs. +`hawkbit-artifact-repository-mongo` : artifact repository implementation to MongoDB. +`hawkbit-autoconfigure` : spring-boot auto-configuration. +`hawkbit-dmf-api` : API for the Device Management Integration. +`hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. +`hawkbit-repository` : repository implementation based on SQL for all meta-data. +`hawkbit-http-security` : implementation for security filters for HTTP. +`hawkbit-rest-api` : API classes for the REST Management API. +`hawkbit-rest-resource` : HTTP REST endpoints for the Management and the Direct Device API. +`hawkbit-ui` : Vaadin UI. +`hawkbit-cache-redis` : spring cache manager configuration and implementation with redis, distributed cache and distributed events. diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java index a8f2bc645..7a8e0814d 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -28,6 +28,8 @@ import org.springframework.context.annotation.Import; @EnableMgmtApi @EnableDdiApi @EnableSystemApi +// Exception squid:S1118 - Spring boot standard behavior +@SuppressWarnings({ "squid:S1118" }) public class Start { /** diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java index d1b3fad35..1e58b8415 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java @@ -19,6 +19,8 @@ import com.google.common.collect.Lists; /** * Builder pattern for building {@link MgmtDistributionSetRequestBodyPost}. */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class DistributionSetBuilder { private String name; diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java index e08240de3..1ce2ff270 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java @@ -21,6 +21,8 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link MgmtDistributionSetTypeRequestBodyPost}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class DistributionSetTypeBuilder { private String key; diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java index 9ba378192..02ebe2de3 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java @@ -17,6 +17,8 @@ import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutRestRequestBody; * Builder pattern for building {@link MgmtRolloutRestRequestBody}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class RolloutBuilder { private String name; diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java index a6003e2c5..b9fbcb498 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java @@ -18,6 +18,8 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleAssi * Builder pattern for building {@link MgmtSoftwareModuleAssigment}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class SoftwareModuleAssigmentBuilder { private final List ids; diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java index 6f243d08a..b2e544f88 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java @@ -21,6 +21,8 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link MgmtSoftwareModuleRequestBodyPost}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class SoftwareModuleBuilder { private String name; diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java index 749546442..7981e61cf 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java @@ -21,6 +21,8 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link MgmtSoftwareModuleRequestBodyPost}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class SoftwareModuleTypeBuilder { private String key; @@ -60,19 +62,20 @@ public class SoftwareModuleTypeBuilder { /** * Builds a list with a single entry of - * {@link MgmtSoftwareModuleTypeRequestBodyPost} which can directly be used in - * the RESTful-API. + * {@link MgmtSoftwareModuleTypeRequestBodyPost} which can directly be used + * in the RESTful-API. * - * @return a single entry list of {@link MgmtSoftwareModuleTypeRequestBodyPost} + * @return a single entry list of + * {@link MgmtSoftwareModuleTypeRequestBodyPost} */ public List build() { return Lists.newArrayList(doBuild(key, name)); } /** - * Builds a list of multiple {@link MgmtSoftwareModuleTypeRequestBodyPost} to - * create multiple software module types at once. An increasing number will - * be added to the name and key of the software module type. + * Builds a list of multiple {@link MgmtSoftwareModuleTypeRequestBodyPost} + * to create multiple software module types at once. An increasing number + * will be added to the name and key of the software module type. * * @param count * the amount of software module type bodies which should be diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java index 6718e631e..ce13602df 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java @@ -19,6 +19,8 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link MgmtTagRequestBodyPut}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class TagBuilder { private String name; @@ -56,8 +58,8 @@ public class TagBuilder { } /** - * Builds a list with a single entry of {@link MgmtTagRequestBodyPut} which can - * directly be used in the RESTful-API. + * Builds a list with a single entry of {@link MgmtTagRequestBodyPut} which + * can directly be used in the RESTful-API. * * @return a single entry list of {@link MgmtTagRequestBodyPut} */ @@ -66,9 +68,9 @@ public class TagBuilder { } /** - * Builds a list of multiple {@link MgmtTagRequestBodyPut} to create multiple - * tags at once. An increasing number will be added to the name of the tag. - * The color and description will remain the same. + * Builds a list of multiple {@link MgmtTagRequestBodyPut} to create + * multiple tags at once. An increasing number will be added to the name of + * the tag. The color and description will remain the same. * * @param count * the amount of distribution sets body which should be created diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java index 09b20339b..7bcc0af09 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java +++ b/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java @@ -21,6 +21,8 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link MgmtTargetRequestBody}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class TargetBuilder { private String controllerId; @@ -58,8 +60,8 @@ public class TargetBuilder { } /** - * Builds a list with a single entry of {@link MgmtTargetRequestBody} which can - * directly be used in the RESTful-API. + * Builds a list with a single entry of {@link MgmtTargetRequestBody} which + * can directly be used in the RESTful-API. * * @return a single entry list of {@link MgmtTargetRequestBody} */ @@ -68,9 +70,9 @@ public class TargetBuilder { } /** - * Builds a list of multiple {@link MgmtTargetRequestBody} to create multiple - * targets at once. An increasing number will be added to the controllerId - * of the target. The name and description will remain. + * Builds a list of multiple {@link MgmtTargetRequestBody} to create + * multiple targets at once. An increasing number will be added to the + * controllerId of the target. The name and description will remain. * * @param count * the amount of software module type bodies which should be From 887536b2b79561724e3cf7817fff739b7df650d7 Mon Sep 17 00:00:00 2001 From: Asharani Date: Mon, 9 May 2016 10:42:23 +0530 Subject: [PATCH 079/371] Upload confirmation popup - on discard remove the upload status button Signed-off-by: Asharani --- .../artifacts/upload/UploadConfirmationwindow.java | 2 +- .../hawkbit/ui/artifacts/upload/UploadLayout.java | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java index f009985f9..d7231cafe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java @@ -544,7 +544,7 @@ public class UploadConfirmationwindow implements Button.ClickListener { if (event.getComponent().getId().equals(SPUIComponetIdProvider.UPLOAD_ARTIFACT_DETAILS_CLOSE)) { uploadConfrimationWindow.close(); } else if (event.getComponent().getId().equals(SPUIComponetIdProvider.UPLOAD_DISCARD_DETAILS_BUTTON)) { - uploadLayout.clearFileList(); + uploadLayout.removeUploadedFileDetails(); uploadConfrimationWindow.close(); } else if (event.getComponent().getId().equals(SPUIComponetIdProvider.UPLOAD_BUTTON)) { processArtifactUpload(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index 340f66287..9e304efe8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -520,13 +520,17 @@ public class UploadLayout extends VerticalLayout { if (artifactUploadState.getFileSelected().isEmpty()) { uiNotification.displayValidationError(i18n.get("message.error.noFileSelected")); } else { - clearFileList(); - uploadInfoWindow.clearWindow(); - hideUploadStatusButton(); + removeUploadedFileDetails(); } } } + protected void removeUploadedFileDetails() { + clearFileList(); + uploadInfoWindow.clearWindow(); + hideUploadStatusButton(); + } + /** * Clear details. */ @@ -707,7 +711,7 @@ public class UploadLayout extends VerticalLayout { uploadStatusButton.setVisible(true); } - private void hideUploadStatusButton() { + protected void hideUploadStatusButton() { if (uploadStatusButton == null) { return; } From 7d81054d4c7ddb6bad743d5589ae8d8052a6885c Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 10 May 2016 10:21:40 +0200 Subject: [PATCH 080/371] remove methods and use the constant name. Signed-off-by: Melanie Retter --- .../ui/filtermanagement/TargetFilterHeader.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java index 12b4311f1..79877f299 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java @@ -78,9 +78,8 @@ public class TargetFilterHeader extends VerticalLayout { } private Label createHeaderCaption() { - final Label captionLabel = SPUIComponentProvider.getLabel(getHeaderCaption(), + return SPUIComponentProvider.getLabel(SPUIDefinitions.TARGET_FILTER_LIST_HEADER_CAPTION, SPUILabelDefinitions.SP_WIDGET_CAPTION); - return captionLabel; } private void buildLayout() { @@ -109,8 +108,8 @@ public class TargetFilterHeader extends VerticalLayout { } private Button createAddButton() { - final Button button = SPUIComponentProvider.getButton(getAddIconId(), "", "", null, false, FontAwesome.PLUS, - SPUIButtonStyleSmallNoBorder.class); + final Button button = SPUIComponentProvider.getButton(SPUIComponetIdProvider.TARGET_FILTER_ADD_ICON_ID, "", "", + null, false, FontAwesome.PLUS, SPUIButtonStyleSmallNoBorder.class); button.addClickListener(event -> addNewFilter()); return button; } @@ -185,11 +184,4 @@ public class TargetFilterHeader extends VerticalLayout { eventBus.publish(this, CustomFilterUIEvent.FILTER_BY_CUST_FILTER_TEXT_REMOVE); } - protected String getAddIconId() { - return SPUIComponetIdProvider.TARGET_FILTER_ADD_ICON_ID; - } - - protected String getHeaderCaption() { - return SPUIDefinitions.TARGET_FILTER_LIST_HEADER_CAPTION; - } } From 6404c9ba823f312d135f33bee306de0c63411e0c Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 11 May 2016 10:24:04 +0200 Subject: [PATCH 081/371] Provide a class for the help icon. The class is added to the layout in every pop-up-window. Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 7 ++ .../CreateUpdateSoftwareTypeLayout.java | 12 +++- .../hawkbit/ui/common/PopupWindowHelp.java | 69 +++++++++++++++++++ .../CreateUpdateDistSetTypeLayout.java | 6 ++ .../DistributionAddUpdateWindowLayout.java | 9 ++- ...eateUpdateDistributionTagLayoutWindow.java | 1 + .../management/tag/CreateUpdateTagLayout.java | 8 ++- .../TargetAddUpdateWindowLayout.java | 8 ++- .../TargetBulkUpdateWindowLayout.java | 14 ++-- .../CreateUpdateTargetTagLayout.java | 1 + .../rollout/AddUpdateRolloutWindowLayout.java | 50 ++++++++------ .../DefaultDistributionSetTypeLayout.java | 4 ++ .../TenantConfigurationDashboardView.java | 13 ++-- 13 files changed, 165 insertions(+), 37 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/PopupWindowHelp.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index cc08929bb..6a849d8b7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -12,7 +12,9 @@ import java.io.Serializable; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; +import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -66,6 +68,9 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { @Autowired private transient SoftwareManagement softwareManagement; + @Autowired + private transient UiProperties uiProperties; + private Label madatoryLabel; private TextField nameTextField; @@ -227,8 +232,10 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { * (controller Id, name & description) and action buttons layout */ final VerticalLayout mainLayout = new VerticalLayout(); + mainLayout.setSizeUndefined(); mainLayout.setSpacing(Boolean.TRUE); mainLayout.addStyleName("lay-color"); + mainLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); mainLayout.addComponent(madatoryLabel); mainLayout.setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); mainLayout.addComponent(hLayout); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index dc6d1081e..dc0a0911c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -16,9 +16,11 @@ import java.util.Set; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; import org.eclipse.hawkbit.ui.common.CoordinatesToColor; +import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -96,6 +98,9 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C @Autowired private transient EventBus.SessionEventBus eventBus; + @Autowired + private transient UiProperties uiProperties; + private String createTypeStr; private String updateTypeStr; private String singleAssignStr; @@ -226,10 +231,12 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C colorPickerLayout.addComponent(colorSelect); fieldLayout = new VerticalLayout(); + fieldLayout.setSizeUndefined(); fieldLayout.setSpacing(true); fieldLayout.setMargin(false); - fieldLayout.setWidth("100%"); - fieldLayout.setHeight(null); + // fieldLayout.setWidth("100%"); + // fieldLayout.setHeight(null); + fieldLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); fieldLayout.addComponent(createOptiongroup); fieldLayout.addComponent(comboLayout); fieldLayout.addComponent(madatoryLabel); @@ -450,6 +457,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C private void createOptionGroupByValues(final List tagOptions) { createOptiongroup = new OptionGroup("", tagOptions); + createOptiongroup.setCaption(null); createOptiongroup.setStyleName(ValoTheme.OPTIONGROUP_SMALL); createOptiongroup.addStyleName("custom-option-group"); createOptiongroup.setNullSelectionAllowed(false); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/PopupWindowHelp.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/PopupWindowHelp.java new file mode 100644 index 000000000..1ee505dec --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/PopupWindowHelp.java @@ -0,0 +1,69 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.common; + +import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; + +import com.vaadin.ui.Alignment; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Link; + +/** + * + * Helper class that provides the help icon layout in the right upper corner of + * a popup window + * + */ +public class PopupWindowHelp extends HorizontalLayout { + + private static final long serialVersionUID = 5377482512908004826L; + + private Link linkToHelp; + + /** + * Provides a horizontalLayout with a help icon in the right corner. The + * layout is shown by default. + * + * @param link + * link to the help page in the wiki or on github + */ + public PopupWindowHelp(final String link) { + createLinkToHelp(link); + init(); + } + + /** + * Provides a horizontalLayout with a help icon in the right corner. The + * layout is shown by default. The visibility of the layout can be set. If + * visibility is false the layout is not shown and the space is not + * reserved. + * + * @param link + * link to the help page in the wiki or on github + * @param visible + * false == layout is not shown + */ + public PopupWindowHelp(final String link, final boolean visible) { + createLinkToHelp(link); + init(); + setVisible(visible); + } + + public void init() { + setSizeFull(); + addComponent(linkToHelp); + setComponentAlignment(linkToHelp, Alignment.MIDDLE_RIGHT); + addStyleName("window-style"); + } + + private void createLinkToHelp(final String link) { + linkToHelp = SPUIComponentProvider.getHelpLink(link); + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 8d609f628..58b1b5fd2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -19,8 +19,10 @@ import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.CoordinatesToColor; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; +import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent; @@ -116,6 +118,9 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co @Autowired private transient DistributionSetRepository distributionSetRepository; + @Autowired + private transient UiProperties uiProperties; + /** * Instance of ColorPickerPreview. */ @@ -295,6 +300,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co colorLayout.addComponent(sliderLayout); final VerticalLayout mainWindowLayout = new VerticalLayout(); + mainWindowLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); mainWindowLayout.addComponent(mainLayout); mainWindowLayout.addComponent(colorLayout); mainWindowLayout.addComponent(buttonLayout); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 80c1b5700..71a022ad9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -22,7 +22,9 @@ import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantMetaData; +import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; +import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -94,6 +96,9 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { @Autowired private transient TenantMetaDataRepository tenantMetaDataRepository; + @Autowired + private transient UiProperties uiProperties; + private Button saveDistributionBtn; private Button discardDistributionBtn; private TextField distNameTextField; @@ -143,8 +148,8 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { setSpacing(Boolean.TRUE); addStyleName("lay-color"); setSizeUndefined(); - addComponents(madatoryLabel, distsetTypeNameComboBox, distNameTextField, distVersionTextField, descTextArea, - reqMigStepCheckbox); + addComponents(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot()), madatoryLabel, + distsetTypeNameComboBox, distNameTextField, distVersionTextField, descTextArea, reqMigStepCheckbox); addComponent(buttonsLayout); setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 210509623..8b3e98e5e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -213,6 +213,7 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo private void createOptionGroup(final List tagOptions) { optiongroup = new OptionGroup("", tagOptions); + optiongroup.setCaption(null); optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); optiongroup.addStyleName("custom-option-group"); optiongroup.setNullSelectionAllowed(false); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java index b78db6b4f..0f40528b1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java @@ -17,7 +17,9 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.TargetTag; +import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.CoordinatesToColor; +import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -69,6 +71,9 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C protected String createTagNw; protected String updateTagNw; + @Autowired + private transient UiProperties uiProperties; + @Autowired protected I18N i18n; @@ -251,15 +256,16 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C buttonLayout.setWidth("152px"); final VerticalLayout fieldButtonLayout = new VerticalLayout(); + fieldButtonLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); fieldButtonLayout.addComponent(fieldLayout); fieldButtonLayout.addComponent(buttonLayout); fieldButtonLayout.setComponentAlignment(buttonLayout, Alignment.BOTTOM_CENTER); mainLayout = new HorizontalLayout(); + mainLayout.setSizeFull(); mainLayout.addComponent(fieldButtonLayout); setCompositionRoot(mainLayout); - } private void addListeners() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 973d61857..e87e7371f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -14,6 +14,8 @@ import java.util.Set; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; +import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -69,6 +71,9 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { @Autowired private transient UINotification uINotification; + + @Autowired + private transient UiProperties uiProperties; private TextField controllerIDTextField; private TextField nameTextField; @@ -83,7 +88,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private String oldTargetName; private String oldTargetDesc; - + /** * Initialize the Add Update Window Component for Target. */ @@ -146,6 +151,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { mainLayout.setSpacing(Boolean.TRUE); mainLayout.addStyleName("lay-color"); mainLayout.setSizeUndefined(); + mainLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); mainLayout.addComponent(madatoryLabel); mainLayout.setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); if (Boolean.TRUE.equals(editTarget)) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java index 657cd97af..0dc27b9f5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.dstable.DistributionBeanQuery; @@ -44,7 +45,6 @@ import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.combobox.FilteringMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; import com.vaadin.ui.CustomComponent; @@ -279,12 +279,14 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { final HorizontalLayout uploaderLayout = new HorizontalLayout(); uploaderLayout.addComponent(bulkUploader); - uploaderLayout.addComponent(linkToSystemConfigHelp); - uploaderLayout.setComponentAlignment(linkToSystemConfigHelp, Alignment.BOTTOM_RIGHT); - uploaderLayout.setExpandRatio(bulkUploader, 1.0F); + // uploaderLayout.addComponent(linkToSystemConfigHelp); + // uploaderLayout.setComponentAlignment(linkToSystemConfigHelp, + // Alignment.BOTTOM_RIGHT); + // uploaderLayout.setExpandRatio(bulkUploader, 1.0F); uploaderLayout.setSizeFull(); - mainLayout.addComponents(captionLayout, dsNamecomboBox, descTextArea, tokenVerticalLayout, descTextArea, - progressBar, targetsCountLabel, uploaderLayout); + mainLayout.addComponents(captionLayout, + new PopupWindowHelp(uiproperties.getLinks().getDocumentation().getDeploymentView()), dsNamecomboBox, + descTextArea, tokenVerticalLayout, descTextArea, progressBar, targetsCountLabel, uploaderLayout); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java index 51ac77f10..1bf7dbad6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java @@ -66,6 +66,7 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { private void createOptionGroup(final List tagOptions) { optiongroup = new OptionGroup("", tagOptions); + optiongroup.setCaption(null); optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); optiongroup.addStyleName("custom-option-group"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index a426c300e..f574da244 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -27,6 +27,7 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondit import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery; @@ -63,7 +64,6 @@ import com.vaadin.ui.ComboBox; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; -import com.vaadin.ui.Link; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; @@ -113,8 +113,6 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { @Autowired private transient EventBus.SessionEventBus eventBus; - private Label madatoryLabel; - private TextField rolloutName; private ComboBox distributionSet; @@ -137,7 +135,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private OptionGroup errorThresholdOptionGroup; - private Link linkToHelp; + // private Link linkToHelp; private Window addUpdateRolloutWindow; @@ -204,9 +202,16 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { mainLayout.setSpacing(Boolean.TRUE); mainLayout.setSizeUndefined(); - mainLayout.addComponents(getMandatoryLabelLinkToHelp(), rolloutName, distributionSet, getTargetFilterLayout(), - getGroupDetailsLayout(), getTriggerThresoldLayout(), getErrorThresoldLayout(), description, - actionTypeOptionGroupLayout, getSaveDiscardButtonLayout()); + // mainLayout.addComponents(getMandatoryLabelLinkToHelp(), rolloutName, + // distributionSet, getTargetFilterLayout(), + // getGroupDetailsLayout(), getTriggerThresoldLayout(), + // getErrorThresoldLayout(), description, + // actionTypeOptionGroupLayout, getSaveDiscardButtonLayout()); + + mainLayout.addComponents(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRolloutView()), + createMandatoryLabel(), rolloutName, distributionSet, getTargetFilterLayout(), getGroupDetailsLayout(), + getTriggerThresoldLayout(), getErrorThresoldLayout(), description, actionTypeOptionGroupLayout, + getSaveDiscardButtonLayout()); setCompositionRoot(mainLayout); } @@ -263,18 +268,20 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return buttonsLayout; } - private HorizontalLayout getMandatoryLabelLinkToHelp() { - final HorizontalLayout mandatoryLabelLinkToHelpLayout = new HorizontalLayout(); - mandatoryLabelLinkToHelpLayout.setSizeFull(); - mandatoryLabelLinkToHelpLayout.addComponents(madatoryLabel, linkToHelp); - mandatoryLabelLinkToHelpLayout.setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); - mandatoryLabelLinkToHelpLayout.setComponentAlignment(linkToHelp, Alignment.MIDDLE_RIGHT); - mandatoryLabelLinkToHelpLayout.addStyleName("window-style"); - return mandatoryLabelLinkToHelpLayout; - } + // private HorizontalLayout getMandatoryLabelLinkToHelp() { + // final HorizontalLayout mandatoryLabelLinkToHelpLayout = new + // HorizontalLayout(); + // mandatoryLabelLinkToHelpLayout.setSizeFull(); + // mandatoryLabelLinkToHelpLayout.addComponents(madatoryLabel, linkToHelp); + // mandatoryLabelLinkToHelpLayout.setComponentAlignment(madatoryLabel, + // Alignment.MIDDLE_LEFT); + // mandatoryLabelLinkToHelpLayout.setComponentAlignment(linkToHelp, + // Alignment.MIDDLE_RIGHT); + // mandatoryLabelLinkToHelpLayout.addStyleName("window-style"); + // return mandatoryLabelLinkToHelpLayout; + // } private void createRequiredComponents() { - madatoryLabel = createMandatoryLabel(); rolloutName = createRolloutNameField(); distributionSet = createDistributionSetCombo(); populateDistributionSet(); @@ -296,14 +303,15 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { totalTargetsLabel = createTotalTargetsLabel(); targetFilterQuery = createTargetFilterQuery(); - linkToHelp = createLinkToHelp(); + // linkToHelp = createLinkToHelp(); actionTypeOptionGroupLayout.addStyleName(SPUIStyleDefinitions.ROLLOUT_ACTION_TYPE_LAYOUT); } - private Link createLinkToHelp() { - return SPUIComponentProvider.getHelpLink(uiProperties.getLinks().getDocumentation().getRolloutView()); - } + // private Link createLinkToHelp() { + // return + // SPUIComponentProvider.getHelpLink(uiProperties.getLinks().getDocumentation().getRolloutView()); + // } private Label createGroupSizeLabel() { final Label groupSize = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java index 0162f6ed8..cf769ed00 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java @@ -14,6 +14,7 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantMetaData; +import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -49,6 +50,9 @@ public class DefaultDistributionSetTypeLayout extends BaseConfigurationView impl @Autowired private I18N i18n; + @Autowired + private transient UiProperties uiProperties; + private Long currentDefaultDisSetType; private Long selectedDefaultDisSetType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java index d021254bc..3fa69dd1f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java @@ -15,6 +15,7 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.HawkbitUI; import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.tenantconfiguration.ConfigurationItem.ConfigurationItemChangeListener; @@ -32,7 +33,6 @@ import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Link; import com.vaadin.ui.Panel; import com.vaadin.ui.VerticalLayout; @@ -90,6 +90,11 @@ public class TenantConfigurationDashboardView extends CustomComponent implements rootLayout.setMargin(true); rootLayout.setSpacing(true); + final PopupWindowHelp help = new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRolloutView()); + help.setSpacing(true); + rootLayout.addComponent(help); + rootLayout.setComponentAlignment(help, Alignment.BOTTOM_RIGHT); + configurationViews.forEach(view -> rootLayout.addComponent(view)); final HorizontalLayout buttonContent = saveConfigurationButtonsLayout(); @@ -119,9 +124,9 @@ public class TenantConfigurationDashboardView extends CustomComponent implements undoConfigurationBtn.addClickListener(event -> undoConfiguration()); hlayout.addComponent(undoConfigurationBtn); - final Link linkToSystemConfigHelp = SPUIComponentProvider - .getHelpLink(uiProperties.getLinks().getDocumentation().getSystemConfigurationView()); - hlayout.addComponent(linkToSystemConfigHelp); + // final Link linkToSystemConfigHelp = SPUIComponentProvider + // .getHelpLink(uiProperties.getLinks().getDocumentation().getSystemConfigurationView()); + // hlayout.addComponent(linkToSystemConfigHelp); return hlayout; } From 589c60cedfe7d60318345d56b7f32564c7175127 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 11 May 2016 16:28:16 +0200 Subject: [PATCH 082/371] Create a parent class for all dialogs Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 22 +- .../CreateUpdateSoftwareTypeLayout.java | 19 +- .../upload/UploadConfirmationwindow.java | 16 +- .../hawkbit/ui/common/CommonDialog.java | 101 +++++++++ .../ui/common/grid/AbstractGridHeader.java | 2 +- .../ui/common/table/AbstractTableHeader.java | 7 +- .../ui/components/SPUIComponentProvider.java | 26 ++- .../ui/decorators/SPUIComboBoxDecorator.java | 29 ++- .../ui/decorators/SPUITextAreaDecorator.java | 21 +- .../ui/decorators/SPUITextFieldDecorator.java | 25 ++- .../CreateUpdateDistSetTypeLayout.java | 10 +- .../CreateOrUpdateFilterHeader.java | 9 +- .../filtermanagement/TargetFilterHeader.java | 2 +- .../DistributionAddUpdateWindowLayout.java | 18 +- .../management/tag/CreateUpdateTagLayout.java | 11 +- .../TargetAddUpdateWindowLayout.java | 6 +- .../TargetBulkUpdateWindowLayout.java | 9 +- .../rollout/AddUpdateRolloutWindowLayout.java | 200 ++++++++++-------- .../ui/rollout/rollout/RolloutListGrid.java | 9 +- .../ui/rollout/rollout/RolloutListHeader.java | 11 +- .../DefaultDistributionSetTypeLayout.java | 2 +- ...ficateAuthenticationConfigurationItem.java | 4 +- ...yTokenAuthenticationConfigurationItem.java | 4 +- 23 files changed, 354 insertions(+), 209 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialog.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 6a849d8b7..840a19b8c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -133,22 +133,24 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { private void createRequiredComponents() { /* name textfield */ - nameTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, - i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, + true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); nameTextField.setId(SPUIComponetIdProvider.SOFT_MODULE_NAME); /* version text field */ - versionTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, - i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + versionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", + ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); versionTextField.setId(SPUIComponetIdProvider.SOFT_MODULE_VERSION); /* Vendor text field */ - vendorTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, - i18n.get("textfield.vendor"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + vendorTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.vendor"), "", ValoTheme.TEXTFIELD_TINY, + false, null, i18n.get("textfield.vendor"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); vendorTextField.setId(SPUIComponetIdProvider.SOFT_MODULE_VENDOR); - descTextArea = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTAREA_TINY, false, null, - i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); + descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", + ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), + SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descTextArea.setId(SPUIComponetIdProvider.ADD_SW_MODULE_DESCRIPTION); addDescriptionTextChangeListener(); addVendorTextChangeListener(); @@ -158,8 +160,8 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { madatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); madatoryLabel.addStyleName(ValoTheme.LABEL_SMALL); - typeComboBox = SPUIComponentProvider.getComboBox("", "", null, null, false, null, - i18n.get("upload.swmodule.type")); + typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, false, + null, i18n.get("upload.swmodule.type")); typeComboBox.setId(SPUIComponetIdProvider.SW_MODULE_TYPE); typeComboBox.setStyleName(SPUIDefinitions.COMBO_BOX_SPECIFIC_STYLE + " " + ValoTheme.COMBOBOX_TINY); typeComboBox.setNewItemsAllowed(Boolean.FALSE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index dc0a0911c..98f8fbdb9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -165,23 +165,26 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); - typeName = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, - true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + typeName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", + ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, true, "", i18n.get("textfield.name"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeName.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_NAME); - typeKey = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_KEY, - true, "", i18n.get("textfield.key"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", + ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_KEY, true, "", i18n.get("textfield.key"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeKey.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_KEY); - typeDesc = SPUIComponentProvider.getTextArea("", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, - false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); + typeDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", + ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, false, "", + i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); typeDesc.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC); typeDesc.setImmediate(true); typeDesc.setNullRepresentation(""); - typeNameComboBox = SPUIComponentProvider.getComboBox("", "", null, null, false, "", - i18n.get("label.combobox.type")); + typeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, + "", i18n.get("label.combobox.type")); typeNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); typeNameComboBox.setImmediate(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java index f009985f9..191f3fb90 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java @@ -245,16 +245,16 @@ public class UploadConfirmationwindow implements Button.ClickListener { deleteIcon.setData(itemId); newItem.getItemProperty(ACTION).setValue(deleteIcon); - final TextField sha1 = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, null, - true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField sha1 = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, + null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); sha1.setId(swNameVersion + "/" + customFile.getFileName() + "/sha1"); - final TextField md5 = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, null, - true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField md5 = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, + null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); md5.setId(swNameVersion + "/" + customFile.getFileName() + "/md5"); - final TextField customFileName = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, - null, null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField customFileName = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, + false, null, null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); customFileName.setId(swNameVersion + "/" + customFile.getFileName() + "/customFileName"); newItem.getItemProperty(SHA1_CHECKSUM).setValue(sha1); newItem.getItemProperty(MD5_CHECKSUM).setValue(md5); @@ -265,8 +265,8 @@ public class UploadConfirmationwindow implements Button.ClickListener { private void addFileNameLayout(final Item newItem, final String baseSoftwareModuleNameVersion, final String customFileName, final String itemId) { final HorizontalLayout horizontalLayout = new HorizontalLayout(); - final TextField fileNameTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, - null, null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField fileNameTextField = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, + false, null, null, true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); fileNameTextField.setId(baseSoftwareModuleNameVersion + "/" + customFileName + "/customFileName"); fileNameTextField.setData(baseSoftwareModuleNameVersion + "/" + customFileName); fileNameTextField.setValue(customFileName); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialog.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialog.java new file mode 100644 index 000000000..ad2c37fcc --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialog.java @@ -0,0 +1,101 @@ +package org.eclipse.hawkbit.ui.common; + +import org.apache.commons.lang3.StringUtils; +import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; +import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.vaadin.server.FontAwesome; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.FormLayout; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Link; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; + +public class CommonDialog extends Window { + + private static final long serialVersionUID = -1321949234316858703L; + + private static final Logger LOGGER = LoggerFactory.getLogger(CommonDialog.class); + + private final VerticalLayout mainLayout = new VerticalLayout(); + + private FormLayout formLayout = new FormLayout(); + + private Button saveButton; + + private Button cancelButton; + + public CommonDialog() { + + mainLayout.addComponent(formLayout); + mainLayout.addComponent(createActionButtonsLayout()); + setContent(mainLayout); + + setResizable(false); + center(); + } + + public CommonDialog(final String title, final FormLayout form, final String helpLink) { + + if (formLayout != null) { + formLayout = form; + } + formLayout.setSpacing(true); + formLayout.setMargin(true); + + if (StringUtils.isNotEmpty(helpLink)) { + mainLayout.addComponent(createLinkToHelp(helpLink)); + } + mainLayout.addComponent(formLayout); + mainLayout.addComponent(createActionButtonsLayout()); + + setCaption(title); + setContent(mainLayout); + setResizable(false); + center(); + } + + private HorizontalLayout createActionButtonsLayout() { + + final HorizontalLayout hlayout = new HorizontalLayout(); + hlayout.setSpacing(true); + + saveButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_SAVE, "", "", "", true, + FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); + // saveButton.setDescription(i18n.get("configuration.savebutton.tooltip")); + hlayout.addComponent(saveButton); + + cancelButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_CANCEL, "", "", "", + true, FontAwesome.UNDO, SPUIButtonStyleSmallNoBorder.class); + // cancelButton.setDescription(i18n.get("configuration.cancellbutton.tooltip")); + hlayout.addComponent(cancelButton); + + return hlayout; + } + + public void setSaveButtonClickListener(final ClickListener clickListener) { + saveButton.addClickListener(clickListener); + } + + public void setCancelButtonClickListener(final ClickListener clickListener) { + cancelButton.addClickListener(clickListener); + } + + private Link createLinkToHelp(final String link) { + return SPUIComponentProvider.getHelpLink(link); + } + + public FormLayout getFormLayout() { + return formLayout; + } + + public void setFormLayout(final FormLayout formLayout) { + this.formLayout = formLayout; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java index 282e08152..2d69eea20 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java @@ -102,7 +102,7 @@ public abstract class AbstractGridHeader extends VerticalLayout { } private TextField createSearchField() { - final TextField textField = SPUIComponentProvider.getTextField("filter-box", "text-style filter-box-hide", + final TextField textField = SPUIComponentProvider.getTextField("", "filter-box", "text-style filter-box-hide", false, "", "", false, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); textField.setId(getSearchBoxId()); textField.setWidth(100.0f, Unit.PERCENTAGE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java index b4709ccd1..b1dfd941c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java @@ -44,7 +44,7 @@ import com.vaadin.ui.VerticalLayout; public abstract class AbstractTableHeader extends VerticalLayout { private static final long serialVersionUID = 4881626370291837175L; - + @Autowired protected I18N i18n; @@ -53,7 +53,6 @@ public abstract class AbstractTableHeader extends VerticalLayout { @Autowired protected transient EventBus.SessionEventBus eventbus; - private Label headerCaption; @@ -83,7 +82,7 @@ public abstract class AbstractTableHeader extends VerticalLayout { restoreState(); eventbus.subscribe(this); } - + @PreDestroy void destroy() { eventbus.unsubscribe(this); @@ -214,7 +213,7 @@ public abstract class AbstractTableHeader extends VerticalLayout { } private TextField createSearchField() { - final TextField textField = SPUIComponentProvider.getTextField("filter-box", "text-style filter-box-hide", + final TextField textField = SPUIComponentProvider.getTextField("", "filter-box", "text-style filter-box-hide", false, "", "", false, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); textField.setId(getSearchBoxId()); textField.setWidth(100.0f, Unit.PERCENTAGE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index f5008eb31..404c48bd3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -152,6 +152,8 @@ public final class SPUIComponentProvider { /** * Get Label UI component. * + * @param caption + * set the caption of the textfield * @param style * set style * @param styleName @@ -160,7 +162,7 @@ public final class SPUIComponentProvider { * to set field as mandatory * @param data * component data - * @param promt + * @param prompt * prompt user for input * @param immediate * set component's immediate mode specified mode @@ -168,9 +170,11 @@ public final class SPUIComponentProvider { * maximum characters allowed * @return TextField text field */ - public static TextField getTextField(final String style, final String styleName, final boolean required, - final String data, final String promt, final boolean immediate, final int maxLengthAllowed) { - return SPUITextFieldDecorator.decorate(style, styleName, required, data, promt, immediate, maxLengthAllowed); + public static TextField getTextField(final String caption, final String style, final String styleName, + final boolean required, final String data, final String prompt, final boolean immediate, + final int maxLengthAllowed) { + return SPUITextFieldDecorator.decorate(caption, style, styleName, required, data, prompt, immediate, + maxLengthAllowed); } /** @@ -190,14 +194,16 @@ public final class SPUIComponentProvider { * maximum characters allowed * @return TextArea text area */ - public static TextArea getTextArea(final String style, final String styleName, final boolean required, - final String data, final String promt, final int maxLength) { - return SPUITextAreaDecorator.decorate(style, styleName, required, data, promt, maxLength); + public static TextArea getTextArea(final String caption, final String style, final String styleName, + final boolean required, final String data, final String promt, final int maxLength) { + return SPUITextAreaDecorator.decorate(caption, style, styleName, required, data, promt, maxLength); } /** * Get Label UI component. * + * @param caption + * caption of the combo box * @param height * combo box height * @param width @@ -214,9 +220,9 @@ public final class SPUIComponentProvider { * input prompt * @return ComboBox */ - public static ComboBox getComboBox(final String height, final String width, final String style, - final String styleName, final boolean required, final String data, final String promt) { - return SPUIComboBoxDecorator.decorate(height, width, style, styleName, required, data, promt); + public static ComboBox getComboBox(final String caption, final String height, final String width, + final String style, final String styleName, final boolean required, final String data, final String promt) { + return SPUIComboBoxDecorator.decorate(caption, height, width, style, styleName, required, data, promt); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java index 7e7ae836e..291173044 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.decorators; +import org.apache.commons.lang3.StringUtils; + import com.vaadin.ui.ComboBox; import com.vaadin.ui.themes.ValoTheme; @@ -29,6 +31,8 @@ public final class SPUIComboBoxDecorator { /** * Decorate. * + * @param caption + * caption of the combobox * @param height * as H * @param width @@ -41,39 +45,42 @@ public final class SPUIComboBoxDecorator { * as T|F * @param data * as data - * @param promt + * @param prompt * as promt * @return ComboBox as comp */ - public static ComboBox decorate(final String height, final String width, final String style, final String styleName, - final boolean required, final String data, final String promt) { + public static ComboBox decorate(final String caption, final String height, final String width, final String style, + final String styleName, final boolean required, final String data, final String prompt) { final ComboBox spUICombo = new ComboBox(); // Default settings spUICombo.setRequired(required); spUICombo.addStyleName(ValoTheme.COMBOBOX_TINY); + if (StringUtils.isNotEmpty(caption)) { + spUICombo.setCaption(caption); + } // Add style - if (null != style) { + if (StringUtils.isNotEmpty(style)) { spUICombo.setStyleName(style); } // Add style Name - if (null != styleName) { + if (StringUtils.isNotEmpty(styleName)) { spUICombo.addStyleName(styleName); } // Add height - if (null != height) { + if (StringUtils.isNotEmpty(height)) { spUICombo.setHeight(height); } // AddWidth - if (null != width) { + if (StringUtils.isNotEmpty(width)) { spUICombo.setWidth(width); } - // Set promt - if (null != promt) { - spUICombo.setInputPrompt(promt); + // Set prompt + if (StringUtils.isNotEmpty(prompt)) { + spUICombo.setInputPrompt(prompt); } // Set Data - if (null != data) { + if (StringUtils.isNotEmpty(data)) { spUICombo.setData(data); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java index d4a3bcc77..14b727c68 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.decorators; +import org.apache.commons.lang3.StringUtils; + import com.vaadin.ui.TextArea; import com.vaadin.ui.themes.ValoTheme; @@ -37,33 +39,36 @@ public final class SPUITextAreaDecorator { * to set field as mandatory * @param data * component data - * @param promt + * @param prompt * as user for input * @param maxLength * maximum characters allowed * @return TextArea as comp */ - public static TextArea decorate(String style, String styleName, boolean required, String data, String promt, - int maxLength) { + public static TextArea decorate(final String caption, final String style, final String styleName, + final boolean required, final String data, final String prompt, final int maxLength) { final TextArea spUITxtArea = new TextArea(); // Default settings spUITxtArea.setRequired(false); spUITxtArea.addStyleName(ValoTheme.COMBOBOX_SMALL); + if (StringUtils.isNotEmpty(caption)) { + spUITxtArea.setCaption(caption); + } if (required) { spUITxtArea.setRequired(true); } // Add style - if (null != style) { + if (StringUtils.isNotEmpty(style)) { spUITxtArea.setStyleName(style); } // Add style Name - if (null != styleName) { + if (StringUtils.isNotEmpty(styleName)) { spUITxtArea.addStyleName(styleName); } - if (null != promt) { - spUITxtArea.setInputPrompt(promt); + if (StringUtils.isNotEmpty(prompt)) { + spUITxtArea.setInputPrompt(prompt); } - if (null != data) { + if (StringUtils.isNotEmpty(data)) { spUITxtArea.setData(data); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java index 72234da75..647b1d5aa 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.decorators; +import org.apache.commons.lang3.StringUtils; + import com.vaadin.ui.TextField; import com.vaadin.ui.themes.ValoTheme; @@ -27,8 +29,9 @@ public final class SPUITextFieldDecorator { } /** - * Decorate. * + * @param caption + * set the caption of the textfield * @param style * set style * @param styleName @@ -37,7 +40,7 @@ public final class SPUITextFieldDecorator { * to set field as mandatory * @param data * component data - * @param promt + * @param prompt * prompt user for input * @param immediate * as for display @@ -45,9 +48,13 @@ public final class SPUITextFieldDecorator { * maximum characters allowed * @return Text field as decorated */ - public static TextField decorate(String style, String styleName, boolean required, String data, String promt, - boolean immediate, int maxLengthAllowed) { + public static TextField decorate(final String caption, final String style, final String styleName, + final boolean required, final String data, final String prompt, final boolean immediate, + final int maxLengthAllowed) { final TextField spUITxtFld = new TextField(); + if (StringUtils.isNotEmpty(caption)) { + spUITxtFld.setCaption(caption); + } // Default settings spUITxtFld.setRequired(false); spUITxtFld.addStyleName(ValoTheme.TEXTFIELD_SMALL); @@ -58,17 +65,17 @@ public final class SPUITextFieldDecorator { spUITxtFld.setImmediate(true); } // Add style - if (null != style) { + if (StringUtils.isNotEmpty(style)) { spUITxtFld.setStyleName(style); } // Add style Name - if (null != styleName) { + if (StringUtils.isNotEmpty(styleName)) { spUITxtFld.addStyleName(styleName); } - if (null != promt) { - spUITxtFld.setInputPrompt(promt); + if (StringUtils.isNotEmpty(prompt)) { + spUITxtFld.setInputPrompt(prompt); } - if (null != data) { + if (StringUtils.isNotEmpty(data)) { spUITxtFld.setData(data); } if (maxLengthAllowed > 0) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 58b1b5fd2..56e6b6bbe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -181,17 +181,17 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); madatoryLabel = getMandatoryLabel(); - typeName = SPUIComponentProvider.getTextField("", + typeName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_NAME, true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeName.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_NAME); - typeKey = SPUIComponentProvider.getTextField("", + typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_KEY, true, "", i18n.get("textfield.key"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeKey.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_KEY); - typeDesc = SPUIComponentProvider.getTextArea("", + typeDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_DESC, false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); @@ -199,8 +199,8 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co typeDesc.setImmediate(true); typeDesc.setNullRepresentation(""); - typeNameComboBox = SPUIComponentProvider.getComboBox("", "", null, null, false, "", - i18n.get("label.combobox.type")); + typeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, + "", i18n.get("label.combobox.type")); typeNameComboBox.setId(SPUIDefinitions.NEW_DISTRIBUTION_SET_TYPE_NAME_COMBO); typeNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); typeNameComboBox.setImmediate(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index 97d2bf031..d1525f154 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -222,8 +222,9 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } private TextField createNameTextField() { - final TextField nameField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, - i18n.get("textfield.customfiltername"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField nameField = SPUIComponentProvider.getTextField(i18n.get("textfield.customfiltername"), "", + ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.customfiltername"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); nameField.setId(SPUIComponetIdProvider.CUSTOM_FILTER_ADD_NAME); nameField.setPropertyDataSource(nameLabel); nameField.addTextChangeListener(event -> onFiterNameChange(event)); @@ -414,8 +415,8 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } private TextField createSearchField() { - final TextField textField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, "", "", - true, SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH); + final TextField textField = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, "", + "", true, SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH); textField.setId("custom.query.text.Id"); textField.addStyleName("target-filter-textfield"); textField.setWidth(900.0F, Unit.PIXELS); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java index 08592f20c..3ce600ef8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java @@ -124,7 +124,7 @@ public class TargetFilterHeader extends VerticalLayout { } private TextField createSearchField() { - final TextField campSearchTextField = SPUIComponentProvider.getTextField("filter-box", + final TextField campSearchTextField = SPUIComponentProvider.getTextField(null, "filter-box", "text-style filter-box-hide", false, "", "", false, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); campSearchTextField.setId("target.filter.search.text.Id"); campSearchTextField.setWidth(500.0f, Unit.PIXELS); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 71a022ad9..85beb879d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -160,24 +160,26 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { * Create required UI components. */ private void createRequiredComponents() { - distNameTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, - i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + distNameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, + true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); distNameTextField.setId(SPUIComponetIdProvider.DIST_ADD_NAME); distNameTextField.setNullRepresentation(""); - distVersionTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, - i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + distVersionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", + ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); distVersionTextField.setId(SPUIComponetIdProvider.DIST_ADD_VERSION); distVersionTextField.setNullRepresentation(""); - distsetTypeNameComboBox = SPUIComponentProvider.getComboBox("", "", null, "", false, "", - i18n.get("label.combobox.type")); + distsetTypeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, "", + false, "", i18n.get("label.combobox.type")); distsetTypeNameComboBox.setImmediate(true); distsetTypeNameComboBox.setNullSelectionAllowed(false); distsetTypeNameComboBox.setId(SPUIComponetIdProvider.DIST_ADD_DISTSETTYPE); - descTextArea = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTAREA_TINY, false, null, - i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); + descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", + ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), + SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descTextArea.setId(SPUIComponetIdProvider.DIST_ADD_DESC); descTextArea.setNullRepresentation(""); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java index 0f40528b1..289cf6542 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java @@ -173,19 +173,20 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag.color"), null); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); - tagName = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_NAME, - true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", + ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_NAME, true, "", i18n.get("textfield.name"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); tagName.setId(SPUIDefinitions.NEW_TARGET_TAG_NAME); - tagDesc = SPUIComponentProvider.getTextArea("", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, + tagDesc = SPUIComponentProvider.getTextArea(null, "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); tagDesc.setId(SPUIDefinitions.NEW_TARGET_TAG_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); - tagNameComboBox = SPUIComponentProvider.getComboBox("", "", null, null, false, "", - i18n.get("label.combobox.tag")); + tagNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.tag"), "", "", null, null, false, + "", i18n.get("label.combobox.tag")); tagNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); tagNameComboBox.setImmediate(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index e87e7371f..9275776d0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -105,17 +105,17 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private void createRequiredComponents() { /* Textfield for controller Id */ - controllerIDTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, + controllerIDTextField = SPUIComponentProvider.getTextField( i18n.get("prompt.target.id"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.target.id"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); controllerIDTextField.setId(SPUIComponetIdProvider.TARGET_ADD_CONTROLLER_ID); /* Textfield for target name */ - nameTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, + nameTextField = SPUIComponentProvider.getTextField( i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); nameTextField.setId(SPUIComponetIdProvider.TARGET_ADD_NAME); /* Textarea for target description */ - descTextArea = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, + descTextArea = SPUIComponentProvider.getTextArea( i18n.get("textfield.description"), "text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descTextArea.setId(SPUIComponetIdProvider.TARGET_ADD_DESC); descTextArea.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java index 0dc27b9f5..a098f61c3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java @@ -195,8 +195,9 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { } private TextArea getDescriptionTextArea() { - final TextArea description = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTFIELD_TINY, - false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); + final TextArea description = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), + "text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), + SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); description.setId(SPUIComponetIdProvider.BULK_UPLOAD_DESC); description.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); description.setWidth("100%"); @@ -205,8 +206,8 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { private ComboBox getDsComboField() { final Container container = createContainer(); - final ComboBox dsComboBox = SPUIComponentProvider.getComboBox("", "", null, null, false, "", - i18n.get("bulkupload.ds.name")); + final ComboBox dsComboBox = SPUIComponentProvider.getComboBox(i18n.get("bulkupload.ds.name"), "", "", null, + null, false, "", i18n.get("bulkupload.ds.name")); dsComboBox.setSizeUndefined(); dsComboBox.addStyleName(SPUIDefinitions.BULK_UPLOD_DS_COMBO_STYLE); dsComboBox.setImmediate(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index f574da244..d6503a1cf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -27,7 +27,7 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondit import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.ui.UiProperties; -import org.eclipse.hawkbit.ui.common.PopupWindowHelp; +import org.eclipse.hawkbit.ui.common.CommonDialog; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery; @@ -61,9 +61,10 @@ import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; -import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.FormLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; +import com.vaadin.ui.Link; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; @@ -79,7 +80,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class AddUpdateRolloutWindowLayout extends CustomComponent { +public class AddUpdateRolloutWindowLayout extends CommonDialog { private static final long serialVersionUID = 2999293468801479916L; @@ -113,6 +114,8 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { @Autowired private transient EventBus.SessionEventBus eventBus; + private Label madatoryLabel; + private TextField rolloutName; private ComboBox distributionSet; @@ -135,7 +138,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private OptionGroup errorThresholdOptionGroup; - // private Link linkToHelp; + private Link linkToHelp; private Window addUpdateRolloutWindow; @@ -149,12 +152,21 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private TextArea targetFilterQuery; + public AddUpdateRolloutWindowLayout() { + super(); + } + + public AddUpdateRolloutWindowLayout(final String title, final FormLayout form, final String helpLink) { + super(title, form, helpLink); + } + /** * Create components and layout. */ public void init() { - createRequiredComponents(); - buildLayout(); + // createRequiredComponents(); + // buildLayout(); + initForm(); } public Window getWindow() { @@ -202,17 +214,13 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { mainLayout.setSpacing(Boolean.TRUE); mainLayout.setSizeUndefined(); - // mainLayout.addComponents(getMandatoryLabelLinkToHelp(), rolloutName, - // distributionSet, getTargetFilterLayout(), - // getGroupDetailsLayout(), getTriggerThresoldLayout(), - // getErrorThresoldLayout(), description, - // actionTypeOptionGroupLayout, getSaveDiscardButtonLayout()); + mainLayout.addComponents(madatoryLabel, rolloutName, distributionSet, getTargetFilterLayout(), + getGroupDetailsLayout(), getTriggerThresoldLayout(), getErrorThresoldLayout(), description, + actionTypeOptionGroupLayout, linkToHelp, getSaveDiscardButtonLayout()); - mainLayout.addComponents(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRolloutView()), - createMandatoryLabel(), rolloutName, distributionSet, getTargetFilterLayout(), getGroupDetailsLayout(), - getTriggerThresoldLayout(), getErrorThresoldLayout(), description, actionTypeOptionGroupLayout, - getSaveDiscardButtonLayout()); - setCompositionRoot(mainLayout); + mainLayout.addComponent(new Label("TEST TEST TEST")); + mainLayout.setComponentAlignment(linkToHelp, Alignment.BOTTOM_RIGHT); + rolloutName.focus(); } private HorizontalLayout getGroupDetailsLayout() { @@ -225,9 +233,12 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private HorizontalLayout getErrorThresoldLayout() { + createErrorThresold(); + createErrorThresholdOptionGroup(); final HorizontalLayout errorThresoldLayout = new HorizontalLayout(); errorThresoldLayout.setSizeFull(); - errorThresoldLayout.addComponents(errorThreshold, errorThresholdOptionGroup); + errorThresoldLayout.addComponents(SPUIComponentProvider.getLabel(i18n.get("prompt.error.threshold"), null), + errorThreshold, errorThresholdOptionGroup); errorThresoldLayout.setExpandRatio(errorThreshold, 1.0F); return errorThresoldLayout; } @@ -244,10 +255,12 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private HorizontalLayout getTriggerThresoldLayout() { + createTriggerThresold(); final HorizontalLayout triggerThresholdLayout = new HorizontalLayout(); triggerThresholdLayout.setSizeFull(); - triggerThresholdLayout.addComponents(triggerThreshold, getPercentHintLabel()); - triggerThresholdLayout.setExpandRatio(triggerThreshold, 1.0F); + triggerThresholdLayout.addComponents(SPUIComponentProvider.getLabel(i18n.get("prompt.tigger.thresold"), null), + triggerThreshold, getPercentHintLabel()); + triggerThresholdLayout.setExpandRatio(triggerThreshold, 2.0F); return triggerThresholdLayout; } @@ -268,20 +281,28 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return buttonsLayout; } - // private HorizontalLayout getMandatoryLabelLinkToHelp() { - // final HorizontalLayout mandatoryLabelLinkToHelpLayout = new - // HorizontalLayout(); - // mandatoryLabelLinkToHelpLayout.setSizeFull(); - // mandatoryLabelLinkToHelpLayout.addComponents(madatoryLabel, linkToHelp); - // mandatoryLabelLinkToHelpLayout.setComponentAlignment(madatoryLabel, - // Alignment.MIDDLE_LEFT); - // mandatoryLabelLinkToHelpLayout.setComponentAlignment(linkToHelp, - // Alignment.MIDDLE_RIGHT); - // mandatoryLabelLinkToHelpLayout.addStyleName("window-style"); - // return mandatoryLabelLinkToHelpLayout; - // } + private void initForm() { + + getFormLayout().addComponent(createMandatoryLabel()); + getFormLayout().addComponent(createRolloutNameField()); + getFormLayout().addComponent(createDistributionSetCombo()); + populateDistributionSet(); + getFormLayout().addComponent(createTargetFilterQueryCombo()); + populateTargetFilterQuery(); + getFormLayout().addComponent(createNoOfGroupsField()); + getFormLayout().addComponent(createGroupSizeLabel()); + getFormLayout().addComponent(getTriggerThresoldLayout()); + getFormLayout().addComponent(getErrorThresoldLayout()); + getFormLayout().addComponent(createDescription()); + getFormLayout().addComponent(actionTypeOptionGroupLayout); + actionTypeOptionGroupLayout.selectDefaultOption(); + + getFormLayout().addComponent(createTotalTargetsLabel()); + getFormLayout().addComponent(createTargetFilterQuery()); + } private void createRequiredComponents() { + madatoryLabel = createMandatoryLabel(); rolloutName = createRolloutNameField(); distributionSet = createDistributionSetCombo(); populateDistributionSet(); @@ -291,10 +312,10 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { noOfGroups = createNoOfGroupsField(); groupSizeLabel = createGroupSizeLabel(); - triggerThreshold = createTriggerThresold(); - errorThreshold = createErrorThresold(); - description = createDescription(); - errorThresholdOptionGroup = createErrorThresholdOptionGroup(); + // triggerThreshold = createTriggerThresold(); + // errorThreshold = createErrorThresold(); + // description = createDescription(); + // errorThresholdOptionGroup = createErrorThresholdOptionGroup(); setDefaultSaveStartGroupOption(); saveRolloutBtn = createSaveButton(); discardRollloutBtn = createDiscardButton(); @@ -303,16 +324,11 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { totalTargetsLabel = createTotalTargetsLabel(); targetFilterQuery = createTargetFilterQuery(); - // linkToHelp = createLinkToHelp(); + linkToHelp = SPUIComponentProvider.getHelpLink(uiProperties.getLinks().getDocumentation().getRolloutView()); actionTypeOptionGroupLayout.addStyleName(SPUIStyleDefinitions.ROLLOUT_ACTION_TYPE_LAYOUT); } - // private Link createLinkToHelp() { - // return - // SPUIComponentProvider.getHelpLink(uiProperties.getLinks().getDocumentation().getRolloutView()); - // } - private Label createGroupSizeLabel() { final Label groupSize = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); groupSize.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); @@ -323,8 +339,9 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private TextArea createTargetFilterQuery() { - final TextArea filterField = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTFIELD_TINY, - false, null, null, SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH); + final TextArea filterField = SPUIComponentProvider.getTextArea(null, "text-area-style", + ValoTheme.TEXTFIELD_TINY, false, null, null, + SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH); filterField.setId(SPUIComponetIdProvider.ROLLOUT_TARGET_FILTER_QUERY_FIELD); filterField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); filterField.setVisible(false); @@ -342,17 +359,17 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return targetCountLabel; } - private OptionGroup createErrorThresholdOptionGroup() { - final OptionGroup errorThresoldOptions = new OptionGroup(); + private void createErrorThresholdOptionGroup() { + errorThresholdOptionGroup = new OptionGroup(); for (final ERRORTHRESOLDOPTIONS option : ERRORTHRESOLDOPTIONS.values()) { - errorThresoldOptions.addItem(option.getValue()); + errorThresholdOptionGroup.addItem(option.getValue()); } - errorThresoldOptions.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_OPTION_ID); - errorThresoldOptions.addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL); - errorThresoldOptions.addStyleName(SPUIStyleDefinitions.ROLLOUT_OPTION_GROUP); - errorThresoldOptions.setSizeUndefined(); - errorThresoldOptions.addValueChangeListener(event -> onErrorThresoldOptionChange(event)); - return errorThresoldOptions; + errorThresholdOptionGroup.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_OPTION_ID); + errorThresholdOptionGroup.addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL); + errorThresholdOptionGroup.addStyleName(SPUIStyleDefinitions.ROLLOUT_OPTION_GROUP); + errorThresholdOptionGroup.setSizeUndefined(); + errorThresholdOptionGroup.addValueChangeListener(event -> onErrorThresoldOptionChange(event)); + setDefaultSaveStartGroupOption(); } private void onErrorThresoldOptionChange(final ValueChangeEvent event) { @@ -361,21 +378,21 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { if (event.getProperty().getValue().equals(ERRORTHRESOLDOPTIONS.COUNT.getValue())) { errorThreshold.addValidator(new ErrorThresoldOptionValidator()); } else { - errorThreshold.addValidator(new ThresoldFieldValidator()); + errorThreshold.addValidator(new ThresholdFieldValidator()); } errorThreshold.getValidators(); } private ComboBox createTargetFilterQueryCombo() { - final ComboBox targetFilter = SPUIComponentProvider.getComboBox("", "", null, null, true, "", - i18n.get("prompt.target.filter")); - targetFilter.setImmediate(true); - targetFilter.setPageLength(7); - targetFilter.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); - targetFilter.setId(SPUIComponetIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID); - targetFilter.setSizeFull(); - targetFilter.addValueChangeListener(event -> onTargetFilterChange()); - return targetFilter; + targetFilterQueryCombo = SPUIComponentProvider.getComboBox(i18n.get("prompt.target.filter"), "", "", null, null, + true, "", i18n.get("prompt.target.filter")); + targetFilterQueryCombo.setImmediate(true); + targetFilterQueryCombo.setPageLength(7); + targetFilterQueryCombo.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); + targetFilterQueryCombo.setId(SPUIComponetIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID); + targetFilterQueryCombo.setSizeFull(); + targetFilterQueryCombo.addValueChangeListener(event -> onTargetFilterChange()); + return targetFilterQueryCombo; } private void onTargetFilterChange() { @@ -606,37 +623,37 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private TextArea createDescription() { - final TextArea descriptionField = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTFIELD_TINY, - false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); + final TextArea descriptionField = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), + "text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), + SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descriptionField.setId(SPUIComponetIdProvider.ROLLOUT_DESCRIPTION_ID); descriptionField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); descriptionField.setSizeFull(); return descriptionField; } - private TextField createErrorThresold() { - final TextField errorField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, + private void createErrorThresold() { + errorThreshold = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("prompt.error.threshold"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - errorField.addValidator(new ThresoldFieldValidator()); - errorField.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_ID); - errorField.setMaxLength(7); - errorField.setSizeFull(); - return errorField; + errorThreshold.addValidator(new ThresholdFieldValidator()); + errorThreshold.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_ID); + errorThreshold.setMaxLength(7); + errorThreshold.setSizeFull(); } - private TextField createTriggerThresold() { - final TextField thresholdField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, + private void createTriggerThresold() { + triggerThreshold = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("prompt.tigger.thresold"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - thresholdField.setId(SPUIComponetIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); - thresholdField.addValidator(new ThresoldFieldValidator()); - thresholdField.setSizeFull(); - thresholdField.setMaxLength(3); - return thresholdField; + triggerThreshold.setId(SPUIComponetIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); + triggerThreshold.addValidator(new ThresholdFieldValidator()); + triggerThreshold.setSizeUndefined(); + triggerThreshold.setMaxLength(3); } private TextField createNoOfGroupsField() { - final TextField noOfGroupsField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, - i18n.get("prompt.number.of.groups"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField noOfGroupsField = SPUIComponentProvider.getTextField(i18n.get("prompt.number.of.groups"), "", + ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.number.of.groups"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); noOfGroupsField.setId(SPUIComponetIdProvider.ROLLOUT_NO_OF_GROUPS_ID); noOfGroupsField.addValidator(new GroupNumberValidator()); noOfGroupsField.setSizeFull(); @@ -655,14 +672,14 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private ComboBox createDistributionSetCombo() { - final ComboBox dsSet = SPUIComponentProvider.getComboBox("", "", null, null, true, "", - i18n.get("prompt.distribution.set")); - dsSet.setImmediate(true); - dsSet.setPageLength(7); - dsSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); - dsSet.setId(SPUIComponetIdProvider.ROLLOUT_DS_ID); - dsSet.setSizeFull(); - return dsSet; + distributionSet = SPUIComponentProvider.getComboBox(i18n.get("prompt.distribution.set"), "", "", null, null, + true, "", i18n.get("prompt.distribution.set")); + distributionSet.setImmediate(true); + distributionSet.setPageLength(7); + distributionSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); + distributionSet.setId(SPUIComponetIdProvider.ROLLOUT_DS_ID); + distributionSet.setSizeFull(); + return distributionSet; } private void populateDistributionSet() { @@ -680,8 +697,9 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private TextField createRolloutNameField() { - final TextField rolloutNameField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, - i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField rolloutNameField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", + ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); rolloutNameField.setId(SPUIComponetIdProvider.ROLLOUT_NAME_FIELD_ID); rolloutNameField.setSizeFull(); return rolloutNameField; @@ -728,7 +746,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return (int) Math.ceil((double) totalTargetsCount / Double.parseDouble(noOfGroups.getValue())); } - class ThresoldFieldValidator implements Validator { + class ThresholdFieldValidator implements Validator { private static final long serialVersionUID = 9049939751976326550L; @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 9c3e1992b..7c7a5daaf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -54,7 +54,6 @@ import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.UI; -import com.vaadin.ui.Window; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; import com.vaadin.ui.renderers.HtmlRenderer; @@ -77,7 +76,6 @@ public class RolloutListGrid extends AbstractGrid { private static final String START_OPTION = "Start"; - @Autowired private transient RolloutManagement rolloutManagement; @@ -95,7 +93,6 @@ public class RolloutListGrid extends AbstractGrid { private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final RolloutEvent event) { switch (event) { @@ -393,10 +390,8 @@ public class RolloutListGrid extends AbstractGrid { private void onUpdate(final ContextMenuData contextMenuData) { addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); - final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); - addTargetWindow.setCaption(i18n.get("caption.update.rollout")); - UI.getCurrent().addWindow(addTargetWindow); - addTargetWindow.setVisible(Boolean.TRUE); + UI.getCurrent().addWindow(addUpdateRolloutWindow); + addUpdateRolloutWindow.setVisible(Boolean.TRUE); } private void refreshGrid() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index b3043eb4a..543ef18a3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -27,7 +27,6 @@ import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.UI; -import com.vaadin.ui.Window; /** * @@ -55,7 +54,6 @@ public class RolloutListHeader extends AbstractGridHeader { @PostConstruct protected void init() { super.init(); - addUpdateRolloutWindow.init(); } @Override @@ -91,11 +89,10 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected void addNewItem(final ClickEvent event) { - addUpdateRolloutWindow.resetComponents(); - final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); - UI.getCurrent().addWindow(addTargetWindow); - addTargetWindow.setVisible(Boolean.TRUE); - + // addUpdateRolloutWindow.resetComponents(); + addUpdateRolloutWindow.init(); + UI.getCurrent().addWindow(addUpdateRolloutWindow); + addUpdateRolloutWindow.setVisible(Boolean.TRUE); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java index cf769ed00..098456d88 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java @@ -95,7 +95,7 @@ public class DefaultDistributionSetTypeLayout extends BaseConfigurationView impl final Iterable distributionSetTypeCollection = distributionSetManagement .findDistributionSetTypesAll(pageReq); - combobox = SPUIComponentProvider.getComboBox("", "330", null, null, false, "", "label.combobox.tag"); + combobox = SPUIComponentProvider.getComboBox(null, "", "330", null, null, false, "", "label.combobox.tag"); combobox.setId(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_DEFAULTDIS_COMBOBOX); combobox.setNullSelectionAllowed(false); for (final DistributionSetType distributionSetType : distributionSetTypeCollection) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java index 438917072..e49f77b8d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java @@ -70,8 +70,8 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti caRootAuthorityLabel.setDescription( "The SSL Issuer iRules.X509 hash, to validate against the controller request certifcate."); - caRootAuthorityTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, "", - true, 128); + caRootAuthorityTextField = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, + "", true, 128); caRootAuthorityTextField.setWidth("500px"); caRootAuthorityTextField.setImmediate(true); caRootAuthorityTextField.addTextChangeListener(event -> caRootAuthorityChanged()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java index 3fa87538c..86d51409a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java @@ -74,8 +74,8 @@ public class GatewaySecurityTokenAuthenticationConfigurationItem extends Abstrac detailLayout = new VerticalLayout(); detailLayout.setImmediate(true); - gatewayTokenNameTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, "", - true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + gatewayTokenNameTextField = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, + "", true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); gatewayTokenNameTextField.setImmediate(true); // hide text field until we support multiple gateway tokens for a tenan gatewayTokenNameTextField.setVisible(false); From f4a85c8271630248bbe61e18cd3dc44f27df92a8 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 12 May 2016 11:03:21 +0200 Subject: [PATCH 083/371] Signed-off-by: Melanie Retter --- .../hawkbit/ui/common/CommonDialog.java | 5 + .../rollout/AddUpdateRolloutWindowLayout.java | 105 +++++++++--------- .../ui/rollout/rollout/RolloutListHeader.java | 3 +- .../themes/hawkbit/customstyles/others.scss | 2 +- 4 files changed, 63 insertions(+), 52 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialog.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialog.java index ad2c37fcc..83ff7c8e2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialog.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialog.java @@ -8,6 +8,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.vaadin.server.FontAwesome; +import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.FormLayout; @@ -67,13 +68,17 @@ public class CommonDialog extends Window { saveButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_SAVE, "", "", "", true, FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); + saveButton.setCaption("save"); // saveButton.setDescription(i18n.get("configuration.savebutton.tooltip")); hlayout.addComponent(saveButton); + hlayout.setComponentAlignment(saveButton, Alignment.MIDDLE_LEFT); cancelButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_CANCEL, "", "", "", true, FontAwesome.UNDO, SPUIButtonStyleSmallNoBorder.class); + cancelButton.setCaption("cancel"); // cancelButton.setDescription(i18n.get("configuration.cancellbutton.tooltip")); hlayout.addComponent(cancelButton); + hlayout.setComponentAlignment(cancelButton, Alignment.MIDDLE_RIGHT); return hlayout; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index d6503a1cf..057f8b146 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -166,7 +166,9 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { public void init() { // createRequiredComponents(); // buildLayout(); + setCaption(i18n.get("caption.configure.rollout")); initForm(); + resetFields(); } public Window getWindow() { @@ -215,7 +217,7 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { mainLayout.setSizeUndefined(); mainLayout.addComponents(madatoryLabel, rolloutName, distributionSet, getTargetFilterLayout(), - getGroupDetailsLayout(), getTriggerThresoldLayout(), getErrorThresoldLayout(), description, + getGroupDetailsLayout(), getTriggerThresoldLayout(), getErrorThresholdLayout(), description, actionTypeOptionGroupLayout, linkToHelp, getSaveDiscardButtonLayout()); mainLayout.addComponent(new Label("TEST TEST TEST")); @@ -224,22 +226,27 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } private HorizontalLayout getGroupDetailsLayout() { + createGroupSizeLabel(); + createNoOfGroupsField(); final HorizontalLayout groupLayout = new HorizontalLayout(); + groupLayout.setCaption(i18n.get("prompt.number.of.groups")); groupLayout.setSizeFull(); groupLayout.addComponents(noOfGroups, groupSizeLabel); - groupLayout.setExpandRatio(noOfGroups, 1.0F); + groupLayout.setExpandRatio(noOfGroups, 3.0F); + groupLayout.setExpandRatio(groupSizeLabel, 1.0F); groupLayout.setComponentAlignment(groupSizeLabel, Alignment.MIDDLE_LEFT); return groupLayout; } - private HorizontalLayout getErrorThresoldLayout() { - createErrorThresold(); + private HorizontalLayout getErrorThresholdLayout() { + createErrorThreshold(); createErrorThresholdOptionGroup(); final HorizontalLayout errorThresoldLayout = new HorizontalLayout(); errorThresoldLayout.setSizeFull(); - errorThresoldLayout.addComponents(SPUIComponentProvider.getLabel(i18n.get("prompt.error.threshold"), null), - errorThreshold, errorThresholdOptionGroup); - errorThresoldLayout.setExpandRatio(errorThreshold, 1.0F); + errorThresoldLayout.addComponents(errorThreshold, errorThresholdOptionGroup); + errorThresoldLayout.setExpandRatio(errorThreshold, 3.0F); + errorThresoldLayout.setExpandRatio(errorThresholdOptionGroup, 1.0F); + errorThresoldLayout.setCaption(i18n.get("prompt.error.threshold")); return errorThresoldLayout; } @@ -257,17 +264,20 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { private HorizontalLayout getTriggerThresoldLayout() { createTriggerThresold(); final HorizontalLayout triggerThresholdLayout = new HorizontalLayout(); + triggerThresholdLayout.setCaption(i18n.get("prompt.tigger.thresold")); triggerThresholdLayout.setSizeFull(); - triggerThresholdLayout.addComponents(SPUIComponentProvider.getLabel(i18n.get("prompt.tigger.thresold"), null), - triggerThreshold, getPercentHintLabel()); - triggerThresholdLayout.setExpandRatio(triggerThreshold, 2.0F); + final Label percentSymbol = getPercentHintLabel(); + triggerThresholdLayout.addComponents(triggerThreshold, percentSymbol); + triggerThresholdLayout.setExpandRatio(triggerThreshold, 1.0F); + triggerThresholdLayout.setExpandRatio(percentSymbol, 5.0F); + return triggerThresholdLayout; } private Label getPercentHintLabel() { final Label percentSymbol = new Label("%"); percentSymbol.addStyleName(ValoTheme.LABEL_TINY + " " + ValoTheme.LABEL_BOLD); - percentSymbol.setSizeUndefined(); + percentSymbol.setSizeFull(); return percentSymbol; } @@ -283,22 +293,20 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { private void initForm() { - getFormLayout().addComponent(createMandatoryLabel()); getFormLayout().addComponent(createRolloutNameField()); getFormLayout().addComponent(createDistributionSetCombo()); populateDistributionSet(); getFormLayout().addComponent(createTargetFilterQueryCombo()); populateTargetFilterQuery(); - getFormLayout().addComponent(createNoOfGroupsField()); - getFormLayout().addComponent(createGroupSizeLabel()); + getFormLayout().addComponent(getGroupDetailsLayout()); getFormLayout().addComponent(getTriggerThresoldLayout()); - getFormLayout().addComponent(getErrorThresoldLayout()); + getFormLayout().addComponent(getErrorThresholdLayout()); getFormLayout().addComponent(createDescription()); getFormLayout().addComponent(actionTypeOptionGroupLayout); actionTypeOptionGroupLayout.selectDefaultOption(); - getFormLayout().addComponent(createTotalTargetsLabel()); - getFormLayout().addComponent(createTargetFilterQuery()); + // getFormLayout().addComponent(createTotalTargetsLabel()); + // getFormLayout().addComponent(createTargetFilterQuery()); } private void createRequiredComponents() { @@ -310,8 +318,8 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { targetFilterQueryCombo = createTargetFilterQueryCombo(); populateTargetFilterQuery(); - noOfGroups = createNoOfGroupsField(); - groupSizeLabel = createGroupSizeLabel(); + // noOfGroups = createNoOfGroupsField(); + // groupSizeLabel = createGroupSizeLabel(); // triggerThreshold = createTriggerThresold(); // errorThreshold = createErrorThresold(); // description = createDescription(); @@ -329,13 +337,12 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } - private Label createGroupSizeLabel() { - final Label groupSize = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); - groupSize.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); - groupSize.setImmediate(true); - groupSize.setVisible(false); - groupSize.setSizeUndefined(); - return groupSize; + private void createGroupSizeLabel() { + groupSizeLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + groupSizeLabel.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); + groupSizeLabel.setImmediate(true); + groupSizeLabel.setVisible(false); + groupSizeLabel.setSizeUndefined(); } private TextArea createTargetFilterQuery() { @@ -623,16 +630,16 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } private TextArea createDescription() { - final TextArea descriptionField = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), - "text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), + description = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", + ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - descriptionField.setId(SPUIComponetIdProvider.ROLLOUT_DESCRIPTION_ID); - descriptionField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); - descriptionField.setSizeFull(); - return descriptionField; + description.setId(SPUIComponetIdProvider.ROLLOUT_DESCRIPTION_ID); + description.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); + description.setSizeFull(); + return description; } - private void createErrorThresold() { + private void createErrorThreshold() { errorThreshold = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("prompt.error.threshold"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); errorThreshold.addValidator(new ThresholdFieldValidator()); @@ -646,20 +653,18 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { i18n.get("prompt.tigger.thresold"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); triggerThreshold.setId(SPUIComponetIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); triggerThreshold.addValidator(new ThresholdFieldValidator()); - triggerThreshold.setSizeUndefined(); + triggerThreshold.setSizeFull(); triggerThreshold.setMaxLength(3); } - private TextField createNoOfGroupsField() { - final TextField noOfGroupsField = SPUIComponentProvider.getTextField(i18n.get("prompt.number.of.groups"), "", - ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.number.of.groups"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - noOfGroupsField.setId(SPUIComponetIdProvider.ROLLOUT_NO_OF_GROUPS_ID); - noOfGroupsField.addValidator(new GroupNumberValidator()); - noOfGroupsField.setSizeFull(); - noOfGroupsField.setMaxLength(3); - noOfGroupsField.addValueChangeListener(evevt -> onGroupNumberChange()); - return noOfGroupsField; + private void createNoOfGroupsField() { + noOfGroups = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, + i18n.get("prompt.number.of.groups"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + noOfGroups.setId(SPUIComponetIdProvider.ROLLOUT_NO_OF_GROUPS_ID); + noOfGroups.addValidator(new GroupNumberValidator()); + noOfGroups.setSizeFull(); + noOfGroups.setMaxLength(3); + noOfGroups.addValueChangeListener(evevt -> onGroupNumberChange()); } private void onGroupNumberChange() { @@ -697,12 +702,12 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } private TextField createRolloutNameField() { - final TextField rolloutNameField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", - ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - rolloutNameField.setId(SPUIComponetIdProvider.ROLLOUT_NAME_FIELD_ID); - rolloutNameField.setSizeFull(); - return rolloutNameField; + rolloutName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, true, + null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + rolloutName.setId(SPUIComponetIdProvider.ROLLOUT_NAME_FIELD_ID); + rolloutName.setSizeFull(); + + return rolloutName; } private Label createMandatoryLabel() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index 543ef18a3..dd19c72a8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -89,7 +89,8 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected void addNewItem(final ClickEvent event) { - // addUpdateRolloutWindow.resetComponents(); + addUpdateRolloutWindow.init(); + addUpdateRolloutWindow.resetComponents(); addUpdateRolloutWindow.init(); UI.getCurrent().addWindow(addUpdateRolloutWindow); addUpdateRolloutWindow.setVisible(Boolean.TRUE); diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss index 879fb8dd6..2effc5b6a 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss @@ -88,7 +88,7 @@ } .icon-only { - margin-bottom: 6px !important; + // margin-bottom: 6px !important; } //Toggle between pin and status icon From 8fc1f74f807bbc3c7edd33bb734502c49b746bd0 Mon Sep 17 00:00:00 2001 From: Asharani Date: Thu, 12 May 2016 15:16:41 +0530 Subject: [PATCH 084/371] Refactored UploadHandler.java to update upload status using eventing Signed-off-by: Asharani --- hawkbit-ui/pom.xml | 5 + .../event/UploadArtifactUIEvent.java | 2 +- .../ui/artifacts/event/UploadFileStatus.java | 60 ++++++ .../ui/artifacts/event/UploadStatusEvent.java | 34 ++++ .../artifacts/state/ArtifactUploadState.java | 14 ++ .../ui/artifacts/upload/UploadHandler.java | 152 +++++---------- .../ui/artifacts/upload/UploadLayout.java | 183 +++++++++++++----- .../upload/UploadStatusInfoWindow.java | 102 +++++++--- 8 files changed, 374 insertions(+), 178 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java diff --git a/hawkbit-ui/pom.xml b/hawkbit-ui/pom.xml index e0bde576a..38b455367 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -254,5 +254,10 @@ allure-junit-adaptor test
+ + org.scala-lang + scala-library + 2.10.4 + \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java index de8f5867b..8bd33f483 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java @@ -16,5 +16,5 @@ package org.eclipse.hawkbit.ui.artifacts.event; */ public enum UploadArtifactUIEvent { - SHOW_DROP_HINTS, HIDE_DROP_HINTS, SOFTWARE_DRAG_START, SOFTWARE_TYPE_DRAG_START, UPDATE_UPLOAD_COUNT, ENABLE_PROCESS_BUTTON, HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DISCARD_DELETE_SOFTWARE, DISCARD_ALL_DELETE_SOFTWARE, DELETED_ALL_SOFWARE, DISABLE_PROCESS_BUTTON, DISCARD_DELETE_SOFTWARE_TYPE, DISCARD_ALL_DELETE_SOFTWARE_TYPE, DELETED_ALL_SOFWARE_TYPE,MINIMIZED_STATUS_POPUP,MAXIMIZED_STATUS_POPUP,UPLOAD_FINISHED,UPLOAD_STARTED, UPLOAD_STREAMINING_FINISHED + SHOW_DROP_HINTS, HIDE_DROP_HINTS, SOFTWARE_DRAG_START, SOFTWARE_TYPE_DRAG_START, UPDATE_UPLOAD_COUNT, ENABLE_PROCESS_BUTTON, HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DISCARD_DELETE_SOFTWARE, DISCARD_ALL_DELETE_SOFTWARE, DELETED_ALL_SOFWARE, DISABLE_PROCESS_BUTTON, DISCARD_DELETE_SOFTWARE_TYPE, DISCARD_ALL_DELETE_SOFTWARE_TYPE, DELETED_ALL_SOFWARE_TYPE,MINIMIZED_STATUS_POPUP,MAXIMIZED_STATUS_POPUP, UPLOAD_IN_PROGESS } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java new file mode 100644 index 000000000..776556464 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.artifacts.event; + +import java.io.Serializable; + +/** + * + * Holds file and upload status details. + * + */ +public class UploadFileStatus implements Serializable { + + private static final long serialVersionUID = -3599629192216760811L; + + private String fileName; + + private long contentLength; + + private long bytesRead; + + private String failureReason; + + public UploadFileStatus(String fileName){ + this.fileName = fileName; + } + + public UploadFileStatus(String fileName, long bytesRead, long contentLength) { + this.fileName = fileName; + this.contentLength = contentLength; + this.bytesRead = bytesRead; + } + + public UploadFileStatus(String fileName, String failureReason) { + this.failureReason = failureReason; + this.fileName = fileName; + } + + public String getFileName() { + return fileName; + } + + public long getContentLength() { + return contentLength; + } + + public long getBytesRead() { + return bytesRead; + } + + public String getFailureReason() { + return failureReason; + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java new file mode 100644 index 000000000..ab10c2e10 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java @@ -0,0 +1,34 @@ +package org.eclipse.hawkbit.ui.artifacts.event; +/** + * + * Holds the upload file status. + * + */ +public class UploadStatusEvent { + + public enum UploadStatusEventType { + UPLOAD_FAILED, UPLOAD_IN_PROGRESS, UPLOAD_STARTED, UPLOAD_FINISHED, UPLOAD_SUCCESSFUL, UPLOAD_STREAMING_FAILED, UPLOAD_STREAMING_FINISHED + } + + private UploadStatusEventType uploadProgressEventType; + + private UploadFileStatus uploadStatus; + + public UploadStatusEvent(UploadStatusEventType eventType, UploadFileStatus entity) { + this.uploadProgressEventType = eventType; + this.uploadStatus = entity; + } + + public UploadFileStatus getUploadStatus() { + return uploadStatus; + } + + public void setUploadStatus(UploadFileStatus uploadStatus) { + this.uploadStatus = uploadStatus; + } + + public UploadStatusEventType getUploadProgressEventType() { + return uploadProgressEventType; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java index ae6a5860e..9c0ade8d1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.upload.UploadStatusObject; @@ -68,6 +69,19 @@ public class ArtifactUploadState implements ManagmentEntityState, Serializ private List uploadedFileStatusList = new ArrayList<>(); + private final AtomicInteger numberOfFileUploadsExpected = new AtomicInteger(); + + private final AtomicInteger numberOfFilesActuallyUpload = new AtomicInteger(); + + public AtomicInteger getNumberOfFilesActuallyUpload() { + return numberOfFilesActuallyUpload; + } + + public AtomicInteger getNumberOfFileUploadsExpected() { + return numberOfFileUploadsExpected; + } + + public List getUploadedFileStatusList() { return uploadedFileStatusList; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index c48dac834..f9d207193 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -12,9 +12,10 @@ import java.io.IOException; import java.io.OutputStream; import org.eclipse.hawkbit.repository.exception.ArtifactUploadFailedException; -import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; -import org.eclipse.hawkbit.ui.artifacts.state.CustomFile; +import org.eclipse.hawkbit.ui.artifacts.event.UploadFileStatus; +import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent; +import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent.UploadStatusEventType; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; import org.slf4j.Logger; @@ -59,30 +60,29 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene private final long fileSize; private final UploadLayout view; - private final UploadStatusInfoWindow infoWindow; private final long maxSize; private final Upload upload; private volatile String fileName = null; private volatile String mimeType = null; - private volatile boolean interrupted = false; + private volatile boolean streamingInterrupted = false; + private volatile boolean uploadInterrupted = false; + private String failureReason; private final I18N i18n; private transient EventBus.SessionEventBus eventBus; - UploadHandler(final String fileName, final long fileSize, final UploadLayout view, - final UploadStatusInfoWindow infoWindow, final long maxSize, final Upload upload, final String mimeType) { + final long maxSize, final Upload upload, final String mimeType) { super(); this.fileName = fileName; this.fileSize = fileSize; this.view = view; - this.infoWindow = infoWindow; this.maxSize = maxSize; this.upload = upload; this.mimeType = mimeType; this.i18n = SpringContextHelper.getBean(I18N.class); - this.eventBus = SpringContextHelper.getBean(EventBus.SessionEventBus.class); + this.eventBus = SpringContextHelper.getBean(EventBus.SessionEventBus.class); } /** @@ -97,7 +97,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene } catch (final ArtifactUploadFailedException e) { LOG.error("Atifact upload failed {} ", e); failureReason = e.getMessage(); - interrupted = true; + streamingInterrupted = true; return new NullOutputStream(); } } @@ -112,7 +112,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public OutputStream receiveUpload(final String fileName, final String mimeType) { this.fileName = fileName; this.mimeType = mimeType; - //reset has directory flag before upload + // reset has directory flag before upload view.setHasDirectory(false); try { if (view.checkIfSoftwareModuleIsSelected()) { @@ -127,6 +127,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene LOG.error("Atifact upload failed {} ", e); failureReason = e.getMessage(); upload.interruptUpload(); + uploadInterrupted = true; } // if final validation fails ,final no upload ,return NullOutputStream return new NullOutputStream(); @@ -141,13 +142,8 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public void uploadSucceeded(final SucceededEvent event) { LOG.debug("Streaming finished for file :{}", event.getFilename()); - view.updateFileSize(event.getFilename(), event.getLength()); - - // recorded that we now one more uploaded - view.increaseNumberOfFilesActuallyUpload(); - - // inform upload status window - infoWindow.uploadSucceeded(event.getFilename()); + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_SUCCESSFUL, new UploadFileStatus( + event.getFilename(), 0, event.getLength()))); } /** @@ -160,20 +156,8 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public void streamingFinished(final StreamingEndEvent event) { LOG.debug("Streaming finished for file :{}", event.getFileName()); - // record that we now one more uploaded - view.increaseNumberOfFilesActuallyUpload(); - - // inform upload status window - infoWindow.uploadSucceeded(event.getFileName()); - - // check if we are finished - if (view.enableProcessBtn()) { - infoWindow.uploadSessionFinished(); - } - eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED); - - // display the duplicate message after streaming all files - view.displayDuplicateValidationMessage(); + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STREAMING_FINISHED, + new UploadFileStatus(event.getFileName(), 0, event.getContentLength()))); } /** @@ -185,12 +169,8 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public void uploadFinished(final FinishedEvent event) { LOG.debug("Upload finished for file :{}", event.getFilename()); - // check if we are finished - if (view.enableProcessBtn()) { - infoWindow.uploadSessionFinished(); - } - view.updateActionCount(); - + eventBus.publish(this, + new UploadStatusEvent(UploadStatusEventType.UPLOAD_FINISHED, new UploadFileStatus(event.getFilename()))); } /** @@ -201,7 +181,8 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public void streamingStarted(final StreamingStartEvent event) { LOG.debug("Streaming started for file :{}", fileName); - infoWindow.uploadStarted(fileName); + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STARTED, new UploadFileStatus( + fileName, 0, 0))); } /** @@ -213,12 +194,14 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public void uploadStarted(final StartedEvent event) { // single file session if (view.isSoftwareModuleSelected() && !view.checkIfFileIsDuplicate(event.getFilename())) { - infoWindow.uploadSessionStarted(); LOG.debug("Upload started for file :{}", event.getFilename()); - infoWindow.uploadStarted(event.getFilename()); + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STARTED, new UploadFileStatus( + event.getFilename(), 0, 0))); } else { failureReason = i18n.get("message.upload.failed"); upload.interruptUpload(); + // actual interrupt will happen a bit late so setting the below flag + uploadInterrupted = true; } } @@ -239,23 +222,21 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public void updateProgress(final long readBytes, final long contentLength) { - if (readBytes > maxSize || contentLength > maxSize) { - LOG.error("User tried to upload more than was allowed ({}).", maxSize); - - view.decreaseNumberOfFileUploadsExpected(); - final SoftwareModule sw = view.getSoftwareModuleSelected(); - view.getFileSelected().remove(new CustomFile(fileName, sw.getName(), sw.getVersion())); - view.updateActionCount(); - - failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); - infoWindow.uploadFailed(fileName, failureReason); - upload.interruptUpload(); - interrupted = true; - return; + //Update progress is called event after upload interrupted in uploadStarted method + if (!uploadInterrupted) { + if (readBytes > maxSize || contentLength > maxSize) { + LOG.error("User tried to upload more than was allowed ({}).", maxSize); + failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( + fileName, failureReason))); + upload.interruptUpload(); + uploadInterrupted = true; + return; + } + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_IN_PROGRESS, + new UploadFileStatus(fileName, readBytes, contentLength))); + LOG.info("Update progress - {} : {}", fileName, (double) readBytes / (double) contentLength); } - - infoWindow.updateProgress(fileName, readBytes, contentLength); - LOG.info("Update progress - {} : {}", fileName, (double) readBytes / (double) contentLength); } /** @@ -267,19 +248,14 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public void onProgress(final StreamingProgressEvent event) { if (event.getBytesReceived() > maxSize || event.getContentLength() > maxSize) { LOG.error("User tried to upload more than was allowed ({}).", maxSize); - - view.decreaseNumberOfFileUploadsExpected(); - final SoftwareModule sw = view.getSoftwareModuleSelected(); - view.getFileSelected().remove(new CustomFile(fileName, sw.getName(), sw.getVersion())); - eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED); - failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); - infoWindow.uploadFailed(event.getFileName(), failureReason); - interrupted = true; + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( + fileName, failureReason))); + streamingInterrupted = true; return; } - - infoWindow.updateProgress(event.getFileName(), event.getBytesReceived(), event.getContentLength()); + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_IN_PROGRESS, new UploadFileStatus( + fileName, event.getBytesReceived(), event.getContentLength()))); // Logging to solve sonar issue LOG.trace("Streaming in progress for file :{}", event.getFileName()); } @@ -293,29 +269,15 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public void streamingFailed(final StreamingErrorEvent event) { LOG.info("Streaming failed for file :{}", event.getFileName()); - - view.decreaseNumberOfFileUploadsExpected(); - final SoftwareModule sw = view.getSoftwareModuleSelected(); - view.getFileSelected().remove(new CustomFile(fileName, sw.getName(), sw.getVersion())); - eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED); - - if (failureReason != null) { - // Display custom error message - infoWindow.uploadFailed(event.getFileName(), failureReason); - } else { - // internal upload error - infoWindow.uploadFailed(event.getFileName(), event.getException().getMessage()); + if (failureReason == null) { + failureReason = event.getException().getMessage(); } - // check if we are finished - if (view.enableProcessBtn()) { - infoWindow.uploadSessionFinished(); - } - view.displayDuplicateValidationMessage(); + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STREAMING_FAILED, + new UploadFileStatus(fileName, failureReason))); LOG.info("Streaming failed due to :{}", event.getException()); } - /** * Upload failed for {@link Upload} variant. * @@ -324,23 +286,13 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public void uploadFailed(final FailedEvent event) { LOG.info("Upload failed for file :{}", event.getFilename()); - view.decreaseNumberOfFileUploadsExpected(); - /** - * If upload interrupted because of duplicate file,do not remove the - * file already in upload list - **/ - if (!view.getDuplicateFileNamesList().isEmpty()) { - final SoftwareModule sw = view.getSoftwareModuleSelected(); - view.getFileSelected().remove(new CustomFile(fileName, sw.getName(), sw.getVersion())); - } - eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED); - if (failureReason != null) { - infoWindow.uploadFailed(event.getFilename(), failureReason); - } else { - infoWindow.uploadFailed(event.getFilename(), event.getReason().getMessage()); + if (failureReason == null) { + failureReason = event.getReason().getMessage(); } + System.out.println("failureReason:::"+failureReason); + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( + fileName, failureReason))); LOG.info("Upload failed for file :{}", event.getReason()); - } /** @@ -348,7 +300,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public boolean isInterrupted() { - return interrupted; + return streamingInterrupted; } private static class NullOutputStream extends OutputStream { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index 9e304efe8..58661773d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -16,7 +16,6 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -26,6 +25,8 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; +import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent; +import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent.UploadStatusEventType; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.artifacts.state.CustomFile; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -97,13 +98,9 @@ public class UploadLayout extends VerticalLayout { @Autowired private transient SPInfo spInfo; - private final AtomicInteger numberOfFileUploadsExpected = new AtomicInteger(); - - private final AtomicInteger numberOfFilesActuallyUpload = new AtomicInteger(); - private final List duplicateFileNamesList = new ArrayList<>(); - private Button processBtn ; + private Button processBtn; private Button discardBtn; @@ -128,11 +125,48 @@ public class UploadLayout extends VerticalLayout { void init() { createComponents(); buildLayout(); - updateActionCount(); restoreState(); eventBus.subscribe(this); ui = UI.getCurrent(); } + + + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final UploadArtifactUIEvent event) { + if (event == UploadArtifactUIEvent.DELETED_ALL_SOFWARE) { + ui.access(() -> updateActionCount()); + } else if (event == UploadArtifactUIEvent.MINIMIZED_STATUS_POPUP) { + ui.access(() -> showUploadStatusButton()); + } else if (event == UploadArtifactUIEvent.MAXIMIZED_STATUS_POPUP) { + ui.access(() -> maximizeStatusPopup()); + } + } + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final UploadStatusEvent event) { + if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STARTED) { + ui.access(() -> setUploadStatusButtonIconToInProgress()); + } + else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_FAILED) { + ui.access(() -> onUploadFailure(event)); + } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_FINISHED) { + ui.access(() -> onUploadCompletion()); + } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_SUCCESSFUL) { + ui.access(() -> onUploadSuccess(event)); + } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FAILED) { + ui.access(() -> onUploadStreamingFailure(event)); + } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FINISHED) { + ui.access(() -> onUploadStreamingSuccess(event)); + } + } + + @PreDestroy + void destroy() { + /* + * It's good manners to do this, even though vaadin-spring will + * automatically unsubscribe when this UI is garbage collected. + */ + eventBus.unsubscribe(this); + } private void createComponents() { createUploadStatusButton(); @@ -143,8 +177,8 @@ public class UploadLayout extends VerticalLayout { private void buildLayout() { final Upload upload = new Upload(); - final UploadHandler uploadHandler = new UploadHandler(null, 0, this, uploadInfoWindow, - spInfo.getMaxArtifactFileSize(), upload, null); + final UploadHandler uploadHandler = new UploadHandler(null, 0, this, spInfo.getMaxArtifactFileSize(), upload, + null); upload.setButtonCaption(i18n.get("upload.file")); upload.setImmediate(true); upload.setReceiver(uploadHandler); @@ -176,9 +210,15 @@ public class UploadLayout extends VerticalLayout { } private void restoreState() { + updateActionCount(); + if (!artifactUploadState.getFileSelected().isEmpty() && artifactUploadState.isUploadCompleted()) { + processBtn.setEnabled(true); + } if (artifactUploadState.isStatusPopupMinimized()) { showUploadStatusButton(); - setUploadStatusButtonIconToFinished(); + if (artifactUploadState.isUploadCompleted()) { + setUploadStatusButtonIconToFinished(); + } } } @@ -204,10 +244,10 @@ public class UploadLayout extends VerticalLayout { for (final Html5File file : files) { processFile(file); } - if (numberOfFileUploadsExpected.get() > 0) { + if (artifactUploadState.getNumberOfFileUploadsExpected().get() > 0) { processBtn.setEnabled(false); // reset before we start - uploadInfoWindow.uploadSessionStarted(); + // uploadInfoWindow.uploadSessionStarted(); } else { // If the upload is not started, it signifies all // dropped files as either duplicate or directory.So @@ -220,7 +260,7 @@ public class UploadLayout extends VerticalLayout { private void processFile(final Html5File file) { if (!isDirectory(file)) { if (!checkForDuplicate(file.getFileName())) { - numberOfFileUploadsExpected.incrementAndGet(); + artifactUploadState.getNumberOfFileUploadsExpected().incrementAndGet(); file.setStreamVariable(createStreamVariable(file)); } } else { @@ -229,7 +269,7 @@ public class UploadLayout extends VerticalLayout { } private StreamVariable createStreamVariable(final Html5File file) { - return new UploadHandler(file.getFileName(), file.getFileSize(), UploadLayout.this, uploadInfoWindow, + return new UploadHandler(file.getFileName(), file.getFileSize(), UploadLayout.this, spInfo.getMaxArtifactFileSize(), null, file.getType()); } @@ -282,9 +322,7 @@ public class UploadLayout extends VerticalLayout { processBtn.addStyleName(SPUIStyleDefinitions.ACTION_BUTTON); processBtn.addClickListener(event -> displayConfirmWindow(event)); processBtn.setHtmlContentAllowed(true); - if (artifactUploadState.getFileSelected().isEmpty()) { - processBtn.setEnabled(false); - } + processBtn.setEnabled(false); } private void createDiscardBtn() { @@ -349,13 +387,15 @@ public class UploadLayout extends VerticalLayout { artifactUploadState.getBaseSwModuleList().put(currentBaseSoftwareModuleKey, selectedSoftwareModule); } return out; - } catch (final FileNotFoundException e) { + } + catch (final FileNotFoundException e) { LOG.error("Upload failed {}", e); throw new ArtifactUploadFailedException(i18n.get("message.file.not.found")); } catch (final IOException e) { LOG.error("Upload failed {}", e); throw new ArtifactUploadFailedException(i18n.get("message.upload.failed")); } + } Boolean validate(final DragAndDropEvent event) { @@ -430,7 +470,7 @@ public class UploadLayout extends VerticalLayout { } void decreaseNumberOfFileUploadsExpected() { - numberOfFileUploadsExpected.decrementAndGet(); + artifactUploadState.getNumberOfFileUploadsExpected().decrementAndGet(); } List getDuplicateFileNamesList() { @@ -451,7 +491,7 @@ public class UploadLayout extends VerticalLayout { void displayDuplicateValidationMessage() { // check if streaming of all dropped files are completed - if (numberOfFilesActuallyUpload.intValue() == numberOfFileUploadsExpected.intValue()) { + if (artifactUploadState.getNumberOfFilesActuallyUpload().intValue() == artifactUploadState.getNumberOfFileUploadsExpected().intValue()) { displayCompositeMessage(); } } @@ -466,7 +506,6 @@ public class UploadLayout extends VerticalLayout { } else if (duplicateFileNamesList.size() > 1) { message.append(i18n.get("message.no.duplicateFiles")); } - duplicateFileNamesList.clear(); } return message.toString(); } @@ -476,7 +515,7 @@ public class UploadLayout extends VerticalLayout { } void increaseNumberOfFileUploadsExpected() { - numberOfFileUploadsExpected.incrementAndGet(); + artifactUploadState.getNumberOfFileUploadsExpected().incrementAndGet(); } void updateFileSize(final String name, final long size) { @@ -495,17 +534,19 @@ public class UploadLayout extends VerticalLayout { } void increaseNumberOfFilesActuallyUpload() { - numberOfFilesActuallyUpload.incrementAndGet(); + artifactUploadState.getNumberOfFilesActuallyUpload().incrementAndGet(); } /** * Enable process button once upload is completed. */ boolean enableProcessBtn() { - if (numberOfFilesActuallyUpload.intValue() >= numberOfFileUploadsExpected.intValue()) { + if (artifactUploadState.getNumberOfFilesActuallyUpload().intValue() >= artifactUploadState + .getNumberOfFileUploadsExpected().intValue() + && artifactUploadState.getNumberOfFilesActuallyUpload().get() != 0) { processBtn.setEnabled(true); - numberOfFileUploadsExpected.set(0); - numberOfFilesActuallyUpload.set(0); + artifactUploadState.getNumberOfFilesActuallyUpload().set(0); + artifactUploadState.getNumberOfFileUploadsExpected().set(0); return true; } return false; @@ -546,8 +587,8 @@ public class UploadLayout extends VerticalLayout { processBtn.setCaption(SPUILabelDefinitions.PROCESS); /* disable when there is no files to upload. */ processBtn.setEnabled(false); - numberOfFileUploadsExpected.set(0); - numberOfFilesActuallyUpload.set(0); + artifactUploadState.getNumberOfFilesActuallyUpload().set(0); + artifactUploadState.getNumberOfFileUploadsExpected().set(0); duplicateFileNamesList.clear(); } @@ -623,33 +664,70 @@ public class UploadLayout extends VerticalLayout { return dropAreaLayout; } - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final UploadArtifactUIEvent event) { - if (event == UploadArtifactUIEvent.DELETED_ALL_SOFWARE) { - ui.access(() -> updateActionCount()); - } else if (event == UploadArtifactUIEvent.MINIMIZED_STATUS_POPUP) { - ui.access(() -> showUploadStatusButton()); - } else if (event == UploadArtifactUIEvent.MAXIMIZED_STATUS_POPUP) { - ui.access(() -> maximizeStatusPopup()); - } else if (event == UploadArtifactUIEvent.UPLOAD_FINISHED) { - ui.access(() -> setUploadStatusButtonIconToFinished()); - } else if (event == UploadArtifactUIEvent.UPLOAD_STARTED) { - ui.access(() -> setUploadStatusButtonIconToInProgress()); - }else if (event == UploadArtifactUIEvent.UPLOAD_STREAMINING_FINISHED) { - //TODO re-check - updateActionCount(); - enableProcessBtn(); - } + private void onUploadStreamingSuccess(UploadStatusEvent event) { + increaseNumberOfFilesActuallyUpload(); + updateActionCount(); + enableProcessBtn(); + if (isUploadComplete()) { + uploadInfoWindow.uploadSessionFinished(); + setUploadStatusButtonIconToFinished(); + } + // display the duplicate message after streaming all files + displayDuplicateValidationMessage(); + duplicateFileNamesList.clear(); } - @PreDestroy - void destroy() { - /* - * It's good manners to do this, even though vaadin-spring will - * automatically unsubscribe when this UI is garbage collected. - */ - eventBus.unsubscribe(this); + private void onUploadStreamingFailure(UploadStatusEvent event) { + onUploadFailure(event); + updateActionCount(); + enableProcessBtn(); + // check if we are finished + if (isUploadComplete()) { + uploadInfoWindow.uploadSessionFinished(); + setUploadStatusButtonIconToFinished(); + } + displayDuplicateValidationMessage(); + } + + private void onUploadSuccess(UploadStatusEvent event) { + updateFileSize(event.getUploadStatus().getFileName(), event.getUploadStatus().getContentLength()); + // recorded that we now one more uploaded + increaseNumberOfFilesActuallyUpload(); + } + + private void onUploadCompletion() { + // check if we are finished + if (isUploadComplete()) { + uploadInfoWindow.uploadSessionFinished(); + setUploadStatusButtonIconToFinished(); + } + updateActionCount(); + enableProcessBtn(); + duplicateFileNamesList.clear(); + } + + private boolean isUploadComplete() { + int uploadedCount = artifactUploadState.getNumberOfFilesActuallyUpload().intValue(); + int expectedUploadsCount = artifactUploadState.getNumberOfFileUploadsExpected().intValue(); + return uploadedCount == expectedUploadsCount; + } + + private void onUploadFailure(final UploadStatusEvent event) { + decreaseNumberOfFileUploadsExpected(); + /** + * If upload interrupted because of duplicate file,do not remove the + * file already in upload list + **/ + if (getDuplicateFileNamesList().isEmpty() + || !getDuplicateFileNamesList().contains(event.getUploadStatus().getFileName())) { + final SoftwareModule sw = getSoftwareModuleSelected(); + getFileSelected().remove( + new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); + //failed reason to be updated only if there is error other than duplicate file error + uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() + .getFailureReason()); + } } /** @@ -738,4 +816,5 @@ public class UploadLayout extends VerticalLayout { uploadStatusButton.addStyleName(SPUIStyleDefinitions.UPLOAD_PROGRESS_INDICATOR_STYLE); uploadStatusButton.setIcon(null); } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java index 4693ab3dc..2efd929d3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java @@ -11,7 +11,12 @@ package org.eclipse.hawkbit.ui.artifacts.upload; import java.util.List; import java.util.stream.Collectors; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; +import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent; +import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent.UploadStatusEventType; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -19,6 +24,8 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; +import org.vaadin.spring.events.EventScope; +import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container.Indexed; import com.vaadin.data.Item; @@ -69,9 +76,9 @@ public class UploadStatusInfoWindow extends Window { private static final long serialVersionUID = 1L; - private final Grid grid; + private Grid grid; - private final IndexedContainer uploads; + private IndexedContainer uploads; private volatile boolean errorOccured = false; @@ -84,12 +91,15 @@ public class UploadStatusInfoWindow extends Window { private Button closeButton; private Button resizeButton; + + private UI ui; + /** * Default Constructor. */ - UploadStatusInfoWindow() { - super(); + @PostConstruct + void init() { setPopupProperties(); createStatusPopupHeaderComponents(); @@ -106,8 +116,45 @@ public class UploadStatusInfoWindow extends Window { mainLayout.addComponents(getCaptionLayout(), grid); mainLayout.setExpandRatio(grid, 1.0F); setContent(mainLayout); + eventBus.subscribe(this); + ui = UI.getCurrent(); + } + + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final UploadStatusEvent event) { + if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_IN_PROGRESS) { + UI.getCurrent().access( + () -> updateProgress(event.getUploadStatus().getFileName(), event.getUploadStatus().getBytesRead(), + event.getUploadStatus().getContentLength())); + } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STARTED) { + UI.getCurrent().access(() -> onStartOfUpload(event)); + } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FAILED) { + ui.access(() -> uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() + .getFailureReason())); + } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_SUCCESSFUL) { + UI.getCurrent().access(() -> uploadSucceeded(event.getUploadStatus().getFileName())); + } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FINISHED) { + ui.access(() -> uploadSucceeded(event.getUploadStatus().getFileName())); + } + } + + private void onStartOfUpload(UploadStatusEvent event) { + uploadSessionStarted(); + uploadStarted(event.getUploadStatus().getFileName()); + } + + + @PreDestroy + void destroy() { + /* + * It's good manners to do this, even though vaadin-spring will + * automatically unsubscribe when this UI is garbage collected. + */ + eventBus.unsubscribe(this); + } + private void restoreState() { Indexed container = grid.getContainerDataSource(); if (container.getItemIds().isEmpty()) { @@ -119,8 +166,10 @@ public class UploadStatusInfoWindow extends Window { item.getItemProperty(PROGRESS).setValue(statusObject.getProgress()); item.getItemProperty(FILE_NAME).setValue(statusObject.getFilename()); } - artifactUploadState.setUploadCompleted(true); - minimizeButton.setEnabled(false); + // artifactUploadState.setUploadCompleted(true); + if (artifactUploadState.isUploadCompleted()) { + minimizeButton.setEnabled(false); + } } } @@ -130,6 +179,7 @@ public class UploadStatusInfoWindow extends Window { setResizable(false); setDraggable(true); setClosable(false); + setModal(true); } private void setGridColumnProperties() { @@ -192,6 +242,8 @@ public class UploadStatusInfoWindow extends Window { private static class StatusRenderer extends HtmlRenderer { + private static final long serialVersionUID = -5365795450234970943L; + @Override public JsonValue encode(final String value) { String result ; @@ -216,18 +268,17 @@ public class UploadStatusInfoWindow extends Window { void uploadSessionFinished() { if (!errorOccured) { close(); - eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_FINISHED); - artifactUploadState.setUploadCompleted(true); - minimizeButton.setEnabled(false); } - + artifactUploadState.setUploadCompleted(true); + minimizeButton.setEnabled(false); } void uploadSessionStarted() { - close(); - openWindow(); + if (!artifactUploadState.isStatusPopupMinimized()) { + close(); + openWindow(); + } minimizeButton.setEnabled(true); - eventBus.publish(this, UploadArtifactUIEvent.UPLOAD_STARTED); artifactUploadState.setUploadCompleted(false); } @@ -287,22 +338,22 @@ public class UploadStatusInfoWindow extends Window { } void uploadFailed(final String filename, final String errorReason) { + if (!errorOccured) { + errorOccured = true; + } + String status = "Failed"; final Item item = uploads.getItem(filename); if (item != null) { - if (!errorOccured) { - errorOccured = true; - } item.getItemProperty(REASON).setValue(errorReason); - String status = "Failed"; item.getItemProperty(STATUS).setValue(status); - List uploadStatusObjectList = (List) artifactUploadState - .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) - .collect(Collectors.toList()); - if (!uploadStatusObjectList.isEmpty()) { - UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); - uploadStatusObject.setStatus(status); - uploadStatusObject.setReason(errorReason); - } + } + List uploadStatusObjectList = (List) artifactUploadState + .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) + .collect(Collectors.toList()); + if (!uploadStatusObjectList.isEmpty()) { + UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); + uploadStatusObject.setStatus(status); + uploadStatusObject.setReason(errorReason); } } @@ -370,4 +421,5 @@ public class UploadStatusInfoWindow extends Window { closeBtn.addClickListener(event -> clearWindow()); return closeBtn; } + } From 6654d71969d8f64c9f6e4b79f2ad53ed6c9409dc Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 13 May 2016 08:44:34 +0200 Subject: [PATCH 085/371] Started with #100 by means of splitting the management services into API and Jpa implementation. Signed-off-by: Kai Zimmermann --- .../RepositoryApplicationConfiguration.java | 2 +- .../eventbus/EntityChangeEventListener.java | 12 +- .../repository/ArtifactManagement.java | 563 +++----- .../repository/ControllerManagement.java | 640 ++------- .../repository/DeploymentManagement.java | 1132 ++++----------- .../DistributionSetAssignmentResult.java | 1 + .../repository/DistributionSetManagement.java | 1217 +++++------------ .../hawkbit/repository/ReportManagement.java | 416 +----- .../repository/RolloutGroupManagement.java | 155 +-- .../hawkbit/repository/RolloutManagement.java | 602 +------- .../hawkbit/repository/RolloutScheduler.java | 1 + .../TenantConfigurationManagement.java | 161 +-- .../{ => jpa}/ActionRepository.java | 2 +- .../{ => jpa}/ActionStatusRepository.java | 2 +- .../{ => jpa}/BaseEntityRepository.java | 2 +- .../DistributionSetMetadataRepository.java | 2 +- .../{ => jpa}/DistributionSetRepository.java | 4 +- .../DistributionSetTagRepository.java | 2 +- .../DistributionSetTypeRepository.java | 2 +- .../EclipseLinkTargetInfoRepository.java | 2 +- .../ExternalArtifactProviderRepository.java | 2 +- .../{ => jpa}/ExternalArtifactRepository.java | 2 +- .../repository/jpa/JpaArtifactManagement.java | 270 ++++ .../jpa/JpaControllerManagement.java | 417 ++++++ .../jpa/JpaDeploymentManagement.java | 652 +++++++++ .../jpa/JpaDistributionSetManagement.java | 663 +++++++++ .../repository/jpa/JpaReportManagement.java | 433 ++++++ .../jpa/JpaRolloutGroupManagement.java | 178 +++ .../repository/jpa/JpaRolloutManagement.java | 653 +++++++++ .../jpa/JpaTenantConfigurationManagement.java | 170 +++ .../{ => jpa}/LocalArtifactRepository.java | 2 +- .../{ => jpa}/NoCountPagingRepository.java | 2 +- .../{ => jpa}/OffsetBasedPageRequest.java | 2 +- .../{ => jpa}/RolloutGroupRepository.java | 2 +- .../{ => jpa}/RolloutRepository.java | 2 +- .../RolloutTargetGroupRepository.java | 2 +- .../{ => jpa}/SoftwareManagement.java | 5 +- .../SoftwareModuleMetadataRepository.java | 2 +- .../{ => jpa}/SoftwareModuleRepository.java | 2 +- .../SoftwareModuleTypeRepository.java | 2 +- .../{ => jpa}/SystemManagement.java | 2 +- .../repository/{ => jpa}/TagManagement.java | 2 +- .../TargetFilterQueryManagement.java | 2 +- .../TargetFilterQueryRepository.java | 2 +- .../{ => jpa}/TargetInfoRepository.java | 2 +- .../{ => jpa}/TargetManagement.java | 3 +- .../{ => jpa}/TargetRepository.java | 2 +- .../{ => jpa}/TargetTagRepository.java | 2 +- .../{ => jpa}/TargetWithActionType.java | 2 +- .../TenantConfigurationRepository.java | 2 +- .../{ => jpa}/TenantKeyGenerator.java | 2 +- .../{ => jpa}/TenantMetaDataRepository.java | 2 +- .../{ => jpa}/TenantStatsManagement.java | 8 +- .../model/helper/SystemManagementHolder.java | 2 +- .../condition/PauseRolloutGroupAction.java | 2 +- ...artNextGroupRolloutGroupSuccessAction.java | 2 +- .../ThresholdRolloutGroupErrorCondition.java | 2 +- ...ThresholdRolloutGroupSuccessCondition.java | 2 +- .../hawkbit/AbstractIntegrationTest.java | 42 +- .../org/eclipse/hawkbit/TestDataUtil.java | 4 +- .../repository/ControllerManagementTest.java | 10 +- .../repository/DeploymentManagementTest.java | 23 +- .../DistributionSetManagementTest.java | 2 +- .../repository/ReportManagementTest.java | 2 +- .../repository/RolloutManagementTest.java | 22 +- .../hawkbit/repository/TagManagementTest.java | 1 + .../TargetFilterQueryManagenmentTest.java | 1 + .../TargetManagementSearchTest.java | 10 +- .../repository/TargetManagementTest.java | 2 +- .../rsql/RSQLRolloutGroupFields.java | 2 +- .../utils/RepositoryDataGenerator.java | 24 +- .../controller/ArtifactStoreController.java | 2 +- .../hawkbit/controller/RootController.java | 11 +- .../rest/resource/DistributionSetMapper.java | 2 +- .../resource/DistributionSetResource.java | 8 +- .../resource/DistributionSetTagResource.java | 2 +- .../resource/DistributionSetTypeMapper.java | 2 +- .../resource/DistributionSetTypeResource.java | 4 +- .../resource/DownloadArtifactResource.java | 2 +- .../rest/resource/RolloutResource.java | 2 +- .../rest/resource/SoftwareModuleMapper.java | 2 +- .../rest/resource/SoftwareModuleResource.java | 2 +- .../resource/SoftwareModuleTypeResource.java | 2 +- .../resource/SystemManagementResource.java | 2 +- .../hawkbit/rest/resource/TargetResource.java | 2 +- .../rest/resource/TargetTagResource.java | 4 +- .../resource/DistributionSetResourceTest.java | 8 +- .../rest/resource/TargetResourceTest.java | 7 +- .../artifacts/details/ArtifactBeanQuery.java | 2 +- .../UploadViewConfirmationWindowLayout.java | 2 +- .../smtable/BaseSwModuleBeanQuery.java | 4 +- .../SoftwareModuleAddUpdateWindow.java | 2 +- .../smtable/SoftwareModuleTable.java | 2 +- .../CreateUpdateSoftwareTypeLayout.java | 2 +- .../smtype/SMTypeFilterButtonClick.java | 2 +- .../common/DistributionSetTypeBeanQuery.java | 2 +- .../common/SoftwareModuleTypeBeanQuery.java | 4 +- .../tagdetails/AbstractTargetTagToken.java | 2 +- .../tagdetails/DistributionTagToken.java | 2 +- .../ui/common/tagdetails/TargetTagToken.java | 2 +- .../CreateUpdateDistSetTypeLayout.java | 4 +- .../dstable/DistributionSetDetails.java | 2 +- .../dstable/DistributionSetTable.java | 15 +- .../dstable/ManageDistBeanQuery.java | 4 +- .../footer/DSDeleteActionsLayout.java | 2 +- ...DistributionsConfirmationWindowLayout.java | 2 +- .../smtable/SwModuleBeanQuery.java | 4 +- .../distributions/smtable/SwModuleTable.java | 2 +- .../smtype/DistSMTypeFilterButtonClick.java | 2 +- .../CreateOrUpdateFilterHeader.java | 2 +- .../CustomTargetBeanQuery.java | 2 +- .../FilterQueryValidation.java | 2 +- .../TargetFilterBeanQuery.java | 2 +- .../filtermanagement/TargetFilterTable.java | 2 +- .../DistributionAddUpdateWindowLayout.java | 4 +- .../dstable/DistributionBeanQuery.java | 4 +- .../management/dstable/DistributionTable.java | 2 +- .../dstag/DistributionTagBeanQuery.java | 4 +- .../management/footer/CountMessageLabel.java | 2 +- .../footer/DeleteActionsLayout.java | 2 +- .../ManangementConfirmationWindowLayout.java | 2 +- .../management/tag/CreateUpdateTagLayout.java | 2 +- .../targettable/BulkUploadHandler.java | 4 +- .../TargetAddUpdateWindowLayout.java | 2 +- .../targettable/TargetBeanQuery.java | 4 +- .../TargetBulkUpdateWindowLayout.java | 2 +- .../management/targettable/TargetTable.java | 4 +- .../CustomTargetTagFilterButtonClick.java | 2 +- .../targettag/TargetTagBeanQuery.java | 4 +- .../targettag/TargetTagFilterButtons.java | 2 +- .../rollout/AddUpdateRolloutWindowLayout.java | 2 +- .../rollout/DistributionBeanQuery.java | 2 +- .../ui/rollout/rollout/RolloutBeanQuery.java | 2 +- .../DefaultDistributionSetTypeLayout.java | 2 +- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 2 +- 135 files changed, 4711 insertions(+), 4055 deletions(-) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/ActionRepository.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/ActionStatusRepository.java (98%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/BaseEntityRepository.java (97%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/DistributionSetMetadataRepository.java (96%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/DistributionSetRepository.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/DistributionSetTagRepository.java (97%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/DistributionSetTypeRepository.java (98%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/EclipseLinkTargetInfoRepository.java (98%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/ExternalArtifactProviderRepository.java (94%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/ExternalArtifactRepository.java (96%) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/LocalArtifactRepository.java (98%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/NoCountPagingRepository.java (98%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/OffsetBasedPageRequest.java (98%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/RolloutGroupRepository.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/RolloutRepository.java (98%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/RolloutTargetGroupRepository.java (95%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/SoftwareManagement.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/SoftwareModuleMetadataRepository.java (97%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/SoftwareModuleRepository.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/SoftwareModuleTypeRepository.java (97%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/SystemManagement.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TagManagement.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetFilterQueryManagement.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetFilterQueryRepository.java (96%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetInfoRepository.java (98%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetManagement.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetRepository.java (99%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetTagRepository.java (97%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetWithActionType.java (97%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TenantConfigurationRepository.java (97%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TenantKeyGenerator.java (95%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TenantMetaDataRepository.java (97%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/TenantStatsManagement.java (82%) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index d5e8db96f..1c562364f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -12,8 +12,8 @@ import java.util.HashMap; import java.util.Map; import org.eclipse.hawkbit.aspects.ExceptionMappingAspectHandler; -import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.repository.model.helper.AfterTransactionCommitExecutorHolder; import org.eclipse.hawkbit.repository.model.helper.CacheManagerHolder; import org.eclipse.hawkbit.repository.model.helper.SecurityTokenGeneratorHolder; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java index 7bfbd957e..2f63a3122 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; -import org.eclipse.hawkbit.repository.TargetRepository; +import org.eclipse.hawkbit.repository.jpa.TargetRepository; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; @@ -66,7 +66,7 @@ public class EntityChangeEventListener { * in case exception happens in the * {@link ProceedingJoinPoint#proceed()} */ - @Around("execution(* org.eclipse.hawkbit.repository.TargetInfoRepository.save(..))") + @Around("execution(* org.eclipse.hawkbit.repository.jpa.TargetInfoRepository.save(..))") // Exception squid:S00112 - Is aspectJ proxy @SuppressWarnings({ "squid:S00112" }) public Object targetCreated(final ProceedingJoinPoint joinpoint) throws Throwable { @@ -93,7 +93,7 @@ public class EntityChangeEventListener { * in case exception happens in the * {@link ProceedingJoinPoint#proceed()} */ - @Around("execution(* org.eclipse.hawkbit.repository.TargetRepository.deleteByIdIn(..))") + @Around("execution(* org.eclipse.hawkbit.repository.jpa.TargetRepository.deleteByIdIn(..))") // Exception squid:S00112 - Is aspectJ proxy @SuppressWarnings({ "squid:S00112" }) public Object targetDeletedById(final ProceedingJoinPoint joinpoint) throws Throwable { @@ -115,8 +115,8 @@ public class EntityChangeEventListener { * in case exception happens in the * {@link ProceedingJoinPoint#proceed()} */ - @Around("execution(* org.eclipse.hawkbit.repository.TargetRepository.delete(..))") - // Exception squid:S00112 - Is aspectJ proxy + @Around("execution(* org.eclipse.hawkbit.repository.jpa.TargetRepository.delete(..))") + // Exception squid:S00112 - Is aspectJ proxy @SuppressWarnings({ "squid:S00112", "unchecked" }) public Object targetDeleted(final ProceedingJoinPoint joinpoint) throws Throwable { final String currentTenant = tenantAware.getCurrentTenant(); @@ -146,7 +146,7 @@ public class EntityChangeEventListener { afterCommit.afterCommit(() -> eventBus.post(new TargetDeletedEvent(tenant, targetId))); } - private boolean isTargetInfoNew(final Object targetInfo) { + private static boolean isTargetInfoNew(final Object targetInfo) { return ((TargetInfo) targetInfo).isNew(); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java index 024ec11cb..977b9f171 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java @@ -13,11 +13,7 @@ import java.util.List; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.artifact.repository.ArtifactRepository; -import org.eclipse.hawkbit.artifact.repository.ArtifactStoreException; -import org.eclipse.hawkbit.artifact.repository.HashNotMatchException; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; -import org.eclipse.hawkbit.artifact.repository.model.DbArtifactHash; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.ArtifactDeleteFailedException; import org.eclipse.hawkbit.repository.exception.ArtifactUploadFailedException; @@ -31,47 +27,110 @@ import org.eclipse.hawkbit.repository.model.ExternalArtifact; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.specifications.SoftwareModuleSpecification; import org.hibernate.validator.constraints.NotEmpty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.hateoas.Identifiable; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; /** * Service for {@link Artifact} management operations. * */ -@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -@Validated -@Service -public class ArtifactManagement { +public interface ArtifactManagement { - private static final Logger LOG = LoggerFactory.getLogger(ArtifactManagement.class); + /** + * Creates {@link ExternalArtifact} based on given provider. + * + * @param externalRepository + * the artifact is located in + * @param urlSuffix + * of the artifact + * {@link ExternalArtifactProvider#getDefaultSuffix()} is used if + * empty. + * @param moduleId + * to assign the artifact to + * + * @return created {@link ExternalArtifact} + * + * @throws EntityNotFoundException + * if {@link SoftwareModule} with given ID does not exist + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + ExternalArtifact createExternalArtifact(@NotNull ExternalArtifactProvider externalRepository, String urlSuffix, + @NotNull Long moduleId); - @Autowired - private LocalArtifactRepository localArtifactRepository; + /** + * Persists {@link ExternalArtifactProvider} based on given properties. + * + * @param name + * of the provided + * @param description + * which is optional + * @param basePath + * of all {@link ExternalArtifact}s of the provider + * @param defaultUrlSuffix + * that is used if {@link ExternalArtifact#getUrlSuffix()} is + * empty. + * @return created {@link ExternalArtifactProvider} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + ExternalArtifactProvider createExternalArtifactProvider(@NotEmpty String name, String description, + @NotNull String basePath, String defaultUrlSuffix); - @Autowired - private ExternalArtifactRepository externalArtifactRepository; + /** + * Persists artifact binary as provided by given InputStream. assign the + * artifact in addition to given {@link SoftwareModule}. + * + * @param inputStream + * to read from for artifact binary + * @param moduleId + * to assign the new artifact to + * @param filename + * of the artifact + * @param overrideExisting + * to true if the artifact binary can be overridden + * if it already exists + * + * @return uploaded {@link LocalArtifact} + * + * @throw ArtifactUploadFailedException if upload fails + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + default LocalArtifact createLocalArtifact(final InputStream inputStream, final Long moduleId, final String filename, + final boolean overrideExisting) { + return createLocalArtifact(inputStream, moduleId, filename, null, null, overrideExisting, null); + } - @Autowired - private SoftwareModuleRepository softwareModuleRepository; - - @Autowired - private ExternalArtifactProviderRepository externalArtifactProviderRepository; - - @Autowired - private ArtifactRepository artifactRepository; + /** + * Persists artifact binary as provided by given InputStream. assign the + * artifact in addition to given {@link SoftwareModule}. + * + * @param inputStream + * to read from for artifact binary + * @param moduleId + * to assign the new artifact to + * @param filename + * of the artifact + * @param overrideExisting + * to true if the artifact binary can be overridden + * if it already exists + * @param contentType + * the contentType of the file + * + * @return uploaded {@link LocalArtifact} + * + * @throw ArtifactUploadFailedException if upload fails + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + default LocalArtifact createLocalArtifact(final InputStream inputStream, final Long moduleId, final String filename, + final boolean overrideExisting, final String contentType) { + return createLocalArtifact(inputStream, moduleId, filename, null, null, overrideExisting, contentType); + } /** * Persists artifact binary as provided by given InputStream. assign the @@ -105,59 +164,112 @@ public class ArtifactManagement { * @throws InvalidSHA1HashException * if check against provided SHA1 checksum failed */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public LocalArtifact createLocalArtifact(@NotNull final InputStream stream, @NotNull final Long moduleId, - @NotEmpty final String filename, final String providedMd5Sum, final String providedSha1Sum, - final boolean overrideExisting, final String contentType) { - DbArtifact result = null; + LocalArtifact createLocalArtifact(@NotNull InputStream stream, @NotNull Long moduleId, @NotEmpty String filename, + String providedMd5Sum, String providedSha1Sum, boolean overrideExisting, String contentType); - final SoftwareModule softwareModule = getModuleAndThrowExceptionIfThatFails(moduleId); + /** + * Deletes {@link Artifact} based on given id. + * + * @param id + * of the {@link Artifact} that has to be deleted. + * @throws ArtifactDeleteFailedException + * if deletion failed (MongoDB is not available) + * + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteExternalArtifact(@NotNull Long id); - final LocalArtifact existing = checkForExistingArtifact(filename, overrideExisting, softwareModule); + /** + * Deletes a local artifact. + * + * @param existing + * the related local artifact + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteLocalArtifact(@NotNull LocalArtifact existing); - try { - result = artifactRepository.store(stream, filename, contentType, - new DbArtifactHash(providedSha1Sum, providedMd5Sum)); - } catch (final ArtifactStoreException e) { - throw new ArtifactUploadFailedException(e); - } catch (final HashNotMatchException e) { - if (e.getHashFunction().equals(HashNotMatchException.SHA1)) { - throw new InvalidSHA1HashException(e.getMessage(), e); - } else { - throw new InvalidMD5HashException(e.getMessage(), e); - } - } - if (result == null) { - return null; - } + /** + * Deletes {@link Artifact} based on given id. + * + * @param id + * of the {@link Artifact} that has to be deleted. + * @throws ArtifactDeleteFailedException + * if deletion failed (MongoDB is not available) + * + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteLocalArtifact(@NotNull Long id); - return storeArtifactMetadata(softwareModule, filename, result, existing); - } + /** + * Searches for {@link Artifact} with given {@link Identifiable}. + * + * @param id + * to search for + * @return found {@link Artifact} or null is it could not be + * found. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Artifact findArtifact(@NotNull Long id); - private static LocalArtifact checkForExistingArtifact(final String filename, final boolean overrideExisting, - final SoftwareModule softwareModule) { - if (softwareModule.getLocalArtifactByFilename(filename).isPresent()) { - if (overrideExisting) { - LOG.debug("overriding existing artifact with new filename {}", filename); - return softwareModule.getLocalArtifactByFilename(filename).get(); - } else { - throw new EntityAlreadyExistsException("File with that name already exists in the Software Module"); - } - } - return null; - } + /** + * Find by artifact by software module id and filename. + * + * @param filename + * file name + * @param softwareModuleId + * software module id. + * @return LocalArtifact if artifact present + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + List findByFilenameAndSoftwareModule(@NotNull String filename, @NotNull Long softwareModuleId); - private SoftwareModule getModuleAndThrowExceptionIfThatFails(final Long moduleId) { - final SoftwareModule softwareModule = findSoftwareModuleWithDetails(moduleId); + /** + * Find all local artifact by sha1 and return the first artifact. + * + * @param sha1 + * the sha1 + * @return the first local artifact + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + LocalArtifact findFirstLocalArtifactsBySHA1(@NotNull String sha1); - if (softwareModule == null) { - LOG.debug("no software module with ID {} exists", moduleId); - throw new EntityNotFoundException("Software Module: " + moduleId); - } - return softwareModule; - } + /** + * Searches for {@link Artifact} with given file name. + * + * @param filename + * to search for + * @return found List of {@link LocalArtifact}s. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + List findLocalArtifactByFilename(@NotNull String filename); + + /** + * Get local artifact for a base software module. + * + * @param pageReq + * Pageable + * @param swId + * software module id + * @return Page + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findLocalArtifactBySoftwareModule(@NotNull Pageable pageReq, @NotNull Long swId); + + /** + * Finds {@link SoftwareModule} by given id. + * + * @param id + * to search for + * @return the found {@link SoftwareModule}s or null if not + * found. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + SoftwareModule findSoftwareModuleById(@NotNull Long id); /** * Retrieves software module including details ( @@ -170,7 +282,7 @@ public class ArtifactManagement { * @return the found {@link SoftwareModule}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - protected SoftwareModule findSoftwareModuleWithDetails(@NotNull final Long id) { + default SoftwareModule findSoftwareModuleWithDetails(@NotNull final Long id) { final SoftwareModule result = findSoftwareModuleById(id); if (result != null) { result.getArtifacts().size(); @@ -179,211 +291,6 @@ public class ArtifactManagement { return result; } - /** - * Find all local artifact by sha1 and return the first artifact. - * - * @param sha1 - * the sha1 - * @return the first local artifact - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) - public LocalArtifact findFirstLocalArtifactsBySHA1(final String sha1) { - return localArtifactRepository.findFirstByGridFsFileName(sha1); - } - - /** - * Finds {@link SoftwareModule} by given id. - * - * @param id - * to search for - * @return the found {@link SoftwareModule}s or null if not - * found. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) - protected SoftwareModule findSoftwareModuleById(@NotNull final Long id) { - - final Specification spec = SoftwareModuleSpecification.byId(id); - - return softwareModuleRepository.findOne(spec); - } - - private LocalArtifact storeArtifactMetadata(final SoftwareModule softwareModule, final String providedFilename, - final DbArtifact result, final LocalArtifact existing) { - LocalArtifact artifact = existing; - if (existing == null) { - artifact = new LocalArtifact(result.getHashes().getSha1(), providedFilename, softwareModule); - } - artifact.setMd5Hash(result.getHashes().getMd5()); - artifact.setSha1Hash(result.getHashes().getSha1()); - artifact.setSize(result.getSize()); - - LOG.debug("storing new artifact into repository {}", artifact); - return localArtifactRepository.save(artifact); - } - - /** - * Persists {@link ExternalArtifactProvider} based on given properties. - * - * @param name - * of the provided - * @param description - * which is optional - * @param basePath - * of all {@link ExternalArtifact}s of the provider - * @param defaultUrlSuffix - * that is used if {@link ExternalArtifact#getUrlSuffix()} is - * empty. - * @return created {@link ExternalArtifactProvider} - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public ExternalArtifactProvider createExternalArtifactProvider(@NotEmpty final String name, - final String description, @NotNull final String basePath, final String defaultUrlSuffix) { - return externalArtifactProviderRepository - .save(new ExternalArtifactProvider(name, description, basePath, defaultUrlSuffix)); - } - - /** - * Creates {@link ExternalArtifact} based on given provider. - * - * @param externalRepository - * the artifact is located in - * @param urlSuffix - * of the artifact - * {@link ExternalArtifactProvider#getDefaultSuffix()} is used if - * empty. - * @param moduleId - * to assign the artifact to - * - * @return created {@link ExternalArtifact} - * - * @throws EntityNotFoundException - * if {@link SoftwareModule} with given ID does not exist - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public ExternalArtifact createExternalArtifact(@NotNull final ExternalArtifactProvider externalRepository, - final String urlSuffix, @NotNull final Long moduleId) { - - final SoftwareModule module = getModuleAndThrowExceptionIfThatFails(moduleId); - return externalArtifactRepository.save(new ExternalArtifact(externalRepository, urlSuffix, module)); - } - - /** - * Deletes {@link Artifact} based on given id. - * - * @param id - * of the {@link Artifact} that has to be deleted. - * @throws ArtifactDeleteFailedException - * if deletion failed (MongoDB is not available) - * - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteLocalArtifact(@NotNull final Long id) { - final LocalArtifact existing = localArtifactRepository.findOne(id); - - if (null == existing) { - return; - } - - deleteGridFsArtifact(existing); - - existing.getSoftwareModule().removeArtifact(existing); - softwareModuleRepository.save(existing.getSoftwareModule()); - localArtifactRepository.delete(id); - } - - /** - * Delete a grid fs file. - * - * @param existing - * the related local artifact - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteGridFsArtifact(@NotNull final LocalArtifact existing) { - if (existing == null) { - return; - } - - boolean artifactIsOnlyUsedByOneSoftwareModule = true; - for (final LocalArtifact lArtifact : localArtifactRepository - .findByGridFsFileName(existing.getGridFsFileName())) { - if (!lArtifact.getSoftwareModule().isDeleted() - && Long.compare(lArtifact.getSoftwareModule().getId(), existing.getSoftwareModule().getId()) != 0) { - artifactIsOnlyUsedByOneSoftwareModule = false; - break; - } - } - - if (artifactIsOnlyUsedByOneSoftwareModule) { - try { - LOG.debug("deleting artifact from repository {}", existing.getGridFsFileName()); - artifactRepository.deleteBySha1(existing.getGridFsFileName()); - } catch (final ArtifactStoreException e) { - throw new ArtifactDeleteFailedException(e); - } - } - } - - /** - * Deletes {@link Artifact} based on given id. - * - * @param id - * of the {@link Artifact} that has to be deleted. - * @throws ArtifactDeleteFailedException - * if deletion failed (MongoDB is not available) - * - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteExternalArtifact(@NotNull final Long id) { - final ExternalArtifact existing = externalArtifactRepository.findOne(id); - - if (null == existing) { - return; - } - - existing.getSoftwareModule().removeArtifact(existing); - softwareModuleRepository.save(existing.getSoftwareModule()); - externalArtifactRepository.delete(id); - } - - /** - * Searches for {@link Artifact} with given file name. - * - * @param filename - * to search for - * @return found List of {@link LocalArtifact}s. - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) - public List findLocalArtifactByFilename(@NotNull final String filename) { - return localArtifactRepository.findByFilename(filename); - } - - /** - * Searches for {@link Artifact} with given {@link Identifiable}. - * - * @param id - * to search for - * @return found {@link Artifact} or null is it could not be - * found. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Artifact findArtifact(@NotNull final Long id) { - return localArtifactRepository.findOne(id); - } - /** * Loads {@link org.eclipse.hawkbit.artifact.server.json.model.Artifact} * from store for given {@link LocalArtifact}. @@ -398,98 +305,6 @@ public class ArtifactManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DOWNLOAD_ARTIFACT + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.HAS_CONTROLLER_DOWNLOAD) - public DbArtifact loadLocalArtifactBinary(@NotNull final LocalArtifact artifact) { - final DbArtifact result = artifactRepository.getArtifactBySha1(artifact.getGridFsFileName()); - if (result == null) { - throw new GridFSDBFileNotFoundException(artifact.getGridFsFileName()); - } + DbArtifact loadLocalArtifactBinary(@NotNull LocalArtifact artifact); - return result; - } - - /** - * Persists artifact binary as provided by given InputStream. assign the - * artifact in addition to given {@link SoftwareModule}. - * - * @param inputStream - * to read from for artifact binary - * @param moduleId - * to assign the new artifact to - * @param filename - * of the artifact - * @param overrideExisting - * to true if the artifact binary can be overridden - * if it already exists - * @param contentType - * the contentType of the file - * - * @return uploaded {@link LocalArtifact} - * - * @throw ArtifactUploadFailedException if upload fails - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public LocalArtifact createLocalArtifact(final InputStream inputStream, final Long moduleId, final String filename, - final boolean overrideExisting, final String contentType) { - return createLocalArtifact(inputStream, moduleId, filename, null, null, overrideExisting, contentType); - } - - /** - * Persists artifact binary as provided by given InputStream. assign the - * artifact in addition to given {@link SoftwareModule}. - * - * @param inputStream - * to read from for artifact binary - * @param moduleId - * to assign the new artifact to - * @param filename - * of the artifact - * @param overrideExisting - * to true if the artifact binary can be overdiden - * if it already exists - * - * @return uploaded {@link LocalArtifact} - * - * @throw ArtifactUploadFailedException if upload failes - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public LocalArtifact createLocalArtifact(final InputStream inputStream, final Long moduleId, final String filename, - final boolean overrideExisting) { - return createLocalArtifact(inputStream, moduleId, filename, null, null, overrideExisting, null); - } - - /** - * Get local artifact for a base software module. - * - * @param pageReq - * Pageable - * @param swId - * software module id - * @return Page - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findLocalArtifactBySoftwareModule(@NotNull final Pageable pageReq, - @NotNull final Long swId) { - return localArtifactRepository.findBySoftwareModuleId(pageReq, swId); - } - - /** - * Find by artifact by software module id and filename. - * - * @param filename - * file name - * @param softwareModuleId - * software module id. - * @return LocalArtifact if artifact present - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) - public List findByFilenameAndSoftwareModule(@NotNull final String filename, - @NotNull final Long softwareModuleId) { - return localArtifactRepository.findByFilenameAndSoftwareModuleId(filename, softwareModuleId); - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index 11879edfd..b70ad3bdd 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -12,10 +12,6 @@ import java.net.URI; import java.util.List; import java.util.Map; -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; @@ -26,78 +22,102 @@ import org.eclipse.hawkbit.repository.exception.ToManyStatusEntriesException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.ActionStatus_; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.model.Target_; -import org.eclipse.hawkbit.repository.model.TenantConfiguration; -import org.eclipse.hawkbit.repository.specifications.ActionSpecifications; -import org.eclipse.hawkbit.security.HawkbitSecurityProperties; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.hibernate.validator.constraints.NotEmpty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; /** - * Service layer for all operations of the controller API (with access - * permissions only for the controller). - * - * + * Service layer for all operations of the DDI API (with access permissions only + * for the controller). * */ -@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -@Validated -@Service -public class ControllerManagement { - private static final Logger LOG = LoggerFactory.getLogger(ControllerManagement.class); - private static final Logger LOG_DOS = LoggerFactory.getLogger("server-security.dos"); +public interface ControllerManagement { - public static final String SERVER_MESSAGE_PREFIX = "Update Server: "; + String SERVER_MESSAGE_PREFIX = "Update Server: "; - @Autowired - private EntityManager entityManager; + /** + * Simple addition of a new {@link ActionStatus} entry to the {@link Action} + * . No state changes. + * + * @param statusMessage + * to add to the action + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + void addInformationalActionStatus(@NotNull ActionStatus statusMessage); - @Autowired - private ActionRepository actionRepository; + /** + * Adds an {@link ActionStatus} for a cancel {@link Action} including + * potential state changes for the target and the {@link Action} itself. + * + * @param actionStatus + * to be added + * @return the persisted {@link Action} + * + * @throws EntityAlreadyExistsException + * if a given entity already exists + * + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Action addCancelActionStatus(@NotNull ActionStatus actionStatus); - @Autowired - private TargetRepository targetRepository; + /** + * Adds an {@link ActionStatus} entry for an update {@link Action} including + * potential state changes for the target and the {@link Action} itself. + * + * @param actionStatus + * to be added + * @return the updated {@link Action} + * + * @throws EntityAlreadyExistsException + * if a given entity already exists + * @throws ToManyStatusEntriesException + * if more than the allowed number of status entries are + * inserted + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Action addUpdateActionStatus(@NotNull ActionStatus actionStatus); - @Autowired - private TargetManagement targetManagement; + /** + * Retrieves all {@link Action}s which are 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) + List findActionByTargetAndActive(@NotNull Target target); - @Autowired - private DeploymentManagement deploymentManagement; + /** + * Get the {@link Action} entity for given actionId with all lazy + * attributes. + * + * @param actionId + * to be id of the action + * @return the corresponding {@link Action} + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Action findActionWithDetails(@NotNull Long actionId); - @Autowired - private TargetInfoRepository targetInfoRepository; - - @Autowired - private SoftwareModuleRepository softwareModuleRepository; - - @Autowired - private ActionStatusRepository actionStatusRepository; - - @Autowired - private HawkbitSecurityProperties securityProperties; - - @Autowired - private TenantConfigurationRepository tenantConfigurationRepository; - - @Autowired - private TenantConfigurationManagement tenantConfigurationManagement; + /** + * register new target in the repository (plug-and-play). + * + * @param controllerId + * reference + * @param address + * the client IP address of the target, might be {@code null} + * @return target reference + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Target findOrRegisterTargetIfItDoesNotexist(@NotEmpty String controllerId, URI address); /** * Retrieves all {@link SoftwareModule}s which are assigned to the given @@ -110,46 +130,13 @@ public class ControllerManagement { * {@code distributionSet} */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public String findPollingTime() { - final TenantConfigurationKey configurationKey = TenantConfigurationKey.POLLING_TIME_INTERVAL; - final Class propertyType = String.class; - tenantConfigurationManagement.validateTenantConfigurationDataType(configurationKey, propertyType); - final TenantConfiguration tenantConfiguration = tenantConfigurationRepository - .findByKey(configurationKey.getKeyName()); - return tenantConfigurationManagement - .buildTenantConfigurationValueByKey(configurationKey, propertyType, tenantConfiguration).getValue(); - } - - /** - * Refreshes the time of the last time the controller has been connected to - * the server. - * - * @param targetid - * of the target to to update - * @param address - * the client address of the target, might be {@code null} - * @return the updated target - * - * @throws EntityNotFoundException - * if target with given ID could not be found - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public Target updateLastTargetQuery(@NotEmpty final String targetid, final URI address) { - final Target target = targetRepository.findByControllerId(targetid); - if (target == null) { - throw new EntityNotFoundException(targetid); - } - - return updateLastTargetQuery(target.getTargetInfo(), address).getTarget(); - } + List findSoftwareModulesByDistributionSet(@NotNull DistributionSet distributionSet); /** * Retrieves last {@link UpdateAction} for a download of an artifact of * given module and target. * - * @param targetId + * @param controllerId * to look for * @param module * that should be assigned to the target @@ -159,17 +146,28 @@ public class ControllerManagement { * if action for given combination could not be found */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public Action getActionForDownloadByTargetAndSoftwareModule(@NotNull final String targetId, - @NotNull final SoftwareModule module) { - final List action = actionRepository.findActionByTargetAndSoftwareModule(targetId, module); + Action getActionForDownloadByTargetAndSoftwareModule(@NotEmpty String controllerId, @NotNull SoftwareModule module); - if (action.isEmpty() || action.get(0).isCancelingOrCanceled()) { - throw new EntityNotFoundException( - "No assigment found for module " + module.getId() + " to target " + targetId); - } + /** + * @return current {@link TenantConfigurationKey#POLLING_TIME_INTERVAL}. + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + String getPollingTime(); - return action.get(0); - } + /** + * An direct access to the security token of an + * {@link Target#getSecurityToken()} without authorization. This is + * necessary to be able to access the security-token without any + * security-context information because the security-token is used for + * authentication. + * + * @param controllerId + * the ID of the controller to retrieve the security token for + * @return the security context of the target, in case no target exists for + * the given controllerId {@code null} is returned + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + String getSecurityTokenByControllerId(@NotEmpty String controllerId); /** * Checks if a given target has currently or has even been assigned to the @@ -178,7 +176,7 @@ public class ControllerManagement { * assigned or had ever been assigned to the target and so it's visible to a * specific target e.g. for downloading. * - * @param targetId + * @param controllerId * the ID of the target to check * @param localArtifact * the artifact to verify if the given target had even been @@ -187,14 +185,56 @@ public class ControllerManagement { * relation to the given artifact through the action history, * otherwise {@code false} */ - public boolean hasTargetArtifactAssigned(@NotNull final String targetId, - @NotNull final LocalArtifact localArtifact) { - final Target target = targetRepository.findByControllerId(targetId); - if (target == null) { - return false; - } - return actionRepository.count(ActionSpecifications.hasTargetAssignedArtifact(target, localArtifact)) > 0; - } + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + boolean hasTargetArtifactAssigned(@NotNull String controllerId, @NotNull LocalArtifact localArtifact); + + /** + * Registers retrieved status for given {@link Target} and {@link Action} if + * it does not exist yet. + * + * @param action + * to the handle status for + * @param message + * for the status + * @return the update action in case the status has been changed to + * {@link Status#RETRIEVED} + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Action registerRetrieved(@NotNull Action action, String message); + + /** + * Updates attributes of the controller. + * + * @param controllerId + * to update + * @param attributes + * to insert + * + * @return updated {@link Target} + * + * @throws EntityNotFoundException + * if target that has to be updated could not be found + * @throws ToManyAttributeEntriesException + * if maximum + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Target updateControllerAttributes(@NotEmpty String controllerId, @NotNull Map attributes); + + /** + * Refreshes the time of the last time the controller has been connected to + * the server. + * + * @param controllerId + * of the target to to update + * @param address + * the client address of the target, might be {@code null} + * @return the updated target + * + * @throws EntityNotFoundException + * if target with given ID could not be found + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Target updateLastTargetQuery(@NotEmpty String controllerId, URI address); /** * Refreshes the time of the last time the controller has been connected to @@ -207,83 +247,12 @@ public class ControllerManagement { * @return the updated target * */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public TargetInfo updateLastTargetQuery(@NotNull final TargetInfo target, final URI address) { + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + default TargetInfo updateLastTargetQuery(@NotNull final TargetInfo target, @NotNull final URI address) { return updateTargetStatus(target, null, System.currentTimeMillis(), address); } - /** - * Retrieves all {@link Action}s which are 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) - public List findActionByTargetAndActive(final Target target) { - return actionRepository.findByTargetAndActiveOrderByIdAsc(target, true); - } - - /** - * Retrieves all {@link SoftwareModule}s which are assigned to the given - * {@link DistributionSet}. - * - * @param distributionSet - * the distribution set which should be assigned to the returned - * {@link SoftwareModule}s - * @return a list of {@link SoftwareModule}s assigned to given - * {@code distributionSet} - */ - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public List findSoftwareModulesByDistributionSet(final DistributionSet distributionSet) { - return softwareModuleRepository.findByAssignedTo(distributionSet); - } - - /** - * Get the {@link Action} entity for given actionId with all lazy - * attributes. - * - * @param actionId - * to be id of the action - * @return the corresponding {@link Action} - */ - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public Action findActionWithDetails(@NotNull final Long actionId) { - return actionRepository.findById(actionId); - } - - /** - * register new target in the repository (plug-and-play). - * - * @param targetid - * reference - * @param address - * the client IP address of the target, might be {@code null} - * @return target reference - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public Target findOrRegisterTargetIfItDoesNotexist(@NotEmpty final String targetid, final URI address) { - final Specification spec = (targetRoot, query, cb) -> cb.equal(targetRoot.get(Target_.controllerId), - targetid); - - Target target = targetRepository.findOne(spec); - - if (target == null) { - target = new Target(targetid); - target.setDescription("Plug and Play target: " + targetid); - target.setName(targetid); - return targetManagement.createTarget(target, TargetUpdateStatus.REGISTERED, System.currentTimeMillis(), - address); - } - - return updateLastTargetQuery(target.getTargetInfo(), address).getTarget(); - } - /** * Update selective the target status of a given {@code target}. * @@ -300,313 +269,8 @@ public class ControllerManagement { * the client address of the target, might be {@code null} * @return the updated TargetInfo */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public TargetInfo updateTargetStatus(@NotNull final TargetInfo targetInfo, final TargetUpdateStatus status, - final Long lastTargetQuery, final URI address) { - final TargetInfo mtargetInfo = entityManager.merge(targetInfo); - if (status != null) { - mtargetInfo.setUpdateStatus(status); - } - if (lastTargetQuery != null) { - mtargetInfo.setLastTargetQuery(lastTargetQuery); - } - if (address != null) { - mtargetInfo.setAddress(address.toString()); - } - return targetInfoRepository.save(mtargetInfo); - } + TargetInfo updateTargetStatus(@NotNull TargetInfo targetInfo, TargetUpdateStatus status, Long lastTargetQuery, + URI address); - /** - * Adds an {@link ActionStatus} for a {@link UpdateAction} and cancels the - * {@link UpdateAction} if necessary. - * - * @param actionStatus - * to be updated - * @param action - * the status is for - * @return the persisted {@link Action} - * - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public Action addCancelActionStatus(@NotNull final ActionStatus actionStatus, final Action action) { - - checkForToManyStatusEntries(action); - action.setStatus(actionStatus.getStatus()); - - switch (actionStatus.getStatus()) { - case WARNING: - case ERROR: - case RUNNING: - break; - case CANCELED: - case FINISHED: - // in case of successful cancellation we also report the success at - // the canceled action itself. - actionStatus.addMessage( - ControllerManagement.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); - deploymentManagement.successCancellation(action); - break; - case RETRIEVED: - actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Cancellation request retrieved."); - break; - default: - } - actionRepository.save(action); - actionStatusRepository.save(actionStatus); - - return action; - } - - /** - * Updates an {@link ActionStatus} for a {@link UpdateAction}. - * - * @param actionStatus - * to be updated - * @param action - * the update is for - * @return the persisted {@link Action} - * - * @throws EntityAlreadyExistsException - * if a given entity already exists - * @throws ToManyStatusEntriesException - * if more than the allowed number of status entries are - * inserted - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public Action addUpdateActionStatus(@NotNull final ActionStatus actionStatus, final Action action) { - - if (!action.isActive()) { - LOG.debug("Update of actionStatus {} for action {} not possible since action not active anymore.", - actionStatus.getId(), action.getId()); - return action; - } - return handleAddUpdateActionStatus(actionStatus, action); - } - - /** - * Sets {@link TargetUpdateStatus} based on given {@link ActionStatus}. - * - * @param actionStatus - * @param action - * @return - */ - public Action handleAddUpdateActionStatus(final ActionStatus actionStatus, final Action action) { - LOG.debug("addUpdateActionStatus for action {}", action.getId()); - - final Action mergedAction = entityManager.merge(action); - Target mergedTarget = mergedAction.getTarget(); - // check for a potential DOS attack - checkForToManyStatusEntries(action); - - switch (actionStatus.getStatus()) { - case ERROR: - mergedTarget = deploymentManagement.updateTargetInfo(mergedTarget, TargetUpdateStatus.ERROR, false); - handleErrorOnAction(mergedAction, mergedTarget); - break; - case FINISHED: - handleFinishedAndStoreInTargetStatus(mergedTarget, mergedAction); - break; - case CANCELED: - case WARNING: - case RUNNING: - deploymentManagement.updateTargetInfo(mergedTarget, TargetUpdateStatus.PENDING, false); - break; - default: - break; - } - - actionStatusRepository.save(actionStatus); - - LOG.debug("addUpdateActionStatus {} for target {} is finished.", action.getId(), mergedTarget.getId()); - - return actionRepository.save(mergedAction); - } - - private void handleErrorOnAction(final Action mergedAction, final Target mergedTarget) { - mergedAction.setActive(false); - mergedAction.setStatus(Status.ERROR); - mergedTarget.setAssignedDistributionSet(null); - targetManagement.updateTarget(mergedTarget); - } - - private void checkForToManyStatusEntries(final Action action) { - if (securityProperties.getDos().getMaxStatusEntriesPerAction() > 0) { - - final Long statusCount = actionStatusRepository.countByAction(action); - - if (statusCount >= securityProperties.getDos().getMaxStatusEntriesPerAction()) { - LOG_DOS.error( - "Potential denial of service (DOS) attack identfied. More status entries in the system than permitted ({})!", - securityProperties.getDos().getMaxStatusEntriesPerAction()); - throw new ToManyStatusEntriesException( - String.valueOf(securityProperties.getDos().getMaxStatusEntriesPerAction())); - } - } - } - - private void handleFinishedAndStoreInTargetStatus(final Target target, final Action action) { - action.setActive(false); - action.setStatus(Status.FINISHED); - final TargetInfo targetInfo = target.getTargetInfo(); - final DistributionSet ds = entityManager.merge(action.getDistributionSet()); - targetInfo.setInstalledDistributionSet(ds); - if (target.getAssignedDistributionSet() != null && targetInfo.getInstalledDistributionSet() != null && target - .getAssignedDistributionSet().getId().equals(targetInfo.getInstalledDistributionSet().getId())) { - targetInfo.setUpdateStatus(TargetUpdateStatus.IN_SYNC); - targetInfo.setInstallationDate(System.currentTimeMillis()); - } else { - targetInfo.setUpdateStatus(TargetUpdateStatus.PENDING); - targetInfo.setInstallationDate(System.currentTimeMillis()); - } - targetInfoRepository.save(targetInfo); - entityManager.detach(ds); - } - - /** - * Updates attributes of the controller. - * - * @param targetid - * to update - * @param data - * to insert - * - * @return updated {@link Target} - * - * @throws EntityNotFoundException - * if target that has to be updated could not be found - * @throws ToManyAttributeEntriesException - * if maximum - */ - @Modifying - @NotNull - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public Target updateControllerAttributes(@NotEmpty final String targetid, @NotNull final Map data) { - final Target target = targetRepository.findByControllerId(targetid); - - if (target == null) { - throw new EntityNotFoundException(targetid); - } - - target.getTargetInfo().getControllerAttributes().putAll(data); - - if (target.getTargetInfo().getControllerAttributes().size() > securityProperties.getDos() - .getMaxAttributeEntriesPerTarget()) { - LOG_DOS.info("Target tries to insert more than the allowed number of entries ({}). DOS attack anticipated!", - securityProperties.getDos().getMaxAttributeEntriesPerTarget()); - throw new ToManyAttributeEntriesException( - String.valueOf(securityProperties.getDos().getMaxAttributeEntriesPerTarget())); - } - - target.getTargetInfo().setLastTargetQuery(System.currentTimeMillis()); - target.getTargetInfo().setRequestControllerAttributes(false); - return targetRepository.save(target); - } - - /** - * Registers retrieved status for given {@link Target} and {@link Action} if - * it does not exist yet. - * - * @param action - * to the handle status for - * @param target - * to the handle status for - * @param message - * for the status - * @return the update action in case the status has been changed to - * {@link Status#RETRIEVED} - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - public Action registerRetrieved(final Action action, final String message) { - return handleRegisterRetrieved(action, message); - } - - /** - * Registers retrieved status for given {@link Target} and {@link Action} if - * it does not exist yet. - * - * @param action - * to the handle status for - * @param message - * for the status - * @return the updated action in case the status has been changed to - * {@link Status#RETRIEVED} - */ - public Action handleRegisterRetrieved(final Action action, final String message) { - // do a manual query with CriteriaBuilder to avoid unnecessary field - // queries and an extra - // count query made by spring-data when using pageable requests, we - // don't need an extra count - // query, we just want to check if the last action status is a retrieved - // or not. - final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - final CriteriaQuery queryActionStatus = cb.createQuery(Object[].class); - final Root actionStatusRoot = queryActionStatus.from(ActionStatus.class); - final CriteriaQuery query = queryActionStatus - .multiselect(actionStatusRoot.get(ActionStatus_.id), actionStatusRoot.get(ActionStatus_.status)) - .where(cb.equal(actionStatusRoot.get(ActionStatus_.action), action)) - .orderBy(cb.desc(actionStatusRoot.get(ActionStatus_.id))); - final List resultList = entityManager.createQuery(query).setFirstResult(0).setMaxResults(1) - .getResultList(); - - // if the latest status is not in retrieve state then we add a retrieved - // state again, we want - // to document a deployment retrieved status and a cancel retrieved - // status, but multiple - // retrieves after the other we don't want to store to protect to - // overflood action status in - // case controller retrieves a action multiple times. - if (resultList.isEmpty() || resultList.get(0)[1] != Status.RETRIEVED) { - // document that the status has been retrieved - actionStatusRepository - .save(new ActionStatus(action, Status.RETRIEVED, System.currentTimeMillis(), message)); - - // don't change the action status itself in case the action is in - // canceling state otherwise - // we modify the action status and the controller won't get the - // cancel job anymore. - if (!action.isCancelingOrCanceled()) { - final Action actionMerge = entityManager.merge(action); - actionMerge.setStatus(Status.RETRIEVED); - return actionRepository.save(actionMerge); - } - } - return action; - } - - /** - * @param statusMessage - */ - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public void addActionStatusMessage(final ActionStatus statusMessage) { - actionStatusRepository.save(statusMessage); - } - - /** - * An direct access to the security token of an - * {@link Target#getSecurityToken()} without authorization. This is - * necessary to be able to access the security-token without any - * security-context information because the security-token is used for - * authentication. - * - * @param controllerId - * the ID of the controller to retrieve the security token for - * @return the security context of the target, in case no target exists for - * the given controllerId {@code null} is returned - */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public String getSecurityTokenByControllerId(final String controllerId) { - final Target target = targetRepository.findByControllerId(controllerId); - return target != null ? target.getSecurityToken() : null; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 805b66d75..789383ce7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -9,114 +9,38 @@ package org.eclipse.hawkbit.repository; import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; import java.util.stream.Collectors; -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Join; -import javax.persistence.criteria.JoinType; -import javax.persistence.criteria.ListJoin; -import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.Constants; -import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; -import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; -import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; -import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.exception.ForceQuitActionNotAllowedException; -import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetException; +import org.eclipse.hawkbit.repository.jpa.TargetWithActionType; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; -import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.ActionWithStatusCount; -import org.eclipse.hawkbit.repository.model.Action_; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.DistributionSet_; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.Rollout_; -import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetInfo; -import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.specifications.TargetSpecifications; import org.hibernate.validator.constraints.NotEmpty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.data.domain.AuditorAware; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.jpa.domain.Specification; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; - -import com.google.common.collect.Lists; -import com.google.common.eventbus.EventBus; /** - * Business service facade for managing all deployment related data and actions. - * + * A DeploymentManagement service provides operations for the deployment of + * {@link DistributionSet}s to {@link Target}s. * */ -@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -@Validated -@Service -public class DeploymentManagement { - private static final Logger LOG = LoggerFactory.getLogger(DeploymentManagement.class); - - @Autowired - private EntityManager entityManager; - - @Autowired - private ActionRepository actionRepository; - - @Autowired - private DistributionSetRepository distributoinSetRepository; - - @Autowired - private SoftwareModuleRepository softwareModuleRepository; - - @Autowired - private TargetRepository targetRepository; - - @Autowired - private ActionStatusRepository actionStatusRepository; - - @Autowired - private TargetManagement targetManagement; - - @Autowired - private TargetInfoRepository targetInfoRepository; - - @Autowired - private AuditorAware auditorProvider; - - @Autowired - private EventBus eventBus; - - @Autowired - private AfterTransactionCommitExecutor afterCommit; +public interface DeploymentManagement { /** * method assigns the {@link DistributionSet} to all {@link Target}s. @@ -134,19 +58,81 @@ public class DeploymentManagement { * {@link SoftwareModuleType} are not assigned as define by the * {@link DistributionSetType}. * */ - @Transactional(isolation = Isolation.READ_COMMITTED) - @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) - @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) - public DistributionSetAssignmentResult assignDistributionSet(@NotNull final DistributionSet pset, - @NotEmpty final List targets) { - - return assignDistributionSetByTargetId(pset, - targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), - ActionType.FORCED, Action.NO_FORCE_TIME); + DistributionSetAssignmentResult assignDistributionSet(@NotNull DistributionSet pset, + @NotEmpty List targets); + /** + * method assigns the {@link DistributionSet} to all {@link Target}s by + * their IDs with a specific {@link ActionType} and {@code forcetime}. + * + * @param dsID + * the ID of the distribution set to assign + * @param actionType + * the type of the action to apply on the assignment + * @param forcedTimestamp + * the time when the action should be forced, only necessary for + * {@link ActionType#TIMEFORCED} + * @param targetIDs + * the IDs of the target to assign the distribution set + * @return the assignment result + * + * @throw IncompleteDistributionSetException if mandatory + * {@link SoftwareModuleType} are not assigned as define by the + * {@link DistributionSetType}. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) + // Exception squid:S2095: see + // https://jira.sonarsource.com/browse/SONARJAVA-1478 + @SuppressWarnings({ "squid:S2095" }) + default DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, final ActionType actionType, + final long forcedTimestamp, @NotEmpty final String... targetIDs) { + return assignDistributionSet(dsID, Arrays.stream(targetIDs) + .map(t -> new TargetWithActionType(t, actionType, forcedTimestamp)).collect(Collectors.toList())); } + /** + * method assigns the {@link DistributionSet} to all {@link Target}s by + * their IDs with a specific {@link ActionType} and {@code forcetime}. + * + * @param dsID + * the ID of the distribution set to assign + * @param targets + * a list of all targets and their action type + * @return the assignment result + * + * @throw IncompleteDistributionSetException if mandatory + * {@link SoftwareModuleType} are not assigned as define by the + * {@link DistributionSetType}. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) + DistributionSetAssignmentResult assignDistributionSet(@NotNull Long dsID, + @NotEmpty List targets); + + // TODO document: why are rollouts in the signature ? can all the parameters + // be null or the list empty? + /** + * method assigns the {@link DistributionSet} to all {@link Target}s by + * their IDs with a specific {@link ActionType} and {@code forcetime}. + * + * @param dsID + * the ID of the distribution set to assign + * @param targets + * a list of all targets and their action type + * @param rollout + * the rollout for this assignment + * @param rolloutGroup + * the rollout group for this assignment + * @return the assignment result + * + * @throw IncompleteDistributionSetException if mandatory + * {@link SoftwareModuleType} are not assigned as define by the + * {@link DistributionSetType}. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) + DistributionSetAssignmentResult assignDistributionSet(@NotNull Long dsID, + @NotEmpty List targets, Rollout rollout, RolloutGroup rolloutGroup); + /** * method assigns the {@link DistributionSet} to all {@link Target}s by * their IDs. @@ -167,338 +153,12 @@ public class DeploymentManagement { * {@link SoftwareModuleType} are not assigned as define by the * {@link DistributionSetType}. */ - @Modifying - @Transactional(isolation = Isolation.READ_COMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) - @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) - public DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, + default DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, @NotEmpty final String... targetIDs) { return assignDistributionSet(dsID, ActionType.FORCED, Action.NO_FORCE_TIME, targetIDs); } - /** - * method assigns the {@link DistributionSet} to all {@link Target}s by - * their IDs with a specific {@link ActionType} and {@code forcetime}. - * - * @param dsID - * the ID of the distribution set to assign - * @param actionType - * the type of the action to apply on the assignment - * @param forcedTimestamp - * the time when the action should be forced, only necessary for - * {@link ActionType#TIMEFORCED} - * @param targetIDs - * the IDs of the target to assign the distribution set - * @return the assignment result - * - * @throw IncompleteDistributionSetException if mandatory - * {@link SoftwareModuleType} are not assigned as define by the - * {@link DistributionSetType}. - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) - @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) - // Exception squid:S2095: see - // https://jira.sonarsource.com/browse/SONARJAVA-1478 - @SuppressWarnings({ "squid:S2095" }) - public DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, final ActionType actionType, - final long forcedTimestamp, @NotEmpty final String... targetIDs) { - return assignDistributionSet(dsID, Arrays.stream(targetIDs) - .map(t -> new TargetWithActionType(t, actionType, forcedTimestamp)).collect(Collectors.toList())); - } - - /** - * method assigns the {@link DistributionSet} to all {@link Target}s by - * their IDs with a specific {@link ActionType} and {@code forcetime}. - * - * @param dsID - * the ID of the distribution set to assign - * @param targets - * a list of all targets and their action type - * @return the assignment result - * - * @throw IncompleteDistributionSetException if mandatory - * {@link SoftwareModuleType} are not assigned as define by the - * {@link DistributionSetType}. - */ - @Modifying - @Transactional(isolation = Isolation.READ_COMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) - @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) - public DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, - final List targets) { - final DistributionSet set = distributoinSetRepository.findOne(dsID); - if (set == null) { - throw new EntityNotFoundException( - String.format("no %s with id %d found", DistributionSet.class.getSimpleName(), dsID)); - } - - return assignDistributionSetToTargets(set, targets, null, null); - } - - /** - * method assigns the {@link DistributionSet} to all {@link Target}s by - * their IDs with a specific {@link ActionType} and {@code forcetime}. - * - * @param dsID - * the ID of the distribution set to assign - * @param targets - * a list of all targets and their action type - * @param rollout - * the rollout for this assignment - * @param rolloutGroup - * the rollout group for this assignment - * @return the assignment result - * - * @throw IncompleteDistributionSetException if mandatory - * {@link SoftwareModuleType} are not assigned as define by the - * {@link DistributionSetType}. - */ - @Modifying - @Transactional(isolation = Isolation.READ_COMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) - @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) - public DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, - final List targets, final Rollout rollout, final RolloutGroup rolloutGroup) { - final DistributionSet set = distributoinSetRepository.findOne(dsID); - if (set == null) { - throw new EntityNotFoundException( - String.format("no %s with id %d found", DistributionSet.class.getSimpleName(), dsID)); - } - - return assignDistributionSetToTargets(set, targets, rollout, rolloutGroup); - } - - /** - * method assigns the {@link DistributionSet} to all {@link Target}s by - * their IDs with a specific {@link ActionType} and {@code forcetime}. - * - * @param dsID - * the ID of the distribution set to assign - * @param targets - * a list of all targets and their action type - * @param rollout - * the rollout for this assignment - * @param rolloutGroup - * the rollout group for this assignment - * @return the assignment result - * - * @throw IncompleteDistributionSetException if mandatory - * {@link SoftwareModuleType} are not assigned as define by the - * {@link DistributionSetType}. - */ - private DistributionSetAssignmentResult assignDistributionSetToTargets(@NotNull final DistributionSet set, - final List targetsWithActionType, final Rollout rollout, - final RolloutGroup rolloutGroup) { - - if (!set.isComplete()) { - throw new IncompleteDistributionSetException( - "Distribution set of type " + set.getType().getKey() + " is incomplete: " + set.getId()); - } - - final List controllerIDs = targetsWithActionType.stream().map(TargetWithActionType::getTargetId) - .collect(Collectors.toList()); - - LOG.debug("assignDistribution({}) to {} targets", set, controllerIDs.size()); - - final Map targetsWithActionMap = targetsWithActionType.stream() - .collect(Collectors.toMap(TargetWithActionType::getTargetId, Function.identity())); - - // split tIDs length into max entries in-statement because many database - // have constraint of max entries in in-statements e.g. Oracle with - // maximum 1000 elements, so we need to split the entries here and - // execute multiple statements we take the target only into account if - // the requested operation is no duplicate of a previous one - final List targets = Lists.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream() - .map(ids -> targetRepository - .findAll(TargetSpecifications.hasControllerIdAndAssignedDistributionSetIdNot(ids, set.getId()))) - .flatMap(t -> t.stream()).collect(Collectors.toList()); - - if (targets.isEmpty()) { - // detaching as it is not necessary to persist the set itself - entityManager.detach(set); - // return with nothing as all targets had the DS already assigned - return new DistributionSetAssignmentResult(Collections.emptyList(), 0, targetsWithActionType.size(), - Collections.emptyList(), targetManagement); - } - - final List> targetIds = Lists.partition( - targets.stream().map(Target::getId).collect(Collectors.toList()), Constants.MAX_ENTRIES_IN_STATEMENT); - - // override all active actions and set them into canceling state, we - // need to remember which one we have been switched to canceling state - // because for targets which we have changed to canceling we don't want - // to publish the new action update event. - final Set targetIdsCancellList = new HashSet<>(); - targetIds.forEach(ids -> targetIdsCancellList.addAll(overrideObsoleteUpdateActions(ids))); - - // cancel all scheduled actions which are in-active, these actions were - // not active before and the manual assignment which has been done - // cancels the - targetIds.forEach(tIds -> actionRepository.switchStatus(Status.CANCELED, tIds, false, Status.SCHEDULED)); - - // set assigned distribution set and TargetUpdateStatus - final String currentUser; - if (auditorProvider != null) { - currentUser = auditorProvider.getCurrentAuditor(); - } else { - currentUser = null; - } - - targetIds.forEach(tIds -> targetRepository.setAssignedDistributionSet(set, System.currentTimeMillis(), - currentUser, tIds)); - targetIds.forEach(tIds -> targetInfoRepository.setTargetUpdateStatus(TargetUpdateStatus.PENDING, tIds)); - final Map targetIdsToActions = actionRepository - .save(targets.stream().map(t -> createTargetAction(targetsWithActionMap, t, set, rollout, rolloutGroup)) - .collect(Collectors.toList())) - .stream().collect(Collectors.toMap(a -> a.getTarget().getControllerId(), Function.identity())); - - // create initial action status when action is created so we remember - // the initial running status because we will change the status - // of the action itself and with this action status we have a nicer - // action history. - targetIdsToActions.values().forEach(action -> { - final ActionStatus actionStatus = new ActionStatus(); - actionStatus.setAction(action); - actionStatus.setOccurredAt(action.getCreatedAt()); - actionStatus.setStatus(Status.RUNNING); - actionStatusRepository.save(actionStatus); - }); - - // flush to get action IDs - entityManager.flush(); - // collect updated target and actions IDs in order to return them - final DistributionSetAssignmentResult result = new DistributionSetAssignmentResult( - targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), targets.size(), - controllerIDs.size() - targets.size(), - targetIdsToActions.values().stream().map(Action::getId).collect(Collectors.toList()), targetManagement); - - LOG.debug("assignDistribution({}) finished {}", set, result); - - final List softwareModules = softwareModuleRepository.findByAssignedTo(set); - - // detaching as it is not necessary to persist the set itself - entityManager.detach(set); - - sendDistributionSetAssignmentEvent(targets, targetIdsCancellList, targetIdsToActions, softwareModules); - - return result; - } - - private void sendDistributionSetAssignmentEvent(final List targets, final Set targetIdsCancellList, - final Map targetIdsToActions, final List softwareModules) { - targets.stream().filter(t -> !!!targetIdsCancellList.contains(t.getId())) - .forEach(t -> assignDistributionSetEvent(t, targetIdsToActions.get(t.getControllerId()).getId(), - softwareModules)); - } - - private static Action createTargetAction(final Map targetsWithActionMap, - final Target target, final DistributionSet set, final Rollout rollout, final RolloutGroup rolloutGroup) { - final Action actionForTarget = new Action(); - final TargetWithActionType targetWithActionType = targetsWithActionMap.get(target.getControllerId()); - actionForTarget.setActionType(targetWithActionType.getActionType()); - actionForTarget.setForcedTime(targetWithActionType.getForceTime()); - actionForTarget.setActive(true); - actionForTarget.setStatus(Status.RUNNING); - actionForTarget.setTarget(target); - actionForTarget.setDistributionSet(set); - actionForTarget.setRollout(rollout); - actionForTarget.setRolloutGroup(rolloutGroup); - return actionForTarget; - } - - /** - * Sends the {@link TargetAssignDistributionSetEvent} for a specific target - * to the {@link EventBus}. - * - * @param target - * the Target which has been assigned to a distribution set - * @param actionId - * the action id of the assignment - * @param softwareModules - * the software modules which have been assigned - */ - private void assignDistributionSetEvent(final Target target, final Long actionId, - final List softwareModules) { - target.getTargetInfo().setUpdateStatus(TargetUpdateStatus.PENDING); - afterCommit.afterCommit(() -> { - eventBus.post(new TargetInfoUpdateEvent(target.getTargetInfo())); - eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(), - target.getControllerId(), actionId, softwareModules, target.getTargetInfo().getAddress(), - target.getSecurityToken())); - }); - } - - /** - * Removes {@link UpdateAction}s that are no longer necessary and sends - * cancellations to the controller. - * - * @param myTarget - * to override {@link UpdateAction}s - */ - private Set overrideObsoleteUpdateActions(final List targetsIds) { - - final Set cancelledTargetIds = new HashSet<>(); - - // Figure out if there are potential target/action combinations that - // need to be considered - // for cancelation - final List activeActions = actionRepository - .findByActiveAndTargetIdInAndActionStatusNotEqualToAndDistributionSetRequiredMigrationStep(targetsIds, - Action.Status.CANCELING); - activeActions.forEach(action -> { - action.setStatus(Status.CANCELING); - // document that the status has been retrieved - - actionStatusRepository.save(new ActionStatus(action, Status.CANCELING, System.currentTimeMillis(), - "manual cancelation requested")); - - cancelAssignDistributionSetEvent(action.getTarget(), action.getId()); - - cancelledTargetIds.add(action.getTarget().getId()); - }); - - actionRepository.save(activeActions); - - return cancelledTargetIds; - - } - - private DistributionSetAssignmentResult assignDistributionSetByTargetId(@NotNull final DistributionSet set, - @NotEmpty final List tIDs, final ActionType actionType, final long forcedTime) { - - return assignDistributionSetToTargets(set, tIDs.stream() - .map(t -> new TargetWithActionType(t, actionType, forcedTime)).collect(Collectors.toList()), null, - null); - - } - - /** - * Internal helper method used only inside service level. As a result is no - * additional security necessary. - * - * @param target - * to update - * @param status - * of the target - * @param setInstalledDate - * to set - * - * @return updated target - */ - Target updateTargetInfo(@NotNull final Target target, @NotNull final TargetUpdateStatus status, - final boolean setInstalledDate) { - final TargetInfo ts = target.getTargetInfo(); - ts.setUpdateStatus(status); - - if (setInstalledDate) { - ts.setInstallationDate(System.currentTimeMillis()); - } - targetInfoRepository.save(ts); - return entityManager.merge(target); - } - /** * Cancels given {@link Action} for given {@link Target}. The method will * immediately add a {@link ActionStatus.Status#CANCELED} status to the @@ -516,90 +176,32 @@ public class DeploymentManagement { * in case the given action is not active or is already a cancel * action */ - @Modifying - @Transactional(isolation = Isolation.READ_COMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public Action cancelAction(@NotNull final Action action, @NotNull final Target target) { - LOG.debug("cancelAction({}, {})", action, target); - if (action.isCancelingOrCanceled()) { - throw new CancelActionNotAllowedException("Actions in canceling or canceled state cannot be canceled"); - } - final Action myAction = entityManager.merge(action); - - if (myAction.isActive()) { - LOG.debug("action ({}) was still active. Change to {}.", action, Status.CANCELING); - myAction.setStatus(Status.CANCELING); - - // document that the status has been retrieved - actionStatusRepository.save(new ActionStatus(myAction, Status.CANCELING, System.currentTimeMillis(), - "manual cancelation requested")); - final Action saveAction = actionRepository.save(myAction); - cancelAssignDistributionSetEvent(target, myAction.getId()); - - return saveAction; - } else { - throw new CancelActionNotAllowedException( - "Action [id: " + action.getId() + "] is not active and cannot be canceled"); - } - } + Action cancelAction(@NotNull Action action, @NotNull Target target); /** - * Sends the {@link CancelTargetAssignmentEvent} for a specific target to - * the {@link EventBus}. + * counts all actions associated to a specific target. * + * @param spec + * the specification to filter the count result * @param target - * the Target which has been assigned to a distribution set - * @param actionId - * the action id of the assignment + * the target associated to the actions to count + * @return the count value of found actions associated to the target */ - private void cancelAssignDistributionSetEvent(final Target target, final Long actionId) { - afterCommit.afterCommit(() -> eventBus.post(new CancelTargetAssignmentEvent(target.getOptLockRevision(), - target.getTenant(), target.getControllerId(), actionId, target.getTargetInfo().getAddress()))); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countActionsByTarget(@NotNull Specification spec, @NotNull Target target); /** - * Force cancels given {@link Action} for given {@link Target}. Force - * canceling means that the action is marked as canceled on the SP server - * and a cancel request is sent to the target. But however it's not tracked, - * if the targets handles the cancel request or not. + * counts all actions associated to a specific target. * - * @param action - * to be canceled * @param target - * for which the action needs cancellation - * - * @return generated {@link CancelAction} or null if not in - * {@link Target#getActiveActions()}. - * @throws CancelActionNotAllowedException - * in case the given action is not active + * the target associated to the actions to count + * @return the count value of found actions associated to the target */ - @Modifying - @Transactional(isolation = Isolation.READ_COMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public Action forceQuitAction(@NotNull final Action action) { - final Action mergedAction = entityManager.merge(action); - - if (!mergedAction.isCancelingOrCanceled()) { - throw new ForceQuitActionNotAllowedException( - "Action [id: " + action.getId() + "] is not canceled yet and cannot be force quit"); - } - - if (!mergedAction.isActive()) { - throw new ForceQuitActionNotAllowedException( - "Action [id: " + action.getId() + "] is not active and cannot be force quit"); - } - - LOG.warn("action ({}) was still activ and has been force quite.", action); - - // document that the status has been retrieved - actionStatusRepository.save(new ActionStatus(mergedAction, Status.CANCELED, System.currentTimeMillis(), - "A force quit has been performed.")); - - successCancellation(mergedAction); - - return actionRepository.save(mergedAction); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countActionsByTarget(@NotNull Target target); + // TODO: validate parameters /** * Creates an action entry into the action repository. In case of existing * scheduled actions the scheduled actions gets canceled. A scheduled action @@ -614,96 +216,13 @@ public class DeploymentManagement { * @param forcedTime * the forcedTime of the action * @param rollout - * the rollout for this action + * the roll out for this action * @param rolloutGroup - * the rolloutgroup for this action + * the roll out group for this action */ - @Modifying - @Transactional(isolation = Isolation.READ_COMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public void createScheduledAction(final List targets, final DistributionSet distributionSet, - final ActionType actionType, final long forcedTime, final Rollout rollout, - final RolloutGroup rolloutGroup) { - // cancel all current scheduled actions for this target. E.g. an action - // is already scheduled and a next action is created then cancel the - // current scheduled action to cancel. E.g. a new scheduled action is - // created. - final List targetIds = targets.stream().map(t -> t.getId()).collect(Collectors.toList()); - actionRepository.switchStatus(Action.Status.CANCELED, targetIds, false, Action.Status.SCHEDULED); - targets.forEach(target -> { - final Action action = new Action(); - action.setTarget(target); - action.setActive(false); - action.setDistributionSet(distributionSet); - action.setActionType(actionType); - action.setForcedTime(forcedTime); - action.setStatus(Status.SCHEDULED); - action.setRollout(rollout); - action.setRolloutGroup(rolloutGroup); - actionRepository.save(action); - }); - } - - /** - * Starting an action which is scheduled, e.g. in case of rollout a - * scheduled action must be started now. - * - * @param action - * the action to start now. - * @return the action which has been started - */ - @Modifying - @Transactional(isolation = Isolation.READ_COMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) - public Action startScheduledAction(@NotNull final Action action) { - - final Action mergedAction = entityManager.merge(action); - final Target mergedTarget = entityManager.merge(action.getTarget()); - - // check if we need to override running update actions - final Set overrideObsoleteUpdateActions = overrideObsoleteUpdateActions( - Collections.singletonList(action.getTarget().getId())); - - final boolean hasDistributionSetAlreadyAssigned = targetRepository - .count(TargetSpecifications.hasControllerIdAndAssignedDistributionSetIdNot( - Collections.singletonList(mergedTarget.getControllerId()), - action.getDistributionSet().getId())) == 0; - if (hasDistributionSetAlreadyAssigned) { - // the target has already the distribution set assigned, we don't - // need to start the scheduled action, just finished it. - mergedAction.setStatus(Status.FINISHED); - mergedAction.setActive(false); - return actionRepository.save(mergedAction); - } - - mergedAction.setActive(true); - mergedAction.setStatus(Status.RUNNING); - final Action savedAction = actionRepository.save(mergedAction); - - final ActionStatus actionStatus = new ActionStatus(); - actionStatus.setAction(action); - actionStatus.setOccurredAt(action.getCreatedAt()); - actionStatus.setStatus(Status.RUNNING); - actionStatusRepository.save(actionStatus); - - mergedTarget.setAssignedDistributionSet(action.getDistributionSet()); - final TargetInfo targetInfo = mergedTarget.getTargetInfo(); - targetInfo.setUpdateStatus(TargetUpdateStatus.PENDING); - targetRepository.save(mergedTarget); - targetInfoRepository.save(targetInfo); - - // in case we canceled an action before for this target, then don't fire - // assignment event - if (!overrideObsoleteUpdateActions.contains(savedAction.getId())) { - final List softwareModules = softwareModuleRepository - .findByAssignedTo(action.getDistributionSet()); - // send distribution set assignment event - - assignDistributionSetEvent(mergedAction.getTarget(), mergedAction.getId(), softwareModules); - } - return savedAction; - } + void createScheduledAction(List targets, DistributionSet distributionSet, ActionType actionType, + long forcedTime, Rollout rollout, RolloutGroup rolloutGroup); /** * Get the {@link Action} entity for given actionId. @@ -713,269 +232,19 @@ public class DeploymentManagement { * @return the corresponding {@link Action} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Action findAction(@NotNull final Long actionId) { - return actionRepository.findOne(actionId); - } + Action findAction(@NotNull Long actionId); /** - * Get the {@link Action} entity for given actionId with all lazy attributes - * (i.e. distributionSet, target, target.assignedDs). + * Retrieves all actions for a specific rollout and in a specific status. * - * @param actionId - * to be id of the action - * @return the corresponding {@link Action} + * @param rollout + * the rollout the actions beglong to + * @param actionStatus + * the status of the actions + * @return the actions referring a specific rollout an in a specific status */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Action findActionWithDetails(@NotNull final Long actionId) { - return actionRepository.findById(actionId); - } - - /** - * Retrieves all {@link Action}s of a specific target. - * - * @param pageable - * pagination parameter - * @param target - * of which the actions have to be searched - * @return a paged list of actions associated with the given target - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Slice findActionsByTarget(final Pageable pageable, final Target target) { - return actionRepository.findByTarget(pageable, target); - } - - /** - * Retrieves all {@link Action}s of a specific target ordered by action ID. - * - * @param target - * the target associated with the actions - * @return a list of actions associated with the given target ordered by - * action ID - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findActionsByTarget(final Target target) { - return actionRepository.findByTarget(target); - } - - /** - * Retrieves all {@link Action}s of a specific target ordered by action ID. - * - * @param target - * the target associated with the actions - * @return a list of actions associated with the given target ordered by - * action ID - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findActionsWithStatusCountByTargetOrderByIdDesc(final Target target) { - final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - final CriteriaQuery query = cb.createQuery(ActionWithStatusCount.class); - final Root actionRoot = query.from(Action.class); - final ListJoin actionStatusJoin = actionRoot.join(Action_.actionStatus, JoinType.LEFT); - final Join actionDsJoin = actionRoot.join(Action_.distributionSet); - final Join actionRolloutJoin = actionRoot.join(Action_.rollout, JoinType.LEFT); - - final CriteriaQuery multiselect = query.distinct(true).multiselect( - actionRoot.get(Action_.id), actionRoot.get(Action_.actionType), actionRoot.get(Action_.active), - actionRoot.get(Action_.forcedTime), actionRoot.get(Action_.status), actionRoot.get(Action_.createdAt), - actionRoot.get(Action_.lastModifiedAt), actionDsJoin.get(DistributionSet_.id), - actionDsJoin.get(DistributionSet_.name), actionDsJoin.get(DistributionSet_.version), - cb.count(actionStatusJoin), actionRolloutJoin.get(Rollout_.name)); - multiselect.where(cb.equal(actionRoot.get(Action_.target), target)); - multiselect.orderBy(cb.desc(actionRoot.get(Action_.id))); - multiselect.groupBy(actionRoot.get(Action_.id)); - return entityManager.createQuery(multiselect).getResultList(); - } - - /** - * Retrieves all {@link Action}s assigned to a specific {@link Target} and a - * given specification. - * - * @param specifiction - * the specification to narrow down the search - * @param target - * the target which must be assigned to the actions - * @param pageable - * the page request - * @return a slice of actions assigned to the specific target and the - * specification - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Slice findActionsByTarget(final Specification specifiction, final Target target, - final Pageable pageable) { - - return actionRepository.findAll((Specification) (root, query, cb) -> cb - .and(specifiction.toPredicate(root, query, cb), cb.equal(root.get(Action_.target), target)), pageable); - } - - /** - * Retrieves all {@link Action}s which are referring the given - * {@link Target}. - * - * @param foundTarget - * the target to find actions for - * @param pageable - * the pageable request to limit, sort the actions - * @return a slice of actions found for a specific target - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Slice findActionsByTarget(final Target foundTarget, final Pageable pageable) { - return actionRepository.findByTarget(pageable, foundTarget); - } - - /** - * Retrieves all active {@link Action}s of a specific target ordered by - * action ID. - * - * @param pageable - * the pagination parameter - * @param target - * the target associated with the actions - * @return a paged list of actions associated with the given target - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findActiveActionsByTarget(final Pageable pageable, final Target target) { - return actionRepository.findByActiveAndTarget(pageable, target, true); - } - - /** - * Retrieves all active {@link Action}s of a specific target ordered by - * action ID. - * - * @param target - * the target associated with the actions - * @return a list of actions associated with the given target - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findActiveActionsByTarget(final Target target) { - return actionRepository.findByActiveAndTarget(target, true); - } - - /** - * Retrieves all inactive {@link Action}s of a specific target ordered by - * action ID. - * - * @param target - * the target associated with the actions - * @return a list of actions associated with the given target - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findInActiveActionsByTarget(final Target target) { - return actionRepository.findByActiveAndTarget(target, false); - } - - /** - * Retrieves all inactive {@link Action}s of a specific target ordered by - * action ID. - * - * @param pageable - * the pagination parameter - * @param target - * the target associated with the actions - * @return a paged list of actions associated with the given target - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findInActiveActionsByTarget(final Pageable pageable, final Target target) { - return actionRepository.findByActiveAndTarget(pageable, target, false); - } - - /** - * counts all actions associated to a specific target. - * - * @param target - * the target associated to the actions to count - * @return the count value of found actions associated to the target - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Long countActionsByTarget(@NotNull final Target target) { - return actionRepository.countByTarget(target); - } - - /** - * counts all actions associated to a specific target. - * - * @param spec - * the specification to filter the count result - * @param target - * the target associated to the actions to count - * @return the count value of found actions associated to the target - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Long countActionsByTarget(@NotNull final Specification spec, @NotNull final Target target) { - return actionRepository.count((root, query, cb) -> cb.and(spec.toPredicate(root, query, cb), - cb.equal(root.get(Action_.target), target))); - } - - /** - * Updates a {@link TargetAction} and forces the {@link TargetAction} if - * it's not already forced. - * - * @param targetId - * the ID of the target - * @param actionId - * the ID of the action - * @return the updated or the found {@link TargetAction} - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public Action forceTargetAction(final Long actionId) { - final Action action = actionRepository.findOne(actionId); - if (action != null && !action.isForced()) { - action.setActionType(ActionType.FORCED); - return actionRepository.save(action); - } - return action; - } - - /** - * Retrieves all the {@link ActionStatus} entries of the given - * {@link Action} and {@link Target}. - * - * @param pageReq - * pagination parameter - * @param action - * to be filtered on - * @param withMessages - * to true if {@link ActionStatus#getMessages()} - * need to be fetched. - * @return the corresponding {@link Page} of {@link ActionStatus} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findActionStatusByAction(final Pageable pageReq, final Action action, - final boolean withMessages) { - if (withMessages) { - return actionStatusRepository.getByAction(pageReq, action); - } else { - return actionStatusRepository.findByAction(pageReq, action); - } - } - - /** - * This method is called, when cancellation has been successful. It sets the - * action to canceled, resets the meta data of the target and in case there - * is a new action this action is triggered. - * - * @param action - * the action which is set to canceled - */ - void successCancellation(final Action action) { - - // set action inactive - action.setActive(false); - action.setStatus(Status.CANCELED); - - final Target target = action.getTarget(); - final List nextActiveActions = actionRepository.findByTargetAndActiveOrderByIdAsc(target, true).stream() - .filter(a -> !a.getId().equals(action.getId())).collect(Collectors.toList()); - - if (nextActiveActions.isEmpty()) { - target.setAssignedDistributionSet(target.getTargetInfo().getInstalledDistributionSet()); - updateTargetInfo(target, TargetUpdateStatus.IN_SYNC, false); - } else { - target.setAssignedDistributionSet(nextActiveActions.get(0).getDistributionSet()); - } - targetManagement.updateTarget(target); - } + List findActionsByRolloutAndStatus(@NotNull Rollout rollout, @NotNull Action.Status actionStatus); /** * Retrieving all actions referring to a given rollout with a specific @@ -994,22 +263,191 @@ public class DeploymentManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - public List findActionsByRolloutGroupParentAndStatus(final Rollout rollout, - final RolloutGroup rolloutGroupParent, final Action.Status actionStatus) { - return actionRepository.findByRolloutAndRolloutGroupParentAndStatus(rollout, rolloutGroupParent, actionStatus); - } + List findActionsByRolloutGroupParentAndStatus(@NotNull Rollout rollout, + @NotNull RolloutGroup rolloutGroupParent, @NotNull Action.Status actionStatus); /** - * Retrieves all actions for a specific rollout and in a specific status. + * Retrieves all {@link Action}s of a specific target. * - * @param rollout - * the rollout the actions beglong to - * @param actionStatus - * the status of the actions - * @return the actions referring a specific rollout an in a specific status + * @param pageable + * pagination parameter + * @param target + * of which the actions have to be searched + * @return a paged list of actions associated with the given target */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findActionsByRolloutAndStatus(final Rollout rollout, final Action.Status actionStatus) { - return actionRepository.findByRolloutAndStatus(rollout, actionStatus); - } -} + Slice findActionsByTarget(@NotNull Pageable pageable, @NotNull Target target); + + /** + * Retrieves all {@link Action}s assigned to a specific {@link Target} and a + * given specification. + * + * @param specifiction + * the specification to narrow down the search + * @param target + * the target which must be assigned to the actions + * @param pageable + * the page request + * @return a slice of actions assigned to the specific target and the + * specification + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Slice findActionsByTarget(@NotNull Specification specifiction, @NotNull Target target, + @NotNull Pageable pageable); + + /** + * Retrieves all {@link Action}s of a specific target ordered by action ID. + * + * @param target + * the target associated with the actions + * @return a list of actions associated with the given target ordered by + * action ID + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findActionsByTarget(@NotNull Target target); + + /** + * Retrieves all {@link Action}s which are referring the given + * {@link Target}. + * + * @param foundTarget + * the target to find actions for + * @param pageable + * the pageable request to limit, sort the actions + * @return a slice of actions found for a specific target + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Slice findActionsByTarget(@NotNull Target foundTarget, @NotNull Pageable pageable); + + /** + * Retrieves all the {@link ActionStatus} entries of the given + * {@link Action} and {@link Target}. + * + * @param pageReq + * pagination parameter + * @param action + * to be filtered on + * @param withMessages + * to true if {@link ActionStatus#getMessages()} + * need to be fetched. + * @return the corresponding {@link Page} of {@link ActionStatus} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findActionStatusByAction(@NotNull Pageable pageReq, @NotNull Action action, + boolean withMessages); + + /** + * Retrieves all {@link Action}s of a specific target ordered by action ID. + * + * @param target + * the target associated with the actions + * @return a list of actions associated with the given target ordered by + * action ID + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findActionsWithStatusCountByTargetOrderByIdDesc(@NotNull Target target); + + /** + * Get the {@link Action} entity for given actionId with all lazy attributes + * (i.e. distributionSet, target, target.assignedDs). + * + * @param actionId + * to be id of the action + * @return the corresponding {@link Action} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Action findActionWithDetails(@NotNull Long actionId); + + /** + * Retrieves all active {@link Action}s of a specific target ordered by + * action ID. + * + * @param pageable + * the pagination parameter + * @param target + * the target associated with the actions + * @return a paged list of actions associated with the given target + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findActiveActionsByTarget(@NotNull Pageable pageable, @NotNull Target target); + + /** + * Retrieves all active {@link Action}s of a specific target ordered by + * action ID. + * + * @param target + * the target associated with the actions + * @return a list of actions associated with the given target + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findActiveActionsByTarget(@NotNull Target target); + + /** + * Retrieves all inactive {@link Action}s of a specific target ordered by + * action ID. + * + * @param pageable + * the pagination parameter + * @param target + * the target associated with the actions + * @return a paged list of actions associated with the given target + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findInActiveActionsByTarget(@NotNull Pageable pageable, @NotNull Target target); + + /** + * Retrieves all inactive {@link Action}s of a specific target ordered by + * action ID. + * + * @param target + * the target associated with the actions + * @return a list of actions associated with the given target + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findInActiveActionsByTarget(@NotNull Target target); + + /** + * Force cancels given {@link Action} for given {@link Target}. Force + * canceling means that the action is marked as canceled on the SP server + * and a cancel request is sent to the target. But however it's not tracked, + * if the targets handles the cancel request or not. + * + * @param action + * to be canceled + * @param target + * for which the action needs cancellation + * + * @return generated {@link CancelAction} or null if not in + * {@link Target#getActiveActions()}. + * @throws CancelActionNotAllowedException + * in case the given action is not active + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) + Action forceQuitAction(@NotNull Action action); + + /** + * Updates a {@link TargetAction} and forces the {@link TargetAction} if + * it's not already forced. + * + * @param targetId + * the ID of the target + * @param actionId + * the ID of the action + * @return the updated or the found {@link TargetAction} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) + Action forceTargetAction(@NotNull Long actionId); + + /** + * Starting an action which is scheduled, e.g. in case of roll out a + * scheduled action must be started now. + * + * @param action + * the action to start now. + * @return the action which has been started + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) + Action startScheduledAction(@NotNull Action action); + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java index 85e707652..c79fb669d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository; import java.util.Collections; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.Target; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index db1ade60e..965ecd9f6 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -8,235 +8,163 @@ */ package org.eclipse.hawkbit.repository; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import javax.persistence.Entity; -import javax.persistence.EntityManager; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagAssigmentResultEvent; -import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.exception.DistributionSetCreationFailedMissingMandatoryModuleException; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.exception.EntityLockedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; -import org.eclipse.hawkbit.repository.model.DistributionSetMetadata_; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.DistributionSetTypeElement; -import org.eclipse.hawkbit.repository.model.DistributionSet_; import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.specifications.DistributionSetSpecification; -import org.eclipse.hawkbit.repository.specifications.DistributionSetTypeSpecification; -import org.eclipse.hawkbit.repository.specifications.SpecificationsBuilder; import org.hibernate.validator.constraints.NotEmpty; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; -import com.google.common.base.Strings; -import com.google.common.eventbus.EventBus; +public interface DistributionSetManagement { -/** - * Business facade for managing the {@link DistributionSet}s. - * - */ -@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -@Validated -@Service -public class DistributionSetManagement { - - @Autowired - private EntityManager entityManager; - - @Autowired - private DistributionSetRepository distributionSetRepository; - - @Autowired - private TagManagement tagManagement; - - @Autowired - private SystemManagement systemManagement; - - @Autowired - private DistributionSetTypeRepository distributionSetTypeRepository; - - @Autowired - private DistributionSetMetadataRepository distributionSetMetadataRepository; - - @Autowired - private ActionRepository actionRepository; - - @Autowired - private EventBus eventBus; - - @Autowired - private AfterTransactionCommitExecutor afterCommit; + // TODO rename/document the whole with details thing (document what the + // details are and maybe find a better name, e.g. with dependencies?) /** - * Find {@link DistributionSet} based on given ID including (lazy loaded) - * details, e.g. {@link DistributionSet#getAgentHub()}. - * - * Note: for performance reasons it is recommended to use - * {@link #findDistributionSetById(Long)} if details are not necessary. - * - * @param distid - * to look for. - * @return {@link DistributionSet} or null if it does not exist - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSet findDistributionSetByIdWithDetails(@NotNull final Long distid) { - return distributionSetRepository.findOne(DistributionSetSpecification.byId(distid)); - } - - /** - * Find {@link DistributionSet} based on given ID without details, e.g. - * {@link DistributionSet#getAgentHub()}. - * - * @param distid - * to look for. - * @return {@link DistributionSet} or null if it does not exist - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSet findDistributionSetById(@NotNull final Long distid) { - return distributionSetRepository.findOne(distid); - } - - /** - * {@link Entity} based method call for - * {@link #toggleTagAssignment(Collection, String)}. - * - * @param sets - * to toggle for - * @param tag - * to toggle - * @return {@link DistributionSetTagAssignmentResult} with all meta data of - * the assignment outcome. - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty final List sets, - @NotNull final DistributionSetTag tag) { - return toggleTagAssignment(sets.stream().map(ds -> ds.getId()).collect(Collectors.toList()), tag.getName()); - } - - /** - * Toggles {@link DistributionSetTag} assignment to given - * {@link DistributionSet}s by means that if some (or all) of the targets in - * the list have the {@link Tag} not yet assigned, they will be. If all of - * theme have the tag already assigned they will be removed instead. - * - * @param dsIds - * to toggle for - * @param tagName - * to toggle - * @return {@link DistributionSetTagAssignmentResult} with all meta data of - * the assignment outcome. - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty final Collection dsIds, - @NotNull final String tagName) { - - final Iterable sets = findDistributionSetListWithDetails(dsIds); - final DistributionSetTag myTag = tagManagement.findDistributionSetTag(tagName); - - DistributionSetTagAssignmentResult result; - final List toBeChangedDSs = new ArrayList<>(); - for (final DistributionSet set : sets) { - if (set.getTags().add(myTag)) { - toBeChangedDSs.add(set); - } - } - - // un-assignment case - if (toBeChangedDSs.isEmpty()) { - for (final DistributionSet set : sets) { - if (set.getTags().remove(myTag)) { - toBeChangedDSs.add(set); - } - } - result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), 0, - toBeChangedDSs.size(), Collections.emptyList(), distributionSetRepository.save(toBeChangedDSs), - myTag); - } else { - result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), toBeChangedDSs.size(), - 0, distributionSetRepository.save(toBeChangedDSs), Collections.emptyList(), myTag); - } - - final DistributionSetTagAssignmentResult resultAssignment = result; - afterCommit.afterCommit(() -> eventBus.post(new DistributionSetTagAssigmentResultEvent(resultAssignment))); - - // no reason to persist the tag - entityManager.detach(myTag); - return result; - } - - /** - * Retrieves {@link DistributionSet} List including details information, - * i.e. @link BaseSoftwareModule}s and {@link DistributionSetTag}s. - * - * @param distributionIdSet - * List of {@link DistributionSet} IDs to be found - * @return the found {@link DistributionSet}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public List findDistributionSetListWithDetails( - @NotEmpty final Collection distributionIdSet) { - return distributionSetRepository.findAll(DistributionSetSpecification.byIds(distributionIdSet)); - } - - /** - * Updates existing {@link DistributionSet}. + * Assigns {@link SoftwareModule} to existing {@link DistributionSet}. * * @param ds - * to update - * @return the saved {@link Entity}. - * @throws NullPointerException - * of {@link DistributionSet#getId()} is null - * @throw DataDependencyViolationException in case of illegal update + * to assign and update + * @param softwareModules + * to get assigned + * @return the updated {@link DistributionSet}. */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSet updateDistributionSet(@NotNull final DistributionSet ds) { - checkNotNull(ds.getId()); - final DistributionSet persisted = findDistributionSetByIdWithDetails(ds.getId()); - checkDistributionSetSoftwareModulesIsAllowedToModify(ds, persisted.getModules()); - return distributionSetRepository.save(ds); + DistributionSet assignSoftwareModules(@NotNull DistributionSet ds, Set softwareModules); + + /** + * Assign a {@link DistributionSetTag} assignment to given + * {@link DistributionSet}s. + * + * @param dsIds + * to assign for + * @param tag + * to assign + * @return list of assigned ds + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + List assignTag(@NotEmpty Collection dsIds, @NotNull DistributionSetTag tag); + + /** + * Count all {@link DistributionSet}s in the repository that are not marked + * as deleted. + * + * @return number of {@link DistributionSet}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countDistributionSetsAll(); + + /** + * @return number of {@link DistributionSetType}s in the repository. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countDistributionSetTypesAll(); + + /** + * Creates a new {@link DistributionSet}. + * + * @param dSet + * {@link DistributionSet} to be created + * @return the new persisted {@link DistributionSet} + * + * @throws EntityAlreadyExistsException + * if a given entity already exists + * @throws DistributionSetCreationFailedMissingMandatoryModuleException + * is {@link DistributionSet} does not contain mandatory + * {@link SoftwareModule}s. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + DistributionSet createDistributionSet(@NotNull DistributionSet dSet); + + /** + * creates a list of distribution set meta data entries. + * + * @param metadata + * the meta data entries to create or update + * @return the updated or created distribution set meta data entries + * @throws EntityAlreadyExistsException + * in case one of the meta data entry already exists for the + * specific key + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + List createDistributionSetMetadata(@NotEmpty Collection metadata); + + /** + * creates or updates a single distribution set meta data entry. + * + * @param metadata + * the meta data entry to create or update + * @return the updated or created distribution set meta data entry + * @throws EntityAlreadyExistsException + * in case the meta data entry already exists for the specific + * key + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + DistributionSetMetadata createDistributionSetMetadata(@NotNull DistributionSetMetadata metadata); + + /** + * Creates multiple {@link DistributionSet}s. + * + * @param distributionSets + * to be created + * @return the new {@link DistributionSet}s + * @throws EntityAlreadyExistsException + * if a given entity already exists + * @throws DistributionSetCreationFailedMissingMandatoryModuleException + * is {@link DistributionSet} does not contain mandatory + * {@link SoftwareModule}s. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + List createDistributionSets(@NotNull Collection distributionSets); + + /** + * Creates new {@link DistributionSetType}. + * + * @param type + * to create + * @return created {@link Entity} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + DistributionSetType createDistributionSetType(@NotNull DistributionSetType type); + + /** + * Creates multiple {@link DistributionSetType}s. + * + * @param types + * to create + * @return created {@link Entity} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + default List createDistributionSetTypes(@NotNull final Collection types) { + return types.stream().map(this::createDistributionSetType).collect(Collectors.toList()); } /** @@ -254,10 +182,9 @@ public class DistributionSetManagement { * @param set * to delete */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteDistributionSet(@NotNull final DistributionSet set) { + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + default void deleteDistributionSet(@NotNull final DistributionSet set) { deleteDistributionSet(set.getId()); } @@ -269,228 +196,133 @@ public class DistributionSetManagement { * @param distributionSetIDs * to be deleted */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteDistributionSet(@NotEmpty final Long... distributionSetIDs) { - final List toHardDelete = new ArrayList<>(); - - final List assigned = distributionSetRepository.findAssignedDistributionSetsById(distributionSetIDs); - - // soft delete assigned - if (!assigned.isEmpty()) { - distributionSetRepository.deleteDistributionSet(assigned.toArray(new Long[assigned.size()])); - } - - // mark the rest as hard delete - for (final Long setId : distributionSetIDs) { - if (!assigned.contains(setId)) { - toHardDelete.add(setId); - } - } - - // hard delete the rest if exixts - if (!toHardDelete.isEmpty()) { - // don't give the delete statement an empty list, JPA/Oracle cannot - // handle the empty list - distributionSetRepository.deleteByIdIn(toHardDelete); - } - } + void deleteDistributionSet(@NotEmpty Long... distributionSetIDs); /** - * Creates a new {@link DistributionSet}. + * deletes a distribution set meta data entry. * - * @param dSet - * {@link DistributionSet} to be created - * @return the new persisted {@link DistributionSet} - * - * @throws EntityAlreadyExistsException - * if a given entity already exists - * @throws DistributionSetCreationFailedMissingMandatoryModuleException - * is {@link DistributionSet} does not contain mandatory - * {@link SoftwareModule}s. + * @param id + * the ID of the distribution set meta data to delete */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public DistributionSet createDistributionSet(@NotNull final DistributionSet dSet) { - prepareDsSave(dSet); - if (dSet.getType() == null) { - dSet.setType(systemManagement.getTenantMetadata().getDefaultDsType()); - } - return distributionSetRepository.save(dSet); - } - - private void prepareDsSave(final DistributionSet dSet) { - if (dSet.getId() != null) { - throw new EntityAlreadyExistsException("Parameter seems to be an existing, already persisted entity"); - } - - if (distributionSetRepository.countByNameAndVersion(dSet.getName(), dSet.getVersion()) > 0) { - throw new EntityAlreadyExistsException("DistributionSet with that name and version already exists."); - } - - } - - /** - * Creates multiple {@link DistributionSet}s. - * - * @param distributionSets - * to be created - * @return the new {@link DistributionSet}s - * @throws EntityAlreadyExistsException - * if a given entity already exists - * @throws DistributionSetCreationFailedMissingMandatoryModuleException - * is {@link DistributionSet} does not contain mandatory - * {@link SoftwareModule}s. - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public List createDistributionSets(@NotNull final Iterable distributionSets) { - for (final DistributionSet ds : distributionSets) { - prepareDsSave(ds); - if (ds.getType() == null) { - ds.setType(systemManagement.getTenantMetadata().getDefaultDsType()); - } - } - return distributionSetRepository.save(distributionSets); - } - - /** - * Assigns {@link SoftwareModule} to existing {@link DistributionSet}. - * - * @param ds - * to assign and update - * @param softwareModules - * to get assigned - * @return the updated {@link DistributionSet}. - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSet assignSoftwareModules(@NotNull final DistributionSet ds, - final Set softwareModules) { - checkDistributionSetSoftwareModulesIsAllowedToModify(ds, softwareModules); - for (final SoftwareModule softwareModule : softwareModules) { - ds.addModule(softwareModule); - } - return distributionSetRepository.save(ds); - } + void deleteDistributionSetMetadata(@NotNull DsMetadataCompositeKey id); /** - * Unassigns a {@link SoftwareModule} form an existing - * {@link DistributionSet}. + * Deletes or mark as delete in case the type is in use. * - * @param ds - * to get unassigned form - * @param softwareModule - * to get unassigned - * @return the updated {@link DistributionSet}. + * @param type + * to delete */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSet unassignSoftwareModule(@NotNull final DistributionSet ds, - final SoftwareModule softwareModule) { - final Set softwareModules = new HashSet<>(); - softwareModules.add(softwareModule); - ds.removeModule(softwareModule); - checkDistributionSetSoftwareModulesIsAllowedToModify(ds, softwareModules); - return distributionSetRepository.save(ds); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteDistributionSetType(@NotNull DistributionSetType type); /** - * Updates existing {@link DistributionSetType}. However, keep in mind that - * is not possible to change the {@link DistributionSetTypeElement}s while - * the DS type is already in use. + * retrieves the distribution set for a given action. * - * @param dsType - * to update - * @return updated {@link Entity} - * - * @throws EntityReadOnlyException - * if use tries to change the {@link DistributionSetTypeElement} - * s while the DS type is already in use. + * @param action + * the action associated with the distribution set + * @return the distribution set which is associated with the action */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSetType updateDistributionSetType(@NotNull final DistributionSetType dsType) { - checkNotNull(dsType.getId()); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DistributionSet findDistributionSetByAction(@NotNull Action action); - final DistributionSetType persisted = distributionSetTypeRepository.findOne(dsType.getId()); - - // throw exception if user tries to update a DS type that is already in - // use - if (!persisted.areModuleEntriesIdentical(dsType) && distributionSetRepository.countByType(persisted) > 0) { - throw new EntityReadOnlyException( - String.format("distribution set type %s set is already assigned to targets and cannot be changed", - dsType.getName())); - } - - return distributionSetTypeRepository.save(dsType); + /** + * Find {@link DistributionSet} based on given ID without details, e.g. + * {@link DistributionSet#getAgentHub()}. + * + * @param distid + * to look for. + * @return {@link DistributionSet} or null if it does not exist + */ + @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + default DistributionSet findDistributionSetById(@NotNull final Long distid) { + return findDistributionSetByIdWithDetails(distid); } /** - * Generic predicate based query for {@link DistributionSetType}. + * Find {@link DistributionSet} based on given ID including (lazy loaded) + * details, e.g. {@link DistributionSet#getAgentHub()}. * + * Note: for performance reasons it is recommended to use + * {@link #findDistributionSetById(Long)} if details are not necessary. + * + * @param distid + * to look for. + * @return {@link DistributionSet} or null if it does not exist + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DistributionSet findDistributionSetByIdWithDetails(@NotNull Long distid); + + /** + * Find distribution set by name and version. + * + * @param distributionName + * name of {@link DistributionSet}; case insensitive + * @param version + * version of {@link DistributionSet} + * @return the page with the found {@link DistributionSet} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DistributionSet findDistributionSetByNameAndVersion(@NotEmpty String distributionName, @NotEmpty String version); + + /** + * Retrieves {@link DistributionSet} List for overview purposes (no + * {@link SoftwareModule}s and {@link DistributionSetTag}s). + * + * Please use {@link #findDistributionSetListWithDetails(Iterable)} if + * details are required. + * + * @param dist + * List of {@link DistributionSet} IDs to be found + * @return the found {@link DistributionSet}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Iterable findDistributionSetList(Collection dist); + + /** + * Retrieves {@link DistributionSet} List including details information, + * i.e. @link BaseSoftwareModule}s and {@link DistributionSetTag}s. + * + * @param distributionIdSet + * List of {@link DistributionSet} IDs to be found + * @return the found {@link DistributionSet}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + List findDistributionSetListWithDetails(Collection distributionIdSet); + + /** + * finds all meta data by the given distribution set id. + * + * @param distributionSetId + * the distribution set id to retrieve the meta data from + * @param pageable + * the page request to page the result + * @return a paged result of all meta data entries for a given distribution + * set id + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findDistributionSetMetadataByDistributionSetId(@NotNull Long distributionSetId, + @NotNull Pageable pageable); + + /** + * finds all meta data by the given distribution set id. + * + * @param distributionSetId + * the distribution set id to retrieve the meta data from * @param spec - * of the search + * the specification to filter the result * @param pageable - * parameter for paging - * - * @return the found {@link SoftwareModuleType}s + * the page request to page the result + * @return a paged result of all meta data entries for a given distribution + * set id */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findDistributionSetTypesByPredicate( - @NotNull final Specification spec, @NotNull final Pageable pageable) { - return distributionSetTypeRepository.findAll(spec, pageable); - } - - /** - * @param pageable - * parameter - * @return all {@link DistributionSetType}s in the repository. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findDistributionSetTypesAll(@NotNull final Pageable pageable) { - return distributionSetTypeRepository.findByDeleted(pageable, false); - } - - /** - * retrieves {@link DistributionSet}s by filtering on the given parameters. - * - * @param pageable - * page parameter - * @param distributionSetFilter - * has details of filters to be applied. - * @return the page of found {@link DistributionSet} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findDistributionSetsByFilters(@NotNull final Pageable pageable, - final DistributionSetFilter distributionSetFilter) { - final List> specList = buildDistributionSetSpecifications(distributionSetFilter); - return findByCriteriaAPI(pageable, specList); - } - - /** - * - * @param distributionSetFilter - * had details of filters to be applied - * @return a single DistributionSet which is either installed or assigned to - * a specific target or {@code null}. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - private DistributionSet findDistributionSetsByFiltersAndInstalledOrAssignedTarget( - final DistributionSetFilter distributionSetFilter) { - final List> specList = buildDistributionSetSpecifications(distributionSetFilter); - if (specList == null || specList.isEmpty()) { - return null; - } - return distributionSetRepository.findOne(SpecificationsBuilder.combineWithAnd(specList)); - } + Page findDistributionSetMetadataByDistributionSetId(@NotNull Long distributionSetId, + @NotNull Specification spec, @NotNull Pageable pageable); + // TODO discuss: use enum instead of the true,false,null switch ? /** * finds all {@link DistributionSet}s. * @@ -504,31 +336,16 @@ public class DistributionSetManagement { * @param complete * to true for returning only completed distribution * sets or false for only incomplete ones nor - * null to return both.. + * null to return both. * @param complete - * set to if false uncomplete DS should also be + * set to if false incomplete DS should also be * shown. * * * @return all found {@link DistributionSet}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findDistributionSetsAll(@NotNull final Pageable pageReq, final Boolean deleted, - final Boolean complete) { - final List> specList = new ArrayList<>(); - - if (deleted != null) { - final Specification spec = DistributionSetSpecification.isDeleted(deleted); - specList.add(spec); - } - - if (complete != null) { - final Specification spec = DistributionSetSpecification.isCompleted(complete); - specList.add(spec); - } - - return findByCriteriaAPI(pageReq, specList); - } + Page findDistributionSetsAll(@NotNull Pageable pageReq, Boolean deleted, Boolean complete); /** * finds all {@link DistributionSet}s. @@ -545,18 +362,11 @@ public class DistributionSetManagement { * @return all found {@link DistributionSet}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findDistributionSetsAll(@NotNull final Specification spec, - @NotNull final Pageable pageReq, final Boolean deleted) { - final List> specList = new ArrayList<>(); - if (deleted != null) { - specList.add(DistributionSetSpecification.isDeleted(deleted)); - } - specList.add(spec); - return findByCriteriaAPI(pageReq, specList); - } + Page findDistributionSetsAll(@NotNull Specification spec, + @NotNull Pageable pageReq, Boolean deleted); /** - * method retrieves all {@link DistributionSet}s from the repo in the + * method retrieves all {@link DistributionSet}s from the repository in the * following order: *

* 1) {@link DistributionSet}s which have the given {@link Target} as @@ -573,120 +383,25 @@ public class DistributionSetManagement { * @param distributionSetFilterBuilder * has details of filters to be applied * @param assignedOrInstalled - * the ID of the Target to be ordered by + * the controllerID of the Target to be ordered by * @return */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findDistributionSetsAllOrderedByLinkTarget(@NotNull final Pageable pageable, - @NotNull final DistributionSetFilterBuilder distributionSetFilterBuilder, - @NotNull final String assignedOrInstalled) { - - final DistributionSetFilter filterWithInstalledTargets = distributionSetFilterBuilder - .setInstalledTargetId(assignedOrInstalled).setAssignedTargetId(null).build(); - final DistributionSet installedDS = findDistributionSetsByFiltersAndInstalledOrAssignedTarget( - filterWithInstalledTargets); - - final DistributionSetFilter filterWithAssignedTargets = distributionSetFilterBuilder.setInstalledTargetId(null) - .setAssignedTargetId(assignedOrInstalled).build(); - final DistributionSet assignedDS = findDistributionSetsByFiltersAndInstalledOrAssignedTarget( - filterWithAssignedTargets); - - final DistributionSetFilter dsFilterWithNoTargetLinked = distributionSetFilterBuilder.setInstalledTargetId(null) - .setAssignedTargetId(null).build(); - // first fine the distribution sets filtered by the given filter - // parameters - final Page findDistributionSetsByFilters = findDistributionSetsByFilters(pageable, - dsFilterWithNoTargetLinked); - - final List resultSet = new LinkedList<>(findDistributionSetsByFilters.getContent()); - int orderIndex = 0; - if (installedDS != null) { - final boolean remove = resultSet.remove(installedDS); - if (!remove) { - resultSet.remove(resultSet.size() - 1); - } - resultSet.add(orderIndex, installedDS); - orderIndex++; - } - if (assignedDS != null && !assignedDS.equals(installedDS)) { - final boolean remove = resultSet.remove(assignedDS); - if (!remove) { - resultSet.remove(resultSet.size() - 1); - } - resultSet.add(orderIndex, assignedDS); - } - - return new PageImpl<>(resultSet, pageable, findDistributionSetsByFilters.getTotalElements()); - } + Page findDistributionSetsAllOrderedByLinkTarget(@NotNull Pageable pageable, + @NotNull DistributionSetFilterBuilder distributionSetFilterBuilder, @NotEmpty String assignedOrInstalled); /** - * Find distribution set by name and version. + * retrieves {@link DistributionSet}s by filtering on the given parameters. * - * @param distributionName - * name of {@link DistributionSet}; case insensitive - * @param version - * version of {@link DistributionSet} - * @return the page with the found {@link DistributionSet} + * @param pageable + * page parameter + * @param distributionSetFilter + * has details of filters to be applied. + * @return the page of found {@link DistributionSet} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSet findDistributionSetByNameAndVersion(@NotEmpty final String distributionName, - @NotEmpty final String version) { - final Specification spec = DistributionSetSpecification - .equalsNameAndVersionIgnoreCase(distributionName, version); - return distributionSetRepository.findOne(spec); - - } - - /** - * Retrieves {@link DistributionSet} List for overview purposes (no - * {@link SoftwareModule}s and {@link DistributionSetTag}s). - * - * Please use {@link #findDistributionSetListWithDetails(Iterable)} if - * details are required. - * - * @param dist - * List of {@link DistributionSet} IDs to be found - * @return the found {@link DistributionSet}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Iterable findDistributionSetList(@NotEmpty final Collection dist) { - return distributionSetRepository.findAll(dist); - } - - /** - * Count all {@link DistributionSet}s in the repository that are not marked - * as deleted. - * - * @return number of {@link DistributionSet}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Long countDistributionSetsAll() { - - final List> specList = new ArrayList<>(); - - final Specification spec = DistributionSetSpecification.isDeleted(Boolean.FALSE); - specList.add(spec); - - return distributionSetRepository.count(SpecificationsBuilder.combineWithAnd(specList)); - } - - /** - * @return number of {@link DistributionSetType}s in the repository. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Long countDistributionSetTypesAll() { - return distributionSetTypeRepository.countByDeleted(false); - } - - /** - * @param name - * as {@link DistributionSetType#getName()} - * @return {@link DistributionSetType} if found or null if not - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSetType findDistributionSetTypeByName(@NotNull final String name) { - return distributionSetTypeRepository.findOne(DistributionSetTypeSpecification.byName(name)); - } + Page findDistributionSetsByFilters(@NotNull Pageable pageable, + @NotNull DistributionSetFilter distributionSetFilter); /** * @param id @@ -694,186 +409,46 @@ public class DistributionSetManagement { * @return {@link DistributionSetType} if found or null if not */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSetType findDistributionSetTypeById(@NotNull final Long id) { - return distributionSetTypeRepository.findOne(DistributionSetTypeSpecification.byId(id)); - } + DistributionSetType findDistributionSetTypeById(@NotNull Long id); /** * @param key * as {@link DistributionSetType#getKey()} * @return {@link DistributionSetType} if found or null if not */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSetType findDistributionSetTypeByKey(@NotNull final String key) { - return distributionSetTypeRepository.findOne(DistributionSetTypeSpecification.byKey(key)); - } + DistributionSetType findDistributionSetTypeByKey(@NotNull String key); /** - * Creates new {@link DistributionSetType}. - * - * @param type - * to create - * @return created {@link Entity} + * @param name + * as {@link DistributionSetType#getName()} + * @return {@link DistributionSetType} if found or null if not */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public DistributionSetType createDistributionSetType(@NotNull final DistributionSetType type) { - if (type.getId() != null) { - throw new EntityAlreadyExistsException("Given type contains an Id!"); - } - - return distributionSetTypeRepository.save(type); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DistributionSetType findDistributionSetTypeByName(@NotEmpty String name); /** - * Deletes or markes as delete in case the type is in use. - * - * @param type - * to delete - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteDistributionSetType(@NotNull final DistributionSetType type) { - - if (distributionSetRepository.countByType(type) > 0) { - final DistributionSetType toDelete = entityManager.merge(type); - toDelete.setDeleted(true); - distributionSetTypeRepository.save(toDelete); - } else { - distributionSetTypeRepository.delete(type.getId()); - } - } - - /** - * creates or updates a single distribution set meta data entry. - * - * @param metadata - * the meta data entry to create or update - * @return the updated or created distribution set meta data entry - * @throws EntityAlreadyExistsException - * in case the meta data entry already exists for the specific - * key - */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSetMetadata createDistributionSetMetadata(@NotNull final DistributionSetMetadata metadata) { - if (distributionSetMetadataRepository.exists(metadata.getId())) { - throwMetadataKeyAlreadyExists(metadata.getId().getKey()); - } - // merge base distribution set so optLockRevision gets updated and audit - // log written because - // modifying metadata is modifying the base distribution set itself for - // auditing purposes. - entityManager.merge(metadata.getDistributionSet()).setLastModifiedAt(0L); - return distributionSetMetadataRepository.save(metadata); - } - - /** - * creates a list of distribution set meta data entries. - * - * @param metadata - * the meta data entries to create or update - * @return the updated or created distribution set meta data entries - * @throws EntityAlreadyExistsException - * in case one of the meta data entry already exists for the - * specific key - */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public List createDistributionSetMetadata( - @NotEmpty final Collection metadata) { - for (final DistributionSetMetadata distributionSetMetadata : metadata) { - checkAndThrowAlreadyIfDistributionSetMetadataExists(distributionSetMetadata.getId()); - } - metadata.forEach(m -> entityManager.merge(m.getDistributionSet()).setLastModifiedAt(-1L)); - return (List) distributionSetMetadataRepository.save(metadata); - } - - /** - * updates a distribution set meta data value if corresponding entry exists. - * - * @param metadata - * the meta data entry to be updated - * @return the updated meta data entry - * @throws EntityNotFoundException - * in case the meta data entry does not exists and cannot be - * updated - */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSetMetadata updateDistributionSetMetadata(@NotNull final DistributionSetMetadata metadata) { - // check if exists otherwise throw entity not found exception - findOne(metadata.getId()); - // touch it to update the lock revision because we are modifying the - // DS indirectly - entityManager.merge(metadata.getDistributionSet()).setLastModifiedAt(0L); - return distributionSetMetadataRepository.save(metadata); - } - - /** - * deletes a distribution set meta data entry. - * - * @param id - * the ID of the distribution set meta data to delete - */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public void deleteDistributionSetMetadata(@NotNull final DsMetadataCompositeKey id) { - distributionSetMetadataRepository.delete(id); - } - - /** - * finds all meta data by the given distribution set id. - * - * @param distributionSetId - * the distribution set id to retrieve the meta data from * @param pageable - * the page request to page the result - * @return a paged result of all meta data entries for a given distribution - * set id + * parameter + * @return all {@link DistributionSetType}s in the repository. */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findDistributionSetMetadataByDistributionSetId( - @NotNull final Long distributionSetId, @NotNull final Pageable pageable) { - - return distributionSetMetadataRepository.findAll( - (Specification) (root, query, cb) -> cb.equal( - root.get(DistributionSetMetadata_.distributionSet).get(DistributionSet_.id), distributionSetId), - pageable); - - } + Page findDistributionSetTypesAll(@NotNull Pageable pageable); /** - * finds all meta data by the given distribution set id. + * Generic predicate based query for {@link DistributionSetType}. * - * @param distributionSetId - * the distribution set id to retrieve the meta data from * @param spec - * the specification to filter the result + * of the search * @param pageable - * the page request to page the result - * @return a paged result of all meta data entries for a given distribution - * set id + * parameter for paging + * + * @return the found {@link SoftwareModuleType}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findDistributionSetMetadataByDistributionSetId( - @NotNull final Long distributionSetId, @NotNull final Specification spec, - @NotNull final Pageable pageable) { - return distributionSetMetadataRepository - .findAll( - (Specification) (root, query, - cb) -> cb.and( - cb.equal(root.get(DistributionSetMetadata_.distributionSet) - .get(DistributionSet_.id), distributionSetId), - spec.toPredicate(root, query, cb)), - pageable); - } + Page findDistributionSetTypesAll(@NotNull Specification spec, + @NotNull Pageable pageable); /** * finds a single distribution set meta data by its id. @@ -886,188 +461,53 @@ public class DistributionSetManagement { * in case the meta data does not exists for the given key */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSetMetadata findOne(@NotNull final DsMetadataCompositeKey id) { - final DistributionSetMetadata findOne = distributionSetMetadataRepository.findOne(id); - if (findOne == null) { - throw new EntityNotFoundException("Metadata with key '" + id.getKey() + "' does not exist"); - } - return findOne; - } + DistributionSetMetadata findOne(@NotNull DsMetadataCompositeKey id); /** - * retrieves the distribution set for a given action. - * - * @param action - * the action associated with the distribution set - * @return the distribution set which is associated with the action - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSet findDistributionSetByAction(@NotNull final Action action) { - return distributionSetRepository.findByAction(action); - } - - /** - * Creates multiple {@link DistributionSetType}s. - * - * @param types - * to create - * @return created {@link Entity} - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public List createDistributionSetTypes(@NotNull final Collection types) { - return types.stream().map(this::createDistributionSetType).collect(Collectors.toList()); - } - - /** - * Checking Distribution Set is already using while assign Software module. + * Checks if a {@link DistributionSet} is currently in use by a target in + * the repository. * * @param distributionSet - * @param softwareModules + * to check + * + * @return true if in use */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public void checkDistributionSetAlreadyUse(final DistributionSet distributionSet) { - checkDistributionSetSoftwareModulesIsAllowedToModify(distributionSet); - } - - private List> buildDistributionSetSpecifications( - final DistributionSetFilter distributionSetFilter) { - final List> specList = new ArrayList<>(); - - Specification spec; - - if (null != distributionSetFilter.getIsComplete()) { - spec = DistributionSetSpecification.isCompleted(distributionSetFilter.getIsComplete()); - specList.add(spec); - } - - if (null != distributionSetFilter.getIsDeleted()) { - spec = DistributionSetSpecification.isDeleted(distributionSetFilter.getIsDeleted()); - specList.add(spec); - } - - if (distributionSetFilter.getType() != null) { - spec = DistributionSetSpecification.byType(distributionSetFilter.getType()); - specList.add(spec); - } - - if (!Strings.isNullOrEmpty(distributionSetFilter.getSearchText())) { - spec = DistributionSetSpecification.likeNameOrDescriptionOrVersion(distributionSetFilter.getSearchText()); - specList.add(spec); - } - - if (isDSWithNoTagSelected(distributionSetFilter) || isTagsSelected(distributionSetFilter)) { - spec = DistributionSetSpecification.hasTags(distributionSetFilter.getTagNames(), - distributionSetFilter.getSelectDSWithNoTag()); - specList.add(spec); - } - if (distributionSetFilter.getInstalledTargetId() != null) { - spec = DistributionSetSpecification.installedTarget(distributionSetFilter.getInstalledTargetId()); - specList.add(spec); - } - if (distributionSetFilter.getAssignedTargetId() != null) { - spec = DistributionSetSpecification.assignedTarget(distributionSetFilter.getAssignedTargetId()); - specList.add(spec); - } - return specList; - } - - private void checkDistributionSetSoftwareModulesIsAllowedToModify(final DistributionSet distributionSet, - final Set softwareModules) { - if (!new HashSet(distributionSet.getModules()).equals(softwareModules) - && actionRepository.countByDistributionSet(distributionSet) > 0) { - throw new EntityLockedException( - String.format("distribution set %s:%s is already assigned to targets and cannot be changed", - distributionSet.getName(), distributionSet.getVersion())); - } - } - - private void checkDistributionSetSoftwareModulesIsAllowedToModify(final DistributionSet distributionSet) { - if (actionRepository.countByDistributionSet(distributionSet) > 0) { - throw new EntityLockedException( - String.format("distribution set %s:%s is already assigned to targets and cannot be changed", - distributionSet.getName(), distributionSet.getVersion())); - } - } - - private static Boolean isDSWithNoTagSelected(final DistributionSetFilter distributionSetFilter) { - if (distributionSetFilter.getSelectDSWithNoTag() != null && distributionSetFilter.getSelectDSWithNoTag()) { - return true; - } - return false; - } - - private static Boolean isTagsSelected(final DistributionSetFilter distributionSetFilter) { - if (distributionSetFilter.getTagNames() != null && !distributionSetFilter.getTagNames().isEmpty()) { - return true; - } - return false; - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + boolean isDistributionSetInUse(@NotNull DistributionSet distributionSet); /** - * executes findAll with the given {@link DistributionSet} - * {@link Specification}s. + * {@link Entity} based method call for + * {@link #toggleTagAssignment(Collection, String)}. * - * @param pageable - * paging parameter - * @param specList - * list of @link {@link Specification} - * @return the page with the found {@link DistributionSet} + * @param sets + * to toggle for + * @param tag + * to toggle + * @return {@link DistributionSetTagAssignmentResult} with all meta data of + * the assignment outcome. */ - private Page findByCriteriaAPI(@NotNull final Pageable pageable, - final List> specList) { - - if (specList == null || specList.isEmpty()) { - return distributionSetRepository.findAll(pageable); - } - - return distributionSetRepository.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable); - } - - private void checkAndThrowAlreadyIfDistributionSetMetadataExists(final DsMetadataCompositeKey metadataId) { - if (distributionSetMetadataRepository.exists(metadataId)) { - throw new EntityAlreadyExistsException( - "Metadata entry with key '" + metadataId.getKey() + "' already exists"); - } - } - - private static void throwMetadataKeyAlreadyExists(final String metadataKey) { - throw new EntityAlreadyExistsException("Metadata entry with key '" + metadataKey + "' already exists"); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + default DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty final Collection sets, + @NotNull final DistributionSetTag tag) { + return toggleTagAssignment(sets.stream().map(ds -> ds.getId()).collect(Collectors.toList()), tag.getName()); } /** - * Assign a {@link DistributionSetTag} assignment to given - * {@link DistributionSet}s. + * Toggles {@link DistributionSetTag} assignment to given + * {@link DistributionSet}s by means that if some (or all) of the targets in + * the list have the {@link Tag} not yet assigned, they will be. If all of + * theme have the tag already assigned they will be removed instead. * * @param dsIds - * to assign for - * @param tag - * to assign - * @return list of assigned ds + * to toggle for + * @param tagName + * to toggle + * @return {@link DistributionSetTagAssignmentResult} with all meta data of + * the assignment outcome. */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public List assignTag(@NotEmpty final Collection dsIds, - @NotNull final DistributionSetTag tag) { - final List allDs = findDistributionSetListWithDetails(dsIds); - - allDs.forEach(ds -> ds.getTags().add(tag)); - final List save = distributionSetRepository.save(allDs); - - afterCommit.afterCommit(() -> { - - final DistributionSetTagAssignmentResult result = new DistributionSetTagAssignmentResult(0, save.size(), 0, - save, Collections.emptyList(), tag); - eventBus.post(new DistributionSetTagAssigmentResultEvent(result)); - }); - - return save; - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty Collection dsIds, @NotNull String tagName); /** * Unassign all {@link DistributionSet} from a given @@ -1077,13 +517,21 @@ public class DistributionSetManagement { * to unassign all ds * @return list of unassigned ds */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public List unAssignAllDistributionSetsByTag(@NotNull final DistributionSetTag tag) { - return unAssignTag(tag.getAssignedToDistributionSet(), tag); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + List unAssignAllDistributionSetsByTag(@NotNull DistributionSetTag tag); + + /** + * Unassigns a {@link SoftwareModule} form an existing + * {@link DistributionSet}. + * + * @param ds + * to get unassigned form + * @param softwareModule + * to get unassigned + * @return the updated {@link DistributionSet}. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + DistributionSet unassignSoftwareModule(@NotNull DistributionSet ds, @NotNull SoftwareModule softwareModule); /** * Unassign a {@link DistributionSetTag} assignment to given @@ -1095,18 +543,49 @@ public class DistributionSetManagement { * to unassign * @return the unassigned ds or if no ds is unassigned */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public DistributionSet unAssignTag(@NotNull final Long dsId, @NotNull final DistributionSetTag distributionSetTag) { - final List allDs = findDistributionSetListWithDetails(Arrays.asList(dsId)); - final List unAssignTag = unAssignTag(allDs, distributionSetTag); - return unAssignTag.isEmpty() ? null : unAssignTag.get(0); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + DistributionSet unAssignTag(@NotNull Long dsId, @NotNull DistributionSetTag distributionSetTag); - private List unAssignTag(final Collection distributionSets, - final DistributionSetTag tag) { - distributionSets.forEach(ds -> ds.getTags().remove(tag)); - return distributionSetRepository.save(distributionSets); - } -} + /** + * Updates existing {@link DistributionSet}. + * + * @param ds + * to update + * @return the saved {@link Entity}. + * @throws NullPointerException + * of {@link DistributionSet#getId()} is null + * @throw DataDependencyViolationException in case of illegal update + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + DistributionSet updateDistributionSet(@NotNull DistributionSet ds); + + /** + * updates a distribution set meta data value if corresponding entry exists. + * + * @param metadata + * the meta data entry to be updated + * @return the updated meta data entry + * @throws EntityNotFoundException + * in case the meta data entry does not exists and cannot be + * updated + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + DistributionSetMetadata updateDistributionSetMetadata(@NotNull DistributionSetMetadata metadata); + + /** + * Updates existing {@link DistributionSetType}. However, keep in mind that + * is not possible to change the {@link DistributionSetTypeElement}s while + * the DS type is already in use. + * + * @param dsType + * to update + * @return updated {@link Entity} + * + * @throws EntityReadOnlyException + * if use tries to change the {@link DistributionSetTypeElement} + * s while the DS type is already in use. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + DistributionSetType updateDistributionSetType(@NotNull DistributionSetType dsType); + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java index 326442283..40ee21d9b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java @@ -12,77 +12,24 @@ import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.YearMonth; -import java.time.ZoneId; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import javax.persistence.EntityManager; -import javax.persistence.Query; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Expression; -import javax.persistence.criteria.Join; -import javax.persistence.criteria.JoinType; -import javax.persistence.criteria.ListJoin; -import javax.persistence.criteria.Root; +import javax.validation.constraints.NotNull; +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.report.model.DataReportSeries; -import org.eclipse.hawkbit.report.model.DataReportSeriesItem; import org.eclipse.hawkbit.report.model.InnerOuterDataReportSeries; import org.eclipse.hawkbit.report.model.ListReportSeries; import org.eclipse.hawkbit.report.model.SeriesTime; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSet_; -import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetInfo; -import org.eclipse.hawkbit.repository.model.TargetInfo_; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.model.Target_; -import org.eclipse.hawkbit.tenancy.TenantAware; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; /** - * Service layer for generating hawkBit reports. + * Service layer for generating hawkBit statistics and reports. * */ -@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -@Validated -@Service -public class ReportManagement { - - @Value("${spring.jpa.database}") - private String databaseType; - - private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM"); - - private static final String H2_TARGET_CREATED_SQL_TEMPLATE = "SELECT TO_CHAR( DATEADD('second', target0_.created_at / 1000, DATE '1970-01-01'), '%s') AS col_0_0_, count(target0_.controller_id) AS col_1_0_ from sp_target target0_ WHERE TO_CHAR(DATEADD('second', target0_.created_at / 1000, DATE '1970-01-01'),'%s') BETWEEN TO_CHAR('%s', '%s') and TO_CHAR('%s', '%s') AND UPPER(target0_.tenant)=UPPER('%s') GROUP BY TO_CHAR(DATEADD('second', target0_.created_at / 1000, DATE '1970-01-01'), '%s')"; - - private static final String H2_CONTROLLER_FRRDBACK_SQL_TEMPLATE = "SELECT TO_CHAR(DATEADD('second', action_.created_at / 1000, DATE '1970-01-01'), '%s') AS col_0_0_, count(action_.id) AS col_1_0_ FROM sp_action action_ WHERE TO_CHAR(DATEADD('second', action_.created_at / 1000, DATE '1970-01-01'), '%s') BETWEEN TO_CHAR('%s', '%s') AND TO_CHAR('%s', '%s') AND UPPER(action_.tenant)=UPPER('%s') GROUP BY TO_CHAR(DATEADD('second', action_.created_at / 1000, DATE '1970-01-01'), '%s')"; - - private static final String MYSQL_TARGET_CREATED_SQL_TEMPLATE = "SELECT DATE_FORMAT(FROM_UNIXTIME(target0_.created_at / 1000), '%s') AS col_0_0_, COUNT(target0_.controller_id) AS col_1_0_ FROM sp_target target0_ WHERE DATE_FORMAT(FROM_UNIXTIME(target0_.created_at / 1000),'%s') BETWEEN DATE_FORMAT('%s', '%s') AND DATE_FORMAT('%s', '%s') AND UPPER(target0_.tenant)=UPPER('%s') GROUP BY DATE_FORMAT(FROM_UNIXTIME(target0_.created_at / 1000), '%s')"; - - private static final String MYSQL_CONTROLLER_FRRDBACK_SQL_TEMPLATE = "SELECT DATE_FORMAT(FROM_UNIXTIME(action_.created_at / 1000), '%s') AS col_0_0_, COUNT(action_.id) as col_1_0_ FROM sp_action action_ WHERE DATE_FORMAT(FROM_UNIXTIME(action_.created_at / 1000),'%s') BETWEEN DATE_FORMAT('%s', '%s') AND DATE_FORMAT('%s', '%s') AND UPPER(action_.tenant)=UPPER('%s') GROUP BY DATE_FORMAT(FROM_UNIXTIME(action_.created_at / 1000), '%s')"; - - private static final String MYSQL_DB_TYPE = "MYSQL"; - - private static final String H2_DB_TYPE = "H2"; - - @Autowired - private EntityManager entityManager; - - @Autowired - private TenantAware tenantAware; +public interface ReportManagement { /** * Generates a report of all targets of their current update status count. @@ -92,29 +39,8 @@ public class ReportManagement { * @return a data report series which contains the target count for each * target update status */ - @Cacheable("targetStatus") - public DataReportSeries targetStatus() { - - final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - final CriteriaQuery query = cb.createQuery(Object[].class); - final Root targetRoot = query.from(Target.class); - final Join targetInfo = targetRoot.join(Target_.targetInfo); - final Expression countColumn = cb.count(targetInfo.get(TargetInfo_.targetId)); - final CriteriaQuery multiselect = query - .multiselect(targetInfo.get(TargetInfo_.updateStatus), countColumn) - .groupBy(targetInfo.get(TargetInfo_.updateStatus)) - .orderBy(cb.desc(targetInfo.get(TargetInfo_.updateStatus))); - - // | col1 | col2 | - // | U_STATUS | COUNT | - final List resultList = entityManager.createQuery(multiselect).getResultList(); - - final List> reportSeriesItems = resultList.stream() - .map(r -> new DataReportSeriesItem((TargetUpdateStatus) r[0], (Long) r[1])) - .collect(Collectors.toList()); - - return new DataReportSeries<>("Target Status Overview", reportSeriesItems); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DataReportSeries targetStatus(); /** * Generates a report of the top x distribution set assigned usage as a list @@ -132,29 +58,8 @@ public class ReportManagement { * set entries are summarized as "misc" * @return a list of inner and outer series of distribution set usage */ - @Cacheable("distributionUsageAssigned") - public List> distributionUsageAssigned(final int topXEntries) { - - // top X entries distribution usage - final CriteriaBuilder cbTopX = entityManager.getCriteriaBuilder(); - final CriteriaQuery queryTopX = cbTopX.createQuery(Object[].class); - final Root rootTopX = queryTopX.from(DistributionSet.class); - final ListJoin joinTopX = rootTopX.join(DistributionSet_.assignedToTargets, - JoinType.LEFT); - final Expression countColumn = cbTopX.count(joinTopX); - // top x usage query - final CriteriaQuery groupBy = queryTopX - .multiselect(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version), countColumn) - .where(cbTopX.equal(rootTopX.get(DistributionSet_.deleted), false)) - .groupBy(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version)) - .orderBy(cbTopX.desc(countColumn), cbTopX.asc(rootTopX.get(DistributionSet_.name))); - // | col1 | col2 | col3 | - // | NAME | VER | COUNT | - final List resultListTop = entityManager.createQuery(groupBy).getResultList(); - // end of top X entries distribution usage - - return mapDistirbutionUsageResultToDataReport(topXEntries, resultListTop); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + List> distributionUsageAssigned(int topXEntries); /** * Generates a report of the top x distribution set installed usage as a @@ -173,28 +78,8 @@ public class ReportManagement { * set entries are summarized as "misc" * @return a list of inner and outer series of distribution set usage */ - @Cacheable("distributionUsageInstalled") - public List> distributionUsageInstalled(final int topXEntries) { - // top X entries distribution usage - final CriteriaBuilder cbTopX = entityManager.getCriteriaBuilder(); - final CriteriaQuery queryTopX = cbTopX.createQuery(Object[].class); - final Root rootTopX = queryTopX.from(DistributionSet.class); - final ListJoin joinTopX = rootTopX.join(DistributionSet_.installedAtTargets, - JoinType.LEFT); - final Expression countColumn = cbTopX.count(joinTopX); - // top x usage query - final CriteriaQuery groupBy = queryTopX - .multiselect(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version), countColumn) - .where(cbTopX.equal(rootTopX.get(DistributionSet_.deleted), false)) - .groupBy(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version)) - .orderBy(cbTopX.desc(countColumn), cbTopX.asc(rootTopX.get(DistributionSet_.name))); - // | col1 | col2 | col3 | - // | NAME | VER | COUNT | - final List resultListTop = entityManager.createQuery(groupBy).getResultList(); - // end of top X entries distribution usage - - return mapDistirbutionUsageResultToDataReport(topXEntries, resultListTop); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + List> distributionUsageInstalled(int topXEntries); /** * Generates report for target created over period. @@ -208,55 +93,9 @@ public class ReportManagement { * @return DataReportSeries ListReportSeries list of target created * count */ - @Cacheable("targetsCreatedOverPeriod") - public DataReportSeries targetsCreatedOverPeriod(final DateType dateType, - final LocalDateTime from, final LocalDateTime to) { - final Query createNativeQuery = entityManager - .createNativeQuery(getTargetsCreatedQueryTemplate(dateType, from, to)); - final List resultList = createNativeQuery.getResultList(); - - final List> reportItems = resultList.stream() - .map(r -> new DataReportSeriesItem<>(dateType.format((String) r[0]), ((Number) r[1]).longValue())) - .collect(Collectors.toList()); - - return new DataReportSeries<>("CreatedTargets", reportItems); - } - - private String getTargetsCreatedQueryTemplate(final DateType dateType, final LocalDateTime from, - final LocalDateTime to) { - switch (databaseType) { - case H2_DB_TYPE: - return String.format(H2_TARGET_CREATED_SQL_TEMPLATE, dateTimeFormatToSqlFormat(dateType), - dateTimeFormatToSqlFormat(dateType), from.format(DATE_FORMAT), dateTimeFormatToSqlFormat(dateType), - to.format(DATE_FORMAT), dateTimeFormatToSqlFormat(dateType), tenantAware.getCurrentTenant(), - dateTimeFormatToSqlFormat(dateType)); - case MYSQL_DB_TYPE: - return String.format(MYSQL_TARGET_CREATED_SQL_TEMPLATE, dateTimeFormatToSqlFormat(dateType), - dateTimeFormatToSqlFormat(dateType), from.toString(), dateTimeFormatToSqlFormat(dateType), - to.toString(), dateTimeFormatToSqlFormat(dateType), tenantAware.getCurrentTenant(), - dateTimeFormatToSqlFormat(dateType)); - default: - return null; - } - } - - private String getFeedbackReceivedQueryTemplate(final DateType dateType, final LocalDateTime from, - final LocalDateTime to) { - switch (databaseType) { - case H2_DB_TYPE: - return String.format(H2_CONTROLLER_FRRDBACK_SQL_TEMPLATE, dateTimeFormatToSqlFormat(dateType), - dateTimeFormatToSqlFormat(dateType), from.format(DATE_FORMAT), dateTimeFormatToSqlFormat(dateType), - to.format(DATE_FORMAT), dateTimeFormatToSqlFormat(dateType), tenantAware.getCurrentTenant(), - dateTimeFormatToSqlFormat(dateType)); - case MYSQL_DB_TYPE: - return String.format(MYSQL_CONTROLLER_FRRDBACK_SQL_TEMPLATE, dateTimeFormatToSqlFormat(dateType), - dateTimeFormatToSqlFormat(dateType), from.toString(), dateTimeFormatToSqlFormat(dateType), - to.toString(), dateTimeFormatToSqlFormat(dateType), tenantAware.getCurrentTenant(), - dateTimeFormatToSqlFormat(dateType)); - default: - return null; - } - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DataReportSeries targetsCreatedOverPeriod(@NotNull DateType dateType, + @NotNull LocalDateTime from, @NotNull LocalDateTime to); /** * Generates report for feedback over period. @@ -270,19 +109,9 @@ public class ReportManagement { * @return DataReportSeries ListReportSeries list of action status * count */ - @Cacheable("feedbackReceivedOverTime") - public DataReportSeries feedbackReceivedOverTime(final DateType dateType, - final LocalDateTime from, final LocalDateTime to) { - final Query createNativeQuery = entityManager - .createNativeQuery(getFeedbackReceivedQueryTemplate(dateType, from, to)); - final List resultList = createNativeQuery.getResultList(); - - final List> reportItems = resultList.stream() - .map(r -> new DataReportSeriesItem<>(dateType.format((String) r[0]), ((Number) r[1]).longValue())) - .collect(Collectors.toList()); - - return new DataReportSeries<>("FeedbackRecieved", reportItems); - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DataReportSeries feedbackReceivedOverTime(@NotNull DateType dateType, + @NotNull LocalDateTime from, @NotNull LocalDateTime to); /** * Generates a report as a {@link ListReportSeries} targets polled based on @@ -297,212 +126,8 @@ public class ReportManagement { * than a year, never. * */ - @Cacheable("targetsLastPoll") - public DataReportSeries targetsLastPoll() { - - final LocalDateTime now = LocalDateTime.now(); - final LocalDateTime beforeHour = now.minusHours(1); - final LocalDateTime beforeDay = now.minusDays(1); - final LocalDateTime beforeWeek = now.minusWeeks(1); - final LocalDateTime beforeMonth = now.minusMonths(1); - final LocalDateTime beforeYear = now.minusYears(1); - - final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - final List> resultList = new ArrayList<>(); - - // hours - resultList.add(new DataReportSeriesItem(SeriesTime.HOUR, - entityManager.createQuery(createCountSelectTargetsLastPoll(cb, beforeHour, now)).getSingleResult())); - // days - resultList.add(new DataReportSeriesItem(SeriesTime.DAY, entityManager - .createQuery(createCountSelectTargetsLastPoll(cb, beforeDay, beforeHour)).getSingleResult())); - // weeks - resultList.add(new DataReportSeriesItem(SeriesTime.WEEK, entityManager - .createQuery(createCountSelectTargetsLastPoll(cb, beforeWeek, beforeDay)).getSingleResult())); - // months - resultList.add(new DataReportSeriesItem(SeriesTime.MONTH, entityManager - .createQuery(createCountSelectTargetsLastPoll(cb, beforeMonth, beforeWeek)).getSingleResult())); - // years - resultList.add(new DataReportSeriesItem(SeriesTime.YEAR, entityManager - .createQuery(createCountSelectTargetsLastPoll(cb, beforeYear, beforeMonth)).getSingleResult())); - // years - resultList.add(new DataReportSeriesItem(SeriesTime.MORE_THAN_YEAR, - entityManager.createQuery(createCountSelectTargetsLastPoll(cb, null, beforeYear)).getSingleResult())); - // never - resultList.add(new DataReportSeriesItem(SeriesTime.NEVER, - entityManager.createQuery(createCountSelectTargetsLastPoll(cb, null, null)).getSingleResult())); - - return new DataReportSeries<>("TargetLastPoll", resultList); - } - - private CriteriaQuery createCountSelectTargetsLastPoll(final CriteriaBuilder cb, final LocalDateTime from, - final LocalDateTime to) { - - Long start = null; - Long end = null; - if (from != null) { - start = from.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); - } - if (to != null) { - end = to.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); - } - - // count select statement - final CriteriaQuery countSelect = cb.createQuery(Long.class); - final Root countSelectRoot = countSelect.from(Target.class); - final Join targetInfoJoin = countSelectRoot.join(Target_.targetInfo); - countSelect.select(cb.count(countSelectRoot)); - if (start != null && end != null) { - countSelect.where(cb.between(targetInfoJoin.get(TargetInfo_.lastTargetQuery), start, end)); - } else if (from == null && to != null) { - countSelect.where(cb.lessThanOrEqualTo(targetInfoJoin.get(TargetInfo_.lastTargetQuery), end)); - } else { - countSelect.where(cb.isNull(targetInfoJoin.get(TargetInfo_.lastTargetQuery))); - } - return countSelect; - } - - private List> mapDistirbutionUsageResultToDataReport(final int topXEntries, - final List resultListTop) { - final List> innerOuterReport = new ArrayList<>(); - final Map map = new LinkedHashMap<>(); - - int topXCounter = 0; - - for (final Object[] objects : resultListTop) { - - final boolean containsInnerOuter = map.containsKey(new DSName((String) objects[0])); - final String name = containsInnerOuter || topXCounter < topXEntries ? (String) objects[0] : null; - final DSName dsName = new DSName(name); - final String version = containsInnerOuter || topXCounter < topXEntries ? (String) objects[1] : null; - final Long count = (Long) objects[2]; - - InnerOuter innerouter = map.get(dsName); - if (innerouter == null) { - topXCounter++; - innerouter = new InnerOuter(dsName); - map.put(new DSName(name), innerouter); - } - innerouter.addOuter(new DSName(version), count); - } - - for (final InnerOuter inner : map.values()) { - final List> outerReportItems = new ArrayList<>(); - - if (inner.name.getName() != null) { - for (final InnerOuter outer : inner.outer) { - outerReportItems.add(outer.toItem()); - } - } else { - outerReportItems.add(new DataReportSeriesItem("misc", inner.count)); - } - - innerOuterReport.add(new InnerOuterDataReportSeries( - new DataReportSeries<>("DS-Name", Collections.singletonList(inner.toItem())), - new DataReportSeries<>("DS-Version", outerReportItems))); - } - - return innerOuterReport; - } - - private static final class InnerOuter { - final DSName name; - long count; - final List outer; - - private InnerOuter(final DSName idName) { - name = idName; - outer = new ArrayList<>(); - } - - private InnerOuter(final DSName idName, final long count) { - name = idName; - this.count = count; - outer = new ArrayList<>(); - } - - private void addOuter(final DSName idName, final long count) { - outer.add(new InnerOuter(idName, count)); - this.count += count; - } - - private DataReportSeriesItem toItem() { - return new DataReportSeriesItem<>(name.getName() != null ? name.getName() : "misc", count); - } - } - - /** - * Object contains the name and the id of an entity. - * - */ - private static final class DSName { - - private final String name; - - /** - * @param id - * the ID of an entity - * @param name - * the name of an entity - */ - private DSName(final String name) { - this.name = name; - } - - /** - * @return the name - */ - private String getName() { - return name; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (name == null ? 0 : name.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { // NOSONAR - as this is - // generated - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final DSName other = (DSName) obj; - if (name == null) { - if (other.name != null) { - return false; - } - } else if (!name.equals(other.name)) { - return false; - } - return true; - } - - @Override - public String toString() { - return "DSName [name=" + name + "]"; - } - } - - private String dateTimeFormatToSqlFormat(final DateType datatype) { - switch (databaseType) { - case H2_DB_TYPE: - return datatype.h2Format(); - case MYSQL_DB_TYPE: - return datatype.mySqlFormat(); - default: - return null; - } - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DataReportSeries targetsLastPoll(); /** * Return DateTypes. @@ -580,4 +205,5 @@ public class ReportManagement { } } -} + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index d204154d0..7c5503c19 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -8,65 +8,20 @@ */ package org.eclipse.hawkbit.repository; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Join; -import javax.persistence.criteria.JoinType; -import javax.persistence.criteria.ListJoin; -import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; -import org.eclipse.hawkbit.repository.model.Action; -import org.eclipse.hawkbit.repository.model.Action_; import org.eclipse.hawkbit.repository.model.Rollout; -import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup_; -import org.eclipse.hawkbit.repository.model.RolloutTargetGroup; -import org.eclipse.hawkbit.repository.model.RolloutTargetGroup_; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetWithActionStatus; -import org.eclipse.hawkbit.repository.model.Target_; -import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; -import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; -/** - * RolloutGroupManagement to control rollout groups. This service secures all - * the functionality based on the {@link PreAuthorize} annotation on methods. - */ -@Validated -@Service -@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public class RolloutGroupManagement { - - @Autowired - private RolloutGroupRepository rolloutGroupRepository; - - @Autowired - private ActionRepository actionRepository; - - @Autowired - private TargetRepository targetRepository; - - @Autowired - private EntityManager entityManager; +public interface RolloutGroupManagement { /** * Retrieves a single {@link RolloutGroup} by its ID. @@ -77,9 +32,7 @@ public class RolloutGroupManagement { * does not exists */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public RolloutGroup findRolloutGroupById(final Long rolloutGroupId) { - return rolloutGroupRepository.findOne(rolloutGroupId); - } + RolloutGroup findRolloutGroupById(@NotNull Long rolloutGroupId); /** * Retrieves a page of {@link RolloutGroup}s filtered by a given @@ -92,9 +45,7 @@ public class RolloutGroupManagement { * @return a page of found {@link RolloutGroup}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Page findRolloutGroupsByRolloutId(final Long rolloutId, final Pageable page) { - return rolloutGroupRepository.findByRolloutId(rolloutId, page); - } + Page findRolloutGroupsByRolloutId(@NotNull Long rolloutId, @NotNull Pageable page); /** * Retrieves a page of {@link RolloutGroup}s filtered by a given @@ -110,12 +61,8 @@ public class RolloutGroupManagement { * @return a page of found {@link RolloutGroup}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Page findRolloutGroupsByPredicate(final Rollout rollout, - final Specification specification, final Pageable page) { - return rolloutGroupRepository.findAll((root, query, criteriaBuilder) -> criteriaBuilder.and( - criteriaBuilder.equal(root.get(RolloutGroup_.rollout), rollout), - specification.toPredicate(root, query, criteriaBuilder)), page); - } + Page findRolloutGroupsAll(@NotNull Rollout rollout, + @NotNull Specification specification, @NotNull Pageable page); /** * Retrieves a page of {@link RolloutGroup}s filtered by a given @@ -128,21 +75,7 @@ public class RolloutGroupManagement { * @return a page of found {@link RolloutGroup}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Page findAllRolloutGroupsWithDetailedStatus(final Long rolloutId, final Pageable page) { - final Page rolloutGroups = rolloutGroupRepository.findByRolloutId(rolloutId, page); - final List rolloutGroupIds = rolloutGroups.getContent().stream().map(rollout -> rollout.getId()) - .collect(Collectors.toList()); - final Map> allStatesForRollout = getStatusCountItemForRolloutGroup( - rolloutGroupIds); - - for (final RolloutGroup rolloutGroup : rolloutGroups) { - final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus( - allStatesForRollout.get(rolloutGroup.getId()), rolloutGroup.getTotalTargets()); - rolloutGroup.setTotalTargetCountStatus(totalTargetCountStatus); - } - - return rolloutGroups; - } + Page findAllRolloutGroupsWithDetailedStatus(@NotNull Long rolloutId, @NotNull Pageable page); /** * Get count of targets in different status in rollout group. @@ -152,25 +85,9 @@ public class RolloutGroupManagement { * @return rolloutGroup with details of targets count for different statuses */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public RolloutGroup findRolloutGroupWithDetailedStatus(final Long rolloutGroupId) { - final RolloutGroup rolloutGroup = findRolloutGroupById(rolloutGroupId); - final List rolloutStatusCountItems = actionRepository - .getStatusCountByRolloutGroupId(rolloutGroupId); - - final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus(rolloutStatusCountItems, - rolloutGroup.getTotalTargets()); - rolloutGroup.setTotalTargetCountStatus(totalTargetCountStatus); - return rolloutGroup; - - } - - private Map> getStatusCountItemForRolloutGroup( - final List rolloutGroupIds) { - final List resultList = actionRepository - .getStatusCountByRolloutGroupId(rolloutGroupIds); - return resultList.stream().collect(Collectors.groupingBy(TotalTargetCountActionStatus::getId)); - } + RolloutGroup findRolloutGroupWithDetailedStatus(@NotNull Long rolloutGroupId); + // TODO discuss: target read perm missing? /** * Get targets of specified rollout group. * @@ -184,15 +101,10 @@ public class RolloutGroupManagement { * @return Page list of targets of a rollout group */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Page findRolloutGroupTargets(final RolloutGroup rolloutGroup, - final Specification specification, final Pageable page) { - return targetRepository.findAll((root, query, criteriaBuilder) -> { - final ListJoin rolloutTargetJoin = root.join(Target_.rolloutTargetGroup); - return criteriaBuilder.and(specification.toPredicate(root, query, criteriaBuilder), - criteriaBuilder.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); - }, page); - } + Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, + @NotNull Specification specification, @NotNull Pageable page); + // TODO discuss: target read perm missing? /** * Get targets of specified rollout group. * @@ -204,20 +116,9 @@ public class RolloutGroupManagement { * @return Page list of targets of a rollout group */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Page findRolloutGroupTargets(@NotNull final RolloutGroup rolloutGroup, final Pageable page) { - if (isRolloutStatusReady(rolloutGroup)) { - // in case of status ready the action has not been created yet and - // the relation information between target and rollout-group is - // stored in the #TargetRolloutGroup. - return targetRepository.findByRolloutTargetGroupRolloutGroupId(rolloutGroup.getId(), page); - } - return targetRepository.findByActionsRolloutGroup(rolloutGroup, page); - } - - private static boolean isRolloutStatusReady(final RolloutGroup rolloutGroup) { - return rolloutGroup != null && RolloutStatus.READY.equals(rolloutGroup.getRollout().getStatus()); - } + Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, @NotNull Pageable page); + // TODO discuss: target read perm missing? /** * * Find all targets with action status by rollout group id. The action @@ -233,31 +134,7 @@ public class RolloutGroupManagement { * @return {@link TargetWithActionStatus} target with action status */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Page findAllTargetsWithActionStatus(final PageRequest pageRequest, - @NotNull final RolloutGroup rolloutGroup) { + Page findAllTargetsWithActionStatus(@NotNull PageRequest pageRequest, + @NotNull RolloutGroup rolloutGroup); - final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - final CriteriaQuery query = cb.createQuery(Object[].class); - final CriteriaQuery countQuery = cb.createQuery(Long.class); - - final Root targetRoot = query.distinct(true).from(RolloutTargetGroup.class); - final Join targetJoin = targetRoot.join(RolloutTargetGroup_.target); - final ListJoin actionJoin = targetRoot.join(RolloutTargetGroup_.actions, - JoinType.LEFT); - - final Root countQueryFrom = countQuery.distinct(true).from(RolloutTargetGroup.class); - countQueryFrom.join(RolloutTargetGroup_.target); - countQueryFrom.join(RolloutTargetGroup_.actions, JoinType.LEFT); - countQuery.select(cb.count(countQueryFrom)) - .where(cb.equal(countQueryFrom.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); - final Long totalCount = entityManager.createQuery(countQuery).getSingleResult(); - - final CriteriaQuery multiselect = query.multiselect(targetJoin, actionJoin.get(Action_.status)) - .where(cb.equal(targetRoot.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); - final List targetWithActionStatus = entityManager.createQuery(multiselect) - .setFirstResult(pageRequest.getOffset()).setMaxResults(pageRequest.getPageSize()).getResultList() - .stream().map(o -> new TargetWithActionStatus((Target) o[0], (Action.Status) o[1])) - .collect(Collectors.toList()); - return new PageImpl<>(targetWithActionStatus, pageRequest, totalCount); - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index 09decfc03..bf4924692 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -8,131 +8,29 @@ */ package org.eclipse.hawkbit.repository; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executor; -import java.util.stream.Collectors; - -import javax.persistence.EntityManager; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.cache.CacheWriteNotify; import org.eclipse.hawkbit.eventbus.event.RolloutGroupCreatedEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; -import org.eclipse.hawkbit.repository.model.Action; -import org.eclipse.hawkbit.repository.model.Action.ActionType; -import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; -import org.eclipse.hawkbit.repository.model.RolloutTargetGroup; -import org.eclipse.hawkbit.repository.model.Rollout_; -import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; -import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.rollout.condition.RolloutGroupActionEvaluator; -import org.eclipse.hawkbit.rollout.condition.RolloutGroupConditionEvaluator; import org.hibernate.validator.constraints.NotEmpty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.context.ApplicationContext; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import org.springframework.data.domain.Sort; -import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.support.DefaultTransactionDefinition; -import org.springframework.transaction.support.TransactionTemplate; -import org.springframework.util.Assert; -import org.springframework.validation.annotation.Validated; /** * RolloutManagement to control rollouts e.g. like creating, starting, resuming * and pausing rollouts. This service secures all the functionality based on the * {@link PreAuthorize} annotation on methods. */ -@Validated -@Service -@EnableScheduling -@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public class RolloutManagement { - private static final Logger LOGGER = LoggerFactory.getLogger(RolloutManagement.class); - - @Autowired - private EntityManager entityManager; - - @Autowired - private RolloutRepository rolloutRepository; - - @Autowired - private TargetManagement targetManagement; - - @Autowired - private TargetRepository targetRepository; - - @Autowired - private RolloutGroupRepository rolloutGroupRepository; - - @Autowired - private DeploymentManagement deploymentManagement; - - @Autowired - private RolloutTargetGroupRepository rolloutTargetGroupRepository; - - @Autowired - private ActionRepository actionRepository; - - @Autowired - private ApplicationContext context; - - @Autowired - private NoCountPagingRepository criteriaNoCountDao; - - @Autowired - private PlatformTransactionManager txManager; - - @Autowired - private CacheWriteNotify cacheWriteNotify; - - @Autowired - @Qualifier("asyncExecutor") - private Executor executor; - - /* - * set which stores the rollouts which are asynchronously creating. This is - * necessary to verify rollouts which maybe stuck during creationg e.g. - * because of database interruption, failures or even application crash. - * !This is not cluster aware! - */ - private static final Set creatingRollouts = ConcurrentHashMap.newKeySet(); - - /* - * set which stores the rollouts which are asynchronously starting. This is - * necessary to verify rollouts which maybe stuck during starting e.g. - * because of database interruption, failures or even application crash. - * !This is not cluster aware! - */ - private static final Set startingRollouts = ConcurrentHashMap.newKeySet(); +public interface RolloutManagement { /** * Retrieves all rollouts. @@ -142,9 +40,7 @@ public class RolloutManagement { * @return a page of found rollouts */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Page findAll(final Pageable page) { - return rolloutRepository.findAll(page); - } + Page findAll(@NotNull Pageable page); /** * Retrieves all rollouts found by the given specification. @@ -156,12 +52,8 @@ public class RolloutManagement { * @return a page of found rollouts */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Page findAllWithDetailedStatusByPredicate(final Specification specification, - final Pageable page) { - final Page findAll = rolloutRepository.findAll(specification, page); - setRolloutStatusDetails(findAll); - return findAll; - } + Page findAllWithDetailedStatusByPredicate(@NotNull Specification specification, + @NotNull Pageable page); /** * Retrieves a specific rollout by its ID. @@ -172,9 +64,7 @@ public class RolloutManagement { * not exists */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Rollout findRolloutById(final Long rolloutId) { - return rolloutRepository.findOne(rolloutId); - } + Rollout findRolloutById(@NotNull Long rolloutId); /** * Persists a new rollout entity. The filter within the @@ -201,14 +91,8 @@ public class RolloutManagement { * @throws IllegalArgumentException * in case the given groupSize is zero or lower. */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) - public Rollout createRollout(final Rollout rollout, final int amountGroup, - final RolloutGroupConditions conditions) { - final Rollout savedRollout = createRollout(rollout, amountGroup); - return createRolloutGroups(amountGroup, conditions, savedRollout); - } + Rollout createRollout(@NotNull Rollout rollout, int amountGroup, @NotNull RolloutGroupConditions conditions); /** * Persists a new rollout entity. The filter within the @@ -244,116 +128,8 @@ public class RolloutManagement { * @return the created rollout entity in state * {@link RolloutStatus#CREATING} */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) - public Rollout createRolloutAsync(final Rollout rollout, final int amountGroup, - final RolloutGroupConditions conditions) { - final Rollout savedRollout = createRollout(rollout, amountGroup); - creatingRollouts.add(savedRollout.getName()); - // need to flush the entity manager here to get the ID of the rollout, - // because entity manager is set to FlushMode#Auto, entitymanager will - // flush the Target entity, due the indirect relationship to the Rollout - // entity without set an ID JPA is throwing a Invalid - // 'org.springframework.dao.InvalidDataAccessApiUsageException: During - // synchronization aect was found through a relationship that was not - // marked cascade PERSIST' - entityManager.flush(); - executor.execute(() -> { - try { - createRolloutGroupsInNewTransaction(amountGroup, conditions, savedRollout); - } finally { - creatingRollouts.remove(savedRollout.getName()); - } - }); - return savedRollout; - } - - private Rollout createRollout(final Rollout rollout, final int amountGroup) { - verifyRolloutGroupParameter(amountGroup); - final Long totalTargets = targetManagement.countTargetByTargetFilterQuery(rollout.getTargetFilterQuery()); - rollout.setTotalTargets(totalTargets.longValue()); - return rolloutRepository.save(rollout); - } - - private static void verifyRolloutGroupParameter(final int amountGroup) { - if (amountGroup <= 0) { - throw new IllegalArgumentException("the amountGroup must be greater than zero"); - } else if (amountGroup > 500) { - throw new IllegalArgumentException("the amountGroup must not be greater than 500"); - } - } - - private Rollout createRolloutGroupsInNewTransaction(final int amountOfGroups, - final RolloutGroupConditions conditions, final Rollout savedRollout) { - final DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setName("creatingRollout"); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); - return new TransactionTemplate(txManager, def) - .execute(status -> createRolloutGroups(amountOfGroups, conditions, savedRollout)); - } - - /** - * Method for creating rollout groups and calculating group sizes. Group - * sizes are calculated by dividing the total count of targets through the - * amount of given groups. In same cases this will lead to less rollout - * groups than given by client. - * - * @param amountOfGroups - * the amount of groups - * @param conditions - * the rollout group conditions - * @param savedRollout - * the rollout - * @return the rollout with created groups - */ - private Rollout createRolloutGroups(final int amountOfGroups, final RolloutGroupConditions conditions, - final Rollout savedRollout) { - int pageIndex = 0; - int groupIndex = 0; - final Long totalCount = savedRollout.getTotalTargets(); - final int groupSize = (int) Math.ceil((double) totalCount / (double) amountOfGroups); - // validate if the amount of groups that will be created are the amount - // of groups that the client what's to have created. - int amountGroupValidated = amountOfGroups; - final int amountGroupCreation = (int) (Math.ceil((double) totalCount / (double) groupSize)); - if (amountGroupCreation == (amountOfGroups - 1)) { - amountGroupValidated--; - } - RolloutGroup lastSavedGroup = null; - while (pageIndex < totalCount) { - groupIndex++; - final String nameAndDesc = "group-" + groupIndex; - final RolloutGroup group = new RolloutGroup(); - group.setName(nameAndDesc); - group.setDescription(nameAndDesc); - group.setRollout(savedRollout); - group.setParent(lastSavedGroup); - group.setSuccessCondition(conditions.getSuccessCondition()); - group.setSuccessConditionExp(conditions.getSuccessConditionExp()); - group.setErrorCondition(conditions.getErrorCondition()); - group.setErrorConditionExp(conditions.getErrorConditionExp()); - group.setErrorAction(conditions.getErrorAction()); - group.setErrorActionExp(conditions.getErrorActionExp()); - - final RolloutGroup savedGroup = rolloutGroupRepository.save(group); - - final Slice targetGroup = targetManagement.findTargetsAll(savedRollout.getTargetFilterQuery(), - new OffsetBasedPageRequest(pageIndex, groupSize, new Sort(Direction.ASC, "id"))); - savedGroup.setTotalTargets(targetGroup.getContent().size()); - - lastSavedGroup = savedGroup; - - targetGroup - .forEach(target -> rolloutTargetGroupRepository.save(new RolloutTargetGroup(savedGroup, target))); - cacheWriteNotify.rolloutGroupCreated(groupIndex, savedRollout.getId(), savedGroup.getId(), - amountGroupValidated, groupIndex); - pageIndex += groupSize; - } - - savedRollout.setStatus(RolloutStatus.READY); - return rolloutRepository.save(savedRollout); - } + Rollout createRolloutAsync(@NotNull Rollout rollout, int amountGroup, @NotNull RolloutGroupConditions conditions); /** * Starts a rollout which has been created. The rollout must be in @@ -373,15 +149,9 @@ public class RolloutManagement { * if given rollout is not in {@link RolloutStatus#READY}. Only * ready rollouts can be started. */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - public Rollout startRollout(final Rollout rollout) { - final Rollout mergedRollout = entityManager.merge(rollout); - checkIfRolloutCanStarted(rollout, mergedRollout); - return doStartRollout(mergedRollout); - } + Rollout startRollout(@NotNull Rollout rollout); /** * Starts a rollout asynchronously which has been created. The rollout must @@ -402,61 +172,9 @@ public class RolloutManagement { * if given rollout is not in {@link RolloutStatus#READY}. Only * ready rollouts can be started. */ - @Transactional - @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - public Rollout startRolloutAsync(final Rollout rollout) { - final Rollout mergedRollout = entityManager.merge(rollout); - checkIfRolloutCanStarted(rollout, mergedRollout); - mergedRollout.setStatus(RolloutStatus.STARTING); - final Rollout updatedRollout = rolloutRepository.save(mergedRollout); - startingRollouts.add(updatedRollout.getName()); - executor.execute(() -> { - try { - final DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setName("startingRollout"); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); - new TransactionTemplate(txManager, def).execute(status -> { - doStartRollout(updatedRollout); - return null; - }); - } finally { - startingRollouts.remove(updatedRollout.getName()); - } - }); - return updatedRollout; - - } - - private Rollout doStartRollout(final Rollout rollout) { - final DistributionSet distributionSet = rollout.getDistributionSet(); - final ActionType actionType = rollout.getActionType(); - final long forceTime = rollout.getForcedTime(); - final List rolloutGroups = rolloutGroupRepository.findByRolloutOrderByIdAsc(rollout); - for (int iGroup = 0; iGroup < rolloutGroups.size(); iGroup++) { - final RolloutGroup rolloutGroup = rolloutGroups.get(iGroup); - final List targetGroup = targetRepository.findByRolloutTargetGroupRolloutGroup(rolloutGroup); - // firstgroup can already be started - if (iGroup == 0) { - final List targetsWithActionType = targetGroup.stream() - .map(t -> new TargetWithActionType(t.getControllerId(), actionType, forceTime)) - .collect(Collectors.toList()); - deploymentManagement.assignDistributionSet(distributionSet.getId(), targetsWithActionType, rollout, - rolloutGroup); - rolloutGroup.setStatus(RolloutGroupStatus.RUNNING); - } else { - // create only not active actions with status scheduled so they - // can be activated later - deploymentManagement.createScheduledAction(targetGroup, distributionSet, actionType, forceTime, rollout, - rolloutGroup); - rolloutGroup.setStatus(RolloutGroupStatus.SCHEDULED); - } - rolloutGroupRepository.save(rolloutGroup); - } - rollout.setStatus(RolloutStatus.RUNNING); - return rolloutRepository.save(rollout); - } + Rollout startRolloutAsync(@NotNull Rollout rollout); /** * Pauses a rollout which is currently running. The Rollout switches @@ -477,24 +195,9 @@ public class RolloutManagement { * if given rollout is not in {@link RolloutStatus#RUNNING}. * Only running rollouts can be paused. */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - public void pauseRollout(final Rollout rollout) { - final Rollout mergedRollout = entityManager.merge(rollout); - if (mergedRollout.getStatus() != RolloutStatus.RUNNING) { - throw new RolloutIllegalStateException("Rollout can only be paused in state running but current state is " - + rollout.getStatus().name().toLowerCase()); - } - // setting the complete rollout only in paused state. This is sufficient - // due the currently running groups will be completed and new groups are - // not started until rollout goes back to running state again. The - // periodically check for running rollouts will skip rollouts in pause - // state. - mergedRollout.setStatus(RolloutStatus.PAUSED); - rolloutRepository.save(mergedRollout); - } + void pauseRollout(@NotNull Rollout rollout); /** * Resumes a paused rollout. The rollout switches back to @@ -507,19 +210,9 @@ public class RolloutManagement { * if given rollout is not in {@link RolloutStatus#PAUSED}. Only * paused rollouts can be resumed. */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - public void resumeRollout(final Rollout rollout) { - final Rollout mergedRollout = entityManager.merge(rollout); - if (!(RolloutStatus.PAUSED.equals(mergedRollout.getStatus()))) { - throw new RolloutIllegalStateException("Rollout can only be resumed in state paused but current state is " - + rollout.getStatus().name().toLowerCase()); - } - mergedRollout.setStatus(RolloutStatus.RUNNING); - rolloutRepository.save(mergedRollout); - } + void resumeRollout(@NotNull Rollout rollout); /** * Checking running rollouts. Rollouts which are checked updating the @@ -549,211 +242,30 @@ public class RolloutManagement { * this check. This check is only applied if the last check is * less than (lastcheck-delay). */ - @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED) - @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - public void checkRunningRollouts(final long delayBetweenChecks) { - verifyStuckedRollouts(); - final long lastCheck = System.currentTimeMillis(); - final int updated = rolloutRepository.updateLastCheck(lastCheck, delayBetweenChecks, RolloutStatus.RUNNING); - - if (updated == 0) { - // nothing to check, maybe another instance already checked in - // between - LOGGER.debug("No rolloutcheck necessary for current scheduled check {}, next check at {}", lastCheck, - lastCheck + delayBetweenChecks); - return; - } - - final List rolloutsToCheck = rolloutRepository.findByLastCheckAndStatus(lastCheck, - RolloutStatus.RUNNING); - LOGGER.info("Found {} running rollouts to check", rolloutsToCheck.size()); - - for (final Rollout rollout : rolloutsToCheck) { - LOGGER.debug("Checking rollout {}", rollout); - final List rolloutGroups = rolloutGroupRepository.findByRolloutAndStatus(rollout, - RolloutGroupStatus.RUNNING); - - if (rolloutGroups.isEmpty()) { - // no running rollouts, probably there was an error - // somewhere at the latest group. And the latest group has - // been switched from running into error state. So we need - // to find the latest group which - executeLatestRolloutGroup(rollout); - } else { - LOGGER.debug("Rollout {} has {} running groups", rollout.getId(), rolloutGroups.size()); - executeRolloutGroups(rollout, rolloutGroups); - } - - if (isRolloutComplete(rollout)) { - LOGGER.info("Rollout {} is finished, setting finished status", rollout); - rollout.setStatus(RolloutStatus.FINISHED); - rolloutRepository.save(rollout); - } - } - } + void checkRunningRollouts(long delayBetweenChecks); /** - * Verifies and handles stucked rollouts in asynchronous creation or - * starting state. If rollouts are created or started asynchronously it - * might be that they keep in state {@link RolloutStatus#CREATING} or - * {@link RolloutStatus#STARTING} due database or application interruption. - * In case this happens, set the rollout to error state. - */ - private void verifyStuckedRollouts() { - final List rolloutsInCreatingState = rolloutRepository.findByStatus(RolloutStatus.CREATING); - rolloutsInCreatingState.stream().filter(rollout -> !creatingRollouts.contains(rollout.getName())) - .forEach(rollout -> { - LOGGER.warn( - "Determined error during rollout creation of rollout {}, stucking in creating state, setting to status", - rollout, RolloutStatus.ERROR_CREATING); - rollout.setStatus(RolloutStatus.ERROR_CREATING); - rolloutRepository.save(rollout); - }); - - final List rolloutsInStartingState = rolloutRepository.findByStatus(RolloutStatus.STARTING); - rolloutsInStartingState.stream().filter(rollout -> !startingRollouts.contains(rollout.getName())) - .forEach(rollout -> { - LOGGER.warn( - "Determined error during rollout starting of rollout {}, stucking in starting state, setting to status", - rollout, RolloutStatus.ERROR_STARTING); - rollout.setStatus(RolloutStatus.ERROR_STARTING); - rolloutRepository.save(rollout); - }); - - } - - private void executeRolloutGroups(final Rollout rollout, final List rolloutGroups) { - for (final RolloutGroup rolloutGroup : rolloutGroups) { - // error state check, do we need to stop the whole - // rollout because of error? - final RolloutGroupErrorCondition errorCondition = rolloutGroup.getErrorCondition(); - final boolean isError = checkErrorState(rollout, rolloutGroup, errorCondition); - if (isError) { - LOGGER.info("Rollout {} {} has error, calling error action", rollout.getName(), rollout.getId()); - callErrorAction(rollout, rolloutGroup); - } else { - // not in error so check finished state, do we need to - // start the next group? - final RolloutGroupSuccessCondition finishedCondition = rolloutGroup.getSuccessCondition(); - checkFinishCondition(rollout, rolloutGroup, finishedCondition); - if (isRolloutGroupComplete(rollout, rolloutGroup)) { - rolloutGroup.setStatus(RolloutGroupStatus.FINISHED); - rolloutGroupRepository.save(rolloutGroup); - } - } - } - } - - private void executeLatestRolloutGroup(final Rollout rollout) { - final List latestRolloutGroup = rolloutGroupRepository - .findByRolloutAndStatusNotOrderByIdDesc(rollout, RolloutGroupStatus.SCHEDULED); - if (latestRolloutGroup.isEmpty()) { - return; - } - executeRolloutGroupSuccessAction(rollout, latestRolloutGroup.get(0)); - } - - private void callErrorAction(final Rollout rollout, final RolloutGroup rolloutGroup) { - try { - context.getBean(rolloutGroup.getErrorAction().getBeanName(), RolloutGroupActionEvaluator.class) - .eval(rollout, rolloutGroup, rolloutGroup.getErrorActionExp()); - } catch (final BeansException e) { - LOGGER.error("Something bad happend when accessing the error action bean {}", - rolloutGroup.getErrorAction().getBeanName(), e); - } - } - - private boolean isRolloutComplete(final Rollout rollout) { - final Long groupsActiveLeft = rolloutGroupRepository.countByRolloutAndStatusOrStatus(rollout, - RolloutGroupStatus.RUNNING, RolloutGroupStatus.SCHEDULED); - return groupsActiveLeft == 0; - } - - private boolean isRolloutGroupComplete(final Rollout rollout, final RolloutGroup rolloutGroup) { - final Long actionsLeftForRollout = actionRepository - .countByRolloutAndRolloutGroupAndStatusNotAndStatusNotAndStatusNot(rollout, rolloutGroup, - Action.Status.ERROR, Action.Status.FINISHED, Action.Status.CANCELED); - return actionsLeftForRollout == 0; - } - - private boolean checkErrorState(final Rollout rollout, final RolloutGroup rolloutGroup, - final RolloutGroupErrorCondition errorCondition) { - if (errorCondition == null) { - // there is no error condition, so return false, don't have error. - return false; - } - try { - return context.getBean(errorCondition.getBeanName(), RolloutGroupConditionEvaluator.class).eval(rollout, - rolloutGroup, rolloutGroup.getErrorConditionExp()); - } catch (final BeansException e) { - LOGGER.error("Something bad happend when accessing the error condition bean {}", - errorCondition.getBeanName(), e); - return false; - } - } - - private boolean checkFinishCondition(final Rollout rollout, final RolloutGroup rolloutGroup, - final RolloutGroupSuccessCondition finishCondition) { - LOGGER.trace("Checking finish condition {} on rolloutgroup {}", finishCondition, rolloutGroup); - try { - final boolean isFinished = context - .getBean(finishCondition.getBeanName(), RolloutGroupConditionEvaluator.class) - .eval(rollout, rolloutGroup, rolloutGroup.getSuccessConditionExp()); - if (isFinished) { - LOGGER.info("Rolloutgroup {} is finished, starting next group", rolloutGroup); - executeRolloutGroupSuccessAction(rollout, rolloutGroup); - } else { - LOGGER.debug("Rolloutgroup {} is still running", rolloutGroup); - } - return isFinished; - } catch (final BeansException e) { - LOGGER.error("Something bad happend when accessing the finish condition bean {}", - finishCondition.getBeanName(), e); - return false; - } - } - - private void executeRolloutGroupSuccessAction(final Rollout rollout, final RolloutGroup rolloutGroup) { - context.getBean(rolloutGroup.getSuccessAction().getBeanName(), RolloutGroupActionEvaluator.class).eval(rollout, - rolloutGroup, rolloutGroup.getSuccessActionExp()); - } - - /** - * Counts all {@link Target}s in the repository. + * Counts all {@link Rollout}s in the repository. * - * @return number of targets + * @return number of roll outs */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Long countRolloutsAll() { - return rolloutRepository.count(); - } + Long countRolloutsAll(); /** - * Count rollouts by specified filter text. + * Count rollouts by given text in name or description. * * @param searchText * name or description * @return total count rollouts for specified filter text. */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Long countRolloutsAllByFilters(final String searchText) { - return rolloutRepository.count(likeNameOrDescription(searchText)); - } - - private static Specification likeNameOrDescription(final String searchText) { - return (rolloutRoot, query, criteriaBuilder) -> { - final String searchTextToLower = searchText.toLowerCase(); - return criteriaBuilder.or( - criteriaBuilder.like(criteriaBuilder.lower(rolloutRoot.get(Rollout_.name)), searchTextToLower), - criteriaBuilder.like(criteriaBuilder.lower(rolloutRoot.get(Rollout_.description)), - searchTextToLower)); - }; - } + Long countRolloutsAllByFilters(@NotEmpty String searchText); /** - * * Retrieves a specific rollout by its ID. + * Finds rollouts by given text in name or description. * * @param pageable * the page request to sort and limit the result @@ -763,12 +275,7 @@ public class RolloutManagement { * not exists */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Slice findRolloutByFilters(final Pageable pageable, @NotEmpty final String searchText) { - final Specification specs = likeNameOrDescription(searchText); - final Slice findAll = criteriaNoCountDao.findAll(specs, pageable, Rollout.class); - setRolloutStatusDetails(findAll); - return findAll; - } + Slice findRolloutByFilters(@NotNull Pageable pageable, @NotEmpty String searchText); /** * Retrieves a specific rollout by its name. @@ -779,9 +286,7 @@ public class RolloutManagement { * does not exists */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Rollout findRolloutByName(final String rolloutName) { - return rolloutRepository.findByName(rolloutName); - } + Rollout findRolloutByName(@NotNull String rolloutName); /** * Update rollout details. @@ -791,14 +296,8 @@ public class RolloutManagement { * * @return Rollout updated rollout */ - @NotNull - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) - public Rollout updateRollout(@NotNull final Rollout rollout) { - Assert.notNull(rollout.getId()); - return rolloutRepository.save(rollout); - } + Rollout updateRollout(@NotNull Rollout rollout); /** * Get count of targets in different status in rollout. @@ -810,12 +309,7 @@ public class RolloutManagement { * */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Page findAllRolloutsWithDetailedStatus(final Pageable page) { - final Page rollouts = findAll(page); - setRolloutStatusDetails(rollouts); - return rollouts; - - } + Page findAllRolloutsWithDetailedStatus(@NotNull Pageable page); /** * Get count of targets in different status in rollout. @@ -826,40 +320,7 @@ public class RolloutManagement { * */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - public Rollout findRolloutWithDetailedStatus(final Long rolloutId) { - final Rollout rollout = findRolloutById(rolloutId); - final List rolloutStatusCountItems = actionRepository - .getStatusCountByRolloutId(rolloutId); - final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus(rolloutStatusCountItems, - rollout.getTotalTargets()); - rollout.setTotalTargetCountStatus(totalTargetCountStatus); - return rollout; - } - - private Map> getStatusCountItemForRollout(final List rolloutIds) { - final List resultList = actionRepository.getStatusCountByRolloutId(rolloutIds); - return resultList.stream().collect(Collectors.groupingBy(TotalTargetCountActionStatus::getId)); - } - - private void setRolloutStatusDetails(final Slice rollouts) { - final List rolloutIds = rollouts.getContent().stream().map(rollout -> rollout.getId()) - .collect(Collectors.toList()); - final Map> allStatesForRollout = getStatusCountItemForRollout( - rolloutIds); - - for (final Rollout rollout : rollouts) { - final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus( - allStatesForRollout.get(rollout.getId()), rollout.getTotalTargets()); - rollout.setTotalTargetCountStatus(totalTargetCountStatus); - } - } - - private static void checkIfRolloutCanStarted(final Rollout rollout, final Rollout mergedRollout) { - if (!(RolloutStatus.READY.equals(mergedRollout.getStatus()))) { - throw new RolloutIllegalStateException("Rollout can only be started in state ready but current state is " - + rollout.getStatus().name().toLowerCase()); - } - } + Rollout findRolloutWithDetailedStatus(@NotNull Long rolloutId); /*** * Get finished percentage details for a specified group which is in running @@ -871,16 +332,7 @@ public class RolloutManagement { * the ID of the {@link RolloutGroup} * @return percentage finished */ - public float getFinishedPercentForRunningGroup(final Long rolloutId, final RolloutGroup rolloutGroup) { - final Long totalGroup = rolloutGroup.getTotalTargets(); - final Long finished = actionRepository.countByRolloutIdAndRolloutGroupIdAndStatus(rolloutId, - rolloutGroup.getId(), Action.Status.FINISHED); - if (totalGroup == 0) { - // in case e.g. targets has been deleted we don't have any actions - // left for this group, so the group is finished - return 100; - } - // calculate threshold - return ((float) finished / (float) totalGroup) * 100; - } -} + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + float getFinishedPercentForRunningGroup(@NotNull Long rolloutId, @NotNull RolloutGroup rolloutGroup); + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java index 6671ad896..03ece28ee 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java index c292b39e3..10a88b232 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java @@ -1,11 +1,3 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; @@ -13,39 +5,11 @@ import org.eclipse.hawkbit.repository.model.TenantConfiguration; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.hawkbit.tenancy.configuration.validator.TenantConfigurationValidatorException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.context.ApplicationContext; -import org.springframework.context.EnvironmentAware; import org.springframework.core.convert.ConversionFailedException; -import org.springframework.core.convert.support.ConfigurableConversionService; -import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.env.Environment; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; -/** - * Central tenant configuration management operations of the SP server. - */ -@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -@Validated -@Service -public class TenantConfigurationManagement implements EnvironmentAware { - - @Autowired - private TenantConfigurationRepository tenantConfigurationRepository; - - @Autowired - private ApplicationContext applicationContext; - - private final ConfigurableConversionService conversionService = new DefaultConversionService(); - - private Environment environment; +public interface TenantConfigurationManagement { /** * Retrieves a configuration value from the e.g. tenant overwritten @@ -70,37 +34,10 @@ public class TenantConfigurationManagement implements EnvironmentAware { * if the property cannot be converted to the given * {@code propertyType} */ - - @Cacheable(value = "tenantConfiguration", key = "#configurationKey.getKeyName()") @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - public TenantConfigurationValue getConfigurationValue(final TenantConfigurationKey configurationKey, - final Class propertyType) { - validateTenantConfigurationDataType(configurationKey, propertyType); - - final TenantConfiguration tenantConfiguration = tenantConfigurationRepository - .findByKey(configurationKey.getKeyName()); - - return buildTenantConfigurationValueByKey(configurationKey, propertyType, tenantConfiguration); - } - - /** - * Validates the data type of the tenant configuration. If it is possible to - * cast to the given data type. - * - * @param configurationKey - * the key - * @param propertyType - * the class - */ - protected void validateTenantConfigurationDataType(final TenantConfigurationKey configurationKey, - final Class propertyType) { - if (!configurationKey.getDataType().isAssignableFrom(propertyType)) { - throw new TenantConfigurationValidatorException( - String.format("Cannot parse the database value of type %s into the type %s.", - configurationKey.getDataType(), propertyType)); - } - } + TenantConfigurationValue getConfigurationValue(TenantConfigurationKey configurationKey, + Class propertyType); /** * Build the tenant configuration by the given key @@ -114,24 +51,10 @@ public class TenantConfigurationManagement implements EnvironmentAware { * @return if no default value is set and no database value available * or returns the tenant configuration value */ - protected TenantConfigurationValue buildTenantConfigurationValueByKey( - final TenantConfigurationKey configurationKey, final Class propertyType, - final TenantConfiguration tenantConfiguration) { - if (tenantConfiguration != null) { - return TenantConfigurationValue. builder().isGlobal(false).createdBy(tenantConfiguration.getCreatedBy()) - .createdAt(tenantConfiguration.getCreatedAt()) - .lastModifiedAt(tenantConfiguration.getLastModifiedAt()) - .lastModifiedBy(tenantConfiguration.getLastModifiedBy()) - .value(conversionService.convert(tenantConfiguration.getValue(), propertyType)).build(); - - } else if (configurationKey.getDefaultKeyName() != null) { - - return TenantConfigurationValue. builder().isGlobal(true).createdBy(null).createdAt(null) - .lastModifiedAt(null).lastModifiedBy(null) - .value(getGlobalConfigurationValue(configurationKey, propertyType)).build(); - } - return null; - } + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) + TenantConfigurationValue buildTenantConfigurationValueByKey(TenantConfigurationKey configurationKey, + Class propertyType, TenantConfiguration tenantConfiguration); /** * Retrieves a configuration value from the e.g. tenant overwritten @@ -153,9 +76,7 @@ public class TenantConfigurationManagement implements EnvironmentAware { */ @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - public TenantConfigurationValue getConfigurationValue(final TenantConfigurationKey configurationKey) { - return getConfigurationValue(configurationKey, configurationKey.getDataType()); - } + TenantConfigurationValue getConfigurationValue(TenantConfigurationKey configurationKey); /** * returns the global configuration property either defined in the property @@ -179,23 +100,7 @@ public class TenantConfigurationManagement implements EnvironmentAware { */ @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - public T getGlobalConfigurationValue(final TenantConfigurationKey configurationKey, - final Class propertyType) { - - if (!configurationKey.getDataType().isAssignableFrom(propertyType)) { - throw new TenantConfigurationValidatorException( - String.format("Cannot parse the database value of type %s into the type %s.", - configurationKey.getDataType(), propertyType)); - } - - final T valueInProperties = environment.getProperty(configurationKey.getDefaultKeyName(), propertyType); - - if (valueInProperties == null) { - return conversionService.convert(configurationKey.getDefaultValue(), propertyType); - } - - return valueInProperties; - } + T getGlobalConfigurationValue(TenantConfigurationKey configurationKey, Class propertyType); /** * Adds or updates a specific configuration for a specific tenant. @@ -213,41 +118,8 @@ public class TenantConfigurationManagement implements EnvironmentAware { * @throws ConversionFailedException * if the property cannot be converted to the given */ - @CacheEvict(value = "tenantConfiguration", key = "#configurationKey.getKeyName()") - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) - public TenantConfigurationValue addOrUpdateConfiguration(final TenantConfigurationKey configurationKey, - final T value) { - - if (!configurationKey.getDataType().isAssignableFrom(value.getClass())) { - throw new TenantConfigurationValidatorException(String.format( - "Cannot parse the value %s of type %s into the type %s defined by the configuration key.", value, - value.getClass(), configurationKey.getDataType())); - } - - configurationKey.validate(applicationContext, value); - - TenantConfiguration tenantConfiguration = tenantConfigurationRepository - .findByKey(configurationKey.getKeyName()); - - if (tenantConfiguration == null) { - tenantConfiguration = new TenantConfiguration(configurationKey.getKeyName(), value.toString()); - } else { - tenantConfiguration.setValue(value.toString()); - } - - final TenantConfiguration updatedTenantConfiguration = tenantConfigurationRepository.save(tenantConfiguration); - - final Class clazzT = (Class) value.getClass(); - - return TenantConfigurationValue. builder().isGlobal(false) - .createdBy(updatedTenantConfiguration.getCreatedBy()) - .createdAt(updatedTenantConfiguration.getCreatedAt()) - .lastModifiedAt(updatedTenantConfiguration.getLastModifiedAt()) - .lastModifiedBy(updatedTenantConfiguration.getLastModifiedBy()) - .value(conversionService.convert(updatedTenantConfiguration.getValue(), clazzT)).build(); - } + TenantConfigurationValue addOrUpdateConfiguration(TenantConfigurationKey configurationKey, T value); /** * Deletes a specific configuration for the current tenant. Does nothing in @@ -256,16 +128,7 @@ public class TenantConfigurationManagement implements EnvironmentAware { * @param configurationKey * the configuration key to be deleted */ - @CacheEvict(value = "tenantConfiguration", key = "#configurationKey.getKeyName()") - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Modifying @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) - public void deleteConfiguration(final TenantConfigurationKey configurationKey) { - tenantConfigurationRepository.deleteByKey(configurationKey.getKeyName()); - } + void deleteConfiguration(TenantConfigurationKey configurationKey); - @Override - public void setEnvironment(final Environment environment) { - this.environment = environment; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java index 742a7d731..56ade85ff 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionStatusRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionStatusRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java index 2a0e8cfb3..61d95e15e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionStatusRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java index 16f80596d..693827803 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.io.Serializable; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetMetadataRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java similarity index 96% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetMetadataRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java index c042a32d0..68cd380e5 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetMetadataRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java index f2138bb2d..c7ab44145 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; import java.util.List; @@ -27,8 +27,6 @@ import org.springframework.transaction.annotation.Transactional; /** * {@link DistributionSet} repository. * - * - * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface DistributionSetRepository diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTagRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTagRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java index 8521a96b9..9e55a305b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTagRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTypeRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTypeRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java index 289dd6c09..7c0d39b58 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTypeRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/EclipseLinkTargetInfoRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/EclipseLinkTargetInfoRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java index e37a51d6c..ca124f81c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/EclipseLinkTargetInfoRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactProviderRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java similarity index 94% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactProviderRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java index d0802d242..4a29afc4b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactProviderRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; import org.springframework.transaction.annotation.Isolation; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java similarity index 96% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java index d20da8013..dfc8105dd 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.model.ExternalArtifact; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java new file mode 100644 index 000000000..c6d30208c --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java @@ -0,0 +1,270 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.io.InputStream; +import java.util.List; + +import org.eclipse.hawkbit.artifact.repository.ArtifactRepository; +import org.eclipse.hawkbit.artifact.repository.ArtifactStoreException; +import org.eclipse.hawkbit.artifact.repository.HashNotMatchException; +import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; +import org.eclipse.hawkbit.artifact.repository.model.DbArtifactHash; +import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.exception.ArtifactDeleteFailedException; +import org.eclipse.hawkbit.repository.exception.ArtifactUploadFailedException; +import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.exception.GridFSDBFileNotFoundException; +import org.eclipse.hawkbit.repository.exception.InvalidMD5HashException; +import org.eclipse.hawkbit.repository.exception.InvalidSHA1HashException; +import org.eclipse.hawkbit.repository.model.Artifact; +import org.eclipse.hawkbit.repository.model.ExternalArtifact; +import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; +import org.eclipse.hawkbit.repository.model.LocalArtifact; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.specifications.SoftwareModuleSpecification; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +/** + * JPA based {@link ArtifactManagement} implementation. + * + */ +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) +@Validated +@Service +public class JpaArtifactManagement implements ArtifactManagement { + + private static final Logger LOG = LoggerFactory.getLogger(JpaArtifactManagement.class); + + @Autowired + private LocalArtifactRepository localArtifactRepository; + + @Autowired + private ExternalArtifactRepository externalArtifactRepository; + + @Autowired + private SoftwareModuleRepository softwareModuleRepository; + + @Autowired + private ExternalArtifactProviderRepository externalArtifactProviderRepository; + + @Autowired + private ArtifactRepository artifactRepository; + + private static LocalArtifact checkForExistingArtifact(final String filename, final boolean overrideExisting, + final SoftwareModule softwareModule) { + if (softwareModule.getLocalArtifactByFilename(filename).isPresent()) { + if (overrideExisting) { + LOG.debug("overriding existing artifact with new filename {}", filename); + return softwareModule.getLocalArtifactByFilename(filename).get(); + } else { + throw new EntityAlreadyExistsException("File with that name already exists in the Software Module"); + } + } + return null; + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public ExternalArtifact createExternalArtifact(final ExternalArtifactProvider externalRepository, + final String urlSuffix, final Long moduleId) { + + final SoftwareModule module = getModuleAndThrowExceptionIfThatFails(moduleId); + return externalArtifactRepository.save(new ExternalArtifact(externalRepository, urlSuffix, module)); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public ExternalArtifactProvider createExternalArtifactProvider(final String name, final String description, + final String basePath, final String defaultUrlSuffix) { + return externalArtifactProviderRepository + .save(new ExternalArtifactProvider(name, description, basePath, defaultUrlSuffix)); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public LocalArtifact createLocalArtifact(final InputStream stream, final Long moduleId, final String filename, + final String providedMd5Sum, final String providedSha1Sum, final boolean overrideExisting, + final String contentType) { + DbArtifact result = null; + + final SoftwareModule softwareModule = getModuleAndThrowExceptionIfThatFails(moduleId); + + final LocalArtifact existing = checkForExistingArtifact(filename, overrideExisting, softwareModule); + + try { + result = artifactRepository.store(stream, filename, contentType, + new DbArtifactHash(providedSha1Sum, providedMd5Sum)); + } catch (final ArtifactStoreException e) { + throw new ArtifactUploadFailedException(e); + } catch (final HashNotMatchException e) { + if (e.getHashFunction().equals(HashNotMatchException.SHA1)) { + throw new InvalidSHA1HashException(e.getMessage(), e); + } else { + throw new InvalidMD5HashException(e.getMessage(), e); + } + } + if (result == null) { + return null; + } + + return storeArtifactMetadata(softwareModule, filename, result, existing); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void deleteExternalArtifact(final Long id) { + final ExternalArtifact existing = externalArtifactRepository.findOne(id); + + if (null == existing) { + return; + } + + existing.getSoftwareModule().removeArtifact(existing); + softwareModuleRepository.save(existing.getSoftwareModule()); + externalArtifactRepository.delete(id); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void deleteLocalArtifact(final LocalArtifact existing) { + if (existing == null) { + return; + } + + boolean artifactIsOnlyUsedByOneSoftwareModule = true; + for (final LocalArtifact lArtifact : localArtifactRepository + .findByGridFsFileName(existing.getGridFsFileName())) { + if (!lArtifact.getSoftwareModule().isDeleted() + && Long.compare(lArtifact.getSoftwareModule().getId(), existing.getSoftwareModule().getId()) != 0) { + artifactIsOnlyUsedByOneSoftwareModule = false; + break; + } + } + + if (artifactIsOnlyUsedByOneSoftwareModule) { + try { + LOG.debug("deleting artifact from repository {}", existing.getGridFsFileName()); + artifactRepository.deleteBySha1(existing.getGridFsFileName()); + } catch (final ArtifactStoreException e) { + throw new ArtifactDeleteFailedException(e); + } + } + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void deleteLocalArtifact(final Long id) { + final LocalArtifact existing = localArtifactRepository.findOne(id); + + if (null == existing) { + return; + } + + deleteLocalArtifact(existing); + + existing.getSoftwareModule().removeArtifact(existing); + softwareModuleRepository.save(existing.getSoftwareModule()); + localArtifactRepository.delete(id); + } + + @Override + public Artifact findArtifact(final Long id) { + return localArtifactRepository.findOne(id); + } + + @Override + public List findByFilenameAndSoftwareModule(final String filename, final Long softwareModuleId) { + return localArtifactRepository.findByFilenameAndSoftwareModuleId(filename, softwareModuleId); + } + + @Override + public LocalArtifact findFirstLocalArtifactsBySHA1(final String sha1) { + return localArtifactRepository.findFirstByGridFsFileName(sha1); + } + + @Override + public List findLocalArtifactByFilename(final String filename) { + return localArtifactRepository.findByFilename(filename); + } + + @Override + public Page findLocalArtifactBySoftwareModule(final Pageable pageReq, final Long swId) { + return localArtifactRepository.findBySoftwareModuleId(pageReq, swId); + } + + @Override + public SoftwareModule findSoftwareModuleById(final Long id) { + + final Specification spec = SoftwareModuleSpecification.byId(id); + + return softwareModuleRepository.findOne(spec); + } + + @Override + public SoftwareModule findSoftwareModuleWithDetails(final Long id) { + final SoftwareModule result = findSoftwareModuleById(id); + if (result != null) { + result.getArtifacts().size(); + } + + return result; + } + + private SoftwareModule getModuleAndThrowExceptionIfThatFails(final Long moduleId) { + final SoftwareModule softwareModule = findSoftwareModuleWithDetails(moduleId); + + if (softwareModule == null) { + LOG.debug("no software module with ID {} exists", moduleId); + throw new EntityNotFoundException("Software Module: " + moduleId); + } + return softwareModule; + } + + @Override + public DbArtifact loadLocalArtifactBinary(final LocalArtifact artifact) { + final DbArtifact result = artifactRepository.getArtifactBySha1(artifact.getGridFsFileName()); + if (result == null) { + throw new GridFSDBFileNotFoundException(artifact.getGridFsFileName()); + } + + return result; + } + + private LocalArtifact storeArtifactMetadata(final SoftwareModule softwareModule, final String providedFilename, + final DbArtifact result, final LocalArtifact existing) { + LocalArtifact artifact = existing; + if (existing == null) { + artifact = new LocalArtifact(result.getHashes().getSha1(), providedFilename, softwareModule); + } + artifact.setMd5Hash(result.getHashes().getMd5()); + artifact.setSha1Hash(result.getHashes().getSha1()); + artifact.setSize(result.getSize()); + + LOG.debug("storing new artifact into repository {}", artifact); + return localArtifactRepository.save(artifact); + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java new file mode 100644 index 000000000..76363cca9 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -0,0 +1,417 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.net.URI; +import java.util.List; +import java.util.Map; + +import javax.persistence.EntityManager; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.repository.ControllerManagement; +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.model.Action; +import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.ActionStatus_; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.LocalArtifact; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.model.Target_; +import org.eclipse.hawkbit.repository.model.TenantConfiguration; +import org.eclipse.hawkbit.repository.specifications.ActionSpecifications; +import org.eclipse.hawkbit.security.HawkbitSecurityProperties; +import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +/** + * JPA based {@link ControllerManagement} implementation. + * + */ +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) +@Validated +@Service +public class JpaControllerManagement implements ControllerManagement { + private static final Logger LOG = LoggerFactory.getLogger(ControllerManagement.class); + private static final Logger LOG_DOS = LoggerFactory.getLogger("server-security.dos"); + + @Autowired + private EntityManager entityManager; + + @Autowired + private ActionRepository actionRepository; + + @Autowired + private TargetRepository targetRepository; + + @Autowired + private TargetManagement targetManagement; + + @Autowired + private TargetInfoRepository targetInfoRepository; + + @Autowired + private SoftwareModuleRepository softwareModuleRepository; + + @Autowired + private ActionStatusRepository actionStatusRepository; + + @Autowired + private HawkbitSecurityProperties securityProperties; + + @Autowired + private TenantConfigurationRepository tenantConfigurationRepository; + + @Autowired + private TenantConfigurationManagement tenantConfigurationManagement; + + @Override + public String getPollingTime() { + final TenantConfigurationKey configurationKey = TenantConfigurationKey.POLLING_TIME_INTERVAL; + final Class propertyType = String.class; + JpaTenantConfigurationManagement.validateTenantConfigurationDataType(configurationKey, propertyType); + final TenantConfiguration tenantConfiguration = tenantConfigurationRepository + .findByKey(configurationKey.getKeyName()); + return tenantConfigurationManagement + .buildTenantConfigurationValueByKey(configurationKey, propertyType, tenantConfiguration).getValue(); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public Target updateLastTargetQuery(final String controllerId, final URI address) { + final Target target = targetRepository.findByControllerId(controllerId); + if (target == null) { + throw new EntityNotFoundException(controllerId); + } + + return updateLastTargetQuery(target.getTargetInfo(), address).getTarget(); + } + + @Override + public Action getActionForDownloadByTargetAndSoftwareModule(final String controllerId, + final SoftwareModule module) { + final List action = actionRepository.findActionByTargetAndSoftwareModule(controllerId, module); + + if (action.isEmpty() || action.get(0).isCancelingOrCanceled()) { + throw new EntityNotFoundException( + "No assigment found for module " + module.getId() + " to target " + controllerId); + } + + return action.get(0); + } + + @Override + public boolean hasTargetArtifactAssigned(final String controllerId, final LocalArtifact localArtifact) { + final Target target = targetRepository.findByControllerId(controllerId); + if (target == null) { + return false; + } + return actionRepository.count(ActionSpecifications.hasTargetAssignedArtifact(target, localArtifact)) > 0; + } + + @Override + public List findActionByTargetAndActive(final Target target) { + return actionRepository.findByTargetAndActiveOrderByIdAsc(target, true); + } + + @Override + public List findSoftwareModulesByDistributionSet(final DistributionSet distributionSet) { + return softwareModuleRepository.findByAssignedTo(distributionSet); + } + + @Override + public Action findActionWithDetails(final Long actionId) { + return actionRepository.findById(actionId); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public Target findOrRegisterTargetIfItDoesNotexist(final String controllerId, final URI address) { + final Specification spec = (targetRoot, query, cb) -> cb.equal(targetRoot.get(Target_.controllerId), + controllerId); + + Target target = targetRepository.findOne(spec); + + if (target == null) { + target = new Target(controllerId); + target.setDescription("Plug and Play target: " + controllerId); + target.setName(controllerId); + return targetManagement.createTarget(target, TargetUpdateStatus.REGISTERED, System.currentTimeMillis(), + address); + } + + return updateLastTargetQuery(target.getTargetInfo(), address).getTarget(); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public TargetInfo updateTargetStatus(final TargetInfo targetInfo, final TargetUpdateStatus status, + final Long lastTargetQuery, final URI address) { + final TargetInfo mtargetInfo = entityManager.merge(targetInfo); + if (status != null) { + mtargetInfo.setUpdateStatus(status); + } + if (lastTargetQuery != null) { + mtargetInfo.setLastTargetQuery(lastTargetQuery); + } + if (address != null) { + mtargetInfo.setAddress(address.toString()); + } + return targetInfoRepository.save(mtargetInfo); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public Action addCancelActionStatus(final ActionStatus actionStatus) { + final Action action = actionStatus.getAction(); + + checkForToManyStatusEntries(action); + action.setStatus(actionStatus.getStatus()); + + switch (actionStatus.getStatus()) { + case WARNING: + case ERROR: + case RUNNING: + break; + case CANCELED: + case FINISHED: + // in case of successful cancellation we also report the success at + // the canceled action itself. + actionStatus.addMessage( + ControllerManagement.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); + DeploymentHelper.successCancellation(action, actionRepository, targetManagement, targetInfoRepository, + entityManager); + break; + case RETRIEVED: + actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Cancellation request retrieved."); + break; + default: + } + actionRepository.save(action); + actionStatusRepository.save(actionStatus); + + return action; + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public Action addUpdateActionStatus(@NotNull final ActionStatus actionStatus) { + final Action action = actionStatus.getAction(); + + if (!action.isActive()) { + LOG.debug("Update of actionStatus {} for action {} not possible since action not active anymore.", + actionStatus.getId(), action.getId()); + return action; + } + return handleAddUpdateActionStatus(actionStatus, action); + } + + /** + * Sets {@link TargetUpdateStatus} based on given {@link ActionStatus}. + * + * @param actionStatus + * @param action + * @return + */ + private Action handleAddUpdateActionStatus(final ActionStatus actionStatus, final Action action) { + LOG.debug("addUpdateActionStatus for action {}", action.getId()); + + final Action mergedAction = entityManager.merge(action); + Target mergedTarget = mergedAction.getTarget(); + // check for a potential DOS attack + checkForToManyStatusEntries(action); + + switch (actionStatus.getStatus()) { + case ERROR: + mergedTarget = DeploymentHelper.updateTargetInfo(mergedTarget, TargetUpdateStatus.ERROR, false, + targetInfoRepository, entityManager); + handleErrorOnAction(mergedAction, mergedTarget); + break; + case FINISHED: + handleFinishedAndStoreInTargetStatus(mergedTarget, mergedAction); + break; + case CANCELED: + case WARNING: + case RUNNING: + DeploymentHelper.updateTargetInfo(mergedTarget, TargetUpdateStatus.PENDING, false, targetInfoRepository, + entityManager); + break; + default: + break; + } + + actionStatusRepository.save(actionStatus); + + LOG.debug("addUpdateActionStatus {} for target {} is finished.", action.getId(), mergedTarget.getId()); + + return actionRepository.save(mergedAction); + } + + private void handleErrorOnAction(final Action mergedAction, final Target mergedTarget) { + mergedAction.setActive(false); + mergedAction.setStatus(Status.ERROR); + mergedTarget.setAssignedDistributionSet(null); + targetManagement.updateTarget(mergedTarget); + } + + private void checkForToManyStatusEntries(final Action action) { + if (securityProperties.getDos().getMaxStatusEntriesPerAction() > 0) { + + final Long statusCount = actionStatusRepository.countByAction(action); + + if (statusCount >= securityProperties.getDos().getMaxStatusEntriesPerAction()) { + LOG_DOS.error( + "Potential denial of service (DOS) attack identfied. More status entries in the system than permitted ({})!", + securityProperties.getDos().getMaxStatusEntriesPerAction()); + throw new ToManyStatusEntriesException( + String.valueOf(securityProperties.getDos().getMaxStatusEntriesPerAction())); + } + } + } + + private void handleFinishedAndStoreInTargetStatus(final Target target, final Action action) { + action.setActive(false); + action.setStatus(Status.FINISHED); + final TargetInfo targetInfo = target.getTargetInfo(); + final DistributionSet ds = entityManager.merge(action.getDistributionSet()); + targetInfo.setInstalledDistributionSet(ds); + if (target.getAssignedDistributionSet() != null && targetInfo.getInstalledDistributionSet() != null && target + .getAssignedDistributionSet().getId().equals(targetInfo.getInstalledDistributionSet().getId())) { + targetInfo.setUpdateStatus(TargetUpdateStatus.IN_SYNC); + targetInfo.setInstallationDate(System.currentTimeMillis()); + } else { + targetInfo.setUpdateStatus(TargetUpdateStatus.PENDING); + targetInfo.setInstallationDate(System.currentTimeMillis()); + } + targetInfoRepository.save(targetInfo); + entityManager.detach(ds); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public Target updateControllerAttributes(final String controllerId, final Map data) { + final Target target = targetRepository.findByControllerId(controllerId); + + if (target == null) { + throw new EntityNotFoundException(controllerId); + } + + target.getTargetInfo().getControllerAttributes().putAll(data); + + if (target.getTargetInfo().getControllerAttributes().size() > securityProperties.getDos() + .getMaxAttributeEntriesPerTarget()) { + LOG_DOS.info("Target tries to insert more than the allowed number of entries ({}). DOS attack anticipated!", + securityProperties.getDos().getMaxAttributeEntriesPerTarget()); + throw new ToManyAttributeEntriesException( + String.valueOf(securityProperties.getDos().getMaxAttributeEntriesPerTarget())); + } + + target.getTargetInfo().setLastTargetQuery(System.currentTimeMillis()); + target.getTargetInfo().setRequestControllerAttributes(false); + return targetRepository.save(target); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public Action registerRetrieved(final Action action, final String message) { + return handleRegisterRetrieved(action, message); + } + + /** + * Registers retrieved status for given {@link Target} and {@link Action} if + * it does not exist yet. + * + * @param action + * to the handle status for + * @param message + * for the status + * @return the updated action in case the status has been changed to + * {@link Status#RETRIEVED} + */ + private Action handleRegisterRetrieved(final Action action, final String message) { + // do a manual query with CriteriaBuilder to avoid unnecessary field + // queries and an extra + // count query made by spring-data when using pageable requests, we + // don't need an extra count + // query, we just want to check if the last action status is a retrieved + // or not. + final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + final CriteriaQuery queryActionStatus = cb.createQuery(Object[].class); + final Root actionStatusRoot = queryActionStatus.from(ActionStatus.class); + final CriteriaQuery query = queryActionStatus + .multiselect(actionStatusRoot.get(ActionStatus_.id), actionStatusRoot.get(ActionStatus_.status)) + .where(cb.equal(actionStatusRoot.get(ActionStatus_.action), action)) + .orderBy(cb.desc(actionStatusRoot.get(ActionStatus_.id))); + final List resultList = entityManager.createQuery(query).setFirstResult(0).setMaxResults(1) + .getResultList(); + + // if the latest status is not in retrieve state then we add a retrieved + // state again, we want + // to document a deployment retrieved status and a cancel retrieved + // status, but multiple + // retrieves after the other we don't want to store to protect to + // overflood action status in + // case controller retrieves a action multiple times. + if (resultList.isEmpty() || resultList.get(0)[1] != Status.RETRIEVED) { + // document that the status has been retrieved + actionStatusRepository + .save(new ActionStatus(action, Status.RETRIEVED, System.currentTimeMillis(), message)); + + // don't change the action status itself in case the action is in + // canceling state otherwise + // we modify the action status and the controller won't get the + // cancel job anymore. + if (!action.isCancelingOrCanceled()) { + final Action actionMerge = entityManager.merge(action); + actionMerge.setStatus(Status.RETRIEVED); + return actionRepository.save(actionMerge); + } + } + return action; + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void addInformationalActionStatus(final ActionStatus statusMessage) { + actionStatusRepository.save(statusMessage); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public String getSecurityTokenByControllerId(final String controllerId) { + final Target target = targetRepository.findByControllerId(controllerId); + return target != null ? target.getSecurityToken() : null; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java new file mode 100644 index 000000000..50bbd2d31 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -0,0 +1,652 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +import javax.persistence.EntityManager; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Join; +import javax.persistence.criteria.JoinType; +import javax.persistence.criteria.ListJoin; +import javax.persistence.criteria.Root; +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.Constants; +import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; +import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; +import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; +import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.DeploymentManagement; +import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; +import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException; +import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.exception.ForceQuitActionNotAllowedException; +import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetException; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.Action.ActionType; +import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.ActionWithStatusCount; +import org.eclipse.hawkbit.repository.model.Action_; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.DistributionSet_; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.Rollout_; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.specifications.TargetSpecifications; +import org.hibernate.validator.constraints.NotEmpty; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.data.domain.AuditorAware; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import com.google.common.collect.Lists; +import com.google.common.eventbus.EventBus; + +/** + * JPA implementation for DeploymentManagement. + * + */ +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) +@Validated +@Service +public class JpaDeploymentManagement implements DeploymentManagement { + private static final Logger LOG = LoggerFactory.getLogger(JpaDeploymentManagement.class); + + @Autowired + private EntityManager entityManager; + + @Autowired + private ActionRepository actionRepository; + + @Autowired + private DistributionSetRepository distributoinSetRepository; + + @Autowired + private SoftwareModuleRepository softwareModuleRepository; + + @Autowired + private TargetRepository targetRepository; + + @Autowired + private ActionStatusRepository actionStatusRepository; + + @Autowired + private TargetManagement targetManagement; + + @Autowired + private TargetInfoRepository targetInfoRepository; + + @Autowired + private AuditorAware auditorProvider; + + @Autowired + private EventBus eventBus; + + @Autowired + private AfterTransactionCommitExecutor afterCommit; + + @Override + @Transactional(isolation = Isolation.READ_COMMITTED) + @Modifying + @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) + public DistributionSetAssignmentResult assignDistributionSet(final DistributionSet pset, + final List targets) { + + return assignDistributionSetByTargetId(pset, + targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), + ActionType.FORCED, Action.NO_FORCE_TIME); + + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_COMMITTED) + + @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) + public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, final String... targetIDs) { + return assignDistributionSet(dsID, ActionType.FORCED, Action.NO_FORCE_TIME, targetIDs); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) + // Exception squid:S2095: see + // https://jira.sonarsource.com/browse/SONARJAVA-1478 + @SuppressWarnings({ "squid:S2095" }) + public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, final ActionType actionType, + final long forcedTimestamp, final String... targetIDs) { + return assignDistributionSet(dsID, Arrays.stream(targetIDs) + .map(t -> new TargetWithActionType(t, actionType, forcedTimestamp)).collect(Collectors.toList())); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_COMMITTED) + @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) + public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, + final List targets) { + final DistributionSet set = distributoinSetRepository.findOne(dsID); + if (set == null) { + throw new EntityNotFoundException( + String.format("no %s with id %d found", DistributionSet.class.getSimpleName(), dsID)); + } + + return assignDistributionSetToTargets(set, targets, null, null); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_COMMITTED) + @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) + public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, + final List targets, final Rollout rollout, final RolloutGroup rolloutGroup) { + final DistributionSet set = distributoinSetRepository.findOne(dsID); + if (set == null) { + throw new EntityNotFoundException( + String.format("no %s with id %d found", DistributionSet.class.getSimpleName(), dsID)); + } + + return assignDistributionSetToTargets(set, targets, rollout, rolloutGroup); + } + + /** + * method assigns the {@link DistributionSet} to all {@link Target}s by + * their IDs with a specific {@link ActionType} and {@code forcetime}. + * + * @param dsID + * the ID of the distribution set to assign + * @param targets + * a list of all targets and their action type + * @param rollout + * the rollout for this assignment + * @param rolloutGroup + * the rollout group for this assignment + * @return the assignment result + * + * @throw IncompleteDistributionSetException if mandatory + * {@link SoftwareModuleType} are not assigned as define by the + * {@link DistributionSetType}. + */ + private DistributionSetAssignmentResult assignDistributionSetToTargets(@NotNull final DistributionSet set, + final List targetsWithActionType, final Rollout rollout, + final RolloutGroup rolloutGroup) { + + if (!set.isComplete()) { + throw new IncompleteDistributionSetException( + "Distribution set of type " + set.getType().getKey() + " is incomplete: " + set.getId()); + } + + final List controllerIDs = targetsWithActionType.stream().map(TargetWithActionType::getTargetId) + .collect(Collectors.toList()); + + LOG.debug("assignDistribution({}) to {} targets", set, controllerIDs.size()); + + final Map targetsWithActionMap = targetsWithActionType.stream() + .collect(Collectors.toMap(TargetWithActionType::getTargetId, Function.identity())); + + // split tIDs length into max entries in-statement because many database + // have constraint of max entries in in-statements e.g. Oracle with + // maximum 1000 elements, so we need to split the entries here and + // execute multiple statements we take the target only into account if + // the requested operation is no duplicate of a previous one + final List targets = Lists.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream() + .map(ids -> targetRepository + .findAll(TargetSpecifications.hasControllerIdAndAssignedDistributionSetIdNot(ids, set.getId()))) + .flatMap(t -> t.stream()).collect(Collectors.toList()); + + if (targets.isEmpty()) { + // detaching as it is not necessary to persist the set itself + entityManager.detach(set); + // return with nothing as all targets had the DS already assigned + return new DistributionSetAssignmentResult(Collections.emptyList(), 0, targetsWithActionType.size(), + Collections.emptyList(), targetManagement); + } + + final List> targetIds = Lists.partition( + targets.stream().map(Target::getId).collect(Collectors.toList()), Constants.MAX_ENTRIES_IN_STATEMENT); + + // override all active actions and set them into canceling state, we + // need to remember which one we have been switched to canceling state + // because for targets which we have changed to canceling we don't want + // to publish the new action update event. + final Set targetIdsCancellList = new HashSet<>(); + targetIds.forEach(ids -> targetIdsCancellList.addAll(overrideObsoleteUpdateActions(ids))); + + // cancel all scheduled actions which are in-active, these actions were + // not active before and the manual assignment which has been done + // cancels the + targetIds.forEach(tIds -> actionRepository.switchStatus(Status.CANCELED, tIds, false, Status.SCHEDULED)); + + // set assigned distribution set and TargetUpdateStatus + final String currentUser; + if (auditorProvider != null) { + currentUser = auditorProvider.getCurrentAuditor(); + } else { + currentUser = null; + } + + targetIds.forEach(tIds -> targetRepository.setAssignedDistributionSet(set, System.currentTimeMillis(), + currentUser, tIds)); + targetIds.forEach(tIds -> targetInfoRepository.setTargetUpdateStatus(TargetUpdateStatus.PENDING, tIds)); + final Map targetIdsToActions = actionRepository + .save(targets.stream().map(t -> createTargetAction(targetsWithActionMap, t, set, rollout, rolloutGroup)) + .collect(Collectors.toList())) + .stream().collect(Collectors.toMap(a -> a.getTarget().getControllerId(), Function.identity())); + + // create initial action status when action is created so we remember + // the initial running status because we will change the status + // of the action itself and with this action status we have a nicer + // action history. + targetIdsToActions.values().forEach(action -> { + final ActionStatus actionStatus = new ActionStatus(); + actionStatus.setAction(action); + actionStatus.setOccurredAt(action.getCreatedAt()); + actionStatus.setStatus(Status.RUNNING); + actionStatusRepository.save(actionStatus); + }); + + // flush to get action IDs + entityManager.flush(); + // collect updated target and actions IDs in order to return them + final DistributionSetAssignmentResult result = new DistributionSetAssignmentResult( + targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), targets.size(), + controllerIDs.size() - targets.size(), + targetIdsToActions.values().stream().map(Action::getId).collect(Collectors.toList()), targetManagement); + + LOG.debug("assignDistribution({}) finished {}", set, result); + + final List softwareModules = softwareModuleRepository.findByAssignedTo(set); + + // detaching as it is not necessary to persist the set itself + entityManager.detach(set); + + sendDistributionSetAssignmentEvent(targets, targetIdsCancellList, targetIdsToActions, softwareModules); + + return result; + } + + private void sendDistributionSetAssignmentEvent(final List targets, final Set targetIdsCancellList, + final Map targetIdsToActions, final List softwareModules) { + targets.stream().filter(t -> !!!targetIdsCancellList.contains(t.getId())) + .forEach(t -> assignDistributionSetEvent(t, targetIdsToActions.get(t.getControllerId()).getId(), + softwareModules)); + } + + private static Action createTargetAction(final Map targetsWithActionMap, + final Target target, final DistributionSet set, final Rollout rollout, final RolloutGroup rolloutGroup) { + final Action actionForTarget = new Action(); + final TargetWithActionType targetWithActionType = targetsWithActionMap.get(target.getControllerId()); + actionForTarget.setActionType(targetWithActionType.getActionType()); + actionForTarget.setForcedTime(targetWithActionType.getForceTime()); + actionForTarget.setActive(true); + actionForTarget.setStatus(Status.RUNNING); + actionForTarget.setTarget(target); + actionForTarget.setDistributionSet(set); + actionForTarget.setRollout(rollout); + actionForTarget.setRolloutGroup(rolloutGroup); + return actionForTarget; + } + + /** + * Sends the {@link TargetAssignDistributionSetEvent} for a specific target + * to the {@link EventBus}. + * + * @param target + * the Target which has been assigned to a distribution set + * @param actionId + * the action id of the assignment + * @param softwareModules + * the software modules which have been assigned + */ + private void assignDistributionSetEvent(final Target target, final Long actionId, + final List softwareModules) { + target.getTargetInfo().setUpdateStatus(TargetUpdateStatus.PENDING); + afterCommit.afterCommit(() -> { + eventBus.post(new TargetInfoUpdateEvent(target.getTargetInfo())); + eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(), + target.getControllerId(), actionId, softwareModules, target.getTargetInfo().getAddress(), + target.getSecurityToken())); + }); + } + + /** + * Removes {@link UpdateAction}s that are no longer necessary and sends + * cancellations to the controller. + * + * @param myTarget + * to override {@link UpdateAction}s + */ + private Set overrideObsoleteUpdateActions(final List targetsIds) { + + final Set cancelledTargetIds = new HashSet<>(); + + // Figure out if there are potential target/action combinations that + // need to be considered + // for cancelation + final List activeActions = actionRepository + .findByActiveAndTargetIdInAndActionStatusNotEqualToAndDistributionSetRequiredMigrationStep(targetsIds, + Action.Status.CANCELING); + activeActions.forEach(action -> { + action.setStatus(Status.CANCELING); + // document that the status has been retrieved + + actionStatusRepository.save(new ActionStatus(action, Status.CANCELING, System.currentTimeMillis(), + "manual cancelation requested")); + + cancelAssignDistributionSetEvent(action.getTarget(), action.getId()); + + cancelledTargetIds.add(action.getTarget().getId()); + }); + + actionRepository.save(activeActions); + + return cancelledTargetIds; + + } + + private DistributionSetAssignmentResult assignDistributionSetByTargetId(@NotNull final DistributionSet set, + @NotEmpty final List tIDs, final ActionType actionType, final long forcedTime) { + + return assignDistributionSetToTargets(set, tIDs.stream() + .map(t -> new TargetWithActionType(t, actionType, forcedTime)).collect(Collectors.toList()), null, + null); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_COMMITTED) + public Action cancelAction(final Action action, final Target target) { + LOG.debug("cancelAction({}, {})", action, target); + if (action.isCancelingOrCanceled()) { + throw new CancelActionNotAllowedException("Actions in canceling or canceled state cannot be canceled"); + } + final Action myAction = entityManager.merge(action); + + if (myAction.isActive()) { + LOG.debug("action ({}) was still active. Change to {}.", action, Status.CANCELING); + myAction.setStatus(Status.CANCELING); + + // document that the status has been retrieved + actionStatusRepository.save(new ActionStatus(myAction, Status.CANCELING, System.currentTimeMillis(), + "manual cancelation requested")); + final Action saveAction = actionRepository.save(myAction); + cancelAssignDistributionSetEvent(target, myAction.getId()); + + return saveAction; + } else { + throw new CancelActionNotAllowedException( + "Action [id: " + action.getId() + "] is not active and cannot be canceled"); + } + } + + /** + * Sends the {@link CancelTargetAssignmentEvent} for a specific target to + * the {@link EventBus}. + * + * @param target + * the Target which has been assigned to a distribution set + * @param actionId + * the action id of the assignment + */ + private void cancelAssignDistributionSetEvent(final Target target, final Long actionId) { + afterCommit.afterCommit(() -> eventBus.post(new CancelTargetAssignmentEvent(target.getOptLockRevision(), + target.getTenant(), target.getControllerId(), actionId, target.getTargetInfo().getAddress()))); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_COMMITTED) + public Action forceQuitAction(final Action action) { + final Action mergedAction = entityManager.merge(action); + + if (!mergedAction.isCancelingOrCanceled()) { + throw new ForceQuitActionNotAllowedException( + "Action [id: " + action.getId() + "] is not canceled yet and cannot be force quit"); + } + + if (!mergedAction.isActive()) { + throw new ForceQuitActionNotAllowedException( + "Action [id: " + action.getId() + "] is not active and cannot be force quit"); + } + + LOG.warn("action ({}) was still activ and has been force quite.", action); + + // document that the status has been retrieved + actionStatusRepository.save(new ActionStatus(mergedAction, Status.CANCELED, System.currentTimeMillis(), + "A force quit has been performed.")); + + DeploymentHelper.successCancellation(mergedAction, actionRepository, targetManagement, targetInfoRepository, + entityManager); + + return actionRepository.save(mergedAction); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_COMMITTED) + public void createScheduledAction(final List targets, final DistributionSet distributionSet, + final ActionType actionType, final long forcedTime, final Rollout rollout, + final RolloutGroup rolloutGroup) { + // cancel all current scheduled actions for this target. E.g. an action + // is already scheduled and a next action is created then cancel the + // current scheduled action to cancel. E.g. a new scheduled action is + // created. + final List targetIds = targets.stream().map(t -> t.getId()).collect(Collectors.toList()); + actionRepository.switchStatus(Action.Status.CANCELED, targetIds, false, Action.Status.SCHEDULED); + targets.forEach(target -> { + final Action action = new Action(); + action.setTarget(target); + action.setActive(false); + action.setDistributionSet(distributionSet); + action.setActionType(actionType); + action.setForcedTime(forcedTime); + action.setStatus(Status.SCHEDULED); + action.setRollout(rollout); + action.setRolloutGroup(rolloutGroup); + actionRepository.save(action); + }); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_COMMITTED) + public Action startScheduledAction(final Action action) { + + final Action mergedAction = entityManager.merge(action); + final Target mergedTarget = entityManager.merge(action.getTarget()); + + // check if we need to override running update actions + final Set overrideObsoleteUpdateActions = overrideObsoleteUpdateActions( + Collections.singletonList(action.getTarget().getId())); + + final boolean hasDistributionSetAlreadyAssigned = targetRepository + .count(TargetSpecifications.hasControllerIdAndAssignedDistributionSetIdNot( + Collections.singletonList(mergedTarget.getControllerId()), + action.getDistributionSet().getId())) == 0; + if (hasDistributionSetAlreadyAssigned) { + // the target has already the distribution set assigned, we don't + // need to start the scheduled action, just finished it. + mergedAction.setStatus(Status.FINISHED); + mergedAction.setActive(false); + return actionRepository.save(mergedAction); + } + + mergedAction.setActive(true); + mergedAction.setStatus(Status.RUNNING); + final Action savedAction = actionRepository.save(mergedAction); + + final ActionStatus actionStatus = new ActionStatus(); + actionStatus.setAction(action); + actionStatus.setOccurredAt(action.getCreatedAt()); + actionStatus.setStatus(Status.RUNNING); + actionStatusRepository.save(actionStatus); + + mergedTarget.setAssignedDistributionSet(action.getDistributionSet()); + final TargetInfo targetInfo = mergedTarget.getTargetInfo(); + targetInfo.setUpdateStatus(TargetUpdateStatus.PENDING); + targetRepository.save(mergedTarget); + targetInfoRepository.save(targetInfo); + + // in case we canceled an action before for this target, then don't fire + // assignment event + if (!overrideObsoleteUpdateActions.contains(savedAction.getId())) { + final List softwareModules = softwareModuleRepository + .findByAssignedTo(action.getDistributionSet()); + // send distribution set assignment event + + assignDistributionSetEvent(mergedAction.getTarget(), mergedAction.getId(), softwareModules); + } + return savedAction; + } + + @Override + public Action findAction(final Long actionId) { + return actionRepository.findOne(actionId); + } + + @Override + public Action findActionWithDetails(final Long actionId) { + return actionRepository.findById(actionId); + } + + @Override + public Slice findActionsByTarget(final Pageable pageable, final Target target) { + return actionRepository.findByTarget(pageable, target); + } + + @Override + public List findActionsByTarget(final Target target) { + return actionRepository.findByTarget(target); + } + + @Override + public List findActionsWithStatusCountByTargetOrderByIdDesc(final Target target) { + final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + final CriteriaQuery query = cb.createQuery(ActionWithStatusCount.class); + final Root actionRoot = query.from(Action.class); + final ListJoin actionStatusJoin = actionRoot.join(Action_.actionStatus, JoinType.LEFT); + final Join actionDsJoin = actionRoot.join(Action_.distributionSet); + final Join actionRolloutJoin = actionRoot.join(Action_.rollout, JoinType.LEFT); + + final CriteriaQuery multiselect = query.distinct(true).multiselect( + actionRoot.get(Action_.id), actionRoot.get(Action_.actionType), actionRoot.get(Action_.active), + actionRoot.get(Action_.forcedTime), actionRoot.get(Action_.status), actionRoot.get(Action_.createdAt), + actionRoot.get(Action_.lastModifiedAt), actionDsJoin.get(DistributionSet_.id), + actionDsJoin.get(DistributionSet_.name), actionDsJoin.get(DistributionSet_.version), + cb.count(actionStatusJoin), actionRolloutJoin.get(Rollout_.name)); + multiselect.where(cb.equal(actionRoot.get(Action_.target), target)); + multiselect.orderBy(cb.desc(actionRoot.get(Action_.id))); + multiselect.groupBy(actionRoot.get(Action_.id)); + return entityManager.createQuery(multiselect).getResultList(); + } + + @Override + public Slice findActionsByTarget(final Specification specifiction, final Target target, + final Pageable pageable) { + + return actionRepository.findAll((Specification) (root, query, cb) -> cb + .and(specifiction.toPredicate(root, query, cb), cb.equal(root.get(Action_.target), target)), pageable); + } + + @Override + public Slice findActionsByTarget(final Target foundTarget, final Pageable pageable) { + return actionRepository.findByTarget(pageable, foundTarget); + } + + @Override + public Page findActiveActionsByTarget(final Pageable pageable, final Target target) { + return actionRepository.findByActiveAndTarget(pageable, target, true); + } + + @Override + public List findActiveActionsByTarget(final Target target) { + return actionRepository.findByActiveAndTarget(target, true); + } + + @Override + public List findInActiveActionsByTarget(final Target target) { + return actionRepository.findByActiveAndTarget(target, false); + } + + @Override + public Page findInActiveActionsByTarget(final Pageable pageable, final Target target) { + return actionRepository.findByActiveAndTarget(pageable, target, false); + } + + @Override + public Long countActionsByTarget(final Target target) { + return actionRepository.countByTarget(target); + } + + @Override + public Long countActionsByTarget(final Specification spec, final Target target) { + return actionRepository.count((root, query, cb) -> cb.and(spec.toPredicate(root, query, cb), + cb.equal(root.get(Action_.target), target))); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public Action forceTargetAction(final Long actionId) { + final Action action = actionRepository.findOne(actionId); + if (action != null && !action.isForced()) { + action.setActionType(ActionType.FORCED); + return actionRepository.save(action); + } + return action; + } + + @Override + public Page findActionStatusByAction(final Pageable pageReq, final Action action, + final boolean withMessages) { + if (withMessages) { + return actionStatusRepository.getByAction(pageReq, action); + } else { + return actionStatusRepository.findByAction(pageReq, action); + } + } + + @Override + public List findActionsByRolloutGroupParentAndStatus(final Rollout rollout, + final RolloutGroup rolloutGroupParent, final Action.Status actionStatus) { + return actionRepository.findByRolloutAndRolloutGroupParentAndStatus(rollout, rolloutGroupParent, actionStatus); + } + + @Override + public List findActionsByRolloutAndStatus(final Rollout rollout, final Action.Status actionStatus) { + return actionRepository.findByRolloutAndStatus(rollout, actionStatus); + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java new file mode 100644 index 000000000..160cf613c --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -0,0 +1,663 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +import javax.persistence.EntityManager; + +import org.eclipse.hawkbit.eventbus.event.DistributionSetTagAssigmentResultEvent; +import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.DistributionSetFilter; +import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; +import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.exception.EntityLockedException; +import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; +import org.eclipse.hawkbit.repository.model.DistributionSetMetadata_; +import org.eclipse.hawkbit.repository.model.DistributionSetTag; +import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.DistributionSet_; +import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.specifications.DistributionSetSpecification; +import org.eclipse.hawkbit.repository.specifications.DistributionSetTypeSpecification; +import org.eclipse.hawkbit.repository.specifications.SpecificationsBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import com.google.common.base.Strings; +import com.google.common.eventbus.EventBus; + +/** + * Business facade for managing the {@link DistributionSet}s. + * + */ +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) +@Validated +@Service +public class JpaDistributionSetManagement implements DistributionSetManagement { + + @Autowired + private EntityManager entityManager; + + @Autowired + private DistributionSetRepository distributionSetRepository; + + @Autowired + private TagManagement tagManagement; + + @Autowired + private SystemManagement systemManagement; + + @Autowired + private DistributionSetTypeRepository distributionSetTypeRepository; + + @Autowired + private DistributionSetMetadataRepository distributionSetMetadataRepository; + + @Autowired + private ActionRepository actionRepository; + + @Autowired + private EventBus eventBus; + + @Autowired + private AfterTransactionCommitExecutor afterCommit; + + @Override + public DistributionSet findDistributionSetByIdWithDetails(final Long distid) { + return distributionSetRepository.findOne(DistributionSetSpecification.byId(distid)); + } + + @Override + public DistributionSet findDistributionSetById(final Long distid) { + return distributionSetRepository.findOne(distid); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public DistributionSetTagAssignmentResult toggleTagAssignment(final Collection dsIds, final String tagName) { + + final Iterable sets = findDistributionSetListWithDetails(dsIds); + final DistributionSetTag myTag = tagManagement.findDistributionSetTag(tagName); + + DistributionSetTagAssignmentResult result; + final List toBeChangedDSs = new ArrayList<>(); + for (final DistributionSet set : sets) { + if (set.getTags().add(myTag)) { + toBeChangedDSs.add(set); + } + } + + // un-assignment case + if (toBeChangedDSs.isEmpty()) { + for (final DistributionSet set : sets) { + if (set.getTags().remove(myTag)) { + toBeChangedDSs.add(set); + } + } + result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), 0, + toBeChangedDSs.size(), Collections.emptyList(), distributionSetRepository.save(toBeChangedDSs), + myTag); + } else { + result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), toBeChangedDSs.size(), + 0, distributionSetRepository.save(toBeChangedDSs), Collections.emptyList(), myTag); + } + + final DistributionSetTagAssignmentResult resultAssignment = result; + afterCommit.afterCommit(() -> eventBus.post(new DistributionSetTagAssigmentResultEvent(resultAssignment))); + + // no reason to persist the tag + entityManager.detach(myTag); + return result; + } + + @Override + public List findDistributionSetListWithDetails(final Collection distributionIdSet) { + return distributionSetRepository.findAll(DistributionSetSpecification.byIds(distributionIdSet)); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public DistributionSet updateDistributionSet(final DistributionSet ds) { + checkNotNull(ds.getId()); + final DistributionSet persisted = findDistributionSetByIdWithDetails(ds.getId()); + checkDistributionSetSoftwareModulesIsAllowedToModify(ds, persisted.getModules()); + return distributionSetRepository.save(ds); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void deleteDistributionSet(final Long... distributionSetIDs) { + final List toHardDelete = new ArrayList<>(); + + final List assigned = distributionSetRepository.findAssignedDistributionSetsById(distributionSetIDs); + + // soft delete assigned + if (!assigned.isEmpty()) { + distributionSetRepository.deleteDistributionSet(assigned.toArray(new Long[assigned.size()])); + } + + // mark the rest as hard delete + for (final Long setId : distributionSetIDs) { + if (!assigned.contains(setId)) { + toHardDelete.add(setId); + } + } + + // hard delete the rest if exixts + if (!toHardDelete.isEmpty()) { + // don't give the delete statement an empty list, JPA/Oracle cannot + // handle the empty list + distributionSetRepository.deleteByIdIn(toHardDelete); + } + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public DistributionSet createDistributionSet(final DistributionSet dSet) { + prepareDsSave(dSet); + if (dSet.getType() == null) { + dSet.setType(systemManagement.getTenantMetadata().getDefaultDsType()); + } + return distributionSetRepository.save(dSet); + } + + private void prepareDsSave(final DistributionSet dSet) { + if (dSet.getId() != null) { + throw new EntityAlreadyExistsException("Parameter seems to be an existing, already persisted entity"); + } + + if (distributionSetRepository.countByNameAndVersion(dSet.getName(), dSet.getVersion()) > 0) { + throw new EntityAlreadyExistsException("DistributionSet with that name and version already exists."); + } + + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public List createDistributionSets(final Collection distributionSets) { + for (final DistributionSet ds : distributionSets) { + prepareDsSave(ds); + if (ds.getType() == null) { + ds.setType(systemManagement.getTenantMetadata().getDefaultDsType()); + } + } + return distributionSetRepository.save(distributionSets); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public DistributionSet assignSoftwareModules(final DistributionSet ds, final Set softwareModules) { + checkDistributionSetSoftwareModulesIsAllowedToModify(ds, softwareModules); + for (final SoftwareModule softwareModule : softwareModules) { + ds.addModule(softwareModule); + } + return distributionSetRepository.save(ds); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public DistributionSet unassignSoftwareModule(final DistributionSet ds, final SoftwareModule softwareModule) { + final Set softwareModules = new HashSet<>(); + softwareModules.add(softwareModule); + ds.removeModule(softwareModule); + checkDistributionSetSoftwareModulesIsAllowedToModify(ds, softwareModules); + return distributionSetRepository.save(ds); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public DistributionSetType updateDistributionSetType(final DistributionSetType dsType) { + checkNotNull(dsType.getId()); + + final DistributionSetType persisted = distributionSetTypeRepository.findOne(dsType.getId()); + + // throw exception if user tries to update a DS type that is already in + // use + if (!persisted.areModuleEntriesIdentical(dsType) && distributionSetRepository.countByType(persisted) > 0) { + throw new EntityReadOnlyException( + String.format("distribution set type %s set is already assigned to targets and cannot be changed", + dsType.getName())); + } + + return distributionSetTypeRepository.save(dsType); + } + + @Override + public Page findDistributionSetTypesAll(final Specification spec, + final Pageable pageable) { + return distributionSetTypeRepository.findAll(spec, pageable); + } + + @Override + public Page findDistributionSetTypesAll(final Pageable pageable) { + return distributionSetTypeRepository.findByDeleted(pageable, false); + } + + @Override + public Page findDistributionSetsByFilters(final Pageable pageable, + final DistributionSetFilter distributionSetFilter) { + final List> specList = buildDistributionSetSpecifications(distributionSetFilter); + return findByCriteriaAPI(pageable, specList); + } + + /** + * + * @param distributionSetFilter + * had details of filters to be applied + * @return a single DistributionSet which is either installed or assigned to + * a specific target or {@code null}. + */ + private DistributionSet findDistributionSetsByFiltersAndInstalledOrAssignedTarget( + final DistributionSetFilter distributionSetFilter) { + final List> specList = buildDistributionSetSpecifications(distributionSetFilter); + if (specList == null || specList.isEmpty()) { + return null; + } + return distributionSetRepository.findOne(SpecificationsBuilder.combineWithAnd(specList)); + } + + @Override + public Page findDistributionSetsAll(final Pageable pageReq, final Boolean deleted, + final Boolean complete) { + final List> specList = new ArrayList<>(); + + if (deleted != null) { + final Specification spec = DistributionSetSpecification.isDeleted(deleted); + specList.add(spec); + } + + if (complete != null) { + final Specification spec = DistributionSetSpecification.isCompleted(complete); + specList.add(spec); + } + + return findByCriteriaAPI(pageReq, specList); + } + + @Override + public Page findDistributionSetsAll(final Specification spec, + final Pageable pageReq, final Boolean deleted) { + final List> specList = new ArrayList<>(); + if (deleted != null) { + specList.add(DistributionSetSpecification.isDeleted(deleted)); + } + specList.add(spec); + return findByCriteriaAPI(pageReq, specList); + } + + @Override + public Page findDistributionSetsAllOrderedByLinkTarget(final Pageable pageable, + final DistributionSetFilterBuilder distributionSetFilterBuilder, final String assignedOrInstalled) { + + final DistributionSetFilter filterWithInstalledTargets = distributionSetFilterBuilder + .setInstalledTargetId(assignedOrInstalled).setAssignedTargetId(null).build(); + final DistributionSet installedDS = findDistributionSetsByFiltersAndInstalledOrAssignedTarget( + filterWithInstalledTargets); + + final DistributionSetFilter filterWithAssignedTargets = distributionSetFilterBuilder.setInstalledTargetId(null) + .setAssignedTargetId(assignedOrInstalled).build(); + final DistributionSet assignedDS = findDistributionSetsByFiltersAndInstalledOrAssignedTarget( + filterWithAssignedTargets); + + final DistributionSetFilter dsFilterWithNoTargetLinked = distributionSetFilterBuilder.setInstalledTargetId(null) + .setAssignedTargetId(null).build(); + // first fine the distribution sets filtered by the given filter + // parameters + final Page findDistributionSetsByFilters = findDistributionSetsByFilters(pageable, + dsFilterWithNoTargetLinked); + + final List resultSet = new LinkedList<>(findDistributionSetsByFilters.getContent()); + int orderIndex = 0; + if (installedDS != null) { + final boolean remove = resultSet.remove(installedDS); + if (!remove) { + resultSet.remove(resultSet.size() - 1); + } + resultSet.add(orderIndex, installedDS); + orderIndex++; + } + if (assignedDS != null && !assignedDS.equals(installedDS)) { + final boolean remove = resultSet.remove(assignedDS); + if (!remove) { + resultSet.remove(resultSet.size() - 1); + } + resultSet.add(orderIndex, assignedDS); + } + + return new PageImpl<>(resultSet, pageable, findDistributionSetsByFilters.getTotalElements()); + } + + @Override + public DistributionSet findDistributionSetByNameAndVersion(final String distributionName, final String version) { + final Specification spec = DistributionSetSpecification + .equalsNameAndVersionIgnoreCase(distributionName, version); + return distributionSetRepository.findOne(spec); + + } + + @Override + public Iterable findDistributionSetList(final Collection dist) { + return distributionSetRepository.findAll(dist); + } + + @Override + public Long countDistributionSetsAll() { + + final List> specList = new ArrayList<>(); + + final Specification spec = DistributionSetSpecification.isDeleted(Boolean.FALSE); + specList.add(spec); + + return distributionSetRepository.count(SpecificationsBuilder.combineWithAnd(specList)); + } + + @Override + public Long countDistributionSetTypesAll() { + return distributionSetTypeRepository.countByDeleted(false); + } + + @Override + public DistributionSetType findDistributionSetTypeByName(final String name) { + return distributionSetTypeRepository.findOne(DistributionSetTypeSpecification.byName(name)); + } + + @Override + public DistributionSetType findDistributionSetTypeById(final Long id) { + return distributionSetTypeRepository.findOne(DistributionSetTypeSpecification.byId(id)); + } + + @Override + public DistributionSetType findDistributionSetTypeByKey(final String key) { + return distributionSetTypeRepository.findOne(DistributionSetTypeSpecification.byKey(key)); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public DistributionSetType createDistributionSetType(final DistributionSetType type) { + if (type.getId() != null) { + throw new EntityAlreadyExistsException("Given type contains an Id!"); + } + + return distributionSetTypeRepository.save(type); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void deleteDistributionSetType(final DistributionSetType type) { + + if (distributionSetRepository.countByType(type) > 0) { + final DistributionSetType toDelete = entityManager.merge(type); + toDelete.setDeleted(true); + distributionSetTypeRepository.save(toDelete); + } else { + distributionSetTypeRepository.delete(type.getId()); + } + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public DistributionSetMetadata createDistributionSetMetadata(final DistributionSetMetadata metadata) { + if (distributionSetMetadataRepository.exists(metadata.getId())) { + throwMetadataKeyAlreadyExists(metadata.getId().getKey()); + } + // merge base distribution set so optLockRevision gets updated and audit + // log written because + // modifying metadata is modifying the base distribution set itself for + // auditing purposes. + entityManager.merge(metadata.getDistributionSet()).setLastModifiedAt(0L); + return distributionSetMetadataRepository.save(metadata); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public List createDistributionSetMetadata( + final Collection metadata) { + for (final DistributionSetMetadata distributionSetMetadata : metadata) { + checkAndThrowAlreadyIfDistributionSetMetadataExists(distributionSetMetadata.getId()); + } + metadata.forEach(m -> entityManager.merge(m.getDistributionSet()).setLastModifiedAt(-1L)); + return (List) distributionSetMetadataRepository.save(metadata); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public DistributionSetMetadata updateDistributionSetMetadata(final DistributionSetMetadata metadata) { + // check if exists otherwise throw entity not found exception + findOne(metadata.getId()); + // touch it to update the lock revision because we are modifying the + // DS indirectly + entityManager.merge(metadata.getDistributionSet()).setLastModifiedAt(0L); + return distributionSetMetadataRepository.save(metadata); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public void deleteDistributionSetMetadata(final DsMetadataCompositeKey id) { + distributionSetMetadataRepository.delete(id); + } + + @Override + public Page findDistributionSetMetadataByDistributionSetId(final Long distributionSetId, + final Pageable pageable) { + + return distributionSetMetadataRepository.findAll( + (Specification) (root, query, cb) -> cb.equal( + root.get(DistributionSetMetadata_.distributionSet).get(DistributionSet_.id), distributionSetId), + pageable); + } + + @Override + public Page findDistributionSetMetadataByDistributionSetId(final Long distributionSetId, + final Specification spec, final Pageable pageable) { + return distributionSetMetadataRepository + .findAll( + (Specification) (root, query, + cb) -> cb.and( + cb.equal(root.get(DistributionSetMetadata_.distributionSet) + .get(DistributionSet_.id), distributionSetId), + spec.toPredicate(root, query, cb)), + pageable); + } + + @Override + public DistributionSetMetadata findOne(final DsMetadataCompositeKey id) { + final DistributionSetMetadata findOne = distributionSetMetadataRepository.findOne(id); + if (findOne == null) { + throw new EntityNotFoundException("Metadata with key '" + id.getKey() + "' does not exist"); + } + return findOne; + } + + @Override + public DistributionSet findDistributionSetByAction(final Action action) { + return distributionSetRepository.findByAction(action); + } + + @Override + public boolean isDistributionSetInUse(final DistributionSet distributionSet) { + return actionRepository.countByDistributionSet(distributionSet) > 0; + } + + private static List> buildDistributionSetSpecifications( + final DistributionSetFilter distributionSetFilter) { + final List> specList = new ArrayList<>(); + + Specification spec; + + if (null != distributionSetFilter.getIsComplete()) { + spec = DistributionSetSpecification.isCompleted(distributionSetFilter.getIsComplete()); + specList.add(spec); + } + + if (null != distributionSetFilter.getIsDeleted()) { + spec = DistributionSetSpecification.isDeleted(distributionSetFilter.getIsDeleted()); + specList.add(spec); + } + + if (distributionSetFilter.getType() != null) { + spec = DistributionSetSpecification.byType(distributionSetFilter.getType()); + specList.add(spec); + } + + if (!Strings.isNullOrEmpty(distributionSetFilter.getSearchText())) { + spec = DistributionSetSpecification.likeNameOrDescriptionOrVersion(distributionSetFilter.getSearchText()); + specList.add(spec); + } + + if (isDSWithNoTagSelected(distributionSetFilter) || isTagsSelected(distributionSetFilter)) { + spec = DistributionSetSpecification.hasTags(distributionSetFilter.getTagNames(), + distributionSetFilter.getSelectDSWithNoTag()); + specList.add(spec); + } + if (distributionSetFilter.getInstalledTargetId() != null) { + spec = DistributionSetSpecification.installedTarget(distributionSetFilter.getInstalledTargetId()); + specList.add(spec); + } + if (distributionSetFilter.getAssignedTargetId() != null) { + spec = DistributionSetSpecification.assignedTarget(distributionSetFilter.getAssignedTargetId()); + specList.add(spec); + } + return specList; + } + + private void checkDistributionSetSoftwareModulesIsAllowedToModify(final DistributionSet distributionSet, + final Set softwareModules) { + if (!new HashSet(distributionSet.getModules()).equals(softwareModules) + && actionRepository.countByDistributionSet(distributionSet) > 0) { + throw new EntityLockedException( + String.format("distribution set %s:%s is already assigned to targets and cannot be changed", + distributionSet.getName(), distributionSet.getVersion())); + } + } + + private static Boolean isDSWithNoTagSelected(final DistributionSetFilter distributionSetFilter) { + if (distributionSetFilter.getSelectDSWithNoTag() != null && distributionSetFilter.getSelectDSWithNoTag()) { + return true; + } + return false; + } + + private static Boolean isTagsSelected(final DistributionSetFilter distributionSetFilter) { + if (distributionSetFilter.getTagNames() != null && !distributionSetFilter.getTagNames().isEmpty()) { + return true; + } + return false; + } + + /** + * executes findAll with the given {@link DistributionSet} + * {@link Specification}s. + * + * @param pageable + * paging parameter + * @param specList + * list of @link {@link Specification} + * @return the page with the found {@link DistributionSet} + */ + private Page findByCriteriaAPI(final Pageable pageable, + final List> specList) { + + if (specList == null || specList.isEmpty()) { + return distributionSetRepository.findAll(pageable); + } + + return distributionSetRepository.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable); + } + + private void checkAndThrowAlreadyIfDistributionSetMetadataExists(final DsMetadataCompositeKey metadataId) { + if (distributionSetMetadataRepository.exists(metadataId)) { + throw new EntityAlreadyExistsException( + "Metadata entry with key '" + metadataId.getKey() + "' already exists"); + } + } + + private static void throwMetadataKeyAlreadyExists(final String metadataKey) { + throw new EntityAlreadyExistsException("Metadata entry with key '" + metadataKey + "' already exists"); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public List assignTag(final Collection dsIds, final DistributionSetTag tag) { + final List allDs = findDistributionSetListWithDetails(dsIds); + + allDs.forEach(ds -> ds.getTags().add(tag)); + final List save = distributionSetRepository.save(allDs); + + afterCommit.afterCommit(() -> { + + final DistributionSetTagAssignmentResult result = new DistributionSetTagAssignmentResult(0, save.size(), 0, + save, Collections.emptyList(), tag); + eventBus.post(new DistributionSetTagAssigmentResultEvent(result)); + }); + + return save; + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public List unAssignAllDistributionSetsByTag(final DistributionSetTag tag) { + return unAssignTag(tag.getAssignedToDistributionSet(), tag); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public DistributionSet unAssignTag(final Long dsId, final DistributionSetTag distributionSetTag) { + final List allDs = findDistributionSetListWithDetails(Arrays.asList(dsId)); + final List unAssignTag = unAssignTag(allDs, distributionSetTag); + return unAssignTag.isEmpty() ? null : unAssignTag.get(0); + } + + private List unAssignTag(final Collection distributionSets, + final DistributionSetTag tag) { + distributionSets.forEach(ds -> ds.getTags().remove(tag)); + return distributionSetRepository.save(distributionSets); + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java new file mode 100644 index 000000000..f0f704352 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java @@ -0,0 +1,433 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Expression; +import javax.persistence.criteria.Join; +import javax.persistence.criteria.JoinType; +import javax.persistence.criteria.ListJoin; +import javax.persistence.criteria.Root; + +import org.eclipse.hawkbit.report.model.DataReportSeries; +import org.eclipse.hawkbit.report.model.DataReportSeriesItem; +import org.eclipse.hawkbit.report.model.InnerOuterDataReportSeries; +import org.eclipse.hawkbit.report.model.SeriesTime; +import org.eclipse.hawkbit.repository.ReportManagement; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSet_; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.repository.model.TargetInfo_; +import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.model.Target_; +import org.eclipse.hawkbit.tenancy.TenantAware; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +/** + * Service layer for generating hawkBit reports. + * + */ +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) +@Validated +@Service +public class JpaReportManagement implements ReportManagement { + + @Value("${spring.jpa.database}") + private String databaseType; + + private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM"); + + private static final String H2_TARGET_CREATED_SQL_TEMPLATE = "SELECT TO_CHAR( DATEADD('second', target0_.created_at / 1000, DATE '1970-01-01'), '%s') AS col_0_0_, count(target0_.controller_id) AS col_1_0_ from sp_target target0_ WHERE TO_CHAR(DATEADD('second', target0_.created_at / 1000, DATE '1970-01-01'),'%s') BETWEEN TO_CHAR('%s', '%s') and TO_CHAR('%s', '%s') AND UPPER(target0_.tenant)=UPPER('%s') GROUP BY TO_CHAR(DATEADD('second', target0_.created_at / 1000, DATE '1970-01-01'), '%s')"; + + private static final String H2_CONTROLLER_FRRDBACK_SQL_TEMPLATE = "SELECT TO_CHAR(DATEADD('second', action_.created_at / 1000, DATE '1970-01-01'), '%s') AS col_0_0_, count(action_.id) AS col_1_0_ FROM sp_action action_ WHERE TO_CHAR(DATEADD('second', action_.created_at / 1000, DATE '1970-01-01'), '%s') BETWEEN TO_CHAR('%s', '%s') AND TO_CHAR('%s', '%s') AND UPPER(action_.tenant)=UPPER('%s') GROUP BY TO_CHAR(DATEADD('second', action_.created_at / 1000, DATE '1970-01-01'), '%s')"; + + private static final String MYSQL_TARGET_CREATED_SQL_TEMPLATE = "SELECT DATE_FORMAT(FROM_UNIXTIME(target0_.created_at / 1000), '%s') AS col_0_0_, COUNT(target0_.controller_id) AS col_1_0_ FROM sp_target target0_ WHERE DATE_FORMAT(FROM_UNIXTIME(target0_.created_at / 1000),'%s') BETWEEN DATE_FORMAT('%s', '%s') AND DATE_FORMAT('%s', '%s') AND UPPER(target0_.tenant)=UPPER('%s') GROUP BY DATE_FORMAT(FROM_UNIXTIME(target0_.created_at / 1000), '%s')"; + + private static final String MYSQL_CONTROLLER_FRRDBACK_SQL_TEMPLATE = "SELECT DATE_FORMAT(FROM_UNIXTIME(action_.created_at / 1000), '%s') AS col_0_0_, COUNT(action_.id) as col_1_0_ FROM sp_action action_ WHERE DATE_FORMAT(FROM_UNIXTIME(action_.created_at / 1000),'%s') BETWEEN DATE_FORMAT('%s', '%s') AND DATE_FORMAT('%s', '%s') AND UPPER(action_.tenant)=UPPER('%s') GROUP BY DATE_FORMAT(FROM_UNIXTIME(action_.created_at / 1000), '%s')"; + + private static final String MYSQL_DB_TYPE = "MYSQL"; + + private static final String H2_DB_TYPE = "H2"; + + @Autowired + private EntityManager entityManager; + + @Autowired + private TenantAware tenantAware; + + @Override + @Cacheable("targetStatus") + public DataReportSeries targetStatus() { + + final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + final CriteriaQuery query = cb.createQuery(Object[].class); + final Root targetRoot = query.from(Target.class); + final Join targetInfo = targetRoot.join(Target_.targetInfo); + final Expression countColumn = cb.count(targetInfo.get(TargetInfo_.targetId)); + final CriteriaQuery multiselect = query + .multiselect(targetInfo.get(TargetInfo_.updateStatus), countColumn) + .groupBy(targetInfo.get(TargetInfo_.updateStatus)) + .orderBy(cb.desc(targetInfo.get(TargetInfo_.updateStatus))); + + // | col1 | col2 | + // | U_STATUS | COUNT | + final List resultList = entityManager.createQuery(multiselect).getResultList(); + + final List> reportSeriesItems = resultList.stream() + .map(r -> new DataReportSeriesItem((TargetUpdateStatus) r[0], (Long) r[1])) + .collect(Collectors.toList()); + + return new DataReportSeries<>("Target Status Overview", reportSeriesItems); + } + + @Override + @Cacheable("distributionUsageAssigned") + public List> distributionUsageAssigned(final int topXEntries) { + + // top X entries distribution usage + final CriteriaBuilder cbTopX = entityManager.getCriteriaBuilder(); + final CriteriaQuery queryTopX = cbTopX.createQuery(Object[].class); + final Root rootTopX = queryTopX.from(DistributionSet.class); + final ListJoin joinTopX = rootTopX.join(DistributionSet_.assignedToTargets, + JoinType.LEFT); + final Expression countColumn = cbTopX.count(joinTopX); + // top x usage query + final CriteriaQuery groupBy = queryTopX + .multiselect(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version), countColumn) + .where(cbTopX.equal(rootTopX.get(DistributionSet_.deleted), false)) + .groupBy(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version)) + .orderBy(cbTopX.desc(countColumn), cbTopX.asc(rootTopX.get(DistributionSet_.name))); + // | col1 | col2 | col3 | + // | NAME | VER | COUNT | + final List resultListTop = entityManager.createQuery(groupBy).getResultList(); + // end of top X entries distribution usage + + return mapDistirbutionUsageResultToDataReport(topXEntries, resultListTop); + } + + @Override + @Cacheable("distributionUsageInstalled") + public List> distributionUsageInstalled(final int topXEntries) { + // top X entries distribution usage + final CriteriaBuilder cbTopX = entityManager.getCriteriaBuilder(); + final CriteriaQuery queryTopX = cbTopX.createQuery(Object[].class); + final Root rootTopX = queryTopX.from(DistributionSet.class); + final ListJoin joinTopX = rootTopX.join(DistributionSet_.installedAtTargets, + JoinType.LEFT); + final Expression countColumn = cbTopX.count(joinTopX); + // top x usage query + final CriteriaQuery groupBy = queryTopX + .multiselect(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version), countColumn) + .where(cbTopX.equal(rootTopX.get(DistributionSet_.deleted), false)) + .groupBy(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version)) + .orderBy(cbTopX.desc(countColumn), cbTopX.asc(rootTopX.get(DistributionSet_.name))); + // | col1 | col2 | col3 | + // | NAME | VER | COUNT | + final List resultListTop = entityManager.createQuery(groupBy).getResultList(); + // end of top X entries distribution usage + + return mapDistirbutionUsageResultToDataReport(topXEntries, resultListTop); + } + + @Override + @Cacheable("targetsCreatedOverPeriod") + public DataReportSeries targetsCreatedOverPeriod(final DateType dateType, + final LocalDateTime from, final LocalDateTime to) { + final Query createNativeQuery = entityManager + .createNativeQuery(getTargetsCreatedQueryTemplate(dateType, from, to)); + final List resultList = createNativeQuery.getResultList(); + + final List> reportItems = resultList.stream() + .map(r -> new DataReportSeriesItem<>(dateType.format((String) r[0]), ((Number) r[1]).longValue())) + .collect(Collectors.toList()); + + return new DataReportSeries<>("CreatedTargets", reportItems); + } + + private String getTargetsCreatedQueryTemplate(final DateType dateType, final LocalDateTime from, + final LocalDateTime to) { + switch (databaseType) { + case H2_DB_TYPE: + return String.format(H2_TARGET_CREATED_SQL_TEMPLATE, dateTimeFormatToSqlFormat(dateType), + dateTimeFormatToSqlFormat(dateType), from.format(DATE_FORMAT), dateTimeFormatToSqlFormat(dateType), + to.format(DATE_FORMAT), dateTimeFormatToSqlFormat(dateType), tenantAware.getCurrentTenant(), + dateTimeFormatToSqlFormat(dateType)); + case MYSQL_DB_TYPE: + return String.format(MYSQL_TARGET_CREATED_SQL_TEMPLATE, dateTimeFormatToSqlFormat(dateType), + dateTimeFormatToSqlFormat(dateType), from.toString(), dateTimeFormatToSqlFormat(dateType), + to.toString(), dateTimeFormatToSqlFormat(dateType), tenantAware.getCurrentTenant(), + dateTimeFormatToSqlFormat(dateType)); + default: + return null; + } + } + + private String getFeedbackReceivedQueryTemplate(final DateType dateType, final LocalDateTime from, + final LocalDateTime to) { + switch (databaseType) { + case H2_DB_TYPE: + return String.format(H2_CONTROLLER_FRRDBACK_SQL_TEMPLATE, dateTimeFormatToSqlFormat(dateType), + dateTimeFormatToSqlFormat(dateType), from.format(DATE_FORMAT), dateTimeFormatToSqlFormat(dateType), + to.format(DATE_FORMAT), dateTimeFormatToSqlFormat(dateType), tenantAware.getCurrentTenant(), + dateTimeFormatToSqlFormat(dateType)); + case MYSQL_DB_TYPE: + return String.format(MYSQL_CONTROLLER_FRRDBACK_SQL_TEMPLATE, dateTimeFormatToSqlFormat(dateType), + dateTimeFormatToSqlFormat(dateType), from.toString(), dateTimeFormatToSqlFormat(dateType), + to.toString(), dateTimeFormatToSqlFormat(dateType), tenantAware.getCurrentTenant(), + dateTimeFormatToSqlFormat(dateType)); + default: + return null; + } + } + + @Override + @Cacheable("feedbackReceivedOverTime") + public DataReportSeries feedbackReceivedOverTime(final DateType dateType, + final LocalDateTime from, final LocalDateTime to) { + final Query createNativeQuery = entityManager + .createNativeQuery(getFeedbackReceivedQueryTemplate(dateType, from, to)); + final List resultList = createNativeQuery.getResultList(); + + final List> reportItems = resultList.stream() + .map(r -> new DataReportSeriesItem<>(dateType.format((String) r[0]), ((Number) r[1]).longValue())) + .collect(Collectors.toList()); + + return new DataReportSeries<>("FeedbackRecieved", reportItems); + } + + @Override + @Cacheable("targetsLastPoll") + public DataReportSeries targetsLastPoll() { + + final LocalDateTime now = LocalDateTime.now(); + final LocalDateTime beforeHour = now.minusHours(1); + final LocalDateTime beforeDay = now.minusDays(1); + final LocalDateTime beforeWeek = now.minusWeeks(1); + final LocalDateTime beforeMonth = now.minusMonths(1); + final LocalDateTime beforeYear = now.minusYears(1); + + final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + final List> resultList = new ArrayList<>(); + + // hours + resultList.add(new DataReportSeriesItem(SeriesTime.HOUR, + entityManager.createQuery(createCountSelectTargetsLastPoll(cb, beforeHour, now)).getSingleResult())); + // days + resultList.add(new DataReportSeriesItem(SeriesTime.DAY, entityManager + .createQuery(createCountSelectTargetsLastPoll(cb, beforeDay, beforeHour)).getSingleResult())); + // weeks + resultList.add(new DataReportSeriesItem(SeriesTime.WEEK, entityManager + .createQuery(createCountSelectTargetsLastPoll(cb, beforeWeek, beforeDay)).getSingleResult())); + // months + resultList.add(new DataReportSeriesItem(SeriesTime.MONTH, entityManager + .createQuery(createCountSelectTargetsLastPoll(cb, beforeMonth, beforeWeek)).getSingleResult())); + // years + resultList.add(new DataReportSeriesItem(SeriesTime.YEAR, entityManager + .createQuery(createCountSelectTargetsLastPoll(cb, beforeYear, beforeMonth)).getSingleResult())); + // years + resultList.add(new DataReportSeriesItem(SeriesTime.MORE_THAN_YEAR, + entityManager.createQuery(createCountSelectTargetsLastPoll(cb, null, beforeYear)).getSingleResult())); + // never + resultList.add(new DataReportSeriesItem(SeriesTime.NEVER, + entityManager.createQuery(createCountSelectTargetsLastPoll(cb, null, null)).getSingleResult())); + + return new DataReportSeries<>("TargetLastPoll", resultList); + } + + private CriteriaQuery createCountSelectTargetsLastPoll(final CriteriaBuilder cb, final LocalDateTime from, + final LocalDateTime to) { + + Long start = null; + Long end = null; + if (from != null) { + start = from.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); + } + if (to != null) { + end = to.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); + } + + // count select statement + final CriteriaQuery countSelect = cb.createQuery(Long.class); + final Root countSelectRoot = countSelect.from(Target.class); + final Join targetInfoJoin = countSelectRoot.join(Target_.targetInfo); + countSelect.select(cb.count(countSelectRoot)); + if (start != null && end != null) { + countSelect.where(cb.between(targetInfoJoin.get(TargetInfo_.lastTargetQuery), start, end)); + } else if (from == null && to != null) { + countSelect.where(cb.lessThanOrEqualTo(targetInfoJoin.get(TargetInfo_.lastTargetQuery), end)); + } else { + countSelect.where(cb.isNull(targetInfoJoin.get(TargetInfo_.lastTargetQuery))); + } + return countSelect; + } + + private List> mapDistirbutionUsageResultToDataReport(final int topXEntries, + final List resultListTop) { + final List> innerOuterReport = new ArrayList<>(); + final Map map = new LinkedHashMap<>(); + + int topXCounter = 0; + + for (final Object[] objects : resultListTop) { + + final boolean containsInnerOuter = map.containsKey(new DSName((String) objects[0])); + final String name = containsInnerOuter || topXCounter < topXEntries ? (String) objects[0] : null; + final DSName dsName = new DSName(name); + final String version = containsInnerOuter || topXCounter < topXEntries ? (String) objects[1] : null; + final Long count = (Long) objects[2]; + + InnerOuter innerouter = map.get(dsName); + if (innerouter == null) { + topXCounter++; + innerouter = new InnerOuter(dsName); + map.put(new DSName(name), innerouter); + } + innerouter.addOuter(new DSName(version), count); + } + + for (final InnerOuter inner : map.values()) { + final List> outerReportItems = new ArrayList<>(); + + if (inner.name.getName() != null) { + for (final InnerOuter outer : inner.outer) { + outerReportItems.add(outer.toItem()); + } + } else { + outerReportItems.add(new DataReportSeriesItem("misc", inner.count)); + } + + innerOuterReport.add(new InnerOuterDataReportSeries( + new DataReportSeries<>("DS-Name", Collections.singletonList(inner.toItem())), + new DataReportSeries<>("DS-Version", outerReportItems))); + } + + return innerOuterReport; + } + + private static final class InnerOuter { + final DSName name; + long count; + final List outer; + + private InnerOuter(final DSName idName) { + name = idName; + outer = new ArrayList<>(); + } + + private InnerOuter(final DSName idName, final long count) { + name = idName; + this.count = count; + outer = new ArrayList<>(); + } + + private void addOuter(final DSName idName, final long count) { + outer.add(new InnerOuter(idName, count)); + this.count += count; + } + + private DataReportSeriesItem toItem() { + return new DataReportSeriesItem<>(name.getName() != null ? name.getName() : "misc", count); + } + } + + /** + * Object contains the name and the id of an entity. + * + */ + private static final class DSName { + + private final String name; + + /** + * @param id + * the ID of an entity + * @param name + * the name of an entity + */ + private DSName(final String name) { + this.name = name; + } + + /** + * @return the name + */ + private String getName() { + return name; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (name == null ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { // NOSONAR - as this is + // generated + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final DSName other = (DSName) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "DSName [name=" + name + "]"; + } + } + + private String dateTimeFormatToSqlFormat(final DateType datatype) { + switch (databaseType) { + case H2_DB_TYPE: + return datatype.h2Format(); + case MYSQL_DB_TYPE: + return datatype.mySqlFormat(); + default: + return null; + } + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java new file mode 100644 index 000000000..3de83d381 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java @@ -0,0 +1,178 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.persistence.EntityManager; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Join; +import javax.persistence.criteria.JoinType; +import javax.persistence.criteria.ListJoin; +import javax.persistence.criteria.Root; + +import org.eclipse.hawkbit.repository.RolloutGroupManagement; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.Action_; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup_; +import org.eclipse.hawkbit.repository.model.RolloutTargetGroup; +import org.eclipse.hawkbit.repository.model.RolloutTargetGroup_; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetWithActionStatus; +import org.eclipse.hawkbit.repository.model.Target_; +import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +/** + * RolloutGroupManagement to control rollout groups. This service secures all + * the functionality based on the {@link PreAuthorize} annotation on methods. + */ +@Validated +@Service +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) +public class JpaRolloutGroupManagement implements RolloutGroupManagement { + + @Autowired + private RolloutGroupRepository rolloutGroupRepository; + + @Autowired + private ActionRepository actionRepository; + + @Autowired + private TargetRepository targetRepository; + + @Autowired + private EntityManager entityManager; + + @Override + public RolloutGroup findRolloutGroupById(final Long rolloutGroupId) { + return rolloutGroupRepository.findOne(rolloutGroupId); + } + + @Override + public Page findRolloutGroupsByRolloutId(final Long rolloutId, final Pageable page) { + return rolloutGroupRepository.findByRolloutId(rolloutId, page); + } + + @Override + public Page findRolloutGroupsAll(final Rollout rollout, + final Specification specification, final Pageable page) { + return rolloutGroupRepository.findAll((root, query, criteriaBuilder) -> criteriaBuilder.and( + criteriaBuilder.equal(root.get(RolloutGroup_.rollout), rollout), + specification.toPredicate(root, query, criteriaBuilder)), page); + } + + @Override + public Page findAllRolloutGroupsWithDetailedStatus(final Long rolloutId, final Pageable page) { + final Page rolloutGroups = rolloutGroupRepository.findByRolloutId(rolloutId, page); + final List rolloutGroupIds = rolloutGroups.getContent().stream().map(rollout -> rollout.getId()) + .collect(Collectors.toList()); + final Map> allStatesForRollout = getStatusCountItemForRolloutGroup( + rolloutGroupIds); + + for (final RolloutGroup rolloutGroup : rolloutGroups) { + final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus( + allStatesForRollout.get(rolloutGroup.getId()), rolloutGroup.getTotalTargets()); + rolloutGroup.setTotalTargetCountStatus(totalTargetCountStatus); + } + + return rolloutGroups; + } + + @Override + public RolloutGroup findRolloutGroupWithDetailedStatus(final Long rolloutGroupId) { + final RolloutGroup rolloutGroup = findRolloutGroupById(rolloutGroupId); + final List rolloutStatusCountItems = actionRepository + .getStatusCountByRolloutGroupId(rolloutGroupId); + + final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus(rolloutStatusCountItems, + rolloutGroup.getTotalTargets()); + rolloutGroup.setTotalTargetCountStatus(totalTargetCountStatus); + return rolloutGroup; + + } + + private Map> getStatusCountItemForRolloutGroup( + final List rolloutGroupIds) { + final List resultList = actionRepository + .getStatusCountByRolloutGroupId(rolloutGroupIds); + return resultList.stream().collect(Collectors.groupingBy(TotalTargetCountActionStatus::getId)); + } + + @Override + public Page findRolloutGroupTargets(final RolloutGroup rolloutGroup, + final Specification specification, final Pageable page) { + return targetRepository.findAll((root, query, criteriaBuilder) -> { + final ListJoin rolloutTargetJoin = root.join(Target_.rolloutTargetGroup); + return criteriaBuilder.and(specification.toPredicate(root, query, criteriaBuilder), + criteriaBuilder.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); + }, page); + } + + @Override + public Page findRolloutGroupTargets(final RolloutGroup rolloutGroup, final Pageable page) { + if (isRolloutStatusReady(rolloutGroup)) { + // in case of status ready the action has not been created yet and + // the relation information between target and rollout-group is + // stored in the #TargetRolloutGroup. + return targetRepository.findByRolloutTargetGroupRolloutGroupId(rolloutGroup.getId(), page); + } + return targetRepository.findByActionsRolloutGroup(rolloutGroup, page); + } + + private static boolean isRolloutStatusReady(final RolloutGroup rolloutGroup) { + return rolloutGroup != null && RolloutStatus.READY.equals(rolloutGroup.getRollout().getStatus()); + } + + @Override + public Page findAllTargetsWithActionStatus(final PageRequest pageRequest, + final RolloutGroup rolloutGroup) { + + final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + final CriteriaQuery query = cb.createQuery(Object[].class); + final CriteriaQuery countQuery = cb.createQuery(Long.class); + + final Root targetRoot = query.distinct(true).from(RolloutTargetGroup.class); + final Join targetJoin = targetRoot.join(RolloutTargetGroup_.target); + final ListJoin actionJoin = targetRoot.join(RolloutTargetGroup_.actions, + JoinType.LEFT); + + final Root countQueryFrom = countQuery.distinct(true).from(RolloutTargetGroup.class); + countQueryFrom.join(RolloutTargetGroup_.target); + countQueryFrom.join(RolloutTargetGroup_.actions, JoinType.LEFT); + countQuery.select(cb.count(countQueryFrom)) + .where(cb.equal(countQueryFrom.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); + final Long totalCount = entityManager.createQuery(countQuery).getSingleResult(); + + final CriteriaQuery multiselect = query.multiselect(targetJoin, actionJoin.get(Action_.status)) + .where(cb.equal(targetRoot.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); + final List targetWithActionStatus = entityManager.createQuery(multiselect) + .setFirstResult(pageRequest.getOffset()).setMaxResults(pageRequest.getPageSize()).getResultList() + .stream().map(o -> new TargetWithActionStatus((Target) o[0], (Action.Status) o[1])) + .collect(Collectors.toList()); + return new PageImpl<>(targetWithActionStatus, pageRequest, totalCount); + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java new file mode 100644 index 000000000..1f6e9b9a4 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -0,0 +1,653 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executor; +import java.util.stream.Collectors; + +import javax.persistence.EntityManager; + +import org.eclipse.hawkbit.cache.CacheWriteNotify; +import org.eclipse.hawkbit.repository.DeploymentManagement; +import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.Action.ActionType; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.model.RolloutTargetGroup; +import org.eclipse.hawkbit.repository.model.Rollout_; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.rollout.condition.RolloutGroupActionEvaluator; +import org.eclipse.hawkbit.rollout.condition.RolloutGroupConditionEvaluator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.ApplicationContext; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.data.domain.Sort; +import org.springframework.data.domain.Sort.Direction; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Service; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.DefaultTransactionDefinition; +import org.springframework.transaction.support.TransactionTemplate; +import org.springframework.util.Assert; +import org.springframework.validation.annotation.Validated; + +/** + * RolloutManagement to control rollouts e.g. like creating, starting, resuming + * and pausing rollouts. This service secures all the functionality based on the + * {@link PreAuthorize} annotation on methods. + */ +@Validated +@Service +@EnableScheduling +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) +public class JpaRolloutManagement implements RolloutManagement { + private static final Logger LOGGER = LoggerFactory.getLogger(RolloutManagement.class); + + @Autowired + private EntityManager entityManager; + + @Autowired + private RolloutRepository rolloutRepository; + + @Autowired + private TargetManagement targetManagement; + + @Autowired + private TargetRepository targetRepository; + + @Autowired + private RolloutGroupRepository rolloutGroupRepository; + + @Autowired + private DeploymentManagement deploymentManagement; + + @Autowired + private RolloutTargetGroupRepository rolloutTargetGroupRepository; + + @Autowired + private ActionRepository actionRepository; + + @Autowired + private ApplicationContext context; + + @Autowired + private NoCountPagingRepository criteriaNoCountDao; + + @Autowired + private PlatformTransactionManager txManager; + + @Autowired + private CacheWriteNotify cacheWriteNotify; + + @Autowired + @Qualifier("asyncExecutor") + private Executor executor; + + /* + * set which stores the rollouts which are asynchronously creating. This is + * necessary to verify rollouts which maybe stuck during creationg e.g. + * because of database interruption, failures or even application crash. + * !This is not cluster aware! + */ + private static final Set creatingRollouts = ConcurrentHashMap.newKeySet(); + + /* + * set which stores the rollouts which are asynchronously starting. This is + * necessary to verify rollouts which maybe stuck during starting e.g. + * because of database interruption, failures or even application crash. + * !This is not cluster aware! + */ + private static final Set startingRollouts = ConcurrentHashMap.newKeySet(); + + @Override + public Page findAll(final Pageable page) { + return rolloutRepository.findAll(page); + } + + @Override + public Page findAllWithDetailedStatusByPredicate(final Specification specification, + final Pageable page) { + final Page findAll = rolloutRepository.findAll(specification, page); + setRolloutStatusDetails(findAll); + return findAll; + } + + @Override + public Rollout findRolloutById(final Long rolloutId) { + return rolloutRepository.findOne(rolloutId); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public Rollout createRollout(final Rollout rollout, final int amountGroup, + final RolloutGroupConditions conditions) { + final Rollout savedRollout = createRollout(rollout, amountGroup); + return createRolloutGroups(amountGroup, conditions, savedRollout); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public Rollout createRolloutAsync(final Rollout rollout, final int amountGroup, + final RolloutGroupConditions conditions) { + final Rollout savedRollout = createRollout(rollout, amountGroup); + creatingRollouts.add(savedRollout.getName()); + // need to flush the entity manager here to get the ID of the rollout, + // because entity manager is set to FlushMode#Auto, entitymanager will + // flush the Target entity, due the indirect relationship to the Rollout + // entity without set an ID JPA is throwing a Invalid + // 'org.springframework.dao.InvalidDataAccessApiUsageException: During + // synchronization aect was found through a relationship that was not + // marked cascade PERSIST' + entityManager.flush(); + executor.execute(() -> { + try { + createRolloutGroupsInNewTransaction(amountGroup, conditions, savedRollout); + } finally { + creatingRollouts.remove(savedRollout.getName()); + } + }); + return savedRollout; + } + + private Rollout createRollout(final Rollout rollout, final int amountGroup) { + verifyRolloutGroupParameter(amountGroup); + final Long totalTargets = targetManagement.countTargetByTargetFilterQuery(rollout.getTargetFilterQuery()); + rollout.setTotalTargets(totalTargets.longValue()); + return rolloutRepository.save(rollout); + } + + private static void verifyRolloutGroupParameter(final int amountGroup) { + if (amountGroup <= 0) { + throw new IllegalArgumentException("the amountGroup must be greater than zero"); + } else if (amountGroup > 500) { + throw new IllegalArgumentException("the amountGroup must not be greater than 500"); + } + } + + private Rollout createRolloutGroupsInNewTransaction(final int amountOfGroups, + final RolloutGroupConditions conditions, final Rollout savedRollout) { + final DefaultTransactionDefinition def = new DefaultTransactionDefinition(); + def.setName("creatingRollout"); + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + return new TransactionTemplate(txManager, def) + .execute(status -> createRolloutGroups(amountOfGroups, conditions, savedRollout)); + } + + /** + * Method for creating rollout groups and calculating group sizes. Group + * sizes are calculated by dividing the total count of targets through the + * amount of given groups. In same cases this will lead to less rollout + * groups than given by client. + * + * @param amountOfGroups + * the amount of groups + * @param conditions + * the rollout group conditions + * @param savedRollout + * the rollout + * @return the rollout with created groups + */ + private Rollout createRolloutGroups(final int amountOfGroups, final RolloutGroupConditions conditions, + final Rollout savedRollout) { + int pageIndex = 0; + int groupIndex = 0; + final Long totalCount = savedRollout.getTotalTargets(); + final int groupSize = (int) Math.ceil((double) totalCount / (double) amountOfGroups); + // validate if the amount of groups that will be created are the amount + // of groups that the client what's to have created. + int amountGroupValidated = amountOfGroups; + final int amountGroupCreation = (int) (Math.ceil((double) totalCount / (double) groupSize)); + if (amountGroupCreation == (amountOfGroups - 1)) { + amountGroupValidated--; + } + RolloutGroup lastSavedGroup = null; + while (pageIndex < totalCount) { + groupIndex++; + final String nameAndDesc = "group-" + groupIndex; + final RolloutGroup group = new RolloutGroup(); + group.setName(nameAndDesc); + group.setDescription(nameAndDesc); + group.setRollout(savedRollout); + group.setParent(lastSavedGroup); + group.setSuccessCondition(conditions.getSuccessCondition()); + group.setSuccessConditionExp(conditions.getSuccessConditionExp()); + group.setErrorCondition(conditions.getErrorCondition()); + group.setErrorConditionExp(conditions.getErrorConditionExp()); + group.setErrorAction(conditions.getErrorAction()); + group.setErrorActionExp(conditions.getErrorActionExp()); + + final RolloutGroup savedGroup = rolloutGroupRepository.save(group); + + final Slice targetGroup = targetManagement.findTargetsAll(savedRollout.getTargetFilterQuery(), + new OffsetBasedPageRequest(pageIndex, groupSize, new Sort(Direction.ASC, "id"))); + savedGroup.setTotalTargets(targetGroup.getContent().size()); + + lastSavedGroup = savedGroup; + + targetGroup + .forEach(target -> rolloutTargetGroupRepository.save(new RolloutTargetGroup(savedGroup, target))); + cacheWriteNotify.rolloutGroupCreated(groupIndex, savedRollout.getId(), savedGroup.getId(), + amountGroupValidated, groupIndex); + pageIndex += groupSize; + } + + savedRollout.setStatus(RolloutStatus.READY); + return rolloutRepository.save(savedRollout); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public Rollout startRollout(final Rollout rollout) { + final Rollout mergedRollout = entityManager.merge(rollout); + checkIfRolloutCanStarted(rollout, mergedRollout); + return doStartRollout(mergedRollout); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public Rollout startRolloutAsync(final Rollout rollout) { + final Rollout mergedRollout = entityManager.merge(rollout); + checkIfRolloutCanStarted(rollout, mergedRollout); + mergedRollout.setStatus(RolloutStatus.STARTING); + final Rollout updatedRollout = rolloutRepository.save(mergedRollout); + startingRollouts.add(updatedRollout.getName()); + executor.execute(() -> { + try { + final DefaultTransactionDefinition def = new DefaultTransactionDefinition(); + def.setName("startingRollout"); + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + new TransactionTemplate(txManager, def).execute(status -> { + doStartRollout(updatedRollout); + return null; + }); + } finally { + startingRollouts.remove(updatedRollout.getName()); + } + }); + return updatedRollout; + + } + + private Rollout doStartRollout(final Rollout rollout) { + final DistributionSet distributionSet = rollout.getDistributionSet(); + final ActionType actionType = rollout.getActionType(); + final long forceTime = rollout.getForcedTime(); + final List rolloutGroups = rolloutGroupRepository.findByRolloutOrderByIdAsc(rollout); + for (int iGroup = 0; iGroup < rolloutGroups.size(); iGroup++) { + final RolloutGroup rolloutGroup = rolloutGroups.get(iGroup); + final List targetGroup = targetRepository.findByRolloutTargetGroupRolloutGroup(rolloutGroup); + // firstgroup can already be started + if (iGroup == 0) { + final List targetsWithActionType = targetGroup.stream() + .map(t -> new TargetWithActionType(t.getControllerId(), actionType, forceTime)) + .collect(Collectors.toList()); + deploymentManagement.assignDistributionSet(distributionSet.getId(), targetsWithActionType, rollout, + rolloutGroup); + rolloutGroup.setStatus(RolloutGroupStatus.RUNNING); + } else { + // create only not active actions with status scheduled so they + // can be activated later + deploymentManagement.createScheduledAction(targetGroup, distributionSet, actionType, forceTime, rollout, + rolloutGroup); + rolloutGroup.setStatus(RolloutGroupStatus.SCHEDULED); + } + rolloutGroupRepository.save(rolloutGroup); + } + rollout.setStatus(RolloutStatus.RUNNING); + return rolloutRepository.save(rollout); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public void pauseRollout(final Rollout rollout) { + final Rollout mergedRollout = entityManager.merge(rollout); + if (mergedRollout.getStatus() != RolloutStatus.RUNNING) { + throw new RolloutIllegalStateException("Rollout can only be paused in state running but current state is " + + rollout.getStatus().name().toLowerCase()); + } + // setting the complete rollout only in paused state. This is sufficient + // due the currently running groups will be completed and new groups are + // not started until rollout goes back to running state again. The + // periodically check for running rollouts will skip rollouts in pause + // state. + mergedRollout.setStatus(RolloutStatus.PAUSED); + rolloutRepository.save(mergedRollout); + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public void resumeRollout(final Rollout rollout) { + final Rollout mergedRollout = entityManager.merge(rollout); + if (!(RolloutStatus.PAUSED.equals(mergedRollout.getStatus()))) { + throw new RolloutIllegalStateException("Rollout can only be resumed in state paused but current state is " + + rollout.getStatus().name().toLowerCase()); + } + mergedRollout.setStatus(RolloutStatus.RUNNING); + rolloutRepository.save(mergedRollout); + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public void checkRunningRollouts(final long delayBetweenChecks) { + verifyStuckedRollouts(); + final long lastCheck = System.currentTimeMillis(); + final int updated = rolloutRepository.updateLastCheck(lastCheck, delayBetweenChecks, RolloutStatus.RUNNING); + + if (updated == 0) { + // nothing to check, maybe another instance already checked in + // between + LOGGER.debug("No rolloutcheck necessary for current scheduled check {}, next check at {}", lastCheck, + lastCheck + delayBetweenChecks); + return; + } + + final List rolloutsToCheck = rolloutRepository.findByLastCheckAndStatus(lastCheck, + RolloutStatus.RUNNING); + LOGGER.info("Found {} running rollouts to check", rolloutsToCheck.size()); + + for (final Rollout rollout : rolloutsToCheck) { + LOGGER.debug("Checking rollout {}", rollout); + final List rolloutGroups = rolloutGroupRepository.findByRolloutAndStatus(rollout, + RolloutGroupStatus.RUNNING); + + if (rolloutGroups.isEmpty()) { + // no running rollouts, probably there was an error + // somewhere at the latest group. And the latest group has + // been switched from running into error state. So we need + // to find the latest group which + executeLatestRolloutGroup(rollout); + } else { + LOGGER.debug("Rollout {} has {} running groups", rollout.getId(), rolloutGroups.size()); + executeRolloutGroups(rollout, rolloutGroups); + } + + if (isRolloutComplete(rollout)) { + LOGGER.info("Rollout {} is finished, setting finished status", rollout); + rollout.setStatus(RolloutStatus.FINISHED); + rolloutRepository.save(rollout); + } + } + } + + /** + * Verifies and handles stucked rollouts in asynchronous creation or + * starting state. If rollouts are created or started asynchronously it + * might be that they keep in state {@link RolloutStatus#CREATING} or + * {@link RolloutStatus#STARTING} due database or application interruption. + * In case this happens, set the rollout to error state. + */ + private void verifyStuckedRollouts() { + final List rolloutsInCreatingState = rolloutRepository.findByStatus(RolloutStatus.CREATING); + rolloutsInCreatingState.stream().filter(rollout -> !creatingRollouts.contains(rollout.getName())) + .forEach(rollout -> { + LOGGER.warn( + "Determined error during rollout creation of rollout {}, stucking in creating state, setting to status", + rollout, RolloutStatus.ERROR_CREATING); + rollout.setStatus(RolloutStatus.ERROR_CREATING); + rolloutRepository.save(rollout); + }); + + final List rolloutsInStartingState = rolloutRepository.findByStatus(RolloutStatus.STARTING); + rolloutsInStartingState.stream().filter(rollout -> !startingRollouts.contains(rollout.getName())) + .forEach(rollout -> { + LOGGER.warn( + "Determined error during rollout starting of rollout {}, stucking in starting state, setting to status", + rollout, RolloutStatus.ERROR_STARTING); + rollout.setStatus(RolloutStatus.ERROR_STARTING); + rolloutRepository.save(rollout); + }); + + } + + private void executeRolloutGroups(final Rollout rollout, final List rolloutGroups) { + for (final RolloutGroup rolloutGroup : rolloutGroups) { + // error state check, do we need to stop the whole + // rollout because of error? + final RolloutGroupErrorCondition errorCondition = rolloutGroup.getErrorCondition(); + final boolean isError = checkErrorState(rollout, rolloutGroup, errorCondition); + if (isError) { + LOGGER.info("Rollout {} {} has error, calling error action", rollout.getName(), rollout.getId()); + callErrorAction(rollout, rolloutGroup); + } else { + // not in error so check finished state, do we need to + // start the next group? + final RolloutGroupSuccessCondition finishedCondition = rolloutGroup.getSuccessCondition(); + checkFinishCondition(rollout, rolloutGroup, finishedCondition); + if (isRolloutGroupComplete(rollout, rolloutGroup)) { + rolloutGroup.setStatus(RolloutGroupStatus.FINISHED); + rolloutGroupRepository.save(rolloutGroup); + } + } + } + } + + private void executeLatestRolloutGroup(final Rollout rollout) { + final List latestRolloutGroup = rolloutGroupRepository + .findByRolloutAndStatusNotOrderByIdDesc(rollout, RolloutGroupStatus.SCHEDULED); + if (latestRolloutGroup.isEmpty()) { + return; + } + executeRolloutGroupSuccessAction(rollout, latestRolloutGroup.get(0)); + } + + private void callErrorAction(final Rollout rollout, final RolloutGroup rolloutGroup) { + try { + context.getBean(rolloutGroup.getErrorAction().getBeanName(), RolloutGroupActionEvaluator.class) + .eval(rollout, rolloutGroup, rolloutGroup.getErrorActionExp()); + } catch (final BeansException e) { + LOGGER.error("Something bad happend when accessing the error action bean {}", + rolloutGroup.getErrorAction().getBeanName(), e); + } + } + + private boolean isRolloutComplete(final Rollout rollout) { + final Long groupsActiveLeft = rolloutGroupRepository.countByRolloutAndStatusOrStatus(rollout, + RolloutGroupStatus.RUNNING, RolloutGroupStatus.SCHEDULED); + return groupsActiveLeft == 0; + } + + private boolean isRolloutGroupComplete(final Rollout rollout, final RolloutGroup rolloutGroup) { + final Long actionsLeftForRollout = actionRepository + .countByRolloutAndRolloutGroupAndStatusNotAndStatusNotAndStatusNot(rollout, rolloutGroup, + Action.Status.ERROR, Action.Status.FINISHED, Action.Status.CANCELED); + return actionsLeftForRollout == 0; + } + + private boolean checkErrorState(final Rollout rollout, final RolloutGroup rolloutGroup, + final RolloutGroupErrorCondition errorCondition) { + if (errorCondition == null) { + // there is no error condition, so return false, don't have error. + return false; + } + try { + return context.getBean(errorCondition.getBeanName(), RolloutGroupConditionEvaluator.class).eval(rollout, + rolloutGroup, rolloutGroup.getErrorConditionExp()); + } catch (final BeansException e) { + LOGGER.error("Something bad happend when accessing the error condition bean {}", + errorCondition.getBeanName(), e); + return false; + } + } + + private boolean checkFinishCondition(final Rollout rollout, final RolloutGroup rolloutGroup, + final RolloutGroupSuccessCondition finishCondition) { + LOGGER.trace("Checking finish condition {} on rolloutgroup {}", finishCondition, rolloutGroup); + try { + final boolean isFinished = context + .getBean(finishCondition.getBeanName(), RolloutGroupConditionEvaluator.class) + .eval(rollout, rolloutGroup, rolloutGroup.getSuccessConditionExp()); + if (isFinished) { + LOGGER.info("Rolloutgroup {} is finished, starting next group", rolloutGroup); + executeRolloutGroupSuccessAction(rollout, rolloutGroup); + } else { + LOGGER.debug("Rolloutgroup {} is still running", rolloutGroup); + } + return isFinished; + } catch (final BeansException e) { + LOGGER.error("Something bad happend when accessing the finish condition bean {}", + finishCondition.getBeanName(), e); + return false; + } + } + + private void executeRolloutGroupSuccessAction(final Rollout rollout, final RolloutGroup rolloutGroup) { + context.getBean(rolloutGroup.getSuccessAction().getBeanName(), RolloutGroupActionEvaluator.class).eval(rollout, + rolloutGroup, rolloutGroup.getSuccessActionExp()); + } + + @Override + public Long countRolloutsAll() { + return rolloutRepository.count(); + } + + @Override + public Long countRolloutsAllByFilters(final String searchText) { + return rolloutRepository.count(likeNameOrDescription(searchText)); + } + + private static Specification likeNameOrDescription(final String searchText) { + return (rolloutRoot, query, criteriaBuilder) -> { + final String searchTextToLower = searchText.toLowerCase(); + return criteriaBuilder.or( + criteriaBuilder.like(criteriaBuilder.lower(rolloutRoot.get(Rollout_.name)), searchTextToLower), + criteriaBuilder.like(criteriaBuilder.lower(rolloutRoot.get(Rollout_.description)), + searchTextToLower)); + }; + } + + @Override + public Slice findRolloutByFilters(final Pageable pageable, final String searchText) { + final Specification specs = likeNameOrDescription(searchText); + final Slice findAll = criteriaNoCountDao.findAll(specs, pageable, Rollout.class); + setRolloutStatusDetails(findAll); + return findAll; + } + + @Override + public Rollout findRolloutByName(final String rolloutName) { + return rolloutRepository.findByName(rolloutName); + } + + /** + * Update rollout details. + * + * @param rollout + * rollout to be updated + * + * @return Rollout updated rollout + */ + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public Rollout updateRollout(final Rollout rollout) { + Assert.notNull(rollout.getId()); + return rolloutRepository.save(rollout); + } + + /** + * Get count of targets in different status in rollout. + * + * @param page + * the page request to sort and limit the result + * @return a list of rollouts with details of targets count for different + * statuses + * + */ + @Override + public Page findAllRolloutsWithDetailedStatus(final Pageable page) { + final Page rollouts = findAll(page); + setRolloutStatusDetails(rollouts); + return rollouts; + + } + + @Override + public Rollout findRolloutWithDetailedStatus(final Long rolloutId) { + final Rollout rollout = findRolloutById(rolloutId); + final List rolloutStatusCountItems = actionRepository + .getStatusCountByRolloutId(rolloutId); + final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus(rolloutStatusCountItems, + rollout.getTotalTargets()); + rollout.setTotalTargetCountStatus(totalTargetCountStatus); + return rollout; + } + + private Map> getStatusCountItemForRollout(final List rolloutIds) { + final List resultList = actionRepository.getStatusCountByRolloutId(rolloutIds); + return resultList.stream().collect(Collectors.groupingBy(TotalTargetCountActionStatus::getId)); + } + + private void setRolloutStatusDetails(final Slice rollouts) { + final List rolloutIds = rollouts.getContent().stream().map(rollout -> rollout.getId()) + .collect(Collectors.toList()); + final Map> allStatesForRollout = getStatusCountItemForRollout( + rolloutIds); + + for (final Rollout rollout : rollouts) { + final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus( + allStatesForRollout.get(rollout.getId()), rollout.getTotalTargets()); + rollout.setTotalTargetCountStatus(totalTargetCountStatus); + } + } + + private static void checkIfRolloutCanStarted(final Rollout rollout, final Rollout mergedRollout) { + if (!(RolloutStatus.READY.equals(mergedRollout.getStatus()))) { + throw new RolloutIllegalStateException("Rollout can only be started in state ready but current state is " + + rollout.getStatus().name().toLowerCase()); + } + } + + @Override + public float getFinishedPercentForRunningGroup(final Long rolloutId, final RolloutGroup rolloutGroup) { + final Long totalGroup = rolloutGroup.getTotalTargets(); + final Long finished = actionRepository.countByRolloutIdAndRolloutGroupIdAndStatus(rolloutId, + rolloutGroup.getId(), Action.Status.FINISHED); + if (totalGroup == 0) { + // in case e.g. targets has been deleted we don't have any actions + // left for this group, so the group is finished + return 100; + } + // calculate threshold + return ((float) finished / (float) totalGroup) * 100; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java new file mode 100644 index 000000000..5cc27d75c --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java @@ -0,0 +1,170 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.repository.model.TenantConfiguration; +import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; +import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; +import org.eclipse.hawkbit.tenancy.configuration.validator.TenantConfigurationValidatorException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.context.ApplicationContext; +import org.springframework.context.EnvironmentAware; +import org.springframework.core.convert.support.ConfigurableConversionService; +import org.springframework.core.convert.support.DefaultConversionService; +import org.springframework.core.env.Environment; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +/** + * Central tenant configuration management operations of the SP server. + */ +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) +@Validated +@Service +public class JpaTenantConfigurationManagement implements EnvironmentAware, TenantConfigurationManagement { + + @Autowired + private TenantConfigurationRepository tenantConfigurationRepository; + + @Autowired + private ApplicationContext applicationContext; + + private static final ConfigurableConversionService conversionService = new DefaultConversionService(); + + private Environment environment; + + @Override + @Cacheable(value = "tenantConfiguration", key = "#configurationKey.getKeyName()") + public TenantConfigurationValue getConfigurationValue(final TenantConfigurationKey configurationKey, + final Class propertyType) { + validateTenantConfigurationDataType(configurationKey, propertyType); + + final TenantConfiguration tenantConfiguration = tenantConfigurationRepository + .findByKey(configurationKey.getKeyName()); + + return buildTenantConfigurationValueByKey(configurationKey, propertyType, tenantConfiguration); + } + + /** + * Validates the data type of the tenant configuration. If it is possible to + * cast to the given data type. + * + * @param configurationKey + * the key + * @param propertyType + * the class + */ + static void validateTenantConfigurationDataType(final TenantConfigurationKey configurationKey, + final Class propertyType) { + if (!configurationKey.getDataType().isAssignableFrom(propertyType)) { + throw new TenantConfigurationValidatorException( + String.format("Cannot parse the database value of type %s into the type %s.", + configurationKey.getDataType(), propertyType)); + } + } + + @Override + public TenantConfigurationValue buildTenantConfigurationValueByKey( + final TenantConfigurationKey configurationKey, final Class propertyType, + final TenantConfiguration tenantConfiguration) { + if (tenantConfiguration != null) { + return TenantConfigurationValue. builder().isGlobal(false).createdBy(tenantConfiguration.getCreatedBy()) + .createdAt(tenantConfiguration.getCreatedAt()) + .lastModifiedAt(tenantConfiguration.getLastModifiedAt()) + .lastModifiedBy(tenantConfiguration.getLastModifiedBy()) + .value(conversionService.convert(tenantConfiguration.getValue(), propertyType)).build(); + + } else if (configurationKey.getDefaultKeyName() != null) { + + return TenantConfigurationValue. builder().isGlobal(true).createdBy(null).createdAt(null) + .lastModifiedAt(null).lastModifiedBy(null) + .value(getGlobalConfigurationValue(configurationKey, propertyType)).build(); + } + return null; + } + + @Override + public TenantConfigurationValue getConfigurationValue(final TenantConfigurationKey configurationKey) { + return getConfigurationValue(configurationKey, configurationKey.getDataType()); + } + + @Override + public T getGlobalConfigurationValue(final TenantConfigurationKey configurationKey, + final Class propertyType) { + + if (!configurationKey.getDataType().isAssignableFrom(propertyType)) { + throw new TenantConfigurationValidatorException( + String.format("Cannot parse the database value of type %s into the type %s.", + configurationKey.getDataType(), propertyType)); + } + + final T valueInProperties = environment.getProperty(configurationKey.getDefaultKeyName(), propertyType); + + if (valueInProperties == null) { + return conversionService.convert(configurationKey.getDefaultValue(), propertyType); + } + + return valueInProperties; + } + + @Override + @CacheEvict(value = "tenantConfiguration", key = "#configurationKey.getKeyName()") + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public TenantConfigurationValue addOrUpdateConfiguration(final TenantConfigurationKey configurationKey, + final T value) { + + if (!configurationKey.getDataType().isAssignableFrom(value.getClass())) { + throw new TenantConfigurationValidatorException(String.format( + "Cannot parse the value %s of type %s into the type %s defined by the configuration key.", value, + value.getClass(), configurationKey.getDataType())); + } + + configurationKey.validate(applicationContext, value); + + TenantConfiguration tenantConfiguration = tenantConfigurationRepository + .findByKey(configurationKey.getKeyName()); + + if (tenantConfiguration == null) { + tenantConfiguration = new TenantConfiguration(configurationKey.getKeyName(), value.toString()); + } else { + tenantConfiguration.setValue(value.toString()); + } + + final TenantConfiguration updatedTenantConfiguration = tenantConfigurationRepository.save(tenantConfiguration); + + final Class clazzT = (Class) value.getClass(); + + return TenantConfigurationValue. builder().isGlobal(false) + .createdBy(updatedTenantConfiguration.getCreatedBy()) + .createdAt(updatedTenantConfiguration.getCreatedAt()) + .lastModifiedAt(updatedTenantConfiguration.getLastModifiedAt()) + .lastModifiedBy(updatedTenantConfiguration.getLastModifiedBy()) + .value(conversionService.convert(updatedTenantConfiguration.getValue(), clazzT)).build(); + } + + @Override + @CacheEvict(value = "tenantConfiguration", key = "#configurationKey.getKeyName()") + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Modifying + public void deleteConfiguration(final TenantConfigurationKey configurationKey) { + tenantConfigurationRepository.deleteByKey(configurationKey.getKeyName()); + } + + @Override + public void setEnvironment(final Environment environment) { + this.environment = environment; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/LocalArtifactRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/LocalArtifactRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java index 4c106957d..fcad668d2 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/LocalArtifactRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.List; import java.util.Optional; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/NoCountPagingRepository.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/NoCountPagingRepository.java index 0624f269a..c0f8b89ff 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/NoCountPagingRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.io.Serializable; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/OffsetBasedPageRequest.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/OffsetBasedPageRequest.java index 753ec6963..80bb85461 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/OffsetBasedPageRequest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java index e0cb4cc27..2433eb8aa 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java index 5a22f5ab5..212672419 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutTargetGroupRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java similarity index 95% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutTargetGroupRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java index 14d9b8353..2e7eac55d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutTargetGroupRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.model.RolloutTargetGroup; import org.eclipse.hawkbit.repository.model.RolloutTargetGroupId; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagement.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagement.java index d719667ed..813f2e5a6 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagement.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static com.google.common.base.Preconditions.checkNotNull; @@ -27,6 +27,7 @@ import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; @@ -307,7 +308,7 @@ public class SoftwareManagement { private void deleteGridFsArtifacts(final SoftwareModule swModule) { for (final LocalArtifact localArtifact : swModule.getLocalArtifacts()) { - artifactManagement.deleteGridFsArtifact(localArtifact); + artifactManagement.deleteLocalArtifact(localArtifact); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleMetadataRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleMetadataRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java index c40a96e92..8023a9361 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleMetadataRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java index 95b01c270..e03b3e084 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleTypeRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleTypeRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java index ac9425a08..fe2cfadf4 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleTypeRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagement.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagement.java index 49c9183a7..67f7bf93f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagement.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.lang.reflect.Method; import java.math.BigDecimal; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TagManagement.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TagManagement.java index 8db9773e6..dbca65a00 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TagManagement.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static com.google.common.base.Preconditions.checkNotNull; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagement.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagement.java index 4f7c91da3..18ab0c486 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagement.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.ArrayList; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java similarity index 96% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java index 3604785cd..346fe2ec2 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetInfoRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetInfoRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java index 436f1e7b6..1c3378bba 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetInfoRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetManagement.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetManagement.java index 4d6540acf..01d6eb527 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetManagement.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.net.URI; import java.util.ArrayList; @@ -33,6 +33,7 @@ import org.eclipse.hawkbit.Constants; import org.eclipse.hawkbit.eventbus.event.TargetTagAssigmentResultEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSet_; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java index 5e37902ab..b3d390016 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetTagRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetTagRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java index e0f03ee78..92f48d699 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetTagRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetWithActionType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetWithActionType.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetWithActionType.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetWithActionType.java index 18efa23a9..a2c0a7d8f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetWithActionType.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetWithActionType.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java index 0497ea924..6494aafea 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantKeyGenerator.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantKeyGenerator.java similarity index 95% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantKeyGenerator.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantKeyGenerator.java index 3265b622c..0478d99d7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantKeyGenerator.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantKeyGenerator.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.lang.reflect.Method; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantMetaDataRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantMetaDataRepository.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java index 4aa4c48dc..63c213d2c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantMetaDataRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantStatsManagement.java similarity index 82% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantStatsManagement.java index c124037fa..451a6e401 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantStatsManagement.java @@ -6,13 +6,16 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import java.util.Optional; +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.report.model.TenantUsage; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -43,7 +46,8 @@ public class TenantStatsManagement { * to collect for * @return collected statistics */ - @Transactional(propagation = Propagation.REQUIRES_NEW) + @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) public TenantUsage getStatsOfTenant(final String tenant) { final TenantUsage result = new TenantUsage(tenant); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java index d1327c690..fd1d81280 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.repository.model.helper; -import org.eclipse.hawkbit.repository.SystemManagement; +import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.springframework.beans.factory.annotation.Autowired; /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java index af335cd0d..3af269819 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java @@ -10,8 +10,8 @@ package org.eclipse.hawkbit.rollout.condition; import java.util.concurrent.Callable; -import org.eclipse.hawkbit.repository.RolloutGroupRepository; import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java index 21c499d31..224901053 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.rollout.condition; import java.util.List; import org.eclipse.hawkbit.repository.DeploymentManagement; -import org.eclipse.hawkbit.repository.RolloutGroupRepository; +import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java index 6e63efa8e..e38cb0f16 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rollout.condition; -import org.eclipse.hawkbit.repository.ActionRepository; +import org.eclipse.hawkbit.repository.jpa.ActionRepository; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupSuccessCondition.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupSuccessCondition.java index fcf9762c6..5f9167931 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupSuccessCondition.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupSuccessCondition.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rollout.condition; -import org.eclipse.hawkbit.repository.ActionRepository; +import org.eclipse.hawkbit.repository.jpa.ActionRepository; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java index b7091edf8..99b93926f 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java @@ -16,34 +16,34 @@ import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; -import org.eclipse.hawkbit.repository.ActionRepository; -import org.eclipse.hawkbit.repository.ActionStatusRepository; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.DistributionSetRepository; -import org.eclipse.hawkbit.repository.DistributionSetTagRepository; -import org.eclipse.hawkbit.repository.DistributionSetTypeRepository; -import org.eclipse.hawkbit.repository.ExternalArtifactRepository; -import org.eclipse.hawkbit.repository.LocalArtifactRepository; import org.eclipse.hawkbit.repository.RolloutGroupManagement; -import org.eclipse.hawkbit.repository.RolloutGroupRepository; import org.eclipse.hawkbit.repository.RolloutManagement; -import org.eclipse.hawkbit.repository.RolloutRepository; -import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.SoftwareModuleMetadataRepository; -import org.eclipse.hawkbit.repository.SoftwareModuleRepository; -import org.eclipse.hawkbit.repository.SoftwareModuleTypeRepository; -import org.eclipse.hawkbit.repository.SystemManagement; -import org.eclipse.hawkbit.repository.TagManagement; -import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; -import org.eclipse.hawkbit.repository.TargetInfoRepository; -import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.TargetRepository; -import org.eclipse.hawkbit.repository.TargetTagRepository; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.TenantMetaDataRepository; +import org.eclipse.hawkbit.repository.jpa.ActionRepository; +import org.eclipse.hawkbit.repository.jpa.ActionStatusRepository; +import org.eclipse.hawkbit.repository.jpa.DistributionSetRepository; +import org.eclipse.hawkbit.repository.jpa.DistributionSetTagRepository; +import org.eclipse.hawkbit.repository.jpa.DistributionSetTypeRepository; +import org.eclipse.hawkbit.repository.jpa.ExternalArtifactRepository; +import org.eclipse.hawkbit.repository.jpa.LocalArtifactRepository; +import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; +import org.eclipse.hawkbit.repository.jpa.RolloutRepository; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.SoftwareModuleMetadataRepository; +import org.eclipse.hawkbit.repository.jpa.SoftwareModuleRepository; +import org.eclipse.hawkbit.repository.jpa.SoftwareModuleTypeRepository; +import org.eclipse.hawkbit.repository.jpa.SystemManagement; +import org.eclipse.hawkbit.repository.jpa.TagManagement; +import org.eclipse.hawkbit.repository.jpa.TargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.jpa.TargetInfoRepository; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.jpa.TargetRepository; +import org.eclipse.hawkbit.repository.jpa.TargetTagRepository; +import org.eclipse.hawkbit.repository.jpa.TenantMetaDataRepository; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.utils.RepositoryDataGenerator.DatabaseCleanupUtil; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java index 1787d29e4..11106eaf1 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java @@ -18,8 +18,8 @@ import java.util.UUID; import org.apache.commons.io.IOUtils; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java index 279932ef7..4c0bc1c19 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java @@ -58,14 +58,14 @@ public class ControllerManagementTest extends AbstractIntegrationTest { System.currentTimeMillis()); actionStatusMessage.addMessage("foobar"); savedAction.setStatus(Status.RUNNING); - controllerManagament.addUpdateActionStatus(actionStatusMessage, savedAction); + controllerManagament.addUpdateActionStatus(actionStatusMessage); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.PENDING); actionStatusMessage = new ActionStatus(savedAction, Action.Status.FINISHED, System.currentTimeMillis()); actionStatusMessage.addMessage(RandomStringUtils.randomAscii(512)); savedAction.setStatus(Status.FINISHED); - controllerManagament.addUpdateActionStatus(actionStatusMessage, savedAction); + controllerManagament.addUpdateActionStatus(actionStatusMessage); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.IN_SYNC); @@ -111,21 +111,21 @@ public class ControllerManagementTest extends AbstractIntegrationTest { final ActionStatus actionStatusMessage = new ActionStatus(savedAction, Action.Status.RUNNING, System.currentTimeMillis()); actionStatusMessage.addMessage("running"); - savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage, savedAction); + savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage); assertThat(targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.PENDING); final ActionStatus actionStatusMessage2 = new ActionStatus(savedAction, Action.Status.ERROR, System.currentTimeMillis()); actionStatusMessage2.addMessage("error"); - savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage2, savedAction); + savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage2); assertThat(targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.ERROR); final ActionStatus actionStatusMessage3 = new ActionStatus(savedAction, Action.Status.FINISHED, System.currentTimeMillis()); actionStatusMessage3.addMessage("finish"); - controllerManagament.addUpdateActionStatus(actionStatusMessage3, savedAction); + controllerManagament.addUpdateActionStatus(actionStatusMessage3); targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus(); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java index a17054a3d..6a6d92bf0 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java @@ -27,6 +27,7 @@ import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.exception.ForceQuitActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetException; +import org.eclipse.hawkbit.repository.jpa.TargetRepository; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; @@ -104,7 +105,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that distribution sets can assigned and unassigned to a distribution set tag. Not exists distribution set will be ignored for the assignment.") public void assignAndUnassignDistributionSetToTag() { - final List assignDS = new ArrayList(); + final List assignDS = new ArrayList<>(); for (int i = 0; i < 4; i++) { assignDS.add(TestDataUtil.generateDistributionSet("DS" + i, "1.0", softwareManagement, distributionSetManagement, new ArrayList()).getId()); @@ -199,8 +200,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { secondAction = deploymentManagement.findActionWithDetails(secondAction.getId()); // confirm cancellation secondAction.setStatus(Status.CANCELED); - controllerManagement.addCancelActionStatus( - new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis()), secondAction); + controllerManagement + .addCancelActionStatus(new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis())); assertThat(actionStatusRepository.findAll()).as("wrong size of actions status").hasSize(4); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).as("wrong ds") .isEqualTo(dsFirst); @@ -213,8 +214,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { firstAction = deploymentManagement.findActionWithDetails(firstAction.getId()); // confirm cancellation firstAction.setStatus(Status.CANCELED); - controllerManagement.addCancelActionStatus( - new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis()), firstAction); + controllerManagement + .addCancelActionStatus(new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis())); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(6); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) .as("wrong assigned ds").isEqualTo(dsInstalled); @@ -256,8 +257,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // confirm cancellation firstAction = deploymentManagement.findActionWithDetails(firstAction.getId()); firstAction.setStatus(Status.CANCELED); - controllerManagement.addCancelActionStatus( - new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis()), firstAction); + controllerManagement + .addCancelActionStatus(new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis())); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(4); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) .as("wrong assigned ds").isEqualTo(dsSecond); @@ -273,8 +274,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { .as("wrong assigned ds").isEqualTo(dsSecond); // confirm cancellation secondAction.setStatus(Status.CANCELED); - controllerManagement.addCancelActionStatus( - new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis()), secondAction); + controllerManagement + .addCancelActionStatus(new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis())); // cancelled success -> back to dsInstalled assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) .as("wrong installed ds").isEqualTo(dsInstalled); @@ -742,7 +743,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { for (final String msg : msgs) { statusMessages.addMessage(msg); } - controllerManagament.addUpdateActionStatus(statusMessages, updActA); + controllerManagament.addUpdateActionStatus(statusMessages); return targetManagement.findTargetByControllerID(t.getControllerId()); } @@ -786,7 +787,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final Action action = updAct.getContent().get(0); action.setStatus(Status.FINISHED); final ActionStatus statusMessage = new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), ""); - controllerManagament.addUpdateActionStatus(statusMessage, action); + controllerManagament.addUpdateActionStatus(statusMessage); targ = targetManagement.findTargetByControllerID(targ.getControllerId()); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java index db9618425..8faae175e 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java @@ -821,7 +821,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { for (final String msg : msgs) { statusMessages.addMessage(msg); } - controllerManagament.addUpdateActionStatus(statusMessages, updActA); + controllerManagament.addUpdateActionStatus(statusMessages); return targetManagement.findTargetByControllerID(t.getControllerId()); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java index 0184a9d26..e41491962 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java @@ -558,7 +558,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { for (final String msg : msgs) { statusMessages.addMessage(msg); } - controllerManagament.addUpdateActionStatus(statusMessages, updActA); + controllerManagament.addUpdateActionStatus(statusMessages); return targetManagement.findTargetByControllerID(t.getControllerId()); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java index 22f9ee8b4..88bb26616 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java @@ -18,6 +18,7 @@ import java.util.concurrent.Callable; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -136,8 +137,8 @@ public class RolloutManagementTest extends AbstractIntegrationTest { // 50% final Action action = runningActions.get(0); action.setStatus(Status.FINISHED); - controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), ""), action); + controllerManagament + .addUpdateActionStatus(new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "")); // check running rollouts again, now the finish condition should be hit // and should start the next group @@ -178,8 +179,8 @@ public class RolloutManagementTest extends AbstractIntegrationTest { // finish actions with error for (final Action action : runningActions) { action.setStatus(Status.ERROR); - controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.ERROR, System.currentTimeMillis(), ""), action); + controllerManagament + .addUpdateActionStatus(new ActionStatus(action, Status.ERROR, System.currentTimeMillis(), "")); } // check running rollouts again, now the error condition should be hit @@ -220,8 +221,8 @@ public class RolloutManagementTest extends AbstractIntegrationTest { // finish actions with error for (final Action action : runningActions) { action.setStatus(Status.ERROR); - controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.ERROR, System.currentTimeMillis(), ""), action); + controllerManagament + .addUpdateActionStatus(new ActionStatus(action, Status.ERROR, System.currentTimeMillis(), "")); } // check running rollouts again, now the error condition should be hit @@ -977,8 +978,8 @@ public class RolloutManagementTest extends AbstractIntegrationTest { final List runningActions = deploymentManagement.findActionsByRolloutAndStatus(rollout, Status.RUNNING); for (final Action action : runningActions) { action.setStatus(status); - controllerManagament.addUpdateActionStatus(new ActionStatus(action, status, System.currentTimeMillis(), ""), - action); + controllerManagament + .addUpdateActionStatus(new ActionStatus(action, status, System.currentTimeMillis(), "")); } return runningActions.size(); } @@ -989,14 +990,13 @@ public class RolloutManagementTest extends AbstractIntegrationTest { assertThat(runningActions.size()).isGreaterThanOrEqualTo(amountOfTargetsToGetChanged); for (int i = 0; i < amountOfTargetsToGetChanged; i++) { controllerManagament.addUpdateActionStatus( - new ActionStatus(runningActions.get(i), status, System.currentTimeMillis(), ""), - runningActions.get(i)); + new ActionStatus(runningActions.get(i), status, System.currentTimeMillis(), "")); } return runningActions.size(); } private Map createInitStatusMap() { - final Map map = new HashMap(); + final Map map = new HashMap<>(); for (final TotalTargetCountStatus.Status status : TotalTargetCountStatus.Status.values()) { map.put(status, 0L); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java index 4c6af0d83..3deba1a56 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java @@ -21,6 +21,7 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.jpa.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java index 99e08f331..37d4ea683 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java @@ -13,6 +13,7 @@ import static org.junit.Assert.fail; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.jpa.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.junit.Test; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java index 73d549eb7..6b509b257 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java @@ -96,7 +96,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails(actionId); action.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message"), action); + new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); deploymentManagement.assignDistributionSet(setA.getId(), installedC); final List unknown = new ArrayList<>(); @@ -745,7 +745,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails(actionId); action.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message"), action); + new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); }); deploymentManagement.assignDistributionSet(assignedSet, assignedtargets); @@ -773,7 +773,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails(actionId); action.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message"), action); + new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); }); deploymentManagement.assignDistributionSet(assignedSet, installedtargets); @@ -802,7 +802,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails(actionId); action.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message"), action); + new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); }); deploymentManagement.assignDistributionSet(assignedSet, installedtargets); @@ -840,7 +840,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { for (final String msg : msgs) { statusMessages.addMessage(msg); } - controllerManagament.addUpdateActionStatus(statusMessages, updActA); + controllerManagament.addUpdateActionStatus(statusMessages); return targetManagement.findTargetByControllerID(t.getControllerId()); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java index a223c25b4..ae4447fc6 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java @@ -187,7 +187,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails(result.getActions().get(0)); action.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message"), action); + new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); deploymentManagement.assignDistributionSet(set2.getId(), "4711"); target = targetManagement.findTargetByControllerIDWithDetails("4711"); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java index 78d333826..18da430c7 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java @@ -75,7 +75,7 @@ public class RSQLRolloutGroupFields extends AbstractIntegrationTest { } private void assertRSQLQuery(final String rsqlParam, final long expcetedTargets) { - final Page findTargetPage = rolloutGroupManagement.findRolloutGroupsByPredicate(rollout, + final Page findTargetPage = rolloutGroupManagement.findRolloutGroupsAll(rollout, RSQLUtility.parse(rsqlParam, RolloutGroupFields.class), new PageRequest(0, 100)); final long countTargetsAll = findTargetPage.getTotalElements(); assertThat(findTargetPage).isNotNull(); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java index a1c74e791..e2e86bed1 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java @@ -30,9 +30,9 @@ import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.TagManagement; -import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.TagManagement; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -207,14 +207,14 @@ public final class RepositoryDataGenerator { download.setAction(action); download.setStatus(Status.DOWNLOAD); download.addMessage("Controller started download."); - action = controllerManagement.addUpdateActionStatus(download, action); + action = controllerManagement.addUpdateActionStatus(download); // warning final ActionStatus warning = new ActionStatus(); warning.setAction(action); warning.setStatus(Status.WARNING); warning.addMessage("Some warning: " + jlorem.words(new Random().nextInt(50))); - action = controllerManagement.addUpdateActionStatus(warning, action); + action = controllerManagement.addUpdateActionStatus(warning); // garbage for (int i = 0; i < new Random().nextInt(10); i++) { @@ -222,13 +222,13 @@ public final class RepositoryDataGenerator { running.setAction(action); running.setStatus(Status.RUNNING); running.addMessage("Still running: " + jlorem.words(new Random().nextInt(50))); - action = controllerManagement.addUpdateActionStatus(running, action); + action = controllerManagement.addUpdateActionStatus(running); for (int g = 0; g < new Random().nextInt(5); g++) { final ActionStatus rand = new ActionStatus(); rand.setAction(action); rand.setStatus(Status.RUNNING); rand.addMessage(jlorem.words(new Random().nextInt(50))); - action = controllerManagement.addUpdateActionStatus(rand, action); + action = controllerManagement.addUpdateActionStatus(rand); } } @@ -241,13 +241,13 @@ public final class RepositoryDataGenerator { if (incrementAndGet % 5 == 0) { close.setStatus(Status.ERROR); close.addMessage("Controller reported CLOSED with ERROR!"); - action = controllerManagement.addUpdateActionStatus(close, action); + action = controllerManagement.addUpdateActionStatus(close); } // with OK else { close.setStatus(Status.FINISHED); close.addMessage("Controller reported CLOSED with OK!"); - action = controllerManagement.addUpdateActionStatus(close, action); + action = controllerManagement.addUpdateActionStatus(close); } index++; @@ -266,7 +266,7 @@ public final class RepositoryDataGenerator { close.setAction(action); close.setStatus(Status.FINISHED); close.addMessage("Controller reported CLOSED with OK!"); - action = controllerManagement.addUpdateActionStatus(close, action); + action = controllerManagement.addUpdateActionStatus(close); } } @@ -339,8 +339,8 @@ public final class RepositoryDataGenerator { // garbage DS LOG.debug("initDemoRepo - start now DS garbage"); - TestDataUtil.generateDistributionSets("Generic Software Package", sizeMultiplikator, - softwareManagement, distributionSetManagement); + TestDataUtil.generateDistributionSets("Generic Software Package", sizeMultiplikator, softwareManagement, + distributionSetManagement); LOG.debug("initDemoRepo - DS garbage finished"); LOG.debug("initDemoRepo - start now Extra Software Modules and types"); diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java index a36443024..d6e057edd 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java @@ -149,7 +149,7 @@ public class ArtifactStoreController { actionStatus.addMessage( ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } - controllerManagement.addActionStatusMessage(actionStatus); + controllerManagement.addInformationalActionStatus(actionStatus); return action; } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java index 14383f30b..9dfcbae55 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java @@ -30,8 +30,8 @@ import org.eclipse.hawkbit.controller.model.DeploymentBase; import org.eclipse.hawkbit.controller.model.Result.FinalResult; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -150,7 +150,7 @@ public class RootController { return new ResponseEntity<>( DataConversionHelper.fromTarget(target, controllerManagement.findActionByTargetAndActive(target), - controllerManagement.findPollingTime(), tenantAware), + controllerManagement.getPollingTime(), tenantAware), HttpStatus.OK); } @@ -222,7 +222,7 @@ public class RootController { statusMessage.addMessage( ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } - controllerManagement.addActionStatusMessage(statusMessage); + controllerManagement.addInformationalActionStatus(statusMessage); return action; } @@ -371,8 +371,7 @@ public class RootController { return new ResponseEntity<>(HttpStatus.GONE); } - controllerManagement.addUpdateActionStatus(generateUpdateStatus(feedback, targetid, feedback.getId(), action), - action); + controllerManagement.addUpdateActionStatus(generateUpdateStatus(feedback, targetid, feedback.getId(), action)); return new ResponseEntity<>(HttpStatus.OK); @@ -546,7 +545,7 @@ public class RootController { } controllerManagement - .addCancelActionStatus(generateActionCancelStatus(feedback, target, feedback.getId(), action), action); + .addCancelActionStatus(generateActionCancelStatus(feedback, target, feedback.getId(), action)); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java index 8051146a1..95e3f0c8d 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java @@ -16,8 +16,8 @@ import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetType; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java index 27231308b..9e9dc2369 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java @@ -18,12 +18,12 @@ import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetFields; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; -import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TargetFields; -import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.SystemManagement; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.jpa.TargetWithActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java index eaa0fec28..e630003c5 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java @@ -13,8 +13,8 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.TagFields; -import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java index 409caf01d..fbe22af5c 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java @@ -14,8 +14,8 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.rest.resource.api.DistributionSetTypeRestApi; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java index f7346a6ff..32e87e05e 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java @@ -12,8 +12,8 @@ import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetTypeFields; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -69,7 +69,7 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { final Slice findModuleTypessAll; Long countModulesAll; if (rsqlParam != null) { - findModuleTypessAll = distributionSetManagement.findDistributionSetTypesByPredicate( + findModuleTypessAll = distributionSetManagement.findDistributionSetTypesAll( RSQLUtility.parse(rsqlParam, DistributionSetTypeFields.class), pageable); countModulesAll = ((Page) findModuleTypessAll).getTotalElements(); } else { diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java index 00f8f4756..5c057acd4 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java @@ -13,8 +13,8 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.rest.resource.helper.RestResourceConversionHelper; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java index 78cfefa0d..d8821f113 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java @@ -178,7 +178,7 @@ public class RolloutResource implements RolloutRestApi { final Page findRolloutGroupsAll; if (rsqlParam != null) { - findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsByPredicate(rollout, + findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsAll(rollout, RSQLUtility.parse(rsqlParam, RolloutGroupFields.class), pageable); } else { findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsByRolloutId(rolloutId, pageable); diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java index 01dfae9cd..8732cc1d1 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java @@ -14,8 +14,8 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java index 830443cbd..0d7a4b8f0 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java @@ -12,10 +12,10 @@ import java.io.IOException; import java.util.List; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SoftwareModuleFields; import org.eclipse.hawkbit.repository.SoftwareModuleMetadataFields; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java index e3498f141..df042d38c 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java @@ -10,9 +10,9 @@ package org.eclipse.hawkbit.rest.resource; import java.util.List; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SoftwareModuleTypeFields; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java index 27cfdb924..c5663f9f5 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java @@ -16,8 +16,8 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.report.model.SystemUsageReport; import org.eclipse.hawkbit.report.model.TenantUsage; -import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.rest.resource.model.systemmanagement.CacheRest; import org.eclipse.hawkbit.rest.resource.model.systemmanagement.SystemStatisticsRest; import org.eclipse.hawkbit.rest.resource.model.systemmanagement.TenantSystemUsageRest; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java index 4b068a41e..df779c688 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java @@ -19,8 +19,8 @@ import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.TargetFields; -import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.ActionStatus; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java index 1a9155828..b6946145d 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java @@ -12,9 +12,9 @@ import java.util.List; import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.TagFields; -import org.eclipse.hawkbit.repository.TagManagement; -import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.TagManagement; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java index 6254da992..9d823e832 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java @@ -30,12 +30,12 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; -import org.eclipse.hawkbit.repository.ActionRepository; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.ActionRepository; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -890,7 +890,7 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { for (final String msg : msgs) { statusMessages.addMessage(msg); } - controllerManagament.addUpdateActionStatus(statusMessages, updActA); + controllerManagament.addUpdateActionStatus(statusMessages); return targetManagement.findTargetByControllerID(t.getControllerId()); } diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java index 8d27d5114..2d3a9707e 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java @@ -108,8 +108,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); actions.get(0).setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(actions.get(0), Status.FINISHED, System.currentTimeMillis(), "testmessage"), - actions.get(0)); + new ActionStatus(actions.get(0), Status.FINISHED, System.currentTimeMillis(), "testmessage")); final PageRequest pageRequest = new PageRequest(0, 1000, Direction.ASC, ActionFields.ID.getFieldName()); final ActionStatus status = deploymentManagement @@ -1284,8 +1283,8 @@ public class TargetResourceTest extends AbstractIntegrationTest { final Pageable pageReq = new PageRequest(0, 100); final Action action = actionRepository.findByDistributionSet(pageReq, savedSet).getContent().get(0); - final ActionStatus actionStatus = new ActionStatus(action, Status.FINISHED, 0l); - controllerManagement.addUpdateActionStatus(actionStatus, action); + final ActionStatus actionStatus = new ActionStatus(action, Status.FINISHED, 0L); + controllerManagement.addUpdateActionStatus(actionStatus); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java index 2fa3763fd..5e7c0f3c7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java index e6284d5d6..364b659da 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java @@ -14,7 +14,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.artifacts.state.CustomFile; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java index 29bea30eb..d1d034555 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 1e4029087..6a033bfd8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.io.Serializable; -import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java index 478438891..4fea3df08 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java @@ -12,7 +12,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index f2e43c1fb..4039a2be2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -13,8 +13,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java index 4a4006c2a..4727ecae7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtype; import java.io.Serializable; -import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java index b09255bc7..b8f5435dd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java index 6fd382084..f8d6dba66 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java @@ -11,8 +11,8 @@ package org.eclipse.hawkbit.ui.common; import java.util.List; import java.util.Map; -import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java index ce9f101f3..1e3ab9b03 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.common.tagdetails; import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; -import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.jpa.TagManagement; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.eclipse.hawkbit.repository.model.TargetTag; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java index 178610c23..bc46f50fd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.jpa.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java index 6f03c5860..e607c99d2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java @@ -16,7 +16,7 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.eventbus.event.TargetTagAssigmentResultEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; -import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 64a06bd38..0e3ed8da3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.DistributionSetRepository; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.jpa.DistributionSetRepository; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.common.CoordinatesToColor; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java index a1d1ffcfe..32bb0ce86 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java @@ -14,7 +14,7 @@ import java.util.Map; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index 01c242247..ca469c967 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -18,10 +18,9 @@ import java.util.Map.Entry; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.exception.EntityLockedException; +import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -322,11 +321,11 @@ public class DistributionSetTable extends AbstractNamedVersionTable Date: Mon, 16 May 2016 14:56:23 +0530 Subject: [PATCH 086/371] Artifact upload : on discard action interupt the ongoing upload Signed-off-by: Asharani --- .../event/UploadArtifactUIEvent.java | 3 +- .../artifacts/state/ArtifactUploadState.java | 6 + .../upload/UploadConfirmationwindow.java | 6 +- .../ui/artifacts/upload/UploadHandler.java | 43 +++++- .../ui/artifacts/upload/UploadLayout.java | 138 +++++++++++++----- .../artifacts/upload/UploadResultWindow.java | 9 ++ .../upload/UploadStatusInfoWindow.java | 11 +- .../themes/hawkbit/customstyles/others.scss | 11 +- 8 files changed, 171 insertions(+), 56 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java index 8bd33f483..1f5971f4b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java @@ -15,6 +15,5 @@ package org.eclipse.hawkbit.ui.artifacts.event; * */ public enum UploadArtifactUIEvent { - - SHOW_DROP_HINTS, HIDE_DROP_HINTS, SOFTWARE_DRAG_START, SOFTWARE_TYPE_DRAG_START, UPDATE_UPLOAD_COUNT, ENABLE_PROCESS_BUTTON, HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DISCARD_DELETE_SOFTWARE, DISCARD_ALL_DELETE_SOFTWARE, DELETED_ALL_SOFWARE, DISABLE_PROCESS_BUTTON, DISCARD_DELETE_SOFTWARE_TYPE, DISCARD_ALL_DELETE_SOFTWARE_TYPE, DELETED_ALL_SOFWARE_TYPE,MINIMIZED_STATUS_POPUP,MAXIMIZED_STATUS_POPUP, UPLOAD_IN_PROGESS + SHOW_DROP_HINTS, HIDE_DROP_HINTS, SOFTWARE_DRAG_START, SOFTWARE_TYPE_DRAG_START, UPDATE_UPLOAD_COUNT, HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DISCARD_DELETE_SOFTWARE, DISCARD_ALL_DELETE_SOFTWARE, DELETED_ALL_SOFWARE, DISCARD_DELETE_SOFTWARE_TYPE, DISCARD_ALL_DELETE_SOFTWARE_TYPE, DELETED_ALL_SOFWARE_TYPE, MINIMIZED_STATUS_POPUP, MAXIMIZED_STATUS_POPUP, UPLOAD_IN_PROGESS, DISCARD_UPLOAD, ARTIFACT_RESULT_POPUP_CLOSED } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java index 9c0ade8d1..5399e59c8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java @@ -73,6 +73,12 @@ public class ArtifactUploadState implements ManagmentEntityState, Serializ private final AtomicInteger numberOfFilesActuallyUpload = new AtomicInteger(); + private final AtomicInteger numberOfFileUploadsFailed = new AtomicInteger(); + + public AtomicInteger getNumberOfFileUploadsFailed() { + return numberOfFileUploadsFailed; + } + public AtomicInteger getNumberOfFilesActuallyUpload() { return numberOfFilesActuallyUpload; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java index d7231cafe..83a5c6c95 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java @@ -544,7 +544,7 @@ public class UploadConfirmationwindow implements Button.ClickListener { if (event.getComponent().getId().equals(SPUIComponetIdProvider.UPLOAD_ARTIFACT_DETAILS_CLOSE)) { uploadConfrimationWindow.close(); } else if (event.getComponent().getId().equals(SPUIComponetIdProvider.UPLOAD_DISCARD_DETAILS_BUTTON)) { - uploadLayout.removeUploadedFileDetails(); + uploadLayout.clearUploadedFileDetails(); uploadConfrimationWindow.close(); } else if (event.getComponent().getId().equals(SPUIComponetIdProvider.UPLOAD_BUTTON)) { processArtifactUpload(); @@ -568,10 +568,10 @@ public class UploadConfirmationwindow implements Button.ClickListener { uploadDetailsTable.removeItem(((Button) event.getComponent()).getData()); uploadLayout.getFileSelected().remove(customFile); - uploadLayout.updateActionCount(); + uploadLayout.updateUploadCounts(); if (uploadDetailsTable.getItemIds().isEmpty()) { - uploadLayout.clearFileList(); uploadConfrimationWindow.close(); + uploadLayout.clearUploadedFileDetails(); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index f9d207193..2c8220fdf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -11,6 +11,8 @@ package org.eclipse.hawkbit.ui.artifacts.upload; import java.io.IOException; import java.io.OutputStream; +import javax.annotation.PreDestroy; + import org.eclipse.hawkbit.repository.exception.ArtifactUploadFailedException; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadFileStatus; @@ -21,8 +23,11 @@ import org.eclipse.hawkbit.ui.utils.SpringContextHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.vaadin.spring.events.EventBus; +import org.vaadin.spring.events.EventScope; +import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.server.StreamVariable; +import com.vaadin.ui.UI; import com.vaadin.ui.Upload; import com.vaadin.ui.Upload.FailedEvent; import com.vaadin.ui.Upload.FailedListener; @@ -83,6 +88,24 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene this.mimeType = mimeType; this.i18n = SpringContextHelper.getBean(I18N.class); this.eventBus = SpringContextHelper.getBean(EventBus.SessionEventBus.class); + eventBus.subscribe(this); + } + + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final UploadArtifactUIEvent event) { + if (event == UploadArtifactUIEvent.DISCARD_UPLOAD) { + UI.getCurrent().access(() ->intreruptUploadOnDiscard()); + } + } + +// + @PreDestroy + void destroy() { + /* + * It's good manners to do this, even though vaadin-spring will + * automatically unsubscribe when this UI is garbage collected. + */ + eventBus.unsubscribe(this); } /** @@ -93,6 +116,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public final OutputStream getOutputStream() { try { + streamingInterrupted = false; return view.saveUploadedFileDetails(fileName, fileSize, mimeType); } catch (final ArtifactUploadFailedException e) { LOG.error("Atifact upload failed {} ", e); @@ -110,18 +134,15 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public OutputStream receiveUpload(final String fileName, final String mimeType) { + uploadInterrupted = false; this.fileName = fileName; this.mimeType = mimeType; // reset has directory flag before upload view.setHasDirectory(false); try { - if (view.checkIfSoftwareModuleIsSelected()) { - if (view.checkForDuplicate(fileName)) { - view.showDuplicateMessage(); - } else { - view.increaseNumberOfFileUploadsExpected(); - return view.saveUploadedFileDetails(fileName, 0, mimeType); - } + if (view.checkIfSoftwareModuleIsSelected() && !view.checkForDuplicate(fileName)) { + view.increaseNumberOfFileUploadsExpected(); + return view.saveUploadedFileDetails(fileName, 0, mimeType); } } catch (final ArtifactUploadFailedException e) { LOG.error("Atifact upload failed {} ", e); @@ -350,5 +371,13 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene } return true; } + + protected void intreruptUploadOnDiscard(){ + if(upload!=null && upload.isUploading()){ + upload.interruptUpload(); + uploadInterrupted = true; + } + streamingInterrupted = true; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index 58661773d..baed534aa 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -118,6 +118,8 @@ public class UploadLayout extends VerticalLayout { private Button uploadStatusButton; + private Boolean changesDiscarded = Boolean.FALSE; + /** * Initialize the upload layout. */ @@ -129,7 +131,6 @@ public class UploadLayout extends VerticalLayout { eventBus.subscribe(this); ui = UI.getCurrent(); } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final UploadArtifactUIEvent event) { @@ -139,14 +140,17 @@ public class UploadLayout extends VerticalLayout { ui.access(() -> showUploadStatusButton()); } else if (event == UploadArtifactUIEvent.MAXIMIZED_STATUS_POPUP) { ui.access(() -> maximizeStatusPopup()); - } + } + else if(event == UploadArtifactUIEvent.ARTIFACT_RESULT_POPUP_CLOSED){ + ui.access(() -> closeUploadStatusPopup()); + } } + @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final UploadStatusEvent event) { if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STARTED) { - ui.access(() -> setUploadStatusButtonIconToInProgress()); - } - else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_FAILED) { + ui.access(() -> onStartOfUpload()); + } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_FAILED) { ui.access(() -> onUploadFailure(event)); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_FINISHED) { ui.access(() -> onUploadCompletion()); @@ -155,7 +159,7 @@ public class UploadLayout extends VerticalLayout { } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FAILED) { ui.access(() -> onUploadStreamingFailure(event)); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FINISHED) { - ui.access(() -> onUploadStreamingSuccess(event)); + ui.access(() -> onUploadStreamingSuccess()); } } @@ -211,6 +215,7 @@ public class UploadLayout extends VerticalLayout { private void restoreState() { updateActionCount(); + if (!artifactUploadState.getFileSelected().isEmpty() && artifactUploadState.isUploadCompleted()) { processBtn.setEnabled(true); } @@ -237,6 +242,7 @@ public class UploadLayout extends VerticalLayout { @Override public void drop(final DragAndDropEvent event) { + changesDiscarded = Boolean.FALSE; if (validate(event)) { final Html5File[] files = ((WrapperTransferable) event.getTransferable()).getFiles(); // reset the flag @@ -342,15 +348,6 @@ public class UploadLayout extends VerticalLayout { return isDuplicate; } - @EventBusListenerMethod(scope = EventScope.SESSION) - void toggleProcessButton(final UploadArtifactUIEvent event) { - if (event == UploadArtifactUIEvent.ENABLE_PROCESS_BUTTON) { - processBtn.setEnabled(true); - } else if (event == UploadArtifactUIEvent.DISABLE_PROCESS_BUTTON) { - processBtn.setEnabled(false); - } - } - /** * Save uploaded file details. * @@ -387,15 +384,14 @@ public class UploadLayout extends VerticalLayout { artifactUploadState.getBaseSwModuleList().put(currentBaseSoftwareModuleKey, selectedSoftwareModule); } return out; - } - catch (final FileNotFoundException e) { + } catch (final FileNotFoundException e) { LOG.error("Upload failed {}", e); throw new ArtifactUploadFailedException(i18n.get("message.file.not.found")); } catch (final IOException e) { LOG.error("Upload failed {}", e); throw new ArtifactUploadFailedException(i18n.get("message.upload.failed")); } - + } Boolean validate(final DragAndDropEvent event) { @@ -491,8 +487,10 @@ public class UploadLayout extends VerticalLayout { void displayDuplicateValidationMessage() { // check if streaming of all dropped files are completed - if (artifactUploadState.getNumberOfFilesActuallyUpload().intValue() == artifactUploadState.getNumberOfFileUploadsExpected().intValue()) { + if (artifactUploadState.getNumberOfFilesActuallyUpload().intValue() == artifactUploadState + .getNumberOfFileUploadsExpected().intValue()) { displayCompositeMessage(); + duplicateFileNamesList.clear(); } } @@ -537,6 +535,10 @@ public class UploadLayout extends VerticalLayout { artifactUploadState.getNumberOfFilesActuallyUpload().incrementAndGet(); } + void increaseNumberOfFileUploadsFailed() { + artifactUploadState.getNumberOfFileUploadsFailed().incrementAndGet(); + } + /** * Enable process button once upload is completed. */ @@ -561,15 +563,22 @@ public class UploadLayout extends VerticalLayout { if (artifactUploadState.getFileSelected().isEmpty()) { uiNotification.displayValidationError(i18n.get("message.error.noFileSelected")); } else { - removeUploadedFileDetails(); + clearUploadedFileDetails(); } } } - protected void removeUploadedFileDetails() { + protected void clearUploadedFileDetails() { + eventBus.publish(this, UploadArtifactUIEvent.DISCARD_UPLOAD); + changesDiscarded = Boolean.TRUE; clearFileList(); + closeUploadStatusPopup(); + } + + private void closeUploadStatusPopup() { uploadInfoWindow.clearWindow(); hideUploadStatusButton(); + artifactUploadState.setStatusPopupMinimized(false); } /** @@ -589,6 +598,7 @@ public class UploadLayout extends VerticalLayout { processBtn.setEnabled(false); artifactUploadState.getNumberOfFilesActuallyUpload().set(0); artifactUploadState.getNumberOfFileUploadsExpected().set(0); + artifactUploadState.getNumberOfFileUploadsFailed().set(0); duplicateFileNamesList.clear(); } @@ -664,10 +674,17 @@ public class UploadLayout extends VerticalLayout { return dropAreaLayout; } + private void onStartOfUpload() { + changesDiscarded = Boolean.FALSE; + setUploadStatusButtonIconToInProgress(); + if (artifactUploadState.isStatusPopupMinimized()) { + updateStatusButtonCount(); + } + } - private void onUploadStreamingSuccess(UploadStatusEvent event) { + private void onUploadStreamingSuccess() { increaseNumberOfFilesActuallyUpload(); - updateActionCount(); + updateUploadCounts(); enableProcessBtn(); if (isUploadComplete()) { uploadInfoWindow.uploadSessionFinished(); @@ -675,19 +692,35 @@ public class UploadLayout extends VerticalLayout { } // display the duplicate message after streaming all files displayDuplicateValidationMessage(); - duplicateFileNamesList.clear(); } private void onUploadStreamingFailure(UploadStatusEvent event) { - onUploadFailure(event); - updateActionCount(); - enableProcessBtn(); - // check if we are finished - if (isUploadComplete()) { - uploadInfoWindow.uploadSessionFinished(); - setUploadStatusButtonIconToFinished(); + if (!changesDiscarded) { + /** + * If upload interrupted because of duplicate file,do not remove the + * file already in upload list + **/ + if (getDuplicateFileNamesList().isEmpty() + || !getDuplicateFileNamesList().contains(event.getUploadStatus().getFileName())) { + final SoftwareModule sw = getSoftwareModuleSelected(); + getFileSelected().remove( + new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); + // failed reason to be updated only if there is error other than + // duplicate file error + uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() + .getFailureReason()); + increaseNumberOfFileUploadsFailed(); + } + decreaseNumberOfFileUploadsExpected(); + updateUploadCounts(); + enableProcessBtn(); + // check if we are finished + if (isUploadComplete()) { + uploadInfoWindow.uploadSessionFinished(); + setUploadStatusButtonIconToFinished(); + } + displayDuplicateValidationMessage(); } - displayDuplicateValidationMessage(); } private void onUploadSuccess(UploadStatusEvent event) { @@ -701,12 +734,14 @@ public class UploadLayout extends VerticalLayout { if (isUploadComplete()) { uploadInfoWindow.uploadSessionFinished(); setUploadStatusButtonIconToFinished(); + displayDuplicateValidationMessage(); } - updateActionCount(); + updateUploadCounts(); enableProcessBtn(); duplicateFileNamesList.clear(); } + private boolean isUploadComplete() { int uploadedCount = artifactUploadState.getNumberOfFilesActuallyUpload().intValue(); int expectedUploadsCount = artifactUploadState.getNumberOfFileUploadsExpected().intValue(); @@ -714,19 +749,22 @@ public class UploadLayout extends VerticalLayout { } private void onUploadFailure(final UploadStatusEvent event) { - decreaseNumberOfFileUploadsExpected(); /** * If upload interrupted because of duplicate file,do not remove the * file already in upload list **/ - if (getDuplicateFileNamesList().isEmpty() - || !getDuplicateFileNamesList().contains(event.getUploadStatus().getFileName())) { + if ((getDuplicateFileNamesList().isEmpty() || !getDuplicateFileNamesList().contains( + event.getUploadStatus().getFileName())) + && !changesDiscarded) { final SoftwareModule sw = getSoftwareModuleSelected(); getFileSelected().remove( new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); - //failed reason to be updated only if there is error other than duplicate file error + // failed reason to be updated only if there is error other than + // duplicate file error uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() .getFailureReason()); + increaseNumberOfFileUploadsFailed(); + decreaseNumberOfFileUploadsExpected(); } } @@ -777,6 +815,24 @@ public class UploadLayout extends VerticalLayout { uploadStatusButton.setVisible(false); } + void updateStatusButtonCount() { + int uploadsPending = artifactUploadState.getNumberOfFileUploadsExpected().get() + - artifactUploadState.getNumberOfFilesActuallyUpload().get(); + int uploadsFailed = artifactUploadState.getNumberOfFileUploadsFailed().get(); + StringBuilder builder = new StringBuilder(""); + if (uploadsFailed != 0) { + if (uploadsPending != 0) { + builder.append("

" + uploadsFailed + "
"); + } else { + builder.append("
" + uploadsFailed + "
"); + } + } + if (uploadsPending != 0) { + builder.append("
" + uploadsPending + "
"); + } + uploadStatusButton.setCaption(builder.toString()); + } + private void onClickOfUploadStatusButton() { artifactUploadState.setStatusPopupMinimized(false); eventBus.publish(this, UploadArtifactUIEvent.MAXIMIZED_STATUS_POPUP); @@ -787,6 +843,7 @@ public class UploadLayout extends VerticalLayout { return; } uploadStatusButton.setVisible(true); + updateStatusButtonCount(); } protected void hideUploadStatusButton() { @@ -816,5 +873,10 @@ public class UploadLayout extends VerticalLayout { uploadStatusButton.addStyleName(SPUIStyleDefinitions.UPLOAD_PROGRESS_INDICATOR_STYLE); uploadStatusButton.setIcon(null); } - + + + protected void updateUploadCounts() { + updateActionCount(); + updateStatusButtonCount(); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java index c5319a221..94029b090 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.artifacts.upload; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleTiny; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -19,6 +20,8 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import org.eclipse.hawkbit.ui.utils.SpringContextHelper; +import org.vaadin.spring.events.EventBus; import com.vaadin.data.Item; import com.vaadin.data.util.IndexedContainer; @@ -63,6 +66,9 @@ public class UploadResultWindow implements Button.ClickListener { private static final String UPLOAD_RESULT = "uploadResult"; private static final String REASON = "reason"; + + private transient EventBus.SessionEventBus eventBus; + /** * Initialize upload status popup. @@ -75,6 +81,7 @@ public class UploadResultWindow implements Button.ClickListener { public UploadResultWindow(final List uploadResultList, final I18N i18n) { this.uploadResultList = uploadResultList; this.i18n = i18n; + eventBus = SpringContextHelper.getBean( EventBus.SessionEventBus.class); createComponents(); createLayout(); } @@ -183,6 +190,8 @@ public class UploadResultWindow implements Button.ClickListener { if (event.getComponent().getId().equals(SPUIComponetIdProvider.UPLOAD_ARTIFACT_RESULT_CLOSE) || event.getComponent().getId().equals(SPUIComponetIdProvider.UPLOAD_ARTIFACT_RESULT_POPUP_CLOSE)) { uploadResultsWindow.close(); + //close upload status popup if open + eventBus.publish(this, UploadArtifactUIEvent.ARTIFACT_RESULT_POPUP_CLOSED); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java index 2efd929d3..177ecd8a3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java @@ -166,7 +166,6 @@ public class UploadStatusInfoWindow extends Window { item.getItemProperty(PROGRESS).setValue(statusObject.getProgress()); item.getItemProperty(FILE_NAME).setValue(statusObject.getFilename()); } - // artifactUploadState.setUploadCompleted(true); if (artifactUploadState.isUploadCompleted()) { minimizeButton.setEnabled(false); } @@ -294,7 +293,9 @@ public class UploadStatusInfoWindow extends Window { void uploadStarted(final String filename) { final Item item = uploads.addItem(filename); - item.getItemProperty(FILE_NAME).setValue(filename); + if (item != null) { + item.getItemProperty(FILE_NAME).setValue(filename); + } grid.scrollToEnd(); UploadStatusObject uploadStatus = new UploadStatusObject(filename); uploadStatus.setStatus("Active"); @@ -302,11 +303,11 @@ public class UploadStatusInfoWindow extends Window { } void updateProgress(final String filename, final long readBytes, final long contentLength) { - final Item item = uploads.getItem(filename); + final Item item = uploads.getItem(filename); if (item != null) { double progress = (double) readBytes / (double) contentLength; item.getItemProperty(PROGRESS).setValue(progress); - List uploadStatusObjectList = (List) artifactUploadState + List uploadStatusObjectList = (List) artifactUploadState .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) .collect(Collectors.toList()); if (!uploadStatusObjectList.isEmpty()) { @@ -363,6 +364,7 @@ public class UploadStatusInfoWindow extends Window { setWindowMode(WindowMode.NORMAL); this.close(); artifactUploadState.getUploadedFileStatusList().clear(); + artifactUploadState.getNumberOfFileUploadsFailed().set(0); } private void setPopupSizeInMinMode() { @@ -421,5 +423,4 @@ public class UploadStatusInfoWindow extends Window { closeBtn.addClickListener(event -> clearWindow()); return closeBtn; } - } diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss index 879fb8dd6..f6f4c2434 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss @@ -10,7 +10,7 @@ @mixin others { //Style to display the pending action count - .unread { + .unread, .error-count { @include valo-badge-style; position: absolute; pointer-events: none; @@ -21,6 +21,15 @@ border-radius: $v-border-radius; color: $widget-bg; } + + .error-count { + top: round($v-unit-size / -5); + right: round($v-unit-size / 1.9); + } + + .error-count-color{ + @include valo-gradient($color: $red-color); + } //Deployment view - Style of count message .v-caption-count-msg-box { From eadff47f24a8fc360b055032edee26d4d1b3b6e6 Mon Sep 17 00:00:00 2001 From: Asharani Date: Mon, 16 May 2016 16:26:24 +0530 Subject: [PATCH 087/371] Artifact upload : on discard action interupt the ongoing upload - reverted the changes Signed-off-by: Asharani --- .../event/UploadArtifactUIEvent.java | 2 +- .../ui/artifacts/upload/UploadHandler.java | 26 ------------------- .../ui/artifacts/upload/UploadLayout.java | 13 ++-------- 3 files changed, 3 insertions(+), 38 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java index 1f5971f4b..e1fe4e07f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java @@ -15,5 +15,5 @@ package org.eclipse.hawkbit.ui.artifacts.event; * */ public enum UploadArtifactUIEvent { - SHOW_DROP_HINTS, HIDE_DROP_HINTS, SOFTWARE_DRAG_START, SOFTWARE_TYPE_DRAG_START, UPDATE_UPLOAD_COUNT, HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DISCARD_DELETE_SOFTWARE, DISCARD_ALL_DELETE_SOFTWARE, DELETED_ALL_SOFWARE, DISCARD_DELETE_SOFTWARE_TYPE, DISCARD_ALL_DELETE_SOFTWARE_TYPE, DELETED_ALL_SOFWARE_TYPE, MINIMIZED_STATUS_POPUP, MAXIMIZED_STATUS_POPUP, UPLOAD_IN_PROGESS, DISCARD_UPLOAD, ARTIFACT_RESULT_POPUP_CLOSED + SHOW_DROP_HINTS, HIDE_DROP_HINTS, SOFTWARE_DRAG_START, SOFTWARE_TYPE_DRAG_START, UPDATE_UPLOAD_COUNT, HIDE_FILTER_BY_TYPE, SHOW_FILTER_BY_TYPE, DISCARD_DELETE_SOFTWARE, DISCARD_ALL_DELETE_SOFTWARE, DELETED_ALL_SOFWARE, DISCARD_DELETE_SOFTWARE_TYPE, DISCARD_ALL_DELETE_SOFTWARE_TYPE, DELETED_ALL_SOFWARE_TYPE, MINIMIZED_STATUS_POPUP, MAXIMIZED_STATUS_POPUP, UPLOAD_IN_PROGESS, ARTIFACT_RESULT_POPUP_CLOSED } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index 2c8220fdf..5c0373acf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -88,24 +88,6 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene this.mimeType = mimeType; this.i18n = SpringContextHelper.getBean(I18N.class); this.eventBus = SpringContextHelper.getBean(EventBus.SessionEventBus.class); - eventBus.subscribe(this); - } - - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final UploadArtifactUIEvent event) { - if (event == UploadArtifactUIEvent.DISCARD_UPLOAD) { - UI.getCurrent().access(() ->intreruptUploadOnDiscard()); - } - } - -// - @PreDestroy - void destroy() { - /* - * It's good manners to do this, even though vaadin-spring will - * automatically unsubscribe when this UI is garbage collected. - */ - eventBus.unsubscribe(this); } /** @@ -372,12 +354,4 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene return true; } - protected void intreruptUploadOnDiscard(){ - if(upload!=null && upload.isUploading()){ - upload.interruptUpload(); - uploadInterrupted = true; - } - streamingInterrupted = true; - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index baed534aa..a9f36e8b8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -118,7 +118,6 @@ public class UploadLayout extends VerticalLayout { private Button uploadStatusButton; - private Boolean changesDiscarded = Boolean.FALSE; /** * Initialize the upload layout. @@ -242,7 +241,6 @@ public class UploadLayout extends VerticalLayout { @Override public void drop(final DragAndDropEvent event) { - changesDiscarded = Boolean.FALSE; if (validate(event)) { final Html5File[] files = ((WrapperTransferable) event.getTransferable()).getFiles(); // reset the flag @@ -569,8 +567,6 @@ public class UploadLayout extends VerticalLayout { } protected void clearUploadedFileDetails() { - eventBus.publish(this, UploadArtifactUIEvent.DISCARD_UPLOAD); - changesDiscarded = Boolean.TRUE; clearFileList(); closeUploadStatusPopup(); } @@ -669,13 +665,11 @@ public class UploadLayout extends VerticalLayout { /** * @return */ - VerticalLayout getDropAreaLayout() { return dropAreaLayout; } private void onStartOfUpload() { - changesDiscarded = Boolean.FALSE; setUploadStatusButtonIconToInProgress(); if (artifactUploadState.isStatusPopupMinimized()) { updateStatusButtonCount(); @@ -695,7 +689,6 @@ public class UploadLayout extends VerticalLayout { } private void onUploadStreamingFailure(UploadStatusEvent event) { - if (!changesDiscarded) { /** * If upload interrupted because of duplicate file,do not remove the * file already in upload list @@ -720,7 +713,6 @@ public class UploadLayout extends VerticalLayout { setUploadStatusButtonIconToFinished(); } displayDuplicateValidationMessage(); - } } private void onUploadSuccess(UploadStatusEvent event) { @@ -753,9 +745,8 @@ public class UploadLayout extends VerticalLayout { * If upload interrupted because of duplicate file,do not remove the * file already in upload list **/ - if ((getDuplicateFileNamesList().isEmpty() || !getDuplicateFileNamesList().contains( - event.getUploadStatus().getFileName())) - && !changesDiscarded) { + if (getDuplicateFileNamesList().isEmpty() || !getDuplicateFileNamesList().contains( + event.getUploadStatus().getFileName())) { final SoftwareModule sw = getSoftwareModuleSelected(); getFileSelected().remove( new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); From 0073fdeb403bddd81bcf8c5d688d3657d4e43564 Mon Sep 17 00:00:00 2001 From: Asharani Date: Tue, 17 May 2016 12:48:47 +0530 Subject: [PATCH 088/371] Added comments .Removed changes not required. Signed-off-by: Asharani --- hawkbit-ui/pom.xml | 5 ----- .../hawkbit/ui/artifacts/event/UploadFileStatus.java | 6 +++--- .../hawkbit/ui/artifacts/upload/UploadStatusObject.java | 6 ++++++ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/hawkbit-ui/pom.xml b/hawkbit-ui/pom.xml index 38b455367..e0bde576a 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -254,10 +254,5 @@ allure-junit-adaptor test - - org.scala-lang - scala-library - 2.10.4 - \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java index 776556464..cdfeea653 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java @@ -12,7 +12,7 @@ import java.io.Serializable; /** * - * Holds file and upload status details. + * Holds file and upload status details.Meta data sent with upload events. * */ public class UploadFileStatus implements Serializable { @@ -27,10 +27,10 @@ public class UploadFileStatus implements Serializable { private String failureReason; - public UploadFileStatus(String fileName){ + public UploadFileStatus(String fileName) { this.fileName = fileName; } - + public UploadFileStatus(String fileName, long bytesRead, long contentLength) { this.fileName = fileName; this.contentLength = contentLength; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java index 80c71fe7b..13167b55a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java @@ -8,6 +8,12 @@ */ package org.eclipse.hawkbit.ui.artifacts.upload; +/** + * + * Holds uploaded file status.Used to display the details in upload status + * popup. + * + */ public class UploadStatusObject { private String status; private Double progress; From 652f480667244dca648a3322fd9d8ff5d7fa65e1 Mon Sep 17 00:00:00 2001 From: Asharani Date: Tue, 17 May 2016 15:01:12 +0530 Subject: [PATCH 089/371] Added liscense header Signed-off-by: Asharani --- .../hawkbit/ui/artifacts/event/UploadStatusEvent.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java index ab10c2e10..96513a52a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.artifacts.event; /** * From e658e7dac6175a030cac6022b7aff7563dc2cb6d Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 17 May 2016 12:49:32 +0200 Subject: [PATCH 090/371] Merged changes from master into ddi-resources Signed-off-by: Jonathan Philip Knoblauch --- .../rest/resource/DataConversionHelper.java | 37 +++++++++++-------- .../ddi/rest/resource/DdiRootController.java | 6 +-- 2 files changed, 23 insertions(+), 20 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 f05bb6d98..b07e2557c 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 @@ -33,7 +33,6 @@ 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; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.Link; import com.google.common.base.Charsets; @@ -42,10 +41,6 @@ import com.google.common.base.Charsets; * Utility class for the DDI API. */ public final class DataConversionHelper { - - @Autowired - ArtifactUrlHandler artifactUrlHandler; - // utility class, private constructor. private DataConversionHelper() { @@ -84,23 +79,33 @@ public final class DataConversionHelper { final org.eclipse.hawkbit.repository.model.SoftwareModule module, final ArtifactUrlHandler artifactUrlHandler) { final List files = new ArrayList<>(); - module.getLocalArtifacts().forEach(artifact -> { - final DdiArtifact file = new DdiArtifact(); - file.setHashes(new DdiArtifactHash(artifact.getSha1Hash(), artifact.getMd5Hash())); - file.setFilename(artifact.getFilename()); - file.setSize(artifact.getSize()); + + module.getLocalArtifacts() + .forEach(artifact -> files.add(createArtifact(targetid, artifactUrlHandler, artifact))); + return files; + } + + private static DdiArtifact createArtifact(final String targetid, final ArtifactUrlHandler artifactUrlHandler, + final LocalArtifact artifact) { + final DdiArtifact file = new DdiArtifact(); + file.setHashes(new DdiArtifactHash(artifact.getSha1Hash(), artifact.getMd5Hash())); + file.setFilename(artifact.getFilename()); + file.setSize(artifact.getSize()); + + if (artifactUrlHandler.protocolSupported(UrlProtocol.HTTP)) { final String linkHttp = artifactUrlHandler.getUrl(targetid, artifact.getSoftwareModule().getId(), artifact.getFilename(), artifact.getSha1Hash(), UrlProtocol.HTTP); + file.add(new Link(linkHttp).withRel("download-http")); + file.add(new Link(linkHttp + DdiDlRestConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum-http")); + } + + if (artifactUrlHandler.protocolSupported(UrlProtocol.HTTPS)) { final String linkHttps = artifactUrlHandler.getUrl(targetid, artifact.getSoftwareModule().getId(), artifact.getFilename(), artifact.getSha1Hash(), UrlProtocol.HTTPS); file.add(new Link(linkHttps).withRel("download")); file.add(new Link(linkHttps + DdiDlRestConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum")); - file.add(new Link(linkHttp).withRel("download-http")); - file.add(new Link(linkHttp + DdiDlRestConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum-http")); - - files.add(file); - }); - return files; + } + return file; } static DdiControllerBase fromTarget(final Target target, final List actions, 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 b614d70e2..3bf70ccfd 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 @@ -102,8 +102,6 @@ public class DdiRootController implements DdiRootControllerRestApi { @PathVariable("softwareModuleId") final Long softwareModuleId) { LOG.debug("getSoftwareModulesArtifacts({})", targetid); - // SecurityContextHolder.getContext().getAuthentication(). - final SoftwareModule softwareModule = softwareManagement.findSoftwareModuleById(softwareModuleId); if (softwareModule == null) { @@ -250,7 +248,8 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Found an active UpdateAction for target {}. returning deyploment: {}", targetid, base); controllerManagement.registerRetrieved(action, - "Controller retrieved update action and should start now the download."); + ControllerManagement.SERVER_MESSAGE_PREFIX + + "Target retrieved update action and should start now the download."); return new ResponseEntity<>(base, HttpStatus.OK); } @@ -287,7 +286,6 @@ public class DdiRootController implements DdiRootControllerRestApi { } controllerManagement.addUpdateActionStatus( - generateUpdateStatus(feedback, targetid, feedback.getId(), action), action); return new ResponseEntity<>(HttpStatus.OK); From 422918d9072a0ba1868c54341ac3d01039e5aeff Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 17 May 2016 13:12:01 +0200 Subject: [PATCH 091/371] Added module docu Signed-off-by: Jonathan Philip Knoblauch --- README.md | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index e61e5e9d1..602d01a60 100644 --- a/README.md +++ b/README.md @@ -57,16 +57,25 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v # Modules -`hawkbit-core` : internal interfaces and utility classes.. -`hawkbit-security-core` : authentication and authorization. -`hawkbit-security-integration` : authentication and authorization integrated with the APIs. -`hawkbit-artifact-repository-mongo` : artifact repository implementation to MongoDB. -`hawkbit-autoconfigure` : spring-boot auto-configuration. -`hawkbit-dmf-api` : API for the Device Management Integration. -`hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. -`hawkbit-repository` : repository implementation based on SQL for all meta-data. -`hawkbit-http-security` : implementation for security filters for HTTP. -`hawkbit-rest-api` : API classes for the REST Management API. -`hawkbit-rest-resource` : HTTP REST endpoints for the Management and the Direct Device API. -`hawkbit-ui` : Vaadin UI. -`hawkbit-cache-redis` : spring cache manager configuration and implementation with redis, distributed cache and distributed events. + +* `examples` : hawkBit examples +* `hawkbit-artifact-repository-mongo` : Artifact repository implementation to mongoDB. +* `hawkbit-autoconfigure` : Spring-boot auto-configuration. +* `hawkbit-cache-redis` : Spring cache manager configuration and implementation with redis, distributed cache and distributed events. +* `hawkbit-core` : Core elements for internal interfaces and utility classes. +* `hawkbit-ddi-api` : The hawkBit DDI API. +* `hawkbit-ddi-dl-api` : The hawkBit DDI Download API. +* `hawkbit-ddi-resource` : Implementation of the hawkBit DDI API +* `hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. +* `hawkbit-dmf-api` : API for the Device Management Integration. +* `hawkbit-http-security` : Implementation for security filters for HTTP. +* `hawkbit-mgmt-api` : The hawkBit Management API +* `hawkbit-mgmt-resource` : Implementation of the hawkBit Management API +* `hawkbit-mgmt-ui` : Vaadin UI. +* `hawkbit-repository` : Repository implementation based on SQL for all meta-data. +* `hawkbit-rest-core` : Core elements for the rest modules. +* `hawkbit-security-core` : Core security elements. +* `hawkbit-security-integration` : Security integration elements to integrate security into hawkBit. +* `hawkbit-system-api` : The hawkBit System API +* `hawkbit-system-resource` : Implementation of the hawkBit System API +* `hawkbit-test-report` : Test reports From 156da103b57be83cd529d24e44806a8b10984112 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 17 May 2016 13:32:50 +0200 Subject: [PATCH 092/371] Modify readme Signed-off-by: SirWayne --- README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e61e5e9d1..d1cfabcfa 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v # Modules -`hawkbit-core` : internal interfaces and utility classes.. +`hawkbit-core` : internal interfaces and utility classes. `hawkbit-security-core` : authentication and authorization. `hawkbit-security-integration` : authentication and authorization integrated with the APIs. `hawkbit-artifact-repository-mongo` : artifact repository implementation to MongoDB. @@ -66,7 +66,13 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v `hawkbit-dmf-amqp` : AMQP endpoint implementation for the DMF API. `hawkbit-repository` : repository implementation based on SQL for all meta-data. `hawkbit-http-security` : implementation for security filters for HTTP. -`hawkbit-rest-api` : API classes for the REST Management API. -`hawkbit-rest-resource` : HTTP REST endpoints for the Management and the Direct Device API. -`hawkbit-ui` : Vaadin UI. +`hawkbit-rest-core` : internal utility classes for rest. +`hawkbit-ddi-api` : Rest interfaces for the Direct Device API. +`hawkbit-ddi-dl-api` : Rest interfaces for Direct Device download part. +`hawkbit-ddi-resource` : Rest implementation for the Direct Device API with download part. +`hawkbit-mgmt-api` : Rest interfaces for REST Management API. +`hawkbit-mgmt-resource` : Rest implementation for the REST Management API. +`hawkbit-mgmt-ui` : Vaadin UI for Management API. +`hawkbit-system-api` : internal rest system API. +`hawkbit-system-resource` : internal rest system implementation. `hawkbit-cache-redis` : spring cache manager configuration and implementation with redis, distributed cache and distributed events. From 51db4204d2ad8c12fa3c4ef02d7727d36554d58f Mon Sep 17 00:00:00 2001 From: Asharani Date: Tue, 17 May 2016 17:50:40 +0530 Subject: [PATCH 093/371] Bug fix :- During upload the files when changing the selection of the software module the upload also changes to the new selected software module Signed-off-by: Asharani --- .../ui/artifacts/event/UploadFileStatus.java | 11 ++- .../ui/artifacts/upload/UploadHandler.java | 30 ++++--- .../ui/artifacts/upload/UploadLayout.java | 84 ++++++++++--------- .../upload/UploadStatusInfoWindow.java | 1 + .../ui/utils/SPUIComponetIdProvider.java | 5 ++ 5 files changed, 79 insertions(+), 52 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java index cdfeea653..f594fad8b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java @@ -10,6 +10,8 @@ package org.eclipse.hawkbit.ui.artifacts.event; import java.io.Serializable; +import org.eclipse.hawkbit.repository.model.SoftwareModule; + /** * * Holds file and upload status details.Meta data sent with upload events. @@ -27,6 +29,8 @@ public class UploadFileStatus implements Serializable { private String failureReason; + private SoftwareModule softwareModule; + public UploadFileStatus(String fileName) { this.fileName = fileName; } @@ -37,9 +41,10 @@ public class UploadFileStatus implements Serializable { this.bytesRead = bytesRead; } - public UploadFileStatus(String fileName, String failureReason) { + public UploadFileStatus(String fileName, String failureReason,SoftwareModule selectedSw) { this.failureReason = failureReason; this.fileName = fileName; + this.softwareModule = selectedSw; } public String getFileName() { @@ -57,4 +62,8 @@ public class UploadFileStatus implements Serializable { public String getFailureReason() { return failureReason; } + + public SoftwareModule getSoftwareModule() { + return softwareModule; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index f51e171ba..277e56967 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -14,10 +14,12 @@ import java.io.OutputStream; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.exception.ArtifactUploadFailedException; +import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadFileStatus; import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent.UploadStatusEventType; +import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; import org.slf4j.Logger; @@ -68,9 +70,12 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene private String failureReason; private final I18N i18n; private transient EventBus.SessionEventBus eventBus; + private final SoftwareModule selectedSw; + private SoftwareModule selectedSwForUpload; + private ArtifactUploadState artifactUploadState; - UploadHandler(final String fileName, final long fileSize, final UploadLayout view, - final long maxSize, final Upload upload, final String mimeType) { + UploadHandler(final String fileName, final long fileSize, final UploadLayout view, final long maxSize, + final Upload upload, final String mimeType, SoftwareModule selectedSw) { super(); this.fileName = fileName; this.fileSize = fileSize; @@ -78,8 +83,10 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene this.maxSize = maxSize; this.upload = upload; this.mimeType = mimeType; + this.selectedSw = selectedSw; this.i18n = SpringContextHelper.getBean(I18N.class); this.eventBus = SpringContextHelper.getBean(EventBus.SessionEventBus.class); + this.artifactUploadState = SpringContextHelper.getBean(ArtifactUploadState.class); } /** @@ -91,7 +98,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public final OutputStream getOutputStream() { try { streamingInterrupted = false; - return view.saveUploadedFileDetails(fileName, fileSize, mimeType); + return view.saveUploadedFileDetails(fileName, fileSize, mimeType, selectedSw); } catch (final ArtifactUploadFailedException e) { LOG.error("Atifact upload failed {} ", e); failureReason = e.getMessage(); @@ -116,7 +123,8 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene try { if (view.checkIfSoftwareModuleIsSelected() && !view.checkForDuplicate(fileName)) { view.increaseNumberOfFileUploadsExpected(); - return view.saveUploadedFileDetails(fileName, 0, mimeType); + selectedSwForUpload = artifactUploadState.getSelectedBaseSoftwareModule().get(); + return view.saveUploadedFileDetails(fileName, 0, mimeType, selectedSwForUpload); } } catch (final ArtifactUploadFailedException e) { LOG.error("Atifact upload failed {} ", e); @@ -217,13 +225,14 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public void updateProgress(final long readBytes, final long contentLength) { - //Update progress is called event after upload interrupted in uploadStarted method + // Update progress is called event after upload interrupted in + // uploadStarted method if (!uploadInterrupted) { if (readBytes > maxSize || contentLength > maxSize) { LOG.error("User tried to upload more than was allowed ({}).", maxSize); failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( - fileName, failureReason))); + fileName, failureReason, selectedSwForUpload))); upload.interruptUpload(); uploadInterrupted = true; return; @@ -245,7 +254,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene LOG.error("User tried to upload more than was allowed ({}).", maxSize); failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( - fileName, failureReason))); + fileName, failureReason, selectedSw))); streamingInterrupted = true; return; } @@ -268,7 +277,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene failureReason = event.getException().getMessage(); } eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STREAMING_FAILED, - new UploadFileStatus(fileName, failureReason))); + new UploadFileStatus(fileName, failureReason, selectedSw))); LOG.info("Streaming failed due to :{}", event.getException()); } @@ -284,9 +293,8 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene if (failureReason == null) { failureReason = event.getReason().getMessage(); } - System.out.println("failureReason:::"+failureReason); eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( - fileName, failureReason))); + fileName, failureReason, selectedSwForUpload))); LOG.info("Upload failed for file :{}", event.getReason()); } @@ -335,5 +343,5 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene } return true; } - + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index a9f36e8b8..fedee30b9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -181,7 +181,7 @@ public class UploadLayout extends VerticalLayout { final Upload upload = new Upload(); final UploadHandler uploadHandler = new UploadHandler(null, 0, this, spInfo.getMaxArtifactFileSize(), upload, - null); + null, null); upload.setButtonCaption(i18n.get("upload.file")); upload.setImmediate(true); upload.setReceiver(uploadHandler); @@ -243,15 +243,16 @@ public class UploadLayout extends VerticalLayout { public void drop(final DragAndDropEvent event) { if (validate(event)) { final Html5File[] files = ((WrapperTransferable) event.getTransferable()).getFiles(); + // selected software module at the time of file drop is + // considered for upload + SoftwareModule selectedSw = artifactUploadState.getSelectedBaseSoftwareModule().get(); // reset the flag hasDirectory = Boolean.FALSE; for (final Html5File file : files) { - processFile(file); + processFile(file, selectedSw); } if (artifactUploadState.getNumberOfFileUploadsExpected().get() > 0) { processBtn.setEnabled(false); - // reset before we start - // uploadInfoWindow.uploadSessionStarted(); } else { // If the upload is not started, it signifies all // dropped files as either duplicate or directory.So @@ -261,20 +262,20 @@ public class UploadLayout extends VerticalLayout { } } - private void processFile(final Html5File file) { + private void processFile(final Html5File file, SoftwareModule selectedSw) { if (!isDirectory(file)) { if (!checkForDuplicate(file.getFileName())) { artifactUploadState.getNumberOfFileUploadsExpected().incrementAndGet(); - file.setStreamVariable(createStreamVariable(file)); + file.setStreamVariable(createStreamVariable(file,selectedSw)); } } else { hasDirectory = Boolean.TRUE; } } - private StreamVariable createStreamVariable(final Html5File file) { + private StreamVariable createStreamVariable(final Html5File file, SoftwareModule selectedSw) { return new UploadHandler(file.getFileName(), file.getFileSize(), UploadLayout.this, - spInfo.getMaxArtifactFileSize(), null, file.getType()); + spInfo.getMaxArtifactFileSize(), null, file.getType(),selectedSw); } private boolean isDirectory(final Html5File file) { @@ -357,29 +358,28 @@ public class UploadLayout extends VerticalLayout { * file size * @param mimeType * the mimeType of the file + * @param selectedSw * @throws IOException * in case of upload errors */ - OutputStream saveUploadedFileDetails(final String name, final long size, final String mimeType) { + OutputStream saveUploadedFileDetails(final String name, final long size, final String mimeType, SoftwareModule selectedSw) { File tempFile = null; try { tempFile = File.createTempFile("spUiArtifactUpload", null); final OutputStream out = new FileOutputStream(tempFile); - final SoftwareModule selectedSoftwareModule = artifactUploadState.getSelectedBaseSoftwareModule().get(); - final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( - selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); + selectedSw.getName(), selectedSw.getVersion()); final CustomFile customFile = new CustomFile(name, size, tempFile.getAbsolutePath(), - selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion(), mimeType); + selectedSw.getName(), selectedSw.getVersion(), mimeType); artifactUploadState.getFileSelected().add(customFile); processBtn.setEnabled(false); if (!artifactUploadState.getBaseSwModuleList().keySet().contains(currentBaseSoftwareModuleKey)) { - artifactUploadState.getBaseSwModuleList().put(currentBaseSoftwareModuleKey, selectedSoftwareModule); + artifactUploadState.getBaseSwModuleList().put(currentBaseSoftwareModuleKey, selectedSw); } return out; } catch (final FileNotFoundException e) { @@ -689,30 +689,32 @@ public class UploadLayout extends VerticalLayout { } private void onUploadStreamingFailure(UploadStatusEvent event) { - /** - * If upload interrupted because of duplicate file,do not remove the - * file already in upload list - **/ - if (getDuplicateFileNamesList().isEmpty() - || !getDuplicateFileNamesList().contains(event.getUploadStatus().getFileName())) { - final SoftwareModule sw = getSoftwareModuleSelected(); + /** + * If upload interrupted because of duplicate file,do not remove the + * file already in upload list + **/ + if (getDuplicateFileNamesList().isEmpty() + || !getDuplicateFileNamesList().contains(event.getUploadStatus().getFileName())) { + final SoftwareModule sw = event.getUploadStatus().getSoftwareModule(); + if (sw != null) { getFileSelected().remove( new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); - // failed reason to be updated only if there is error other than - // duplicate file error - uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() - .getFailureReason()); - increaseNumberOfFileUploadsFailed(); } - decreaseNumberOfFileUploadsExpected(); - updateUploadCounts(); - enableProcessBtn(); - // check if we are finished - if (isUploadComplete()) { - uploadInfoWindow.uploadSessionFinished(); - setUploadStatusButtonIconToFinished(); - } - displayDuplicateValidationMessage(); + // failed reason to be updated only if there is error other than + // duplicate file error + uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() + .getFailureReason()); + increaseNumberOfFileUploadsFailed(); + } + decreaseNumberOfFileUploadsExpected(); + updateUploadCounts(); + enableProcessBtn(); + // check if we are finished + if (isUploadComplete()) { + uploadInfoWindow.uploadSessionFinished(); + setUploadStatusButtonIconToFinished(); + } + displayDuplicateValidationMessage(); } private void onUploadSuccess(UploadStatusEvent event) { @@ -745,11 +747,13 @@ public class UploadLayout extends VerticalLayout { * If upload interrupted because of duplicate file,do not remove the * file already in upload list **/ - if (getDuplicateFileNamesList().isEmpty() || !getDuplicateFileNamesList().contains( - event.getUploadStatus().getFileName())) { - final SoftwareModule sw = getSoftwareModuleSelected(); - getFileSelected().remove( - new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); + if (getDuplicateFileNamesList().isEmpty() + || !getDuplicateFileNamesList().contains(event.getUploadStatus().getFileName())) { + final SoftwareModule sw = event.getUploadStatus().getSoftwareModule(); + if (sw != null) { + getFileSelected().remove( + new CustomFile(event.getUploadStatus().getFileName(), sw.getName(), sw.getVersion())); + } // failed reason to be updated only if there is error other than // duplicate file error uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java index 177ecd8a3..e2a486e6c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java @@ -173,6 +173,7 @@ public class UploadStatusInfoWindow extends Window { } private void setPopupProperties() { + setId(SPUIComponetIdProvider.UPLOAD_STATUS_POPUP_ID); addStyleName(SPUIStyleDefinitions.UPLOAD_INFO); setImmediate(true); setResizable(false); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java index 7c25bf90a..2ada1b7bf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java @@ -902,6 +902,11 @@ public final class SPUIComponetIdProvider { * Artifact upload view - upload status button id. */ public static final String UPLOAD_STATUS_BUTTON = "artficat.upload.status.button.id"; + + /** + * Artifact uplaod view - uplod status popup id. + */ + public static final String UPLOAD_STATUS_POPUP_ID = "artifact.upload.status.popup.id"; /** From eb3f9f6f2d22a06c5c16c6897d079ca9e28866e2 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 17 May 2016 16:24:14 +0200 Subject: [PATCH 094/371] Fix header Signed-off-by: SirWayne --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 81b246fa1..6fdab75b3 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,8 @@ which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html ---> +--> + 4.0.0 From a47f7275eb98a30fea056bab60ca9874439d6613 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 17 May 2016 16:43:59 +0200 Subject: [PATCH 095/371] Fix header Signed-off-by: SirWayne --- .../rest/util/RequestResponseContextHolder.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java index 07b6af58d..72f37d8cb 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java @@ -1,5 +1,10 @@ /** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials are made + * available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.rest.util; @@ -10,12 +15,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; /** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials are made - * available under the terms of the Eclipse Public License v1.0 which - * accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html + * Store the request and response for the rest resources. */ public class RequestResponseContextHolder { From 5c233c628c95f0108a26adbb6eaffe58cad97806 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 17 May 2016 17:02:10 +0200 Subject: [PATCH 096/371] Fix header Signed-off-by: SirWayne --- .../hawkbit/rest/util/RequestResponseContextHolder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java index 72f37d8cb..f25a98810 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RequestResponseContextHolder.java @@ -1,9 +1,9 @@ /** * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * - * All rights reserved. This program and the accompanying materials are made - * available under the terms of the Eclipse Public License v1.0 which - * accompanies this distribution, and is available at + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.rest.util; From a48460ee039e45af15ad36b2b72abc79073aba94 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 17 May 2016 17:24:14 +0200 Subject: [PATCH 097/371] Fix header Signed-off-by: SirWayne --- hawkbit-system-resource/pom.xml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/hawkbit-system-resource/pom.xml b/hawkbit-system-resource/pom.xml index 440e327a3..3a2433366 100644 --- a/hawkbit-system-resource/pom.xml +++ b/hawkbit-system-resource/pom.xml @@ -1,6 +1,13 @@ - + 4.0.0 From e05b1bac592e6049feec416ef4497d1dc66ceaa4 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 17 May 2016 17:24:58 +0200 Subject: [PATCH 098/371] Fix header Signed-off-by: SirWayne --- examples/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/pom.xml b/examples/pom.xml index 32356e8a6..be54f149c 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -1,4 +1,3 @@ - +--> + 4.0.0 From 8125caf1180207989b397d7aa06f1b45260bce42 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 17 May 2016 17:25:46 +0200 Subject: [PATCH 099/371] Fix header Signed-off-by: SirWayne --- examples/hawkbit-example-ddi-client/pom.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index cd9613457..e6a70b5d4 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -1,4 +1,13 @@ - + 4.0.0 From a774412055645759be25942342402c61f3ceb076 Mon Sep 17 00:00:00 2001 From: Asharani Date: Wed, 18 May 2016 11:14:51 +0530 Subject: [PATCH 100/371] Bug fix : During upload the files when changing the selection of the software module the upload also changes to the new selected software module Signed-off-by: Asharani --- .../ui/artifacts/event/UploadFileStatus.java | 3 +- .../ui/artifacts/upload/UploadHandler.java | 19 ++++---- .../ui/artifacts/upload/UploadLayout.java | 45 +++++++------------ 3 files changed, 29 insertions(+), 38 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java index f594fad8b..81b096c3e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java @@ -35,10 +35,11 @@ public class UploadFileStatus implements Serializable { this.fileName = fileName; } - public UploadFileStatus(String fileName, long bytesRead, long contentLength) { + public UploadFileStatus(String fileName, long bytesRead, long contentLength,SoftwareModule softwareModule) { this.fileName = fileName; this.contentLength = contentLength; this.bytesRead = bytesRead; + this.softwareModule = softwareModule; } public UploadFileStatus(String fileName, String failureReason,SoftwareModule selectedSw) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index 277e56967..848fa2da5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -121,9 +121,8 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene // reset has directory flag before upload view.setHasDirectory(false); try { - if (view.checkIfSoftwareModuleIsSelected() && !view.checkForDuplicate(fileName)) { + if (view.checkIfSoftwareModuleIsSelected() && !view.checkForDuplicate(fileName, selectedSwForUpload)) { view.increaseNumberOfFileUploadsExpected(); - selectedSwForUpload = artifactUploadState.getSelectedBaseSoftwareModule().get(); return view.saveUploadedFileDetails(fileName, 0, mimeType, selectedSwForUpload); } } catch (final ArtifactUploadFailedException e) { @@ -146,7 +145,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public void uploadSucceeded(final SucceededEvent event) { LOG.debug("Streaming finished for file :{}", event.getFilename()); eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_SUCCESSFUL, new UploadFileStatus( - event.getFilename(), 0, event.getLength()))); + event.getFilename(), 0, event.getLength(), selectedSwForUpload))); } /** @@ -160,7 +159,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public void streamingFinished(final StreamingEndEvent event) { LOG.debug("Streaming finished for file :{}", event.getFileName()); eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STREAMING_FINISHED, - new UploadFileStatus(event.getFileName(), 0, event.getContentLength()))); + new UploadFileStatus(event.getFileName(), 0, event.getContentLength(), selectedSw))); } /** @@ -185,7 +184,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public void streamingStarted(final StreamingStartEvent event) { LOG.debug("Streaming started for file :{}", fileName); eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STARTED, new UploadFileStatus( - fileName, 0, 0))); + fileName, 0, 0, selectedSw))); } /** @@ -195,11 +194,13 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public void uploadStarted(final StartedEvent event) { + selectedSwForUpload = artifactUploadState.getSelectedBaseSoftwareModule().get(); + // single file session - if (view.isSoftwareModuleSelected() && !view.checkIfFileIsDuplicate(event.getFilename())) { + if (view.isSoftwareModuleSelected() && !view.checkIfFileIsDuplicate(event.getFilename(), selectedSwForUpload)) { LOG.debug("Upload started for file :{}", event.getFilename()); eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STARTED, new UploadFileStatus( - event.getFilename(), 0, 0))); + event.getFilename(), 0, 0, selectedSwForUpload))); } else { failureReason = i18n.get("message.upload.failed"); upload.interruptUpload(); @@ -238,7 +239,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene return; } eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_IN_PROGRESS, - new UploadFileStatus(fileName, readBytes, contentLength))); + new UploadFileStatus(fileName, readBytes, contentLength, selectedSwForUpload))); LOG.info("Update progress - {} : {}", fileName, (double) readBytes / (double) contentLength); } } @@ -259,7 +260,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene return; } eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_IN_PROGRESS, new UploadFileStatus( - fileName, event.getBytesReceived(), event.getContentLength()))); + fileName, event.getBytesReceived(), event.getContentLength(), selectedSw))); // Logging to solve sonar issue LOG.trace("Streaming in progress for file :{}", event.getFileName()); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index fedee30b9..cbf766da8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -118,7 +118,6 @@ public class UploadLayout extends VerticalLayout { private Button uploadStatusButton; - /** * Initialize the upload layout. */ @@ -139,8 +138,7 @@ public class UploadLayout extends VerticalLayout { ui.access(() -> showUploadStatusButton()); } else if (event == UploadArtifactUIEvent.MAXIMIZED_STATUS_POPUP) { ui.access(() -> maximizeStatusPopup()); - } - else if(event == UploadArtifactUIEvent.ARTIFACT_RESULT_POPUP_CLOSED){ + } else if (event == UploadArtifactUIEvent.ARTIFACT_RESULT_POPUP_CLOSED) { ui.access(() -> closeUploadStatusPopup()); } } @@ -264,9 +262,9 @@ public class UploadLayout extends VerticalLayout { private void processFile(final Html5File file, SoftwareModule selectedSw) { if (!isDirectory(file)) { - if (!checkForDuplicate(file.getFileName())) { + if (!checkForDuplicate(file.getFileName(), selectedSw)) { artifactUploadState.getNumberOfFileUploadsExpected().incrementAndGet(); - file.setStreamVariable(createStreamVariable(file,selectedSw)); + file.setStreamVariable(createStreamVariable(file, selectedSw)); } } else { hasDirectory = Boolean.TRUE; @@ -275,7 +273,7 @@ public class UploadLayout extends VerticalLayout { private StreamVariable createStreamVariable(final Html5File file, SoftwareModule selectedSw) { return new UploadHandler(file.getFileName(), file.getFileSize(), UploadLayout.this, - spInfo.getMaxArtifactFileSize(), null, file.getType(),selectedSw); + spInfo.getMaxArtifactFileSize(), null, file.getType(), selectedSw); } private boolean isDirectory(final Html5File file) { @@ -339,8 +337,8 @@ public class UploadLayout extends VerticalLayout { discardBtn.addClickListener(event -> discardUploadData(event)); } - boolean checkForDuplicate(final String filename) { - final Boolean isDuplicate = checkIfFileIsDuplicate(filename); + boolean checkForDuplicate(final String filename, final SoftwareModule selectedSw) { + final Boolean isDuplicate = checkIfFileIsDuplicate(filename, selectedSw); if (isDuplicate) { getDuplicateFileNamesList().add(filename); } @@ -358,22 +356,23 @@ public class UploadLayout extends VerticalLayout { * file size * @param mimeType * the mimeType of the file - * @param selectedSw + * @param selectedSw * @throws IOException * in case of upload errors */ - OutputStream saveUploadedFileDetails(final String name, final long size, final String mimeType, SoftwareModule selectedSw) { + OutputStream saveUploadedFileDetails(final String name, final long size, final String mimeType, + SoftwareModule selectedSw) { File tempFile = null; try { tempFile = File.createTempFile("spUiArtifactUpload", null); final OutputStream out = new FileOutputStream(tempFile); - final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( - selectedSw.getName(), selectedSw.getVersion()); + final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion(selectedSw.getName(), + selectedSw.getVersion()); - final CustomFile customFile = new CustomFile(name, size, tempFile.getAbsolutePath(), - selectedSw.getName(), selectedSw.getVersion(), mimeType); + final CustomFile customFile = new CustomFile(name, size, tempFile.getAbsolutePath(), selectedSw.getName(), + selectedSw.getVersion(), mimeType); artifactUploadState.getFileSelected().add(customFile); processBtn.setEnabled(false); @@ -424,13 +423,6 @@ public class UploadLayout extends VerticalLayout { return true; } - SoftwareModule getSoftwareModuleSelected() { - if (artifactUploadState.getSelectedBaseSoftwareModule().isPresent()) { - return artifactUploadState.getSelectedBaseSoftwareModule().get(); - } - return null; - } - Boolean isSoftwareModuleSelected() { if (!artifactUploadState.getSelectedBaseSwModuleId().isPresent()) { return false; @@ -446,9 +438,8 @@ public class UploadLayout extends VerticalLayout { * file name * @return Boolean */ - public Boolean checkIfFileIsDuplicate(final String name) { + public Boolean checkIfFileIsDuplicate(final String name, final SoftwareModule selectedSoftwareModule) { Boolean isDuplicate = false; - final SoftwareModule selectedSoftwareModule = artifactUploadState.getSelectedBaseSoftwareModule().get(); final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); @@ -514,8 +505,7 @@ public class UploadLayout extends VerticalLayout { artifactUploadState.getNumberOfFileUploadsExpected().incrementAndGet(); } - void updateFileSize(final String name, final long size) { - final SoftwareModule selectedSoftwareModule = artifactUploadState.getSelectedBaseSoftwareModule().get(); + void updateFileSize(final String name, final long size, SoftwareModule selectedSoftwareModule) { final String currentBaseSoftwareModuleKey = HawkbitCommonUtil.getFormattedNameVersion( selectedSoftwareModule.getName(), selectedSoftwareModule.getVersion()); @@ -718,7 +708,8 @@ public class UploadLayout extends VerticalLayout { } private void onUploadSuccess(UploadStatusEvent event) { - updateFileSize(event.getUploadStatus().getFileName(), event.getUploadStatus().getContentLength()); + updateFileSize(event.getUploadStatus().getFileName(), event.getUploadStatus().getContentLength(), event + .getUploadStatus().getSoftwareModule()); // recorded that we now one more uploaded increaseNumberOfFilesActuallyUpload(); } @@ -735,7 +726,6 @@ public class UploadLayout extends VerticalLayout { duplicateFileNamesList.clear(); } - private boolean isUploadComplete() { int uploadedCount = artifactUploadState.getNumberOfFilesActuallyUpload().intValue(); int expectedUploadsCount = artifactUploadState.getNumberOfFileUploadsExpected().intValue(); @@ -869,7 +859,6 @@ public class UploadLayout extends VerticalLayout { uploadStatusButton.setIcon(null); } - protected void updateUploadCounts() { updateActionCount(); updateStatusButtonCount(); From 677b35ef423d0f2405b05d21dd07418b34bc2bb1 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 08:32:33 +0200 Subject: [PATCH 101/371] Fix header Signed-off-by: SirWayne --- .../hawkbit/mgmt/rest/api/MgmtDistributionSetRestApi.java | 3 +-- .../hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java | 2 +- .../hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java | 4 ++-- .../org/eclipse/hawkbit/mgmt/rest/api/MgmtRolloutRestApi.java | 2 +- .../hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java | 2 +- .../hawkbit/mgmt/rest/api/MgmtSoftwareModuleTypeRestApi.java | 2 +- .../org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetRestApi.java | 2 +- .../eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java | 2 +- 8 files changed, 9 insertions(+), 10 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 0b960543c..01ae4f93f 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 @@ -2,11 +2,10 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse License v1.0 + * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ - package org.eclipse.hawkbit.mgmt.rest.api; import java.util.List; 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 316f2a56e..761e803af 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 @@ -2,7 +2,7 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse License v1.0 + * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ 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 84fe8c4e7..01aea87f1 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 @@ -2,7 +2,7 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse License v1.0 + * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ @@ -12,9 +12,9 @@ import java.util.List; import org.eclipse.hawkbit.mgmt.json.model.MgmtId; import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPut; -import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; 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 ea4578cad..450d080d1 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 @@ -2,7 +2,7 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse License v1.0 + * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ 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 dab8cc594..54bf7b08b 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 @@ -2,7 +2,7 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse License v1.0 + * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ 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 6c7252d62..208162645 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 @@ -2,7 +2,7 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse License v1.0 + * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ 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 572dcf500..077c2c799 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 @@ -2,7 +2,7 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse License v1.0 + * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ 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 90646a562..132a9f939 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 @@ -2,7 +2,7 @@ * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse License v1.0 + * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ From c8d0424706eb1a8ef1b94fb55b670907c4f49e73 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 08:34:02 +0200 Subject: [PATCH 102/371] Fix header Signed-off-by: SirWayne --- .../hawkbit/ddi/rest/api/DdiRootControllerRestApi.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 45382faf5..eaa879562 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 @@ -1,5 +1,10 @@ /** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.ddi.rest.api; From 58648cb9b2c3b17289e76604a2d1090ce950c64d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 08:34:31 +0200 Subject: [PATCH 103/371] Fix header Signed-off-by: SirWayne --- .../dl/rest/api/DdiDlArtifactStoreControllerRestApi.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlArtifactStoreControllerRestApi.java b/hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlArtifactStoreControllerRestApi.java index da938b2d1..53d5940fe 100644 --- a/hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlArtifactStoreControllerRestApi.java +++ b/hawkbit-ddi-dl-api/src/main/java/org/eclipse/hawkbit/ddi/dl/rest/api/DdiDlArtifactStoreControllerRestApi.java @@ -1,6 +1,6 @@ /** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. - * + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -37,7 +37,8 @@ public interface DdiDlArtifactStoreControllerRestApi { * {@link HttpStatus#OK} or in case of partial download * {@link HttpStatus#PARTIAL_CONTENT}. */ - @RequestMapping(method = RequestMethod.GET, value = DdiDlRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + "/{fileName}") + @RequestMapping(method = RequestMethod.GET, value = DdiDlRestConstants.ARTIFACT_DOWNLOAD_BY_FILENAME + + "/{fileName}") @ResponseBody public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, @AuthenticationPrincipal final String targetid); From 610daed845ac47d5de80823a60300a3f16f2b20e Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 08:37:31 +0200 Subject: [PATCH 104/371] Fix header Signed-off-by: SirWayne --- .../resource/RootControllerResourceClientConstants.java | 7 ++++++- .../hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java | 4 ++-- .../strategy/SaveArtifactsToLocalTempDirectories.java | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java index 0611c4a09..07d31337e 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java @@ -1,5 +1,10 @@ /** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.ddi.client.resource; diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java index 7e5d72c4a..4d71528b2 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java @@ -12,8 +12,8 @@ import java.io.IOException; import java.io.InputStream; /** - * Implementation of {@link ArtifactsPersistenceStrategy} for not downloading any - * artifacts. + * Implementation of {@link ArtifactsPersistenceStrategy} for not downloading + * any artifacts. */ public class DoNotSaveArtifacts implements ArtifactsPersistenceStrategy { diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java index 11ac5698b..afcc01419 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java @@ -18,8 +18,8 @@ import com.google.common.io.ByteStreams; import com.google.common.io.Files; /** - * Implementation of {@link ArtifactsPersistenceStrategy} for downloading artifacts to - * the temp directory. + * Implementation of {@link ArtifactsPersistenceStrategy} for downloading + * artifacts to the temp directory. */ public class SaveArtifactsToLocalTempDirectories implements ArtifactsPersistenceStrategy { From 9d6527a3e29567c0c0b55951121d1356a65d7a3b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 18 May 2016 09:03:58 +0200 Subject: [PATCH 105/371] Switched back to Boots default logger: logback Signed-off-by: Kai Zimmermann --- examples/hawkbit-device-simulator/pom.xml | 26 +++++++++++++------ .../src/main/resources/logback.xml | 22 ++++++++++++++++ examples/hawkbit-example-app/pom.xml | 26 +++++++++++++------ .../src/main/resources/logback.xml | 22 ++++++++++++++++ pom.xml | 23 ---------------- 5 files changed, 80 insertions(+), 39 deletions(-) create mode 100644 examples/hawkbit-device-simulator/src/main/resources/logback.xml create mode 100644 examples/hawkbit-example-app/src/main/resources/logback.xml diff --git a/examples/hawkbit-device-simulator/pom.xml b/examples/hawkbit-device-simulator/pom.xml index 728fe0595..99ed154d9 100644 --- a/examples/hawkbit-device-simulator/pom.xml +++ b/examples/hawkbit-device-simulator/pom.xml @@ -82,16 +82,26 @@ org.springframework.boot spring-boot-starter - - - org.springframework.boot - spring-boot-starter-logging - - + - org.springframework.boot - spring-boot-starter-log4j2 + org.apache.logging.log4j + log4j-api + + + + org.slf4j + jul-to-slf4j + + + + org.slf4j + jcl-over-slf4j + + + + org.slf4j + log4j-over-slf4j com.vaadin diff --git a/examples/hawkbit-device-simulator/src/main/resources/logback.xml b/examples/hawkbit-device-simulator/src/main/resources/logback.xml new file mode 100644 index 000000000..0cdbf8ff6 --- /dev/null +++ b/examples/hawkbit-device-simulator/src/main/resources/logback.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/hawkbit-example-app/pom.xml b/examples/hawkbit-example-app/pom.xml index a5c0f864d..2f37a510e 100644 --- a/examples/hawkbit-example-app/pom.xml +++ b/examples/hawkbit-example-app/pom.xml @@ -96,16 +96,26 @@ org.springframework.boot spring-boot-starter - - - org.springframework.boot - spring-boot-starter-logging - - + - org.springframework.boot - spring-boot-starter-log4j2 + org.apache.logging.log4j + log4j-api + + + + org.slf4j + jul-to-slf4j + + + + org.slf4j + jcl-over-slf4j + + + + org.slf4j + log4j-over-slf4j org.springframework.security diff --git a/examples/hawkbit-example-app/src/main/resources/logback.xml b/examples/hawkbit-example-app/src/main/resources/logback.xml new file mode 100644 index 000000000..7470bb201 --- /dev/null +++ b/examples/hawkbit-example-app/src/main/resources/logback.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index b6d09758e..4ecf2497b 100644 --- a/pom.xml +++ b/pom.xml @@ -445,39 +445,16 @@ org.springframework.boot spring-boot-starter-actuator ${spring.boot.version} - - - org.springframework.boot - spring-boot-starter-logging - - - - - org.springframework.boot - spring-boot-starter-log4j2 - ${spring.boot.version} org.springframework.boot spring-boot-starter-web ${spring.boot.version} - - - org.springframework.boot - spring-boot-starter-logging - - org.springframework.boot spring-boot-starter ${spring.boot.version} - - - org.springframework.boot - spring-boot-starter-logging - - org.springframework.boot From fd6de4496d30a67903e525c116be8149865649d0 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 18 May 2016 09:05:01 +0200 Subject: [PATCH 106/371] Improved simulator download case a bit. Added missing test asserts for target token in DMF. Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java | 6 ++++++ .../hawkbit/amqp/AmqpMessageDispatcherServiceTest.java | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java index e7b81b017..5c6c0a3ea 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java @@ -149,6 +149,8 @@ public class DeviceSimulatorUpdater { eventbus.post(new ProgressUpdate(device)); return; } + // download is 80% of the game after all + device.setProgress(0.8); } final double newProgress = device.getProgress() + 0.2; @@ -272,6 +274,10 @@ public class DeviceSimulatorUpdater { } private static String hideTokenDetails(final String targetToken) { + if (targetToken == null) { + return ""; + } + if (targetToken.isEmpty()) { return ""; } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java index c5cea9e05..9164e655d 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java @@ -100,6 +100,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent); final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress()); final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); + assertThat(downloadAndUpdateRequest.getTargetSecurityToken()).isEqualTo(TEST_TOKEN); assertTrue("No softwaremmodule should be contained in the request", downloadAndUpdateRequest.getSoftwareModules().isEmpty()); } @@ -116,6 +117,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); assertEquals("Expecting a size of 3 software modules in the reuqest", 3, downloadAndUpdateRequest.getSoftwareModules().size()); + assertThat(downloadAndUpdateRequest.getTargetSecurityToken()).isEqualTo(TEST_TOKEN); for (final org.eclipse.hawkbit.dmf.json.model.SoftwareModule softwareModule : downloadAndUpdateRequest .getSoftwareModules()) { assertTrue("Artifact list for softwaremodule should be empty", softwareModule.getArtifacts().isEmpty()); @@ -155,6 +157,8 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); assertEquals("DownloadAndUpdateRequest event should contains 3 software modules", 3, downloadAndUpdateRequest.getSoftwareModules().size()); + assertThat(downloadAndUpdateRequest.getTargetSecurityToken()).isEqualTo(TEST_TOKEN); + for (final org.eclipse.hawkbit.dmf.json.model.SoftwareModule softwareModule : downloadAndUpdateRequest .getSoftwareModules()) { if (!softwareModule.getModuleId().equals(module.getId())) { From 159fa3abb372f095a63d9048f1cd285f4505117f Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 09:06:55 +0200 Subject: [PATCH 107/371] Fix header Signed-off-by: SirWayne --- hawkbit-mgmt-resource/pom.xml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index 4e5302e23..160299651 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -1,6 +1,13 @@ - + 4.0.0 From e30748dd53fc0bcd73656332f961a3439a083fcb Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 09:24:33 +0200 Subject: [PATCH 108/371] Modify name of artifacts in pom Signed-off-by: SirWayne --- examples/hawkbit-device-simulator/pom.xml | 2 +- examples/hawkbit-example-app/pom.xml | 2 +- examples/hawkbit-example-ddi-client/pom.xml | 2 +- examples/hawkbit-example-feign-core-client/pom.xml | 3 +-- examples/hawkbit-example-mgmt-client/pom.xml | 2 +- examples/hawkbit-example-mgmt-spring-client/pom.xml | 2 +- examples/pom.xml | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) diff --git a/examples/hawkbit-device-simulator/pom.xml b/examples/hawkbit-device-simulator/pom.xml index 728fe0595..b8539296a 100644 --- a/examples/hawkbit-device-simulator/pom.xml +++ b/examples/hawkbit-device-simulator/pom.xml @@ -19,7 +19,7 @@ hawkbit-device-simulator - hawkBit :: Device Simulator + hawkBit-example :: Device Simulator Device Management Federation API based simulator diff --git a/examples/hawkbit-example-app/pom.xml b/examples/hawkbit-example-app/pom.xml index efbcf9e9e..9fd0958ea 100644 --- a/examples/hawkbit-example-app/pom.xml +++ b/examples/hawkbit-example-app/pom.xml @@ -17,7 +17,7 @@ 0.2.0-SNAPSHOT hawkbit-example-app - hawkBit :: Example App + hawkBit-example :: UI Application diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index e6a70b5d4..629d1e988 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -18,7 +18,7 @@ hawkbit-example-ddi-client - hawkbit-example-ddi-client + hawkBit-example :: DDI Feign Client diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-feign-core-client/pom.xml index 5514db95d..23d66e69d 100644 --- a/examples/hawkbit-example-feign-core-client/pom.xml +++ b/examples/hawkbit-example-feign-core-client/pom.xml @@ -18,8 +18,7 @@ hawkbit-example-feign-core-client - hawkbit-example-feign-core-client - + hawkBit-example :: Feign Core Client diff --git a/examples/hawkbit-example-mgmt-client/pom.xml b/examples/hawkbit-example-mgmt-client/pom.xml index 446ee55da..6bd360459 100644 --- a/examples/hawkbit-example-mgmt-client/pom.xml +++ b/examples/hawkbit-example-mgmt-client/pom.xml @@ -18,7 +18,7 @@ jar hawkbit-example-mgmt-client - hawkBit Management client API + hawkBit-example :: Management client API diff --git a/examples/hawkbit-example-mgmt-spring-client/pom.xml b/examples/hawkbit-example-mgmt-spring-client/pom.xml index 73f7ba248..afd7a6ec2 100644 --- a/examples/hawkbit-example-mgmt-spring-client/pom.xml +++ b/examples/hawkbit-example-mgmt-spring-client/pom.xml @@ -18,7 +18,7 @@ jar hawkbit-example-mgmt-spring-client - hawkBit Management API example client + hawkBit-example :: Management Feign Client diff --git a/examples/pom.xml b/examples/pom.xml index be54f149c..7bbe58848 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -18,7 +18,7 @@ hawkbit-examples-parent - hawkBit :: Examples Parent + hawkBit-example :: Parent pom From 40fa1325bde5308e0fc18f25540408e74263e86c Mon Sep 17 00:00:00 2001 From: venu1278 Date: Wed, 18 May 2016 14:07:52 +0530 Subject: [PATCH 109/371] fix_display_DSNameVersion_actionhistory_table. Signed-off-by: venu1278 --- .../actionhistory/ActionHistoryTable.java | 8 +++---- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 22 +------------------ 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index 834566f7e..be1a96c37 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -296,8 +296,8 @@ public class ActionHistoryTable extends TreeTable implements Handler { * add distribution name to the item which will be displayed in the * table. The name should not exceed certain limit. */ - item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST).setValue(HawkbitCommonUtil - .getFormattedText(actionWithStatusCount.getDsName() + ":" + actionWithStatusCount.getDsVersion())); + item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST).setValue(actionWithStatusCount.getDsName() + ":" + + actionWithStatusCount.getDsVersion()); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED).setValue(action); /* Default no child */ @@ -442,8 +442,8 @@ public class ActionHistoryTable extends TreeTable implements Handler { childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE_HIDDEN).setValue(""); childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST) - .setValue(HawkbitCommonUtil.getFormattedText(action.getDistributionSet().getName() + ":" - + action.getDistributionSet().getVersion())); + .setValue(action.getDistributionSet().getName() + ":" + + action.getDistributionSet().getVersion()); childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DATETIME) .setValue(SPDateTimeUtil.getFormattedDate(actionStatus.getCreatedAt())); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index 0e71567af..a1091cd8a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -431,27 +431,7 @@ public final class HawkbitCommonUtil { return trimAndNullIfEmpty(orgText) == null ? SPUIDefinitions.SPACE : orgText; } - /** - * Format the lengthy text. - * - * @param orgText - * text to be formatted - * @return String formatted text - */ - public static String getFormattedText(final String orgText) { - if (orgText == null) { - return StringUtils.EMPTY; - } - - final int txtLengthAllowed = SPUIDefinitions.NAME_DESCRIPTION_LENGTH; - if (orgText.length() > txtLengthAllowed) { - return new StringBuilder(orgText.substring(0, txtLengthAllowed)).append("...").toString(); - } - - return orgText; - } - - /** + /** * Find extra height required to increase by all the components to utilize * the full height of browser for the responsive UI. * From b8936409fe60edfa3ddda3e0a8b4b3f1cdece1e5 Mon Sep 17 00:00:00 2001 From: venu1278 Date: Wed, 18 May 2016 14:17:29 +0530 Subject: [PATCH 110/371] fix_flashing_whitepage_on_login_application Signed-off-by: venu1278 --- .../resources/VAADIN/themes/hawkbit/hawkbittheme.scss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss index a344cb5ae..550a0479b 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss @@ -132,4 +132,14 @@ $v-included-components: remove($v-included-components, form); left: 50%; margin-left: -20px; } + .v-generated-body &.v-app , .v-generated-body .v-app { + background-color: rgba(0, 0, 0, 0); + background-image: $app-background-image, linear-gradient(to bottom, $app-background-image-gradient) !important; + background-image: $app-background-image, -webkit-linear-gradient(top, $app-background-image-gradient) !important; + background-image: $app-background-image, -moz-linear-gradient(top, $app-background-image-gradient) !important; + background-position: bottom; + background-repeat: no-repeat; + height:100%; + width:100%; + } } From b8a3dbdf62764b5719ee79b4fe54596af80f5941 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 18 May 2016 11:12:27 +0200 Subject: [PATCH 111/371] Fixed sonar issues. Signed-off-by: Kai Zimmermann --- .../org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java | 2 +- .../eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java index 5c6c0a3ea..34c5f548e 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java @@ -264,7 +264,7 @@ public class DeviceSimulatorUpdater { } } catch (IOException | KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) { - LOGGER.error("Failed to download {} with {}", url, e.getMessage()); + LOGGER.error("Failed to download" + url, e); return new UpdateStatus(ResponseStatus.ERROR, "Failed to download " + url + ": " + e.getMessage()); } diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java index 0072f2fbd..d43d660ca 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java @@ -61,7 +61,7 @@ public class PropertyBasedArtifactUrlHandler implements ArtifactUrlHandler { for (final Entry entry : entrySet) { if (entry.getKey().equals(PORT_PLACEHOLDER)) { urlPattern = urlPattern.replace(":{" + entry.getKey() + "}", - Strings.isNullOrEmpty(entry.getValue()) ? "" : ":" + entry.getValue()); + Strings.isNullOrEmpty(entry.getValue()) ? "" : (":" + entry.getValue())); } else { urlPattern = urlPattern.replace("{" + entry.getKey() + "}", entry.getValue()); } From 5bb24c78ade0714efed4fb45254d75f00994d7c8 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 13:48:04 +0200 Subject: [PATCH 112/371] Remove and Rename modules Signed-off-by: SirWayne --- examples/hawkbit-custom-theme-example/pom.xml | 2 +- examples/hawkbit-example-app/pom.xml | 7 +- .../java/org/eclipse/hawkbit/app/Start.java | 2 - .../README.md | 0 .../pom.xml | 2 +- ...plicationJsonRequestHeaderInterceptor.java | 0 .../core/client/FeignClientConfiguration.java | 0 ...leConsumersProducersSpringMvcContract.java | 0 .../README.md | 0 .../pom.xml | 4 +- .../hawkbit/ddi/client/DdiDecoder.java | 0 .../ddi/client/DdiDefaultFeignClient.java | 0 .../hawkbit/ddi/client/DdiExampleClient.java | 0 .../AuthenticationInterceptor.java | 0 .../AuthenticationInterceptorFactory.java | 0 ...ecurityTokenAuthenticationInterceptor.java | 0 ...ArtifactStoreControllerResourceClient.java | 0 .../RootControllerResourceClient.java | 0 ...RootControllerResourceClientConstants.java | 0 .../ArtifactsPersistenceStrategy.java | 0 .../client/strategy/DoNotSaveArtifacts.java | 0 .../SaveArtifactsToLocalTempDirectories.java | 0 .../.gitignore | 0 .../README.md | 0 .../pom.xml | 9 +- .../MgmtDistributionSetClientResource.java | 0 .../MgmtDistributionSetTagClientResource.java | 0 ...MgmtDistributionSetTypeClientResource.java | 0 .../MgmtDownloadArtifactClientResource.java | 0 .../resource/MgmtDownloadClientResource.java | 0 .../resource/MgmtRolloutClientResource.java | 0 .../MgmtSoftwareModuleClientResource.java | 0 .../MgmtSoftwareModuleTypeClientResource.java | 0 .../resource/MgmtTargetClientResource.java | 0 .../resource/MgmtTargetTagClientResource.java | 0 .../client/resource/SystemClientResource.java | 6 +- .../SystemManagementClientResource.java | 6 +- .../builder/DistributionSetBuilder.java | 0 .../builder/DistributionSetTypeBuilder.java | 0 .../resource/builder/RolloutBuilder.java | 0 .../SoftwareModuleAssigmentBuilder.java | 0 .../builder/SoftwareModuleBuilder.java | 0 .../builder/SoftwareModuleTypeBuilder.java | 0 .../client/resource/builder/TagBuilder.java | 0 .../resource/builder/TargetBuilder.java | 0 .../.gitignore | 0 .../README.md | 0 .../pom.xml | 4 +- .../hawkbit/mgmt/client/Application.java | 0 .../client/ClientConfigurationProperties.java | 0 .../CreateStartedRolloutExample.java | 0 .../GettingStartedDefaultScenario.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 0 examples/pom.xml | 8 +- hawkbit-autoconfigure/pom.xml | 8 +- .../SecurityManagedConfiguration.java | 6 +- .../ResourceControllerAutoConfiguration.java | 5 +- .../resource/DdiArtifactStoreController.java | 2 +- .../MgmtSystemTenantConfigurationValue.java | 4 +- ...SystemTenantConfigurationValueRequest.java | 8 +- .../systemmanagement/MgmtSystemCache.java | 8 +- .../MgmtSystemStatisticsRest.java | 20 +- .../MgmtSystemTenantServiceUsage.java | 6 +- .../mgmt/rest/api/MgmtRestConstants.java | 15 +- .../rest/api/MgmtSystemManagementRestApi.java | 14 +- .../mgmt/rest/api/MgmtSystemRestApi.java | 19 +- .../MgmtSystemManagementResource.java | 38 ++-- .../mgmt/rest/resource/MgmtSystemMapper.java | 20 +- .../rest/resource/MgmtSystemResource.java | 32 ++-- hawkbit-system-api/README.md | 14 -- hawkbit-system-api/pom.xml | 33 ---- .../system/rest/api/SystemRestConstant.java | 41 ---- hawkbit-system-resource/README.md | 13 -- hawkbit-system-resource/pom.xml | 157 ---------------- .../system/annotation/EnableSystemApi.java | 33 ---- .../system/rest/resource/ResourceUtility.java | 32 ---- .../SystemManagementResourceTest.java | 175 ------------------ .../rest/resource/SystemResourceTest.java | 147 --------------- {hawkbit-mgmt-ui => hawkbit-ui}/.gitignore | 0 {hawkbit-mgmt-ui => hawkbit-ui}/README.md | 0 {hawkbit-mgmt-ui => hawkbit-ui}/pom.xml | 2 +- .../src/main/.gitignore | 0 .../push/AsyncVaadinServletConfiguration.java | 0 .../SpringSecurityAtmosphereInterceptor.java | 0 .../repository/OffsetBasedPageRequest.java | 0 .../repository/SpPermissionChecker.java | 0 .../eclipse/hawkbit/ui/AppWidgetSet.gwt.xml | 0 .../eclipse/hawkbit/ui/DefaultHawkbitUI.java | 0 .../hawkbit/ui/DispatcherRunnable.java | 0 .../org/eclipse/hawkbit/ui/ErrorView.java | 0 .../hawkbit/ui/HawkbitEventProvider.java | 0 .../org/eclipse/hawkbit/ui/HawkbitUI.java | 0 .../eclipse/hawkbit/ui/UIEventProvider.java | 0 .../org/eclipse/hawkbit/ui/UiProperties.java | 0 .../ui/artifacts/UploadArtifactView.java | 0 .../artifacts/UploadArtifactViewMenuItem.java | 0 .../artifacts/details/ArtifactBeanQuery.java | 0 .../details/ArtifactDetailsLayout.java | 0 .../artifacts/event/ArtifactDetailsEvent.java | 0 .../ui/artifacts/event/SMFilterEvent.java | 0 .../artifacts/event/SoftwareModuleEvent.java | 0 .../event/SoftwareModuleTypeEvent.java | 0 .../event/UploadArtifactUIEvent.java | 0 .../event/UploadViewAcceptCriteria.java | 0 .../footer/SMDeleteActionsLayout.java | 0 .../UploadViewConfirmationWindowLayout.java | 0 .../smtable/BaseSwModuleBeanQuery.java | 0 .../smtable/ProxyBaseSoftwareModuleItem.java | 0 .../SoftwareModuleAddUpdateWindow.java | 0 .../smtable/SoftwareModuleDetails.java | 0 .../smtable/SoftwareModuleTable.java | 0 .../smtable/SoftwareModuleTableHeader.java | 0 .../smtable/SoftwareModuleTableLayout.java | 0 .../CreateUpdateSoftwareTypeLayout.java | 0 .../smtype/SMTypeFilterButtonClick.java | 0 .../artifacts/smtype/SMTypeFilterButtons.java | 0 .../artifacts/smtype/SMTypeFilterHeader.java | 0 .../artifacts/smtype/SMTypeFilterLayout.java | 0 .../artifacts/state/ArtifactUploadState.java | 0 .../ui/artifacts/state/CustomFile.java | 0 .../state/SoftwareModuleFilters.java | 0 .../upload/UploadConfirmationwindow.java | 0 .../ui/artifacts/upload/UploadHandler.java | 0 .../ui/artifacts/upload/UploadLayout.java | 0 .../artifacts/upload/UploadResultWindow.java | 0 .../ui/artifacts/upload/UploadStatus.java | 0 .../upload/UploadStatusInfoWindow.java | 0 .../ui/common/AbstractAcceptCriteria.java | 0 .../hawkbit/ui/common/ConfirmationDialog.java | 0 .../hawkbit/ui/common/CoordinatesToColor.java | 0 .../common/DistributionSetTypeBeanQuery.java | 0 .../ui/common/ManagmentEntityState.java | 0 .../common/SoftwareModuleTypeBeanQuery.java | 0 .../ui/common/UserDetailsFormatter.java | 0 .../AbstractConfirmationWindowLayout.java | 0 .../confirmwindow/layout/ConfirmationTab.java | 0 .../layout/ConfirmationWindowEvents.java | 0 ...amedVersionedEntityTableDetailsLayout.java | 0 .../AbstractTableDetailsLayout.java | 0 .../SoftwareModuleDetailsTable.java | 0 .../AbstractFilterButtonClickBehaviour.java | 0 .../filterlayout/AbstractFilterButtons.java | 0 .../filterlayout/AbstractFilterHeader.java | 0 .../filterlayout/AbstractFilterLayout.java | 0 .../AbstractFilterMultiButtonClick.java | 0 .../AbstractFilterSingleButtonClick.java | 0 .../footer/AbstractDeleteActionsLayout.java | 0 .../hawkbit/ui/common/grid/AbstractGrid.java | 0 .../ui/common/grid/AbstractGridHeader.java | 0 .../ui/common/grid/AbstractGridLayout.java | 0 .../table/AbstractNamedVersionTable.java | 0 .../ui/common/table/AbstractTable.java | 0 .../ui/common/table/AbstractTableHeader.java | 0 .../ui/common/table/AbstractTableLayout.java | 0 .../ui/common/table/BaseEntityEvent.java | 0 .../ui/common/table/BaseEntityEventType.java | 0 .../common/tagdetails/AbstractTagToken.java | 0 .../tagdetails/AbstractTargetTagToken.java | 0 .../tagdetails/DistributionTagToken.java | 0 .../ui/common/tagdetails/TargetTagToken.java | 0 .../components/DistributionSetInfoPanel.java | 0 .../ui/components/ProxyDistribution.java | 0 .../hawkbit/ui/components/ProxyTarget.java | 0 .../ui/components/ProxyTargetFilter.java | 0 .../ui/components/SPNotificationMessage.java | 0 .../components/SPTargetAttributesLayout.java | 0 .../hawkbit/ui/components/SPUIButton.java | 0 .../hawkbit/ui/components/SPUICheckBox.java | 0 .../ui/components/SPUIComponentProvider.java | 0 .../ui/components/SPUIErrorHandler.java | 0 .../ui/components/SPUIHorizontalLayout.java | 0 .../hawkbit/ui/components/SPUITabSheet.java | 0 .../components/SPUITableHorizonatlLayout.java | 0 .../ui/components/SPUIUpdateLogLayout.java | 0 .../CustomRendererWidgetSet.gwt.xml | 0 .../client/HtmlButtonRendererConnector.java | 0 .../client/HtmlLabelRendererConnector.java | 0 .../client/RolloutRendererConnector.java | 0 .../client/renderers/HtmlButtonRenderer.java | 0 .../client/renderers/HtmlLabelRenderer.java | 0 .../client/renderers/RolloutRenderer.java | 0 .../client/renderers/RolloutRendererData.java | 0 .../renderers/HtmlButtonRenderer.java | 0 .../renderers/HtmlLabelRenderer.java | 0 .../renderers/RolloutRenderer.java | 0 .../ui/decorators/SPUIButtonDecorator.java | 0 .../SPUIButtonStyleLargeIconNoBorder.java | 0 .../SPUIButtonStylePrimarySmall.java | 0 .../ui/decorators/SPUIButtonStyleSmall.java | 0 .../SPUIButtonStyleSmallNoBorder.java | 0 .../SPUIButtonStyleSmallNoBorderUH.java | 0 .../SPUIButtonStyleSmallNoBorderUHS.java | 0 .../ui/decorators/SPUIButtonStyleTiny.java | 0 .../ui/decorators/SPUIComboBoxDecorator.java | 0 .../ui/decorators/SPUIEmbedDecorator.java | 0 .../hawkbit/ui/decorators/SPUIEmbedValue.java | 0 .../decorators/SPUIHeaderLayoutDecorator.java | 0 .../ui/decorators/SPUILabelDecorator.java | 0 .../ui/decorators/SPUITagButtonStyle.java | 0 .../ui/decorators/SPUITextAreaDecorator.java | 0 .../ui/decorators/SPUITextFieldDecorator.java | 0 .../ui/decorators/SPUIWindowDecorator.java | 0 .../ui/distributions/DistributionsView.java | 0 .../DistributionsViewMenuItem.java | 0 .../CreateUpdateDistSetTypeLayout.java | 0 .../disttype/DSTypeFilterButtonClick.java | 0 .../disttype/DSTypeFilterButtons.java | 0 .../disttype/DSTypeFilterHeader.java | 0 .../disttype/DSTypeFilterLayout.java | 0 .../dstable/DistributionSetDetails.java | 0 .../dstable/DistributionSetTable.java | 0 .../dstable/DistributionSetTableHeader.java | 0 .../dstable/DistributionSetTableLayout.java | 0 .../dstable/ManageDistBeanQuery.java | 0 .../event/DistributionSetTypeEvent.java | 0 .../event/DistributionsUIEvent.java | 0 .../DistributionsViewAcceptCriteria.java | 0 .../ui/distributions/event/DragEvent.java | 0 .../event/SaveActionWindowEvent.java | 0 .../SoftwareModuleAssignmentDiscardEvent.java | 0 .../distributions/event/SwModuleUIEvent.java | 0 .../footer/DSDeleteActionsLayout.java | 0 ...DistributionsConfirmationWindowLayout.java | 0 .../smtable/ProxyBaseSwModuleItem.java | 0 .../smtable/SwModuleBeanQuery.java | 0 .../smtable/SwModuleDetails.java | 0 .../distributions/smtable/SwModuleTable.java | 0 .../smtable/SwModuleTableHeader.java | 0 .../smtable/SwModuleTableLayout.java | 0 .../smtype/DistSMTypeFilterButtonClick.java | 0 .../smtype/DistSMTypeFilterButtons.java | 0 .../smtype/DistSMTypeFilterHeader.java | 0 .../smtype/DistSMTypeFilterLayout.java | 0 .../state/ManageDistFilters.java | 0 .../state/ManageDistUIState.java | 0 .../state/ManageSoftwareModuleFilters.java | 0 .../hawkbit/ui/filter/FilterExpression.java | 0 .../eclipse/hawkbit/ui/filter/Filters.java | 0 .../ui/filter/target/CustomTargetFilter.java | 0 .../filter/target/TargetSearchTextFilter.java | 0 .../ui/filter/target/TargetStatusFilter.java | 0 .../ui/filter/target/TargetTagFilter.java | 0 .../CreateOrUpdateFilterHeader.java | 0 .../CreateOrUpdateFilterTable.java | 0 .../CustomTargetBeanQuery.java | 0 .../FilterManagementView.java | 0 .../FilterManagementViewMenuItem.java | 0 .../FilterQueryValidation.java | 0 .../TargetFilterBeanQuery.java | 0 .../filtermanagement/TargetFilterHeader.java | 0 .../filtermanagement/TargetFilterTable.java | 0 .../ui/filtermanagement/TokenDescription.java | 0 .../ui/filtermanagement/ValidationResult.java | 0 .../event/CustomFilterUIEvent.java | 0 .../footer/TargetFilterCountMessageLabel.java | 0 .../state/FilterManagementUIState.java | 0 .../hawkbit/ui/login/HawkbitLoginUI.java | 0 .../eclipse/hawkbit/ui/login/LoginView.java | 0 .../hawkbit/ui/management/DeploymentView.java | 0 .../ui/management/DeploymentViewMenuItem.java | 0 .../actionhistory/ActionHistoryComponent.java | 0 .../actionhistory/ActionHistoryHeader.java | 0 .../actionhistory/ActionHistoryTable.java | 0 .../DistributionAddUpdateWindowLayout.java | 0 .../dstable/DistributionBeanQuery.java | 0 .../dstable/DistributionDetails.java | 0 .../management/dstable/DistributionTable.java | 0 .../dstable/DistributionTableHeader.java | 0 .../dstable/DistributionTableLayout.java | 0 ...eateUpdateDistributionTagLayoutWindow.java | 0 .../dstag/DistributionTagBeanQuery.java | 0 .../dstag/DistributionTagButtonClick.java | 0 .../dstag/DistributionTagButtons.java | 0 .../dstag/DistributionTagHeader.java | 0 .../dstag/DistributionTagLayout.java | 0 .../event/BulkUploadPopupEvent.java | 0 .../BulkUploadValidationMessageEvent.java | 0 .../event/DistributionTableEvent.java | 0 .../event/DistributionTableFilterEvent.java | 0 .../event/DistributionTagDropEvent.java | 0 .../ui/management/event/DragEvent.java | 0 .../management/event/ManagementUIEvent.java | 0 .../event/ManagementViewAcceptCriteria.java | 0 .../ui/management/event/PinUnpinEvent.java | 0 .../event/SaveActionWindowEvent.java | 0 .../event/TargetAddUpdateWindowEvent.java | 0 .../management/event/TargetFilterEvent.java | 0 .../ui/management/event/TargetTableEvent.java | 0 .../footer/ActionTypeOptionGroupLayout.java | 0 .../management/footer/CountMessageLabel.java | 0 .../footer/DeleteActionsLayout.java | 0 .../footer/DeleteActionsLayoutHelper.java | 0 .../ManangementConfirmationWindowLayout.java | 0 .../state/DistributionTableFilters.java | 0 .../management/state/ManagementUIState.java | 0 .../ui/management/state/TargetBulkUpload.java | 0 .../state/TargetFilterParameters.java | 0 .../management/state/TargetTableFilters.java | 0 .../management/tag/CreateUpdateTagLayout.java | 0 .../hawkbit/ui/management/tag/ProxyTag.java | 0 .../management/tag/SpColorPickerPreview.java | 0 .../hawkbit/ui/management/tag/TagIdName.java | 0 .../targettable/BulkUploadHandler.java | 0 .../TargetAddUpdateWindowLayout.java | 0 .../targettable/TargetBeanQuery.java | 0 .../targettable/TargetBulkTokenTags.java | 0 .../TargetBulkUpdateWindowLayout.java | 0 .../management/targettable/TargetDetails.java | 0 .../management/targettable/TargetTable.java | 0 .../targettable/TargetTableHeader.java | 0 .../targettable/TargetTableLayout.java | 0 .../AbstractTargetTagFilterLayout.java | 0 .../CreateUpdateTargetTagLayout.java | 0 .../CustomTargetTagFilterButtonClick.java | 0 .../targettag/FilterByStatusLayout.java | 0 .../targettag/MultipleTargetFilter.java | 0 .../targettag/TargetFilterQueryButtons.java | 0 .../targettag/TargetTagBeanQuery.java | 0 .../targettag/TargetTagFilterButtonClick.java | 0 .../targettag/TargetTagFilterButtons.java | 0 .../targettag/TargetTagFilterHeader.java | 0 .../targettag/TargetTagFilterLayout.java | 0 .../hawkbit/ui/menu/DashboardEvent.java | 0 .../hawkbit/ui/menu/DashboardMenu.java | 0 .../hawkbit/ui/menu/DashboardMenuItem.java | 0 .../ui/push/DelayedEventBusPushStrategy.java | 0 .../hawkbit/ui/push/EventPushStrategy.java | 0 .../ui/rollout/DistributionBarHelper.java | 0 .../hawkbit/ui/rollout/RolloutView.java | 0 .../ui/rollout/RolloutViewMenuItem.java | 0 .../hawkbit/ui/rollout/StatusFontIcon.java | 0 .../ui/rollout/event/RolloutEvent.java | 0 .../rollout/AddUpdateRolloutWindowLayout.java | 0 .../rollout/DistributionBeanQuery.java | 0 .../ui/rollout/rollout/ProxyRollout.java | 0 .../ui/rollout/rollout/RolloutBeanQuery.java | 0 .../ui/rollout/rollout/RolloutListGrid.java | 0 .../ui/rollout/rollout/RolloutListHeader.java | 0 .../ui/rollout/rollout/RolloutListView.java | 0 .../rolloutgroup/ProxyRolloutGroup.java | 0 .../rolloutgroup/RolloutGroupBeanQuery.java | 0 .../rolloutgroup/RolloutGroupListGrid.java | 0 .../rolloutgroup/RolloutGroupsListHeader.java | 0 .../rolloutgroup/RolloutGroupsListView.java | 0 .../RolloutGroupTargetsBeanQuery.java | 0 .../RolloutGroupTargetsCountLabelMessage.java | 0 .../RolloutGroupTargetsListGrid.java | 0 .../RolloutGroupTargetsListHeader.java | 0 .../RolloutGroupTargetsListView.java | 0 .../ui/rollout/state/RolloutUIState.java | 0 .../AuthenticationConfigurationView.java | 0 .../BaseConfigurationView.java | 0 .../ConfigurationGroup.java | 0 .../ConfigurationItem.java | 0 .../DefaultDistributionSetTypeLayout.java | 0 .../PollingConfigurationView.java | 0 .../TenantConfigurationDashboardView.java | 0 ...antConfigurationDashboardViewMenuItem.java | 0 ...AuthenticationTenantConfigurationItem.java | 0 ...wnloadAuthenticationConfigurationItem.java | 0 .../AuthenticationConfigurationItem.java | 0 ...ficateAuthenticationConfigurationItem.java | 0 ...yTokenAuthenticationConfigurationItem.java | 0 ...yTokenAuthenticationConfigurationItem.java | 0 .../polling/DurationConfigField.java | 0 .../polling/DurationField.java | 0 .../hawkbit/ui/themes/HawkbitTheme.java | 0 .../AssignInstalledDSTooltipGenerator.java | 0 .../hawkbit/ui/utils/HawkbitCommonUtil.java | 0 .../org/eclipse/hawkbit/ui/utils/I18N.java | 0 .../hawkbit/ui/utils/NamingThreadFactory.java | 0 .../hawkbit/ui/utils/NotificationMessage.java | 0 .../hawkbit/ui/utils/SPDateTimeUtil.java | 0 .../ui/utils/SPUIButtonDefinitions.java | 0 .../ui/utils/SPUIComponetIdProvider.java | 0 .../hawkbit/ui/utils/SPUIDefinitions.java | 0 .../ui/utils/SPUILabelDefinitions.java | 0 .../ui/utils/SPUIStyleDefinitions.java | 0 .../ui/utils/SPUITargetDefinitions.java | 0 .../hawkbit/ui/utils/SpringContextHelper.java | 0 .../eclipse/hawkbit/ui/utils/TableColumn.java | 0 .../hawkbit/ui/utils/UINotification.java | 0 .../src/main/resources/VAADIN/.gitignore | 0 .../VAADIN/themes/hawkbit/.gitignore | 0 .../hawkbit/customstyles/accordion.scss | 0 .../hawkbit/customstyles/action-history.scss | 0 .../hawkbit/customstyles/artifact-upload.scss | 0 .../hawkbit/customstyles/colorpicker.scss | 0 .../themes/hawkbit/customstyles/common.scss | 0 .../hawkbit/customstyles/dashboardview.scss | 0 .../hawkbit/customstyles/drop-hint.scss | 0 .../customstyles/filter-layout-styles.scss | 0 .../hawkbit/customstyles/filter-status.scss | 0 .../hawkbit/customstyles/footer-common.scss | 0 .../hawkbit/customstyles/generic-styles.scss | 0 .../customstyles/hawkbitvariables.scss | 0 .../themes/hawkbit/customstyles/login.scss | 0 .../themes/hawkbit/customstyles/others.scss | 0 .../hawkbit/customstyles/popup-common.scss | 0 .../hawkbit/customstyles/popup-window.scss | 0 .../themes/hawkbit/customstyles/rollout.scss | 0 .../customstyles/statusprogressbar.scss | 0 .../hawkbit/customstyles/systemconfig.scss | 0 .../hawkbit/customstyles/table-common.scss | 0 .../hawkbit/customstyles/table-content.scss | 0 .../customstyles/table-header-common.scss | 0 .../themes/hawkbit/customstyles/table.scss | 0 .../themes/hawkbit/customstyles/tags.scss | 0 .../customstyles/target-filter-query.scss | 0 .../VAADIN/themes/hawkbit/hawkbittheme.scss | 0 .../hawkbit/images/lightCorner_selected1.png | Bin .../themes/hawkbit/images/lightCorner_top.png | Bin .../hawkbit/images/profile-pic-57px.jpg | Bin .../VAADIN/themes/hawkbit/layouts/footer.html | 0 .../VAADIN/themes/hawkbit/styles.scss | 0 .../src/main/resources/messages.properties | 0 .../src/main/resources/messages_de.properties | 0 .../src/main/resources/messages_en.properties | 0 ...ringSecurityAtmosphereInterceptorTest.java | 0 .../ui/utils/NamingThreadFactoryTest.java | 0 .../ui/utils/SPUIComponentProviderTest.java | 0 pom.xml | 4 +- 423 files changed, 124 insertions(+), 782 deletions(-) rename examples/{hawkbit-example-feign-core-client => hawkbit-example-core-feign-client}/README.md (100%) rename examples/{hawkbit-example-feign-core-client => hawkbit-example-core-feign-client}/pom.xml (96%) rename examples/{hawkbit-example-feign-core-client => hawkbit-example-core-feign-client}/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java (100%) rename examples/{hawkbit-example-feign-core-client => hawkbit-example-core-feign-client}/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java (100%) rename examples/{hawkbit-example-feign-core-client => hawkbit-example-core-feign-client}/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/README.md (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/pom.xml (95%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/resource/DdiDlArtifactStoreControllerResourceClient.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java (100%) rename examples/{hawkbit-example-ddi-client => hawkbit-example-ddi-feign-client}/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/.gitignore (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/README.md (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/pom.xml (86%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java (76%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java (72%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-feign-client}/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java (100%) rename examples/{hawkbit-example-mgmt-spring-client => hawkbit-example-mgmt-simulator}/.gitignore (100%) rename examples/{hawkbit-example-mgmt-spring-client => hawkbit-example-mgmt-simulator}/README.md (100%) rename examples/{hawkbit-example-mgmt-spring-client => hawkbit-example-mgmt-simulator}/pom.xml (96%) rename examples/{hawkbit-example-mgmt-spring-client => hawkbit-example-mgmt-simulator}/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java (100%) rename examples/{hawkbit-example-mgmt-spring-client => hawkbit-example-mgmt-simulator}/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-simulator}/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java (100%) rename examples/{hawkbit-example-mgmt-client => hawkbit-example-mgmt-simulator}/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java (100%) rename examples/{hawkbit-example-mgmt-spring-client => hawkbit-example-mgmt-simulator}/src/main/resources/application.properties (100%) rename examples/{hawkbit-example-mgmt-spring-client => hawkbit-example-mgmt-simulator}/src/main/resources/logback.xml (100%) rename hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValue.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/system/MgmtSystemTenantConfigurationValue.java (94%) rename hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValueRequest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/system/MgmtSystemTenantConfigurationValueRequest.java (80%) rename hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemCache.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemCache.java (83%) rename hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemStatisticsRest.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemStatisticsRest.java (69%) rename hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemTenantServiceUsage.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java (90%) rename hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemManagementRestApi.java (80%) rename hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java => hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemRestApi.java (81%) rename hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java (73%) rename hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemMapper.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemMapper.java (74%) rename hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java => hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemResource.java (76%) delete mode 100644 hawkbit-system-api/README.md delete mode 100644 hawkbit-system-api/pom.xml delete mode 100644 hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestConstant.java delete mode 100644 hawkbit-system-resource/README.md delete mode 100644 hawkbit-system-resource/pom.xml delete mode 100644 hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java delete mode 100644 hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/ResourceUtility.java delete mode 100644 hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java delete mode 100644 hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java rename {hawkbit-mgmt-ui => hawkbit-ui}/.gitignore (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/README.md (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/pom.xml (99%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/.gitignore (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRenderer.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/RolloutRenderer.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/.gitignore (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/.gitignore (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/VAADIN/themes/hawkbit/styles.scss (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/messages.properties (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/messages_de.properties (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/main/resources/messages_en.properties (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java (100%) rename {hawkbit-mgmt-ui => hawkbit-ui}/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java (100%) diff --git a/examples/hawkbit-custom-theme-example/pom.xml b/examples/hawkbit-custom-theme-example/pom.xml index 2cbee5c0a..7caa99ba2 100644 --- a/examples/hawkbit-custom-theme-example/pom.xml +++ b/examples/hawkbit-custom-theme-example/pom.xml @@ -66,7 +66,7 @@ org.eclipse.hawkbit - hawkbit-mgmt-ui + hawkbit-ui ${project.version} diff --git a/examples/hawkbit-example-app/pom.xml b/examples/hawkbit-example-app/pom.xml index 9fd0958ea..721966026 100644 --- a/examples/hawkbit-example-app/pom.xml +++ b/examples/hawkbit-example-app/pom.xml @@ -67,11 +67,6 @@ hawkbit-mgmt-resource ${project.version} - - org.eclipse.hawkbit - hawkbit-system-resource - ${project.version} - org.eclipse.hawkbit hawkbit-ddi-resource @@ -84,7 +79,7 @@ org.eclipse.hawkbit - hawkbit-mgmt-ui + hawkbit-ui ${project.version} diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java index 1f57e8dd3..197fc3218 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -12,7 +12,6 @@ import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; import org.eclipse.hawkbit.ddi.EnableDdiApi; import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; -import org.eclipse.hawkbit.system.annotation.EnableSystemApi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Import; @@ -27,7 +26,6 @@ import org.springframework.context.annotation.Import; @EnableHawkbitManagedSecurityConfiguration @EnableMgmtApi @EnableDdiApi -@EnableSystemApi // Exception squid:S1118 - Spring boot standard behavior @SuppressWarnings({ "squid:S1118" }) public class Start { diff --git a/examples/hawkbit-example-feign-core-client/README.md b/examples/hawkbit-example-core-feign-client/README.md similarity index 100% rename from examples/hawkbit-example-feign-core-client/README.md rename to examples/hawkbit-example-core-feign-client/README.md diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-core-feign-client/pom.xml similarity index 96% rename from examples/hawkbit-example-feign-core-client/pom.xml rename to examples/hawkbit-example-core-feign-client/pom.xml index 23d66e69d..5b3df2ef2 100644 --- a/examples/hawkbit-example-feign-core-client/pom.xml +++ b/examples/hawkbit-example-core-feign-client/pom.xml @@ -17,7 +17,7 @@ 0.2.0-SNAPSHOT - hawkbit-example-feign-core-client + hawkbit-example-core-feign-client hawkBit-example :: Feign Core Client diff --git a/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java similarity index 100% rename from examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java rename to examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java diff --git a/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java similarity index 100% rename from examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java rename to examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java diff --git a/examples/hawkbit-example-feign-core-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 similarity index 100% rename from examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java rename to examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java diff --git a/examples/hawkbit-example-ddi-client/README.md b/examples/hawkbit-example-ddi-feign-client/README.md similarity index 100% rename from examples/hawkbit-example-ddi-client/README.md rename to examples/hawkbit-example-ddi-feign-client/README.md diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-feign-client/pom.xml similarity index 95% rename from examples/hawkbit-example-ddi-client/pom.xml rename to examples/hawkbit-example-ddi-feign-client/pom.xml index 629d1e988..3450231cd 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-feign-client/pom.xml @@ -16,7 +16,7 @@ hawkbit-examples-parent 0.2.0-SNAPSHOT - hawkbit-example-ddi-client + hawkbit-example-ddi-feign-client hawkBit-example :: DDI Feign Client @@ -35,7 +35,7 @@ org.eclipse.hawkbit - hawkbit-example-feign-core-client + hawkbit-example-core-feign-client ${project.version} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/DdiDlArtifactStoreControllerResourceClient.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/DdiDlArtifactStoreControllerResourceClient.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/DdiDlArtifactStoreControllerResourceClient.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/DdiDlArtifactStoreControllerResourceClient.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java similarity index 100% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java rename to examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java diff --git a/examples/hawkbit-example-mgmt-client/.gitignore b/examples/hawkbit-example-mgmt-feign-client/.gitignore similarity index 100% rename from examples/hawkbit-example-mgmt-client/.gitignore rename to examples/hawkbit-example-mgmt-feign-client/.gitignore diff --git a/examples/hawkbit-example-mgmt-client/README.md b/examples/hawkbit-example-mgmt-feign-client/README.md similarity index 100% rename from examples/hawkbit-example-mgmt-client/README.md rename to examples/hawkbit-example-mgmt-feign-client/README.md diff --git a/examples/hawkbit-example-mgmt-client/pom.xml b/examples/hawkbit-example-mgmt-feign-client/pom.xml similarity index 86% rename from examples/hawkbit-example-mgmt-client/pom.xml rename to examples/hawkbit-example-mgmt-feign-client/pom.xml index 6bd360459..7e96e3b00 100644 --- a/examples/hawkbit-example-mgmt-client/pom.xml +++ b/examples/hawkbit-example-mgmt-feign-client/pom.xml @@ -17,13 +17,13 @@ 0.2.0-SNAPSHOT jar - hawkbit-example-mgmt-client + hawkbit-example-mgmt-feign-client hawkBit-example :: Management client API org.eclipse.hawkbit - hawkbit-example-feign-core-client + hawkbit-example-core-feign-client ${project.version} @@ -31,11 +31,6 @@ hawkbit-mgmt-api ${project.version} - - org.eclipse.hawkbit - hawkbit-system-api - ${project.version} - com.google.guava guava diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetClientResource.java diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTagClientResource.java diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDistributionSetTypeClientResource.java diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadArtifactClientResource.java diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtDownloadClientResource.java diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtRolloutClientResource.java diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleTypeClientResource.java diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetClientResource.java diff --git a/examples/hawkbit-example-mgmt-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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtTargetTagClientResource.java diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java similarity index 76% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java index 01510e279..8d94cddb9 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java @@ -8,14 +8,14 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.system.rest.api.SystemRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSystemRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** - * Client binding for the {@link SystemRestApi}. + * Client binding for the {@link MgmtSystemRestApi}. * */ @FeignClient(url = "${hawkbit.url:localhost:8080}/" + SystemClientResource.PATH) -public interface SystemClientResource extends SystemRestApi { +public interface SystemClientResource extends MgmtSystemRestApi { static String PATH = "rest/v1/system"; } diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java similarity index 72% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java index 5047619bc..21aa7b7c1 100644 --- a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java @@ -8,15 +8,15 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; -import org.eclipse.hawkbit.system.rest.api.SystemManagementRestApi; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSystemManagementRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** - * Client binding for the {@link SystemManagementRestApi}. + * Client binding for the {@link MgmtSystemManagementRestApi}. * */ @FeignClient(url = "${hawkbit.url:localhost:8080}/" + SystemManagementClientResource.PATH) -public interface SystemManagementClientResource extends SystemManagementRestApi { +public interface SystemManagementClientResource extends MgmtSystemManagementRestApi { static String PATH = "system/admin"; } diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/RolloutBuilder.java diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleAssigmentBuilder.java diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TagBuilder.java diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java diff --git a/examples/hawkbit-example-mgmt-spring-client/.gitignore b/examples/hawkbit-example-mgmt-simulator/.gitignore similarity index 100% rename from examples/hawkbit-example-mgmt-spring-client/.gitignore rename to examples/hawkbit-example-mgmt-simulator/.gitignore diff --git a/examples/hawkbit-example-mgmt-spring-client/README.md b/examples/hawkbit-example-mgmt-simulator/README.md similarity index 100% rename from examples/hawkbit-example-mgmt-spring-client/README.md rename to examples/hawkbit-example-mgmt-simulator/README.md diff --git a/examples/hawkbit-example-mgmt-spring-client/pom.xml b/examples/hawkbit-example-mgmt-simulator/pom.xml similarity index 96% rename from examples/hawkbit-example-mgmt-spring-client/pom.xml rename to examples/hawkbit-example-mgmt-simulator/pom.xml index afd7a6ec2..fbe099f40 100644 --- a/examples/hawkbit-example-mgmt-spring-client/pom.xml +++ b/examples/hawkbit-example-mgmt-simulator/pom.xml @@ -17,7 +17,7 @@ 0.2.0-SNAPSHOT jar - hawkbit-example-mgmt-spring-client + hawkbit-example-mgmt-simulator hawkBit-example :: Management Feign Client @@ -57,7 +57,7 @@ org.eclipse.hawkbit - hawkbit-example-mgmt-client + hawkbit-example-mgmt-feign-client ${project.version} diff --git a/examples/hawkbit-example-mgmt-spring-client/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 similarity index 100% rename from examples/hawkbit-example-mgmt-spring-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java rename to examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java diff --git a/examples/hawkbit-example-mgmt-spring-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java similarity index 100% rename from examples/hawkbit-example-mgmt-spring-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java rename to examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java diff --git a/examples/hawkbit-example-mgmt-client/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 similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java rename to examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/CreateStartedRolloutExample.java diff --git a/examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java similarity index 100% rename from examples/hawkbit-example-mgmt-client/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java rename to examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java diff --git a/examples/hawkbit-example-mgmt-spring-client/src/main/resources/application.properties b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties similarity index 100% rename from examples/hawkbit-example-mgmt-spring-client/src/main/resources/application.properties rename to examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties diff --git a/examples/hawkbit-example-mgmt-spring-client/src/main/resources/logback.xml b/examples/hawkbit-example-mgmt-simulator/src/main/resources/logback.xml similarity index 100% rename from examples/hawkbit-example-mgmt-spring-client/src/main/resources/logback.xml rename to examples/hawkbit-example-mgmt-simulator/src/main/resources/logback.xml diff --git a/examples/pom.xml b/examples/pom.xml index 7bbe58848..fb8ef3fc3 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -22,12 +22,12 @@ pom - hawkbit-example-feign-core-client hawkbit-device-simulator hawkbit-example-app - hawkbit-example-mgmt-client - hawkbit-example-mgmt-spring-client - hawkbit-example-ddi-client + hawkbit-example-core-feign-client + hawkbit-example-ddi-feign-client + hawkbit-example-mgmt-feign-client + hawkbit-example-mgmt-simulator diff --git a/hawkbit-autoconfigure/pom.xml b/hawkbit-autoconfigure/pom.xml index 446fb3f56..7ad0e0911 100644 --- a/hawkbit-autoconfigure/pom.xml +++ b/hawkbit-autoconfigure/pom.xml @@ -40,7 +40,7 @@ org.eclipse.hawkbit - hawkbit-mgmt-ui + hawkbit-ui ${project.version} true @@ -68,12 +68,6 @@ ${project.version} true - - org.eclipse.hawkbit - hawkbit-system-resource - ${project.version} - true - org.eclipse.hawkbit hawkbit-mgmt-resource diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java index d337658b8..825e21c12 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java @@ -26,6 +26,7 @@ import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.im.authentication.TenantUserPasswordAuthenticationToken; import org.eclipse.hawkbit.im.authentication.UserAuthenticationFilter; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; @@ -40,7 +41,6 @@ import org.eclipse.hawkbit.security.HttpControllerPreAuthenticatedSecurityHeader import org.eclipse.hawkbit.security.HttpDownloadAuthenticationFilter; import org.eclipse.hawkbit.security.PreAuthTokenSourceTrustAuthenticationProvider; import org.eclipse.hawkbit.security.SystemSecurityContext; -import org.eclipse.hawkbit.system.rest.api.SystemRestConstant; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -292,9 +292,9 @@ public class SecurityManagedConfiguration { new AuthenticationSuccessTenantMetadataCreationFilter(tenantAware, systemManagement), RequestHeaderAuthenticationFilter.class) .authorizeRequests().anyRequest().authenticated() - .antMatchers(SystemRestConstant.BASE_SYSTEM_MAPPING + "/admin/**") + .antMatchers(MgmtRestConstants.BASE_SYSTEM_MAPPING + "/admin/**") .hasAnyAuthority(SpPermission.SYSTEM_ADMIN) - .antMatchers(SystemRestConstant.BASE_SYSTEM_MAPPING + "/**") + .antMatchers(MgmtRestConstants.BASE_SYSTEM_MAPPING + "/**") .hasAnyAuthority(SpPermission.SYSTEM_DIAG); } } diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java index afb90bd13..6684b700d 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.autoconfigure.web; import org.eclipse.hawkbit.ddi.EnableDdiApi; import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; -import org.eclipse.hawkbit.system.annotation.EnableSystemApi; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -20,8 +19,8 @@ import org.springframework.context.annotation.Import; * */ @Configuration -@ConditionalOnClass({ EnableDdiApi.class, EnableMgmtApi.class, EnableSystemApi.class }) -@Import({ EnableDdiApi.class, EnableMgmtApi.class, EnableSystemApi.class }) +@ConditionalOnClass({ EnableDdiApi.class, EnableMgmtApi.class }) +@Import({ EnableDdiApi.class, EnableMgmtApi.class }) public class ResourceControllerAutoConfiguration { } diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index a175ec6e5..e7a60f34a 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -48,7 +48,7 @@ import org.springframework.web.context.WebApplicationContext; * for legacy controllers that can not be fed with a download URI at runtime. */ @RestController -@Scope(value = WebApplicationContext.SCOPE_REQUEST) +@Scope(WebApplicationContext.SCOPE_REQUEST) public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerRestApi { private static final Logger LOG = LoggerFactory.getLogger(DdiArtifactStoreController.class); diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValue.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/system/MgmtSystemTenantConfigurationValue.java similarity index 94% rename from hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValue.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/system/MgmtSystemTenantConfigurationValue.java index c152de0c3..776b69c09 100644 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValue.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/system/MgmtSystemTenantConfigurationValue.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.json.model.system; +package org.eclipse.hawkbit.mgmt.json.model.system; import org.springframework.hateoas.ResourceSupport; @@ -22,7 +22,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class SystemTenantConfigurationValue extends ResourceSupport { +public class MgmtSystemTenantConfigurationValue extends ResourceSupport { @JsonInclude(Include.ALWAYS) private Object value; diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValueRequest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/system/MgmtSystemTenantConfigurationValueRequest.java similarity index 80% rename from hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValueRequest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/system/MgmtSystemTenantConfigurationValueRequest.java index 08bd06dd8..9a9aed209 100644 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/system/SystemTenantConfigurationValueRequest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/system/MgmtSystemTenantConfigurationValueRequest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.json.model.system; +package org.eclipse.hawkbit.mgmt.json.model.system; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -18,21 +18,21 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class SystemTenantConfigurationValueRequest { +public class MgmtSystemTenantConfigurationValueRequest { @JsonProperty(required = true) private Object value; /** * - * @return the value of the SystemTenantConfigurationValueRequest + * @return the value of the MgmtSystemTenantConfigurationValueRequest */ public Object getValue() { return value; } /** - * Sets the SystemTenantConfigurationValueRequest + * Sets the MgmtSystemTenantConfigurationValueRequest * * @param value */ diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemCache.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemCache.java similarity index 83% rename from hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemCache.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemCache.java index 428483be9..2876b11df 100644 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemCache.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemCache.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.json.model.systemmanagement; +package org.eclipse.hawkbit.mgmt.json.model.systemmanagement; import java.util.Collection; @@ -20,7 +20,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class SystemCache { +public class MgmtSystemCache { private final String name; private final Collection keys; @@ -31,7 +31,7 @@ public class SystemCache { * @param cacheKeys * the keys which contains in the cache */ - public SystemCache(final String name, final Collection cacheKeys) { + public MgmtSystemCache(final String name, final Collection cacheKeys) { this.name = name; this.keys = cacheKeys; } @@ -57,6 +57,6 @@ public class SystemCache { */ @Override public String toString() { - return "SystemCache [name=" + name + ", keys=" + keys + "]"; + return "MgmtSystemCache [name=" + name + ", keys=" + keys + "]"; } } diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemStatisticsRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemStatisticsRest.java similarity index 69% rename from hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemStatisticsRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemStatisticsRest.java index 8e1c80ded..0c1b12fde 100644 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemStatisticsRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemStatisticsRest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.json.model.systemmanagement; +package org.eclipse.hawkbit.mgmt.json.model.systemmanagement; import java.util.List; @@ -20,7 +20,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class SystemStatisticsRest { +public class MgmtSystemStatisticsRest { private long overallTargets; private long overallArtifacts; @@ -28,13 +28,13 @@ public class SystemStatisticsRest { private long overallActions; private long overallTenants; - private List tenantStats; + private List tenantStats; public long getOverallTargets() { return overallTargets; } - public SystemStatisticsRest setOverallTargets(final long overallTargets) { + public MgmtSystemStatisticsRest setOverallTargets(final long overallTargets) { this.overallTargets = overallTargets; return this; } @@ -43,7 +43,7 @@ public class SystemStatisticsRest { return overallArtifacts; } - public SystemStatisticsRest setOverallArtifacts(final long overallArtifacts) { + public MgmtSystemStatisticsRest setOverallArtifacts(final long overallArtifacts) { this.overallArtifacts = overallArtifacts; return this; } @@ -52,7 +52,7 @@ public class SystemStatisticsRest { return overallArtifactVolumeInBytes; } - public SystemStatisticsRest setOverallArtifactVolumeInBytes(final long overallArtifactVolumeInBytes) { + public MgmtSystemStatisticsRest setOverallArtifactVolumeInBytes(final long overallArtifactVolumeInBytes) { this.overallArtifactVolumeInBytes = overallArtifactVolumeInBytes; return this; } @@ -61,7 +61,7 @@ public class SystemStatisticsRest { return overallActions; } - public SystemStatisticsRest setOverallActions(final long overallActions) { + public MgmtSystemStatisticsRest setOverallActions(final long overallActions) { this.overallActions = overallActions; return this; } @@ -70,16 +70,16 @@ public class SystemStatisticsRest { return overallTenants; } - public SystemStatisticsRest setOverallTenants(final long overallTenants) { + public MgmtSystemStatisticsRest setOverallTenants(final long overallTenants) { this.overallTenants = overallTenants; return this; } - public void setTenantStats(final List tenantStats) { + public void setTenantStats(final List tenantStats) { this.tenantStats = tenantStats; } - public List getTenantStats() { + public List getTenantStats() { return tenantStats; } diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemTenantServiceUsage.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java similarity index 90% rename from hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemTenantServiceUsage.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java index ab7b7e6b8..8cce4314b 100644 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/json/model/systemmanagement/SystemTenantServiceUsage.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.json.model.systemmanagement; +package org.eclipse.hawkbit.mgmt.json.model.systemmanagement; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -18,7 +18,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class SystemTenantServiceUsage { +public class MgmtSystemTenantServiceUsage { private final String tenantName; private long targets; @@ -31,7 +31,7 @@ public class SystemTenantServiceUsage { * * @param tenantName */ - public SystemTenantServiceUsage(final String tenantName) { + public MgmtSystemTenantServiceUsage(final String tenantName) { super(); this.tenantName = tenantName; } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRestConstants.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRestConstants.java index d8f395568..e8c25403f 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRestConstants.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtRestConstants.java @@ -11,8 +11,6 @@ package org.eclipse.hawkbit.mgmt.rest.api; /** * Constants for RESTful API. * - * - * */ public final class MgmtRestConstants { @@ -46,8 +44,21 @@ public final class MgmtRestConstants { public static final String SOFTWAREMODULE_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/softwaremodules"; public static final String DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE = "/api/" + API_VERSION + "/downloadserver/"; + public static final String DOWNLOAD_ID_V1_REQUEST_MAPPING = "downloadId/{downloadId}"; + /** + * The base URL mapping for the spring acuator management context path. + */ + public static final String BASE_SYSTEM_MAPPING = "/system"; + + /** + * URL mapping for system admin operations. + */ + public static final String SYSTEM_ADMIN_MAPPING = BASE_SYSTEM_MAPPING + "/admin"; + + public static final String SYSTEM_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + BASE_SYSTEM_MAPPING; + /** * The target URL mapping, href link for assigned distribution set. */ diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemManagementRestApi.java similarity index 80% rename from hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemManagementRestApi.java index 6185fceea..4415d1a4e 100644 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemManagementRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemManagementRestApi.java @@ -6,12 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.rest.api; +package org.eclipse.hawkbit.mgmt.rest.api; import java.util.Collection; -import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemCache; -import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemStatisticsRest; +import org.eclipse.hawkbit.mgmt.json.model.systemmanagement.MgmtSystemCache; +import org.eclipse.hawkbit.mgmt.json.model.systemmanagement.MgmtSystemStatisticsRest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -22,8 +22,8 @@ import org.springframework.web.bind.annotation.RequestMethod; * {@link SystemManagement} capabilities by REST. * */ -@RequestMapping(SystemRestConstant.SYSTEM_ADMIN_MAPPING) -public interface SystemManagementRestApi { +@RequestMapping(MgmtRestConstants.SYSTEM_ADMIN_MAPPING) +public interface MgmtSystemManagementRestApi { /** * Deletes the tenant data of a given tenant. USE WITH CARE! @@ -43,7 +43,7 @@ public interface SystemManagementRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/usage", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getSystemUsageStats(); + ResponseEntity getSystemUsageStats(); /** * Returns a list of all caches. @@ -51,7 +51,7 @@ public interface SystemManagementRestApi { * @return a list of caches for all tenants */ @RequestMapping(method = RequestMethod.GET, value = "/caches") - ResponseEntity> getCaches(); + ResponseEntity> getCaches(); /** * Invalidates all caches for all tenants. diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemRestApi.java similarity index 81% rename from hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemRestApi.java index 1f2c497e2..92c732c96 100644 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemRestApi.java @@ -6,12 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.rest.api; +package org.eclipse.hawkbit.mgmt.rest.api; import java.util.Map; -import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValue; -import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValueRequest; +import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValue; +import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValueRequest; import org.springframework.hateoas.ResourceSupport; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -25,8 +25,8 @@ import org.springframework.web.bind.annotation.RequestMethod; * * */ -@RequestMapping(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING) -public interface SystemRestApi { +@RequestMapping(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING) +public interface MgmtSystemRestApi { @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) ResponseEntity getSystem(); @@ -36,7 +36,7 @@ public interface SystemRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/configs", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> getSystemConfiguration(); + ResponseEntity> getSystemConfiguration(); /** * Handles the DELETE request of deleting a tenant specific configuration @@ -64,7 +64,8 @@ public interface SystemRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/configs/{keyName}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getConfigurationValue(@PathVariable("keyName") final String keyName); + ResponseEntity getConfigurationValue( + @PathVariable("keyName") final String keyName); /** * Handles the GET request of deleting a tenant specific configuration value @@ -80,8 +81,8 @@ public interface SystemRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/configs/{keyName}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity updateConfigurationValue( + ResponseEntity updateConfigurationValue( @PathVariable("keyName") final String keyName, - @RequestBody final SystemTenantConfigurationValueRequest configurationValueRest); + @RequestBody final MgmtSystemTenantConfigurationValueRequest configurationValueRest); } \ No newline at end of file diff --git a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java similarity index 73% rename from hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java index 6ea27d9ce..46e51f2ee 100644 --- a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import java.util.Collection; import java.util.Collections; @@ -14,13 +14,13 @@ import java.util.List; import java.util.stream.Collectors; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.mgmt.json.model.systemmanagement.MgmtSystemCache; +import org.eclipse.hawkbit.mgmt.json.model.systemmanagement.MgmtSystemStatisticsRest; +import org.eclipse.hawkbit.mgmt.json.model.systemmanagement.MgmtSystemTenantServiceUsage; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSystemManagementRestApi; import org.eclipse.hawkbit.report.model.SystemUsageReport; import org.eclipse.hawkbit.report.model.TenantUsage; import org.eclipse.hawkbit.repository.SystemManagement; -import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemCache; -import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemStatisticsRest; -import org.eclipse.hawkbit.system.json.model.systemmanagement.SystemTenantServiceUsage; -import org.eclipse.hawkbit.system.rest.api.SystemManagementRestApi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -37,9 +37,9 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController -public class SystemManagementResource implements SystemManagementRestApi { +public class MgmtSystemManagementResource implements MgmtSystemManagementRestApi { - private static final Logger LOGGER = LoggerFactory.getLogger(SystemManagementResource.class); + private static final Logger LOGGER = LoggerFactory.getLogger(MgmtSystemManagementResource.class); @Autowired private SystemManagement systemManagement; @@ -67,22 +67,22 @@ public class SystemManagementResource implements SystemManagementRestApi { * @return system usage statistics */ @Override - public ResponseEntity getSystemUsageStats() { + public ResponseEntity getSystemUsageStats() { final SystemUsageReport report = systemManagement.getSystemUsageStatistics(); - final SystemStatisticsRest result = new SystemStatisticsRest().setOverallActions(report.getOverallActions()) - .setOverallArtifacts(report.getOverallArtifacts()) + final MgmtSystemStatisticsRest result = new MgmtSystemStatisticsRest() + .setOverallActions(report.getOverallActions()).setOverallArtifacts(report.getOverallArtifacts()) .setOverallArtifactVolumeInBytes(report.getOverallArtifactVolumeInBytes()) .setOverallTargets(report.getOverallTargets()).setOverallTenants(report.getTenants().size()); - result.setTenantStats( - report.getTenants().stream().map(SystemManagementResource::convertTenant).collect(Collectors.toList())); + result.setTenantStats(report.getTenants().stream().map(MgmtSystemManagementResource::convertTenant) + .collect(Collectors.toList())); return ResponseEntity.ok(result); } - private static SystemTenantServiceUsage convertTenant(final TenantUsage tenant) { - final SystemTenantServiceUsage result = new SystemTenantServiceUsage(tenant.getTenantName()); + private static MgmtSystemTenantServiceUsage convertTenant(final TenantUsage tenant) { + final MgmtSystemTenantServiceUsage result = new MgmtSystemTenantServiceUsage(tenant.getTenantName()); result.setActions(tenant.getActions()); result.setArtifacts(tenant.getArtifacts()); result.setOverallArtifactVolumeInBytes(tenant.getOverallArtifactVolumeInBytes()); @@ -98,7 +98,7 @@ public class SystemManagementResource implements SystemManagementRestApi { */ @Override @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) - public ResponseEntity> getCaches() { + public ResponseEntity> getCaches() { final Collection cacheNames = cacheManager.getCacheNames(); return ResponseEntity .ok(cacheNames.stream().map(cacheManager::getCache).map(this::cacheRest).collect(Collectors.toList())); @@ -118,20 +118,20 @@ public class SystemManagementResource implements SystemManagementRestApi { return ResponseEntity.ok(cacheNames); } - private SystemCache cacheRest(final Cache cache) { + private MgmtSystemCache cacheRest(final Cache cache) { final Object nativeCache = cache.getNativeCache(); if (nativeCache instanceof com.google.common.cache.Cache) { return guavaCache(cache, nativeCache); } else { - return new SystemCache(cache.getName(), Collections.emptyList()); + return new MgmtSystemCache(cache.getName(), Collections.emptyList()); } } @SuppressWarnings("unchecked") - private SystemCache guavaCache(final Cache cache, final Object nativeCache) { + private MgmtSystemCache guavaCache(final Cache cache, final Object nativeCache) { final com.google.common.cache.Cache guavaCache = (com.google.common.cache.Cache) nativeCache; final List keys = guavaCache.asMap().keySet().stream().map(key -> key.toString()) .collect(Collectors.toList()); - return new SystemCache(cache.getName(), keys); + return new MgmtSystemCache(cache.getName(), keys); } } diff --git a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemMapper.java similarity index 74% rename from hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemMapper.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemMapper.java index 3a7b39029..d3f78fad2 100644 --- a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @@ -14,18 +14,18 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.HashMap; import java.util.Map; +import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValue; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; -import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValue; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; /** * A mapper which maps repository model to RESTful model representation and * back. */ -public class SystemMapper { +public class MgmtSystemMapper { - private SystemMapper() { + private MgmtSystemMapper() { // Utility class } @@ -34,10 +34,10 @@ public class SystemMapper { * instance of TenantConfigurationManagement * @return a map of all existing configuration values */ - public static Map toResponse( + public static Map toResponse( final TenantConfigurationManagement tenantConfigurationManagement) { - final Map configurationMap = new HashMap<>(); + final Map configurationMap = new HashMap<>(); for (final TenantConfigurationKey key : TenantConfigurationKey.values()) { configurationMap.put(key.getKeyName(), @@ -49,15 +49,15 @@ public class SystemMapper { /** * maps a TenantConfigurationValue from the repository model to a - * SystemTenantConfigurationValue, the RESTful model. + * MgmtSystemTenantConfigurationValue, the RESTful model. * * @param repoConfValue * configuration value as repository model * @return configuration value as RESTful model */ - public static SystemTenantConfigurationValue toResponse(final String key, + public static MgmtSystemTenantConfigurationValue toResponse(final String key, final TenantConfigurationValue repoConfValue) { - final SystemTenantConfigurationValue restConfValue = new SystemTenantConfigurationValue(); + final MgmtSystemTenantConfigurationValue restConfValue = new MgmtSystemTenantConfigurationValue(); restConfValue.setValue(repoConfValue.getValue()); restConfValue.setGlobal(repoConfValue.isGlobal()); @@ -66,7 +66,7 @@ public class SystemMapper { restConfValue.setLastModifiedAt(repoConfValue.getLastModifiedAt()); restConfValue.setLastModifiedBy(repoConfValue.getLastModifiedBy()); - restConfValue.add(linkTo(methodOn(SystemResource.class).getConfigurationValue(key)).withRel("self")); + restConfValue.add(linkTo(methodOn(MgmtSystemResource.class).getConfigurationValue(key)).withRel("self")); return restConfValue; } diff --git a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemResource.java similarity index 76% rename from hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemResource.java index 4333cfefb..5aac17318 100644 --- a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/rest/resource/SystemResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemResource.java @@ -6,18 +6,18 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.system.rest.resource; +package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.Map; +import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValue; +import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValueRequest; +import org.eclipse.hawkbit.mgmt.rest.api.MgmtSystemRestApi; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; -import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValue; -import org.eclipse.hawkbit.system.json.model.system.SystemTenantConfigurationValueRequest; -import org.eclipse.hawkbit.system.rest.api.SystemRestApi; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,15 +31,11 @@ import org.springframework.web.bind.annotation.RestController; /** * REST Resource handling tenant specific configuration operations. - * - * - * - * */ @RestController -public class SystemResource implements SystemRestApi { +public class MgmtSystemResource implements MgmtSystemRestApi { - private static final Logger LOG = LoggerFactory.getLogger(SystemResource.class); + private static final Logger LOG = LoggerFactory.getLogger(MgmtSystemResource.class); @Autowired private TenantConfigurationManagement tenantConfigurationManagement; @@ -47,7 +43,7 @@ public class SystemResource implements SystemRestApi { @Override public ResponseEntity getSystem() { final ResourceSupport resourceSupport = new ResourceSupport(); - resourceSupport.add(linkTo(methodOn(SystemResource.class).getSystemConfiguration()).withRel("configs")); + resourceSupport.add(linkTo(methodOn(MgmtSystemResource.class).getSystemConfiguration()).withRel("configs")); return ResponseEntity.ok(resourceSupport); } @@ -55,8 +51,8 @@ public class SystemResource implements SystemRestApi { * @return a Map of all configuration values. */ @Override - public ResponseEntity> getSystemConfiguration() { - return new ResponseEntity<>(SystemMapper.toResponse(tenantConfigurationManagement), HttpStatus.OK); + public ResponseEntity> getSystemConfiguration() { + return new ResponseEntity<>(MgmtSystemMapper.toResponse(tenantConfigurationManagement), HttpStatus.OK); } /** @@ -91,13 +87,13 @@ public class SystemResource implements SystemRestApi { * response. */ @Override - public ResponseEntity getConfigurationValue( + public ResponseEntity getConfigurationValue( @PathVariable("keyName") final String keyName) { final TenantConfigurationKey configKey = TenantConfigurationKey.fromKeyName(keyName); LOG.debug("{} config value getted, return status {}", keyName, HttpStatus.OK); - return new ResponseEntity<>(SystemMapper.toResponse(configKey.getKeyName(), + return new ResponseEntity<>(MgmtSystemMapper.toResponse(configKey.getKeyName(), tenantConfigurationManagement.getConfigurationValue(configKey)), HttpStatus.OK); } @@ -114,16 +110,16 @@ public class SystemResource implements SystemRestApi { * response. */ @Override - public ResponseEntity updateConfigurationValue( + public ResponseEntity updateConfigurationValue( @PathVariable("keyName") final String keyName, - @RequestBody final SystemTenantConfigurationValueRequest configurationValueRest) { + @RequestBody final MgmtSystemTenantConfigurationValueRequest configurationValueRest) { final TenantConfigurationKey configKey = TenantConfigurationKey.fromKeyName(keyName); final TenantConfigurationValue updatedValue = tenantConfigurationManagement .addOrUpdateConfiguration(configKey, configurationValueRest.getValue()); - return new ResponseEntity<>(SystemMapper.toResponse(keyName, updatedValue), HttpStatus.OK); + return new ResponseEntity<>(MgmtSystemMapper.toResponse(keyName, updatedValue), HttpStatus.OK); } } \ No newline at end of file diff --git a/hawkbit-system-api/README.md b/hawkbit-system-api/README.md deleted file mode 100644 index 41b1a8416..000000000 --- a/hawkbit-system-api/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Eclipse.IoT hawkBit - System API - -The System API is used to configurate the hawkBit Update Server. This includes tenants specific operations as well as system wide operations. - - -# Compile - -#### Build hawkbit-system-api - -``` -$ cd hawkbit/hawkbit-system-api -$ mvn clean install -``` - diff --git a/hawkbit-system-api/pom.xml b/hawkbit-system-api/pom.xml deleted file mode 100644 index b68b02b36..000000000 --- a/hawkbit-system-api/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - 4.0.0 - - org.eclipse.hawkbit - hawkbit-parent - 0.2.0-SNAPSHOT - - hawkbit-system-api - hawkBit :: System REST API - - - - - org.springframework.hateoas - spring-hateoas - - - com.fasterxml.jackson.core - jackson-annotations - - - \ No newline at end of file diff --git a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestConstant.java b/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestConstant.java deleted file mode 100644 index cb10ba8b2..000000000 --- a/hawkbit-system-api/src/main/java/org/eclipse/hawkbit/system/rest/api/SystemRestConstant.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.system.rest.api; - -/** - * - */ -public final class SystemRestConstant { - - /** - * API version definition. We are using only major versions. - */ - public static final String API_VERSION = "v1"; - - /** - * The base URL mapping for the spring acuator management context path. - */ - public static final String BASE_SYSTEM_MAPPING = "/system"; - - /** - * The base URL mapping of the SP rest resources. - */ - public static final String BASE_V1_REQUEST_MAPPING = "/rest/" + API_VERSION; - - /** - * URL mapping for system admin operations. - */ - public static final String SYSTEM_ADMIN_MAPPING = BASE_SYSTEM_MAPPING + "/admin"; - - public static final String SYSTEM_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + BASE_SYSTEM_MAPPING; - - private SystemRestConstant() { - - } -} diff --git a/hawkbit-system-resource/README.md b/hawkbit-system-resource/README.md deleted file mode 100644 index 20eaf5c6b..000000000 --- a/hawkbit-system-resource/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Eclipse.IoT hawkBit - System Resource - -This is the server-side implementation of the hawkBit System API that is used to configurate the hawkBit Update Server - -# Compile - -#### Build hawkbit-system-resource - -``` -$ cd hawkbit/hawkbit-system-resource -$ mvn clean install -``` - diff --git a/hawkbit-system-resource/pom.xml b/hawkbit-system-resource/pom.xml deleted file mode 100644 index 3a2433366..000000000 --- a/hawkbit-system-resource/pom.xml +++ /dev/null @@ -1,157 +0,0 @@ - - - 4.0.0 - - org.eclipse.hawkbit - hawkbit-parent - 0.2.0-SNAPSHOT - - hawkbit-system-resource - hawkBit :: System REST Resources - - - - - org.eclipse.hawkbit - hawkbit-repository - ${project.version} - - - org.eclipse.hawkbit - hawkbit-system-api - ${project.version} - - - org.eclipse.hawkbit - hawkbit-rest-core - ${project.version} - - - org.springframework.plugin - spring-plugin-core - - - - - org.eclipse.hawkbit - hawkbit-rest-core - ${project.version} - tests - test - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-logging - - - test - - - org.springframework.boot - spring-boot-starter-log4j2 - test - - - com.h2database - h2 - test - - - org.mariadb.jdbc - mariadb-java-client - test - - - javax.el - javax.el-api - test - - - org.springframework.security - spring-security-config - test - - - org.eclipse.hawkbit - hawkbit-repository - ${project.version} - tests - test - - - org.eclipse.hawkbit - hawkbit-http-security - ${project.version} - test - - - com.jayway.jsonpath - json-path - test - - - org.json - json - test - - - com.fasterxml.jackson.core - jackson-databind - test - - - com.fasterxml.jackson.core - jackson-core - test - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.security - spring-security-aspects - test - - - org.easytesting - fest-assert-core - test - - - org.easytesting - fest-assert - test - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - test - - - ru.yandex.qatools.allure - allure-junit-adaptor - test - - - org.springframework - spring-context-support - test - - - \ No newline at end of file diff --git a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java b/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java deleted file mode 100644 index bf706bdc4..000000000 --- a/hawkbit-system-resource/src/main/java/org/eclipse/hawkbit/system/annotation/EnableSystemApi.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.system.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.eclipse.hawkbit.rest.configuration.RestConfiguration; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.stereotype.Controller; - -/** - * Annotation to enable {@link ComponentScan} in the resource package to setup - * all {@link Controller} annotated classes and setup the System API. - */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Configuration -@ComponentScan -@Import(RestConfiguration.class) -public @interface EnableSystemApi { - -} diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/ResourceUtility.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/ResourceUtility.java deleted file mode 100644 index 1b2772530..000000000 --- a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/ResourceUtility.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.system.rest.resource; - -import java.io.IOException; - -import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * Utility additions for the REST API tests. - * - * - */ -public final class ResourceUtility { - private static final ObjectMapper mapper = new ObjectMapper(); - - static ExceptionInfo convertException(final String jsonExceptionResponse) - throws JsonParseException, JsonMappingException, IOException { - return mapper.readValue(jsonExceptionResponse, ExceptionInfo.class); - } - -} diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java deleted file mode 100644 index fb98a8470..000000000 --- a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemManagementResourceTest.java +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.system.rest.resource; - -import static org.fest.assertions.api.Assertions.assertThat; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import java.io.ByteArrayInputStream; -import java.util.List; -import java.util.Random; - -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithSpringAuthorityRule; -import org.eclipse.hawkbit.WithUser; -import org.eclipse.hawkbit.im.authentication.SpPermission; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; -import org.junit.Test; -import org.springframework.http.MediaType; - -import ru.yandex.qatools.allure.annotations.Description; -import ru.yandex.qatools.allure.annotations.Features; -import ru.yandex.qatools.allure.annotations.Stories; - -/** - * - * - */ -@Features("Component Tests - System API") -@Stories("System Management Resource") -public class SystemManagementResourceTest extends AbstractIntegrationTestWithMongoDB { - - @Test - @WithUser(tenantId = "mytenant", authorities = { SpPermission.SYSTEM_ADMIN }) - @Description("Tests that the system is able to collect statistics for the entire system.") - public void collectSystemStatistics() throws Exception { - createTestTenantsForSystemStatistics(2, 2000, 100, 2); - - mvc.perform(get("/system/admin/usage").accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) - .andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$tenantStats.[?(@.tenantName==tenant0)][0].targets", equalTo(100))) - .andExpect(jsonPath("$tenantStats.[?(@.tenantName==tenant0)][0].overallArtifactVolumeInBytes", - equalTo(2000))) - .andExpect(jsonPath("$tenantStats.[?(@.tenantName==tenant0)][0].artifacts", equalTo(1))) - .andExpect(jsonPath("$tenantStats.[?(@.tenantName==tenant0)][0].actions", equalTo(200))) - .andExpect(jsonPath("$overallTargets", equalTo(200))) - .andExpect(jsonPath("$overallArtifacts", equalTo(2))) - .andExpect(jsonPath("$overallArtifactVolumeInBytes", equalTo(4000))) - .andExpect(jsonPath("$overallActions", equalTo(400))) - .andExpect(jsonPath("$overallTenants", equalTo(4))); - } - - @Test - @WithUser(tenantId = "mytenant", authorities = { SpPermission.DELETE_TARGET, SpPermission.DELETE_REPOSITORY, - SpPermission.CREATE_REPOSITORY, SpPermission.READ_REPOSITORY }) - @Description("Tests that the system is not able to collect statistics for the entire system if the .") - public void collectSystemStatisticsWithMissingPermissionFails() throws Exception { - - mvc.perform(get("/system/admin/usage").accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) - .andExpect(status().isForbidden()); - } - - @Test - @WithUser(tenantId = "mytenant", allSpPermissions = true) - @Description("Tests that a tenant can be deletd by API.") - public void deleteTenant() throws Exception { - - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); - - assertThat(distributionSetManagement.findDistributionSetById(dsA.getId())).isNotNull(); - - mvc.perform(delete("/system/admin/tenants/mytenant")).andDo(MockMvcResultPrinter.print()) - .andExpect(status().isOk()); - - assertThat(distributionSetManagement.findDistributionSetById(dsA.getId())).isNull(); - - } - - @Test - @WithUser(tenantId = "mytenant", authorities = { SpPermission.DELETE_TARGET, SpPermission.DELETE_REPOSITORY, - SpPermission.CREATE_REPOSITORY, SpPermission.READ_REPOSITORY }) - @Description("Tenant deletion is only possible for SYSTEM_ADMINs. Repository or target delete is not sufficient.") - public void deleteTenantFailsMissingPermission() throws Exception { - - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); - assertThat(distributionSetManagement.findDistributionSetById(dsA.getId())).isNotNull(); - - mvc.perform(delete("/system/admin/tenants/mytenant")).andDo(MockMvcResultPrinter.print()) - .andExpect(status().isForbidden()); - - assertThat(distributionSetManagement.findDistributionSetById(dsA.getId())).isNotNull(); - } - - @Test - public void getCachesReturnStatus200() throws Exception { - mvc.perform(get("/system/admin/caches")).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - } - - @Test - public void invalidateCachesReturnStatus200() throws Exception { - mvc.perform(delete("/system/admin/caches")).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - } - - private byte[] createTestTenantsForSystemStatistics(final int tenants, final int artifactSize, final int targets, - final int updates) throws Exception { - final Random randomgen = new Random(); - final byte random[] = new byte[artifactSize]; - randomgen.nextBytes(random); - - for (int i = 0; i < tenants; i++) { - final String tenantname = "tenant" + i; - securityRule.runAs(WithSpringAuthorityRule.withUserAndTenant("bumlux", tenantname), () -> { - systemManagement.getTenantMetadata(tenantname); - if (artifactSize > 0) { - createTestArtifact(random); - createDeletedTestArtifact(random); - } - if (targets > 0) { - final List createdTargets = createTestTargets(targets); - if (updates > 0) { - for (int x = 0; x < updates; x++) { - final DistributionSet ds = TestDataUtil.generateDistributionSet("to be deployed" + x, - softwareManagement, distributionSetManagement, true); - - deploymentManagement.assignDistributionSet(ds, createdTargets); - } - } - } - - return null; - }); - } - - return random; - } - - private List createTestTargets(final int targets) { - return targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(targets, "testTargetOfTenant", "testTargetOfTenant")); - } - - private void createTestArtifact(final byte[] random) { - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", - "version 1", null, null); - sm = softwareModuleRepository.save(sm); - - artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file1", false); - } - - private void createDeletedTestArtifact(final byte[] random) { - final DistributionSet ds = TestDataUtil.generateDistributionSet("deleted garbage", softwareManagement, - distributionSetManagement, true); - ds.getModules().stream().forEach(module -> { - artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), module.getId(), "file1", false); - softwareManagement.deleteSoftwareModule(module); - }); - } - -} diff --git a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java b/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java deleted file mode 100644 index 3dc9613e2..000000000 --- a/hawkbit-system-resource/src/test/java/org/eclipse/hawkbit/system/rest/resource/SystemResourceTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.system.rest.resource; - -import static org.fest.assertions.api.Assertions.assertThat; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.Matchers.hasSize; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; -import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; -import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; -import org.eclipse.hawkbit.system.rest.api.SystemRestConstant; -import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; -import org.junit.Test; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; - -import ru.yandex.qatools.allure.annotations.Description; -import ru.yandex.qatools.allure.annotations.Features; -import ru.yandex.qatools.allure.annotations.Stories; - -@Features("Component Tests - System RESTful API") -@Stories("ConfigurationResource") -public class SystemResourceTest extends AbstractIntegrationTest { - - private static String BASE_JSON_REQUEST_STRING = "{\"value\":\"%s\"}"; - - @Test - @Description("perform a GET request on all existing configurations.") - public void getConfigurationValues() throws Exception { - - final ResultActions resultActions = mvc.perform(get(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/")) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath("$.*", hasSize(TenantConfigurationKey.values().length))); - - for (final TenantConfigurationKey key : TenantConfigurationKey.values()) { - - final TenantConfigurationValue confValue = tenantConfigurationManagement.getConfigurationValue(key); - resultActions.andExpect(jsonPath("$.['" + key.getKeyName() + "'].value", equalTo(confValue.getValue()))) - .andExpect(jsonPath("$.['" + key.getKeyName() + "'].global", equalTo(confValue.isGlobal()))); - } - } - - @Test - @Description("perform a GET request on a existing configuration key.") - public void getConfigurationValue() throws Exception { - - final TenantConfigurationKey key = TenantConfigurationKey.AUTHENTICATION_MODE_HEADER_AUTHORITY_NAME; - final String notGlobalValue = "notTheGlobalHeaderAuthoryName"; - - tenantConfigurationManagement.addOrUpdateConfiguration(key, notGlobalValue); - - mvc.perform(get(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}/", key.getKeyName())) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) - .andExpect(jsonPath("value", equalTo(notGlobalValue))).andExpect(jsonPath("global", equalTo(false))) - .andExpect(jsonPath("createdAt", notNullValue())).andExpect(jsonPath("createdBy", notNullValue())); - } - - @Test - @Description("perform a PUT request on a existing configuration key with a valid value.") - public void putConfigurationValue() throws Exception { - - final TenantConfigurationKey key = TenantConfigurationKey.AUTHENTICATION_MODE_HEADER_AUTHORITY_NAME; - final String testValue = "12:12:12"; - - mvc.perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}/", key.getKeyName()) - .content(String.format(BASE_JSON_REQUEST_STRING, testValue)).contentType(MediaType.APPLICATION_JSON)) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - - assertThat(tenantConfigurationManagement.getConfigurationValue(key, String.class).getValue()) - .isEqualTo(testValue); - } - - @Test - @Description("perform a DELETE request on a existing configuration key.") - public void deleteConfigurationValue() throws Exception { - - final TenantConfigurationKey key = TenantConfigurationKey.AUTHENTICATION_MODE_HEADER_AUTHORITY_NAME; - final String notGlobalValue = "notTheGlobalHeaderAuthoryName"; - - tenantConfigurationManagement.addOrUpdateConfiguration(key, notGlobalValue); - assertThat(tenantConfigurationManagement.getConfigurationValue(key, String.class).isGlobal()).isEqualTo(false); - - assertThat(tenantConfigurationManagement.getConfigurationValue(key, String.class).getValue()) - .isEqualTo(notGlobalValue); - - mvc.perform(delete(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}/", key.getKeyName())) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isNoContent()); - - assertThat(tenantConfigurationManagement.getConfigurationValue(key, String.class).isGlobal()).isEqualTo(true); - assertThat(tenantConfigurationManagement.getConfigurationValue(key, String.class).getValue()) - .isNotEqualTo(notGlobalValue); - } - - @Test - @Description("perform a (put) request on a not existing configuration key.") - public void putInvalidConfigurationKey() throws Exception { - - final String notExistingKey = "notExistingKey"; - final String testValue = "12:12:12"; - - final MvcResult mvcResult = mvc - .perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", notExistingKey) - .content(String.format(BASE_JSON_REQUEST_STRING, testValue)) - .contentType(MediaType.APPLICATION_JSON)) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest()).andReturn(); - - // verify response json exception message - final ExceptionInfo exceptionInfo = ResourceUtility - .convertException(mvcResult.getResponse().getContentAsString()); - assertThat(exceptionInfo.getErrorCode()).isEqualTo(SpServerError.SP_CONFIGURATION_KEY_INVALID.getKey()); - } - - @Test - @Description("perform a put request with a not matching configuration value.") - public void putInvalidConfigurationValue() throws Exception { - - final TenantConfigurationKey key = TenantConfigurationKey.POLLING_TIME_INTERVAL; - final String testValue = "invalidFormattedDuration"; - - final MvcResult mvcResult = mvc - .perform(put(SystemRestConstant.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", key.getKeyName()) - .content(String.format(BASE_JSON_REQUEST_STRING, testValue)) - .contentType(MediaType.APPLICATION_JSON)) - .andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest()).andReturn(); - - // verify response json exception message - final ExceptionInfo exceptionInfo = ResourceUtility - .convertException(mvcResult.getResponse().getContentAsString()); - assertThat(exceptionInfo.getErrorCode()).isEqualTo(SpServerError.SP_CONFIGURATION_VALUE_INVALID.getKey()); - } -} diff --git a/hawkbit-mgmt-ui/.gitignore b/hawkbit-ui/.gitignore similarity index 100% rename from hawkbit-mgmt-ui/.gitignore rename to hawkbit-ui/.gitignore diff --git a/hawkbit-mgmt-ui/README.md b/hawkbit-ui/README.md similarity index 100% rename from hawkbit-mgmt-ui/README.md rename to hawkbit-ui/README.md diff --git a/hawkbit-mgmt-ui/pom.xml b/hawkbit-ui/pom.xml similarity index 99% rename from hawkbit-mgmt-ui/pom.xml rename to hawkbit-ui/pom.xml index 1c8b8e1ea..e0bde576a 100644 --- a/hawkbit-mgmt-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -16,7 +16,7 @@ hawkbit-parent 0.2.0-SNAPSHOT - hawkbit-mgmt-ui + hawkbit-ui hawkBit :: UI Bosch IoT Software Provisioning server web application diff --git a/hawkbit-mgmt-ui/src/main/.gitignore b/hawkbit-ui/src/main/.gitignore similarity index 100% rename from hawkbit-mgmt-ui/src/main/.gitignore rename to hawkbit-ui/src/main/.gitignore diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/push/AsyncVaadinServletConfiguration.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptor.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/repository/SpPermissionChecker.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/DefaultHawkbitUI.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/DispatcherRunnable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/ErrorView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactViewMenuItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/ArtifactDetailsEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SMFilterEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadArtifactUIEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtons.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/CustomFile.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/SoftwareModuleFilters.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadConfirmationwindow.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadResultWindow.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatus.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CoordinatesToColor.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/AbstractConfirmationWindowLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationTab.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/confirmwindow/layout/ConfirmationWindowEvents.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtonClickBehaviour.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterSingleButtonClick.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTagToken.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/DistributionSetInfoPanel.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPNotificationMessage.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPTargetAttributesLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIButton.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUICheckBox.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIErrorHandler.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIHorizontalLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITabSheet.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUITableHorizonatlLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIUpdateLogLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRenderer.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRenderer.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRendererData.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/RolloutRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/RolloutRenderer.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/RolloutRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/RolloutRenderer.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonDecorator.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleLargeIconNoBorder.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStylePrimarySmall.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmall.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorder.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUH.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleSmallNoBorderUHS.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleTiny.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIComboBoxDecorator.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedDecorator.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIEmbedValue.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIHeaderLayoutDecorator.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUILabelDecorator.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextFieldDecorator.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsViewMenuItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtonClick.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsUIEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionsViewAcceptCriteria.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DragEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SaveActionWindowEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleAssignmentDiscardEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SwModuleUIEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/ProxyBaseSwModuleItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtons.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistFilters.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageDistUIState.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/state/ManageSoftwareModuleFilters.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/FilterExpression.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/Filters.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/CustomTargetFilter.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetStatusFilter.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetTagFilter.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterManagementViewMenuItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TokenDescription.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ValidationResult.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/event/CustomFilterUIEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/state/FilterManagementUIState.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/HawkbitLoginUI.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentViewMenuItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryComponent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtonClick.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadPopupEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/BulkUploadValidationMessageEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableFilterEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTagDropEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DragEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementUIEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/ManagementViewAcceptCriteria.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/PinUnpinEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/SaveActionWindowEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetAddUpdateWindowEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetFilterEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/DistributionTableFilters.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetFilterParameters.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/ProxyTag.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagIdName.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkTokenTags.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/AbstractTargetTagFilterLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtonClick.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenuItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/EventPushStrategy.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutViewMenuItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/StatusFontIcon.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/event/RolloutEvent.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AbstractAuthenticationTenantConfigurationItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AuthenticationConfigurationItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/TargetSecurityTokenAuthenticationConfigurationItem.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationConfigField.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/polling/DurationField.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/themes/HawkbitTheme.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactory.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/NotificationMessage.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SpringContextHelper.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/TableColumn.java diff --git a/hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java similarity index 100% rename from hawkbit-mgmt-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UINotification.java diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/.gitignore b/hawkbit-ui/src/main/resources/VAADIN/.gitignore similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/.gitignore rename to hawkbit-ui/src/main/resources/VAADIN/.gitignore diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/.gitignore b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/.gitignore similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/.gitignore rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/.gitignore diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/accordion.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/action-history.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/artifact-upload.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/colorpicker.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/dashboardview.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/drop-hint.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-layout-styles.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/footer-common.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/generic-styles.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/hawkbitvariables.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/login.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/systemconfig.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-header-common.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/tags.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/target-filter-query.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_selected1.png diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/lightCorner_top.png diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-57px.jpg diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/layouts/footer.html diff --git a/hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/styles.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/styles.scss similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/VAADIN/themes/hawkbit/styles.scss rename to hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/styles.scss diff --git a/hawkbit-mgmt-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/messages.properties rename to hawkbit-ui/src/main/resources/messages.properties diff --git a/hawkbit-mgmt-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/messages_de.properties rename to hawkbit-ui/src/main/resources/messages_de.properties diff --git a/hawkbit-mgmt-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties similarity index 100% rename from hawkbit-mgmt-ui/src/main/resources/messages_en.properties rename to hawkbit-ui/src/main/resources/messages_en.properties diff --git a/hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java similarity index 100% rename from hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java rename to hawkbit-ui/src/test/java/org/eclipse/hawkbit/push/SpringSecurityAtmosphereInterceptorTest.java diff --git a/hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java similarity index 100% rename from hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java rename to hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/NamingThreadFactoryTest.java diff --git a/hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java similarity index 100% rename from hawkbit-mgmt-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java rename to hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/SPUIComponentProviderTest.java diff --git a/pom.xml b/pom.xml index 6fdab75b3..851fa44d8 100644 --- a/pom.xml +++ b/pom.xml @@ -27,8 +27,6 @@ hawkbit-core hawkbit-security-core hawkbit-rest-core - hawkbit-system-api - hawkbit-system-resource hawkbit-mgmt-api hawkbit-mgmt-resource hawkbit-ddi-api @@ -39,7 +37,7 @@ hawkbit-repository hawkbit-security-integration hawkbit-http-security - hawkbit-mgmt-ui + hawkbit-ui hawkbit-artifact-repository-mongo hawkbit-autoconfigure hawkbit-cache-redis From 05615a9e86f2db0178827f26ca1d1fcf4bb810ea Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 14:28:31 +0200 Subject: [PATCH 113/371] Modify JavaDoc Signed-off-by: SirWayne --- .../hawkbit/ddi/json/model/DdiCancel.java | 2 +- .../ddi/json/model/DdiCancelActionToStop.java | 4 +- .../hawkbit/ddi/json/model/DdiDeployment.java | 4 +- .../ddi/json/model/DdiDeploymentBase.java | 4 +- .../rest/api/DdiRootControllerRestApi.java | 38 +++++++++---------- .../resource/DdiArtifactStoreController.java | 5 +-- .../mgmt/json/model/action/MgmtAction.java | 4 +- .../json/model/artifact/MgmtArtifact.java | 6 +-- .../model/distributionset/MgmtActionType.java | 8 +--- .../softwaremodule/MgmtSoftwareModule.java | 6 +-- .../rest/api/MgmtDistributionSetRestApi.java | 11 ------ .../api/MgmtDistributionSetTagRestApi.java | 24 ------------ .../api/MgmtDistributionSetTypeRestApi.java | 2 - .../mgmt/rest/api/MgmtRolloutRestApi.java | 13 ------- .../rest/api/MgmtSoftwareModuleRestApi.java | 2 - .../api/MgmtSoftwareModuleTypeRestApi.java | 2 - .../rest/api/MgmtSystemManagementRestApi.java | 2 +- .../mgmt/rest/api/MgmtTargetRestApi.java | 16 -------- .../mgmt/rest/api/MgmtTargetTagRestApi.java | 16 -------- .../mgmt/annotation/EnableMgmtApi.java | 3 -- .../MgmtDownloadArtifactResource.java | 4 -- .../rest/resource/MgmtDownloadResource.java | 2 - .../rest/resource/MgmtTargetTagResource.java | 2 +- .../util/RestResourceConversionHelper.java | 5 +-- 24 files changed, 36 insertions(+), 149 deletions(-) diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancel.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancel.java index 9167ae73c..c117dea14 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancel.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancel.java @@ -24,7 +24,7 @@ public class DdiCancel { * Parameterized constructor. * * @param id - * of the {@link CancelAction} + * of the cancel action * @param cancelAction * the action */ diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancelActionToStop.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancelActionToStop.java index e7b946a87..3ab8d6b55 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancelActionToStop.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiCancelActionToStop.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.ddi.json.model; import javax.validation.constraints.NotNull; /** - * The {@link Action} that has to be stopped by the target. + * The action that has to be stopped by the target. */ public class DdiCancelActionToStop { @@ -22,7 +22,7 @@ public class DdiCancelActionToStop { * Parameterized constructor. * * @param stopId - * ID of the {@link Action} to be stoppedW + * ID of the action to be stoppedW */ public DdiCancelActionToStop(final String stopId) { super(); diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java index 7f8c84d39..f72083d7a 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java @@ -13,7 +13,7 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonValue; /** - * Detailed {@link UpdateAction} information. + * Detailed update action information. */ public class DdiDeployment { @@ -57,7 +57,7 @@ public class DdiDeployment { } /** - * The handling type for the update {@link Action}. + * The handling type for the update action. */ public enum HandlingType { diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java index 4d89f759b..8f1116b1b 100644 --- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java +++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java @@ -15,7 +15,7 @@ import org.springframework.hateoas.ResourceSupport; import com.fasterxml.jackson.annotation.JsonProperty; /** - * {@link UpdateAction} resource. + * Update action resource. */ public class DdiDeploymentBase extends ResourceSupport { @@ -30,7 +30,7 @@ public class DdiDeploymentBase extends ResourceSupport { * Constructor. * * @param id - * of the {@link UpdateAction} + * of the update action * @param deployment * details. */ 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 eaa879562..67436c3ca 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 @@ -40,10 +40,9 @@ public interface DdiRootControllerRestApi { * Returns all artifacts of a given software module and target. * * @param targetid - * of the {@link Target} that matches to - * {@link Target#getControllerId()} + * of the target that matches to controller id * @param softwareModuleId - * of the {@link SoftwareModule} + * of the software module * @return the response */ @RequestMapping(method = RequestMethod.GET, value = "/{targetid}/softwaremodules/{softwareModuleId}/artifacts", produces = { @@ -56,8 +55,7 @@ public interface DdiRootControllerRestApi { * Root resource for an individual {@link Target}. * * @param targetid - * of the {@link Target} that matches to - * {@link Target#getControllerId()} + * of the target that matches to controller id * @param request * the HTTP request injected by spring * @return the response @@ -71,11 +69,11 @@ public interface DdiRootControllerRestApi { * partial (as specified by RFC7233 (Range Requests)) download request. * * @param targetid - * of the related + * of the related target * @param softwareModuleId - * of the parent {@link SoftwareModule} + * of the parent software module * @param fileName - * of the related {@link LocalArtifact} + * of the related local artifact * @param response * of the servlet * @param request @@ -94,11 +92,11 @@ public interface DdiRootControllerRestApi { * Handles GET {@link DdiArtifact} MD5 checksum file download request. * * @param targetid - * of the related + * of the related target * @param softwareModuleId - * of the parent {@link SoftwareModule} + * of the parent software module * @param fileName - * of the related {@link LocalArtifact} + * of the related local artifact * @param response * of the servlet * @param request @@ -114,14 +112,13 @@ public interface DdiRootControllerRestApi { @PathVariable("fileName") final String fileName); /** - * Resource for {@link SoftwareModule} {@link UpdateAction}s. + * Resource for software module. * * @param targetid - * of the {@link Target} that matches to - * {@link Target#getControllerId()} + * of the target that matches to controller id * @param actionId - * of the {@link DdiDeploymentBase} that matches to - * {@link Target#getActiveActions()} + * of the {@link DdiDeploymentBase} that matches to active + * actions. * @param resource * an hashcode of the resource which indicates if the action has * been changed, e.g. from 'soft' to 'force' and the eTag needs @@ -143,8 +140,7 @@ public interface DdiRootControllerRestApi { * @param feedback * to provide * @param targetid - * of the {@link Target} that matches to - * {@link Target#getControllerId()} + * of the target that matches to controller id * @param actionId * of the action we have feedback for * @param request @@ -175,7 +171,7 @@ public interface DdiRootControllerRestApi { @PathVariable("targetid") final String targetid); /** - * {@link RequestMethod.GET} method for the {@link DdiCancel} action. + * RequestMethod.GET method for the {@link DdiCancel} action. * * @param targetid * ID of the calling target @@ -192,8 +188,8 @@ public interface DdiRootControllerRestApi { @PathVariable("actionId") @NotEmpty final Long actionId); /** - * {@link RequestMethod.POST} method receiving the {@link DdiActionFeedback} - * from the target. + * RequestMethod.POST method receiving the {@link DdiActionFeedback} from + * the target. * * @param feedback * the {@link DdiActionFeedback} from the target. diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index e7a60f34a..9c51cf8f4 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -43,9 +43,8 @@ import org.springframework.web.context.WebApplicationContext; * The {@link DdiArtifactStoreController} of the HawkBit server controller API * that is queried by the HawkBit target in order to download artifacts * independent of their own individual resource. This is offered in addition to - * the - * {@link DdiRootController#downloadArtifact(String, Long, Long, javax.servlet.http.HttpServletResponse)} - * for legacy controllers that can not be fed with a download URI at runtime. + * the {@link DdiRootController#downloadArtifact(String, Long, String)} for + * legacy controllers that can not be fed with a download URI at runtime. */ @RestController @Scope(WebApplicationContext.SCOPE_REQUEST) diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java index 5b63b5f69..234e282a0 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/action/MgmtAction.java @@ -24,12 +24,12 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class MgmtAction extends MgmtBaseEntity { /** - * API definition for {@link UpdateAction}. + * API definition for update action}. */ public static final String ACTION_UPDATE = "update"; /** - * API definition for {@link CancelAction}. + * API definition for cancel action. */ public static final String ACTION_CANCEL = "cancel"; diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java index 2bcf3c059..afb2d204a 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java @@ -108,11 +108,7 @@ public class MgmtArtifact extends MgmtBaseEntity { } /** - * Type maps to either {@link LocalArtifact} or {@link ExternalArtifact}. - * - * - * - * + * Type maps to either local artifact} or external artifact. */ public enum ArtifactType { LOCAL("local"), EXTERNAL("external"); diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtActionType.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtActionType.java index 98017d18a..d95375f5a 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtActionType.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionset/MgmtActionType.java @@ -11,10 +11,7 @@ package org.eclipse.hawkbit.mgmt.json.model.distributionset; import com.fasterxml.jackson.annotation.JsonValue; /** - * Definition of the {@link ActionType} for the REST management API. - * - * - * + * Definition of the Action type for the REST management API. * */ public enum MgmtActionType { @@ -39,9 +36,6 @@ public enum MgmtActionType { this.name = name; } - /** - * @return the name - */ @JsonValue public String getName() { return name; diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java index fe47347a9..ec4a48e89 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java @@ -24,15 +24,15 @@ import com.fasterxml.jackson.annotation.JsonProperty; @JsonIgnoreProperties(ignoreUnknown = true) public class MgmtSoftwareModule extends MgmtNamedEntity { /** - * API definition for {@link SoftwareModule.Type#RUNTIME}. + * API definition for Software module type#RUNTIME. */ public static final String SM_RUNTIME = "runtime"; /** - * API definition for {@link SoftwareModule.Type#OS}. + * API definition for for Software module type#OS. */ public static final String SM_OS = "os"; /** - * API definition for {@link SoftwareModule.Type#APPLICATION}. + * API definition for for Software module type#APPLICATION. */ public static final String SM_APPLICATION = "application"; 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 01ae4f93f..c61c9ecd3 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 @@ -68,8 +68,6 @@ public interface MgmtDistributionSetRestApi { * * @return a single DistributionSet with status OK. * - * @throws EntityNotFoundException - * in case no DistributionSet with the given ID exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -298,9 +296,6 @@ public interface MgmtDistributionSetRestApi { * the list of software modules ids to assign * @return http status * - * @throws EntityNotFoundException - * in case no distribution set with the given - * {@code distributionSetId} exists. */ @RequestMapping(method = RequestMethod.POST, value = "/{distributionSetId}/assignedSM", consumes = { MediaType.APPLICATION_JSON_VALUE, @@ -318,9 +313,6 @@ public interface MgmtDistributionSetRestApi { * the software module id to get rejected form the distribution * set * @return status OK if rejection was successful. - * @throws EntityNotFoundException - * in case no distribution set with the given - * {@code distributionSetId} exists. */ @RequestMapping(method = RequestMethod.DELETE, value = "/{distributionSetId}/assignedSM/{softwareModuleId}") ResponseEntity deleteAssignSoftwareModules(@PathVariable("distributionSetId") final Long distributionSetId, @@ -343,9 +335,6 @@ public interface MgmtDistributionSetRestApi { * {@code field:direction, field:direction} * @return a list of the assigned software modules of a distribution set * with status OK, if none is assigned than {@code null} - * @throws EntityNotFoundException - * in case no distribution set with the given - * {@code distributionSetId} exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/assignedSM", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) 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 761e803af..5a836ef55 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 @@ -64,9 +64,6 @@ public interface MgmtDistributionSetTagRestApi { * the ID of the distribution set tag to retrieve * * @return a single distribution set tag with status OK. - * @throws EntityNotFoundException - * in case the given {@code distributionsetTagId} doesn't - * exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionsetTagId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -97,9 +94,6 @@ public interface MgmtDistributionSetTagRestApi { * the the request body to be updated * @return status OK if update is successful and the updated distribution * set tag. - * @throws EntityNotFoundException - * in case the given {@code distributionsetTagId} doesn't - * exists. */ @RequestMapping(method = RequestMethod.PUT, value = "/{distributionsetTagId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -113,9 +107,6 @@ public interface MgmtDistributionSetTagRestApi { * @param distributionsetTagId * the ID of the distribution set tag * @return status OK if delete as successfully. - * @throws EntityNotFoundException - * in case the given {@code distributionsetTagId} doesn't - * exists. * */ @RequestMapping(method = RequestMethod.DELETE, value = "/{distributionsetTagId}") @@ -130,9 +121,6 @@ public interface MgmtDistributionSetTagRestApi { * the ID of the distribution set tag * * @return the list of assigned distribution sets. - * @throws EntityNotFoundException - * in case the given {@code distributionsetTagId} doesn't - * exists. */ @RequestMapping(method = RequestMethod.GET, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) ResponseEntity> getAssignedDistributionSets( @@ -149,9 +137,6 @@ public interface MgmtDistributionSetTagRestApi { * * @return the list of assigned distribution sets and unassigned * distribution sets. - * @throws EntityNotFoundException - * in case the given {@code distributionsetTagId} doesn't - * exists. */ @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING + "/toggleTagAssignment") @@ -168,9 +153,6 @@ public interface MgmtDistributionSetTagRestApi { * list of distribution sets ids to be assigned * * @return the list of assigned distribution set. - * @throws EntityNotFoundException - * in case the given {@code distributionsetTagId} doesn't - * exists. */ @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) ResponseEntity> assignDistributionSets( @@ -184,9 +166,6 @@ public interface MgmtDistributionSetTagRestApi { * @param distributionsetTagId * the ID of the distribution set tag to retrieve * @return http status code - * @throws EntityNotFoundException - * in case the given {@code distributionsetTagId} doesn't - * exists. */ @RequestMapping(method = RequestMethod.DELETE, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) ResponseEntity unassignDistributionSets( @@ -201,9 +180,6 @@ public interface MgmtDistributionSetTagRestApi { * @param distributionsetId * the ID of the distribution set to unassign * @return http status code - * @throws EntityNotFoundException - * in case the given {@code distributionsetTagId} doesn't - * exists. */ @RequestMapping(method = RequestMethod.DELETE, value = MgmtRestConstants.DISTRIBUTIONSET_REQUEST_MAPPING + "/{distributionsetId}") 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 01aea87f1..25468739e 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 @@ -68,8 +68,6 @@ public interface MgmtDistributionSetTypeRestApi { * the ID of the module type to retrieve * * @return a single softwareModule with status OK. - * @throws EntityNotFoundException - * in case no with the given {@code softwareModuleId} exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) 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 450d080d1..7f93e2ce8 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 @@ -60,8 +60,6 @@ public interface MgmtRolloutRestApi { * @param rolloutId * the ID of the rollout to retrieve * @return a single rollout with status OK. - * @throws EntityNotFoundException - * in case no rollout with the given {@code rolloutId} exists. */ @RequestMapping(value = "/{rolloutId}", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) @@ -76,7 +74,6 @@ public interface MgmtRolloutRestApi { * status code 201 with the successfully created rollout. In any * failure the JsonResponseExceptionHandler is handling the * response. - * @throws EntityNotFoundException */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -89,9 +86,6 @@ public interface MgmtRolloutRestApi { * the ID of the rollout to be started. * @return OK response (200) if rollout could be started. In case of any * exception the corresponding errors occur. - * @throws EntityNotFoundException - * @see RolloutManagement#startRollout(Rollout) - * @see ResponseExceptionHandler */ @RequestMapping(method = RequestMethod.POST, value = "/{rolloutId}/start", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -105,9 +99,6 @@ public interface MgmtRolloutRestApi { * the ID of the rollout to be paused. * @return OK response (200) if rollout could be paused. In case of any * exception the corresponding errors occur. - * @throws EntityNotFoundException - * @see RolloutManagement#pauseRollout(Rollout) - * @see ResponseExceptionHandler */ @RequestMapping(method = RequestMethod.POST, value = "/{rolloutId}/pause", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -120,9 +111,6 @@ public interface MgmtRolloutRestApi { * the ID of the rollout to be resumed. * @return OK response (200) if rollout could be resumed. In case of any * exception the corresponding errors occur. - * @throws EntityNotFoundException - * @see RolloutManagement#resumeRollout(Rollout) - * @see ResponseExceptionHandler */ @RequestMapping(method = RequestMethod.POST, value = "/{rolloutId}/resume", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -167,7 +155,6 @@ public interface MgmtRolloutRestApi { * @param groupId * the groupId to retrieve the rollout group * @return the OK response containing the MgmtRolloutGroupResponseBody - * @throws EntityNotFoundException */ @RequestMapping(method = RequestMethod.GET, value = "/{rolloutId}/deploygroups/{groupId}", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) 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 54bf7b08b..cdd63ee26 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 @@ -143,8 +143,6 @@ public interface MgmtSoftwareModuleRestApi { * the ID of the module to retrieve * * @return a single softwareModule with status OK. - * @throws EntityNotFoundException - * in case no with the given {@code softwareModuleId} exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) 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 208162645..3fe32d9ad 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 @@ -63,8 +63,6 @@ public interface MgmtSoftwareModuleTypeRestApi { * the ID of the module type to retrieve * * @return a single softwareModule with status OK. - * @throws EntityNotFoundException - * in case no with the given {@code softwareModuleId} exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemManagementRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemManagementRestApi.java index 4415d1a4e..d4832aa7d 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemManagementRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSystemManagementRestApi.java @@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** - * {@link SystemManagement} capabilities by REST. + * System management capabilities by REST. * */ @RequestMapping(MgmtRestConstants.SYSTEM_ADMIN_MAPPING) 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 077c2c799..d44d473b1 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 @@ -38,8 +38,6 @@ public interface MgmtTargetRestApi { * @param targetId * the ID of the target to retrieve * @return a single target with status OK. - * @throws EntityNotFoundException - * in case no target with the given {@code targetId} exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}", produces = { "application/hal+json", @@ -127,8 +125,6 @@ public interface MgmtTargetRestApi { * @param targetId * the ID of the target to retrieve the attributes. * @return the target attributes as map response with status OK - * @throws EntityNotFoundException - * in case no target with the given {@code targetId} exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/attributes", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -189,10 +185,6 @@ public interface MgmtTargetRestApi { * @param force * optional parameter, which indicates a force cancel * @return status no content in case cancellation was successful - * @throws CancelActionNotAllowedException - * if the given action is not active and cannot be canceled. - * @throws EntityNotFoundException - * if the target or the action is not found */ @RequestMapping(method = RequestMethod.DELETE, value = "/{targetId}/actions/{actionId}") ResponseEntity cancelAction(@PathVariable("targetId") final String targetId, @@ -236,8 +228,6 @@ public interface MgmtTargetRestApi { * the ID of the target to retrieve the assigned distribution * @return the assigned distribution set with status OK, if none is assigned * than {@code null} content (e.g. "{}") - * @throws EntityNotFoundException - * in case no target with the given {@code targetId} exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/assignedDS", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -251,10 +241,6 @@ public interface MgmtTargetRestApi { * @param dsId * of the distributionset that is to be assigned * @return http status - * - * @throws EntityNotFoundException - * in case no target with the given {@code targetId} exists. - * */ @RequestMapping(method = RequestMethod.POST, value = "/{targetId}/assignedDS", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -269,8 +255,6 @@ public interface MgmtTargetRestApi { * the ID of the target to retrieve * @return the assigned installed set with status OK, if none is installed * than {@code null} content (e.g. "{}") - * @throws EntityNotFoundException - * in case no target with the given {@code targetId} exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/installedDS", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) 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 132a9f939..e568e7377 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 @@ -64,8 +64,6 @@ public interface MgmtTargetTagRestApi { * the ID of the target tag to retrieve * * @return a single target tag with status OK. - * @throws EntityNotFoundException - * in case the given {@code targetTagId} doesn't exists. */ @RequestMapping(method = RequestMethod.GET, value = "/{targetTagId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -94,8 +92,6 @@ public interface MgmtTargetTagRestApi { * @param restTargetTagRest * the the request body to be updated * @return status OK if update is successful and the updated target tag. - * @throws EntityNotFoundException - * in case the given {@code targetTagId} doesn't exists. */ @RequestMapping(method = RequestMethod.PUT, value = "/{targetTagId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) @@ -108,8 +104,6 @@ public interface MgmtTargetTagRestApi { * @param targetTagId * the ID of the target tag * @return status OK if delete as successfully. - * @throws EntityNotFoundException - * in case the given {@code targetTagId} doesn't exists. * */ @RequestMapping(method = RequestMethod.DELETE, value = "/{targetTagId}") @@ -123,8 +117,6 @@ public interface MgmtTargetTagRestApi { * the ID of the target tag to retrieve * * @return the list of assigned targets. - * @throws EntityNotFoundException - * in case the given {@code targetTagId} doesn't exists. */ @RequestMapping(method = RequestMethod.GET, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) ResponseEntity> getAssignedTargets(@PathVariable("targetTagId") final Long targetTagId); @@ -139,8 +131,6 @@ public interface MgmtTargetTagRestApi { * list of target ids to be toggled * * @return the list of assigned targets and unassigned targets. - * @throws EntityNotFoundException - * in case the given {@code targetTagId} doesn't exists. */ @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING + "/toggleTagAssignment") @@ -157,8 +147,6 @@ public interface MgmtTargetTagRestApi { * list of target ids to be assigned * * @return the list of assigned targets. - * @throws EntityNotFoundException - * in case the given {@code targetTagId} doesn't exists. */ @RequestMapping(method = RequestMethod.POST, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) ResponseEntity> assignTargets(@PathVariable("targetTagId") final Long targetTagId, @@ -170,8 +158,6 @@ public interface MgmtTargetTagRestApi { * @param targetTagId * the ID of the target tag to retrieve * @return http status code - * @throws EntityNotFoundException - * in case the given {@code targetTagId} doesn't exists. */ @RequestMapping(method = RequestMethod.DELETE, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING) ResponseEntity unassignTargets(@PathVariable("targetTagId") final Long targetTagId); @@ -184,8 +170,6 @@ public interface MgmtTargetTagRestApi { * @param controllerId * the ID of the target to unassign * @return http status code - * @throws EntityNotFoundException - * in case the given {@code targetTagId} doesn't exists. */ @RequestMapping(method = RequestMethod.DELETE, value = MgmtRestConstants.TARGET_TAG_TAGERTS_REQUEST_MAPPING + "/{controllerId}") diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java index 2b7f754a8..18cff40f3 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java @@ -23,9 +23,6 @@ import org.springframework.stereotype.Controller; * Annotation to enable {@link ComponentScan} in the resource package to setup * all {@link Controller} annotated classes and setup the REST-Resources for the * Management API. - * - * - * */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java index 077efa84c..dad43bf00 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadArtifactResource.java @@ -53,10 +53,6 @@ public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi * of the parent SoftwareModule * @param artifactId * of the related LocalArtifact - * @param servletResponse - * of the servlet - * @param request - * of the client * * @return responseEntity with status ok if successful */ diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java index 10cd2db3b..87a215183 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java @@ -58,8 +58,6 @@ public class MgmtDownloadResource implements MgmtDownloadRestApi { * * @param downloadId * the generated download id - * @param response - * of the servlet * @return {@link ResponseEntity} with status {@link HttpStatus#OK} if * successful */ diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java index 03265a76c..2bafecd8b 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java @@ -43,7 +43,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** - * REST Resource handling for {@link Tag} CRUD operations. + * REST Resource handling for tag CRUD operations. * */ @RestController diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java index 96f30cc87..181ccc1f8 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java @@ -69,7 +69,7 @@ public final class RestResourceConversionHelper { /** *

* Write response with target relation and publishes events concerning the - * download progress based on given {@link UpdateActionStatus}. + * download progress based on given update action status. *

* *

@@ -89,9 +89,6 @@ public final class RestResourceConversionHelper { * @param statusId * of the UpdateActionStatus * - * @throws IOException - * in case of exceptions - * * @return http code * * @see https://tools.ietf.org/html/rfc7233 From 96af492a9caf047648c17b7762d1e2fb440bf73a Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 15:02:49 +0200 Subject: [PATCH 114/371] Fix NPE in equals Signed-off-by: SirWayne --- .../hawkbit/ui/artifacts/upload/UploadHandler.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index 77207bd50..d5c6759b5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -339,7 +339,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + (fileName == null ? 0 : fileName.hashCode()); + result = prime * result + ((fileName == null) ? 0 : fileName.hashCode()); return result; } @@ -348,12 +348,17 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene if (this == obj) { return true; } - if (!(obj instanceof UploadHandler)) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { return false; } final UploadHandler other = (UploadHandler) obj; - if (fileName == null && other.fileName != null) { - return false; + if (fileName == null) { + if (other.fileName != null) { + return false; + } } else if (!fileName.equals(other.fileName)) { return false; } From a10506f94b8bdf7cc6e8b5147ef7ac483a6b07fc Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 18 May 2016 15:15:32 +0200 Subject: [PATCH 115/371] Implementing commonDialogWindow Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 93 +-- .../CreateUpdateSoftwareTypeLayout.java | 58 +- .../ui/colorPicker/ColorPickerConstants.java | 9 + .../ui/colorPicker/ColorPickerHelper.java | 63 ++ .../ui/colorPicker/ColorPickerLayout.java | 137 ++++ .../hawkbit/ui/common/CommonDialogWindow.java | 103 +-- .../ui/components/SPUIComponentProvider.java | 21 + .../SPUIButtonStyleBorderWithIcon.java | 42 ++ .../ui/decorators/SPUIWindowDecorator.java | 35 + .../CreateUpdateDistSetTypeLayout.java | 625 ++++++------------ .../disttype/DSTypeFilterHeader.java | 1 - .../DistributionAddUpdateWindowLayout.java | 76 ++- ...eateUpdateDistributionTagLayoutWindow.java | 352 +++------- .../management/tag/CreateUpdateTagLayout.java | 529 ++++++++------- .../TargetAddUpdateWindowLayout.java | 70 +- .../TargetBulkUpdateWindowLayout.java | 14 +- .../CreateUpdateTargetTagLayout.java | 268 -------- .../CreateUpdateTargetTagLayoutWindow.java | 135 ++++ .../targettag/MultipleTargetFilter.java | 2 +- .../targettag/TargetTagFilterHeader.java | 2 +- .../rollout/AddUpdateRolloutWindowLayout.java | 213 +++--- .../ui/rollout/rollout/RolloutListGrid.java | 5 +- .../ui/rollout/rollout/RolloutListHeader.java | 14 +- .../themes/hawkbit/customstyles/common.scss | 9 + .../hawkbit/customstyles/popup-common.scss | 4 +- .../hawkbit/customstyles/table-content.scss | 1 + 26 files changed, 1402 insertions(+), 1479 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index d6de0c0a3..be9756478 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -14,11 +14,11 @@ import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -30,12 +30,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.spring.events.EventBus; -import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Alignment; -import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; +import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; @@ -52,7 +51,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class SoftwareModuleAddUpdateWindow implements Serializable { +public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Serializable { private static final long serialVersionUID = -5217675246477211483L; @@ -79,15 +78,15 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { private TextField vendorTextField; - private Button saveSoftware; - - private Button closeWindow; + // private Button saveSoftware; + // + // private Button closeWindow; private ComboBox typeComboBox; private TextArea descTextArea; - private Window window; + private CommonDialogWindow window; private String oldDescriptionValue; @@ -103,7 +102,7 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { * @return reference of {@link com.vaadin.ui.Window} to add new software * module. */ - public Window createAddSoftwareModuleWindow() { + public CommonDialogWindow createAddSoftwareModuleWindow() { editSwModule = Boolean.FALSE; createRequiredComponents(); createWindow(); @@ -170,22 +169,19 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { populateTypeNameCombo(); /* save or update button */ - saveSoftware = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SOFT_MODULE_SAVE, "", "", "", true, - FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); - saveSoftware.addClickListener(event -> { - if (editSwModule) { - updateSwModule(); - } else { - /* add new or update software module */ - addNewBaseSoftware(); - } - }); - - /* close button */ - closeWindow = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SOFT_MODULE_DISCARD, "", "", "", true, - FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); - /* Just close this window when this button is clicked */ - closeWindow.addClickListener(event -> closeThisWindow()); + // saveSoftware = + // SPUIComponentProvider.getButton(SPUIComponetIdProvider.SOFT_MODULE_SAVE, + // "", "", "", true, + // FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); + // saveSoftware.addClickListener(event -> save()); + // + // /* close button */ + // closeWindow = + // SPUIComponentProvider.getButton(SPUIComponetIdProvider.SOFT_MODULE_DISCARD, + // "", "", "", true, + // FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); + // /* Just close this window when this button is clicked */ + // closeWindow.addClickListener(event -> closeThisWindow()); resetOldValues(); } @@ -212,12 +208,14 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { */ private void createWindow() { /* action button layout (save & dicard) */ - final HorizontalLayout buttonsLayout = new HorizontalLayout(); - buttonsLayout.setSizeFull(); - buttonsLayout.addComponents(saveSoftware, closeWindow); - buttonsLayout.setComponentAlignment(saveSoftware, Alignment.BOTTOM_LEFT); - buttonsLayout.setComponentAlignment(closeWindow, Alignment.BOTTOM_RIGHT); - buttonsLayout.addStyleName("window-style"); + // final HorizontalLayout buttonsLayout = new HorizontalLayout(); + // buttonsLayout.setSizeFull(); + // buttonsLayout.addComponents(saveSoftware, closeWindow); + // buttonsLayout.setComponentAlignment(saveSoftware, + // Alignment.BOTTOM_LEFT); + // buttonsLayout.setComponentAlignment(closeWindow, + // Alignment.BOTTOM_RIGHT); + // buttonsLayout.addStyleName("window-style"); final Label madatoryStarLabel = new Label("*"); madatoryStarLabel.setStyleName("v-caption v-required-field-indicator"); @@ -242,22 +240,26 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { mainLayout.setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); mainLayout.addComponent(hLayout); mainLayout.setComponentAlignment(hLayout, Alignment.MIDDLE_LEFT); - mainLayout.addComponents(nameTextField, versionTextField, vendorTextField, descTextArea, buttonsLayout); - + // mainLayout.addComponents(nameTextField, versionTextField, + // vendorTextField, descTextArea, buttonsLayout); + + // TODO MR WINDOW + mainLayout.addComponents(nameTextField, versionTextField, vendorTextField, descTextArea); + + setCompositionRoot(mainLayout); + /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW); - window.setContent(mainLayout); - window.setModal(true); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(), event -> closeThisWindow()); nameTextField.focus(); } private void addDescriptionTextChangeListener() { descTextArea.addTextChangeListener(event -> { if (event.getText().equals(oldDescriptionValue) && vendorTextField.getValue().equals(oldVendorValue)) { - saveSoftware.setEnabled(false); + window.setSaveButtonEnabled(false); } else { - saveSoftware.setEnabled(true); + window.setSaveButtonEnabled(true); } }); } @@ -265,9 +267,9 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { private void addVendorTextChangeListener() { vendorTextField.addTextChangeListener(event -> { if (event.getText().equals(oldVendorValue) && descTextArea.getValue().equals(oldDescriptionValue)) { - saveSoftware.setEnabled(false); + window.setSaveButtonEnabled(false); } else { - saveSoftware.setEnabled(true); + window.setSaveButtonEnabled(true); } }); } @@ -331,7 +333,7 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { typeComboBox.addItem(swModle.getType().getName()); } typeComboBox.setValue(swModle.getType().getName()); - saveSoftware.setEnabled(Boolean.FALSE); + window.setSaveButtonEnabled(Boolean.FALSE); } /** @@ -369,4 +371,13 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { } return isValid; } + + private void save() { + if (editSwModule) { + updateSwModule(); + } else { + /* add new or update software module */ + addNewBaseSoftware(); + } + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index d6c372ac5..044163e35 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -19,11 +19,11 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.CoordinatesToColor; import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; @@ -41,7 +41,6 @@ import org.vaadin.spring.events.EventBus; import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; -import com.vaadin.server.FontAwesome; import com.vaadin.server.Page; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; @@ -60,7 +59,6 @@ import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; import com.vaadin.ui.components.colorpicker.ColorChangeEvent; import com.vaadin.ui.components.colorpicker.ColorChangeListener; import com.vaadin.ui.components.colorpicker.ColorPickerGradient; @@ -115,8 +113,8 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C private TextField typeName; private TextField typeKey; private TextArea typeDesc; - private Button saveTag; - private Button discardTag; + // private Button saveTag; + // private Button discardTag; private Button tagColorPreviewBtn; private OptionGroup createOptiongroup; private OptionGroup assignOptiongroup; @@ -131,7 +129,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C private Slider redSlider; private Slider greenSlider; private Slider blueSlider; - private Window swTypeWindow; + private CommonDialogWindow swTypeWindow; protected boolean tagPreviewBtnClicked = false; private VerticalLayout comboLayout; private VerticalLayout sliders; @@ -151,6 +149,8 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C addListeners(); } + // TODO MR WINDOW + private void createComponents() { createTypeStr = i18n.get("label.create.type"); updateTypeStr = i18n.get("label.update.type"); @@ -188,13 +188,18 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C typeNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); typeNameComboBox.setImmediate(true); - saveTag = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_SW_TYPE_SAVE, "", "", "", true, FontAwesome.SAVE, - SPUIButtonStyleSmallNoBorder.class); - saveTag.addStyleName(ValoTheme.BUTTON_BORDERLESS); - - discardTag = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_TAG_DISRACD, "", "", - "discard-button-style", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); - discardTag.addStyleName(ValoTheme.BUTTON_BORDERLESS); + // saveTag = + // SPUIComponentProvider.getButton(SPUIDefinitions.NEW_SW_TYPE_SAVE, "", + // "", "", true, FontAwesome.SAVE, + // SPUIButtonStyleSmallNoBorder.class); + // saveTag.addStyleName(ValoTheme.BUTTON_BORDERLESS); + // + // discardTag = + // SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_TAG_DISRACD, + // "", "", + // "discard-button-style", true, FontAwesome.TIMES, + // SPUIButtonStyleSmallNoBorder.class); + // discardTag.addStyleName(ValoTheme.BUTTON_BORDERLESS); tagColorPreviewBtn = new Button(); tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); @@ -252,17 +257,20 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C colorLabelLayout.addComponents(colorLabel, tagColorPreviewBtn); fieldLayout.addComponent(colorLabelLayout); - final HorizontalLayout buttonLayout = new HorizontalLayout(); - buttonLayout.addComponent(saveTag); - buttonLayout.addComponent(discardTag); - buttonLayout.setComponentAlignment(discardTag, Alignment.BOTTOM_RIGHT); - buttonLayout.setComponentAlignment(saveTag, Alignment.BOTTOM_LEFT); - buttonLayout.addStyleName("window-style"); - buttonLayout.setWidth("152px"); + // final HorizontalLayout buttonLayout = new HorizontalLayout(); + // buttonLayout.addComponent(saveTag); + // buttonLayout.addComponent(discardTag); + // buttonLayout.setComponentAlignment(discardTag, + // Alignment.BOTTOM_RIGHT); + // buttonLayout.setComponentAlignment(saveTag, Alignment.BOTTOM_LEFT); + // buttonLayout.addStyleName("window-style"); + // buttonLayout.setWidth("152px"); + + // TODO MR WINDOW final VerticalLayout fieldButtonLayout = new VerticalLayout(); fieldButtonLayout.addComponent(fieldLayout); - fieldButtonLayout.addComponent(buttonLayout); + // fieldButtonLayout.addComponent(buttonLayout); mainLayout = new HorizontalLayout(); mainLayout.addComponent(fieldButtonLayout); @@ -271,8 +279,6 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C } private void addListeners() { - saveTag.addClickListener(event -> save()); - discardTag.addClickListener(event -> discard()); colorSelect.addColorChangeListener(this); selPreview.addColorChangeListener(this); tagColorPreviewBtn.addClickListener(event -> previewButtonClicked()); @@ -281,13 +287,11 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C slidersValueChangeListeners(); } - public Window getWindow() { + public CommonDialogWindow getWindow() { reset(); swTypeWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW); - swTypeWindow.setContent(this); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(), event -> discard()); return swTypeWindow; - } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java new file mode 100644 index 000000000..2c333a9f2 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java @@ -0,0 +1,9 @@ +package org.eclipse.hawkbit.ui.colorPicker; + +import com.vaadin.shared.ui.colorpicker.Color; + +public class ColorPickerConstants { + + public static final String DEFAULT_COLOR = "rgb(44,151,32)"; + public static final Color START_COLOR = new Color(0, 146, 58); +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java new file mode 100644 index 000000000..01fd46977 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java @@ -0,0 +1,63 @@ +package org.eclipse.hawkbit.ui.colorPicker; + +import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.vaadin.shared.ui.colorpicker.Color; +import com.vaadin.ui.Slider.ValueOutOfBoundsException; + +public class ColorPickerHelper { + + private static final Logger LOG = LoggerFactory.getLogger(ColorPickerHelper.class); + + /** + * Get color picked value in string. + * + * @return String of color picked value. + */ + public static String getColorPickedString(final SpColorPickerPreview preview) { + return "rgb(" + preview.getColor().getRed() + "," + preview.getColor().getGreen() + "," + + preview.getColor().getBlue() + ")"; + } + + /** + * Covert RGB code to {@Color}. + * + * @param value + * RGB vale + * @return Color + */ + public static Color rgbToColorConverter(final String value) { + if (!value.startsWith("rgb")) { + return null; + } + // RGB color format rgb/rgba(255,255,255,0.1) + final String[] colors = value.substring(value.indexOf('(') + 1, value.length() - 1).split(","); + final int red = Integer.parseInt(colors[0]); + final int green = Integer.parseInt(colors[1]); + final int blue = Integer.parseInt(colors[2]); + if (colors.length > 3) { + final int alpha = (int) (Double.parseDouble(colors[3]) * 255d); + return new Color(red, green, blue, alpha); + } else { + return new Color(red, green, blue); + } + } + + public static void setRgbSliderValues(final ColorPickerLayout colorPickerLayout) { + try { + final double redColorValue = colorPickerLayout.getSelectedColor().getRed(); + colorPickerLayout.getRedSlider().setValue(new Double(redColorValue)); + final double blueColorValue = colorPickerLayout.getSelectedColor().getBlue(); + colorPickerLayout.getBlueSlider().setValue(new Double(blueColorValue)); + final double greenColorValue = colorPickerLayout.getSelectedColor().getGreen(); + colorPickerLayout.getGreenSlider().setValue(new Double(greenColorValue)); + } catch (final ValueOutOfBoundsException e) { + LOG.error("Unable to set RGB color value to " + colorPickerLayout.getSelectedColor().getRed() + "," + + colorPickerLayout.getSelectedColor().getGreen() + "," + + colorPickerLayout.getSelectedColor().getBlue(), e); + } + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java new file mode 100644 index 000000000..9e294cf9b --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java @@ -0,0 +1,137 @@ +package org.eclipse.hawkbit.ui.colorPicker; + +import java.util.HashSet; +import java.util.Set; + +import org.eclipse.hawkbit.ui.common.CoordinatesToColor; +import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; + +import com.vaadin.shared.ui.colorpicker.Color; +import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; +import com.vaadin.ui.Slider; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.components.colorpicker.ColorPickerGradient; +import com.vaadin.ui.components.colorpicker.ColorSelector; + +public class ColorPickerLayout extends VerticalLayout { + + private static final long serialVersionUID = -7025970080613796692L; + + /** + * Local Instance of ColorPickerPreview. + */ + private SpColorPickerPreview selPreview; + + private ColorPickerGradient colorSelect; + private Set selectors; + private Color selectedColor; + + /** RGB color converter. */ + private final Coordinates2Color rgbConverter = new CoordinatesToColor(); + + private Slider redSlider; + private Slider greenSlider; + private Slider blueSlider; + + private final VerticalLayout sliders = new VerticalLayout(); + + public ColorPickerLayout() { + + init(); + + setStyleName("rgb-vertical-layout"); + addComponent(selPreview); + addComponent(colorSelect); + } + + public void init() { + + selectors = new HashSet<>(); + selectedColor = getDefaultColor(); + selPreview = new SpColorPickerPreview(selectedColor); + + colorSelect = new ColorPickerGradient("rgb-gradient", rgbConverter); + colorSelect.setColor(selectedColor); + colorSelect.setWidth("220px"); + + redSlider = createRGBSlider("", "red"); + greenSlider = createRGBSlider("", "green"); + blueSlider = createRGBSlider("", "blue"); + + sliders.addComponents(redSlider, greenSlider, blueSlider); + selectors.add(colorSelect); + } + + public Slider createRGBSlider(final String caption, final String styleName) { + final Slider slider = new Slider(caption, 0, 255); + slider.setImmediate(true); + slider.setWidth("150px"); + slider.addStyleName(styleName); + return slider; + } + + public SpColorPickerPreview getSelPreview() { + return selPreview; + } + + public void setSelPreview(final SpColorPickerPreview selPreview) { + this.selPreview = selPreview; + } + + public ColorPickerGradient getColorSelect() { + return colorSelect; + } + + public void setColorSelect(final ColorPickerGradient colorSelect) { + this.colorSelect = colorSelect; + } + + public Set getSelectors() { + return selectors; + } + + public Color getSelectedColor() { + return selectedColor; + } + + public void setSelectedColor(final Color selectedColor) { + this.selectedColor = selectedColor; + } + + public Coordinates2Color getRgbConverter() { + return rgbConverter; + } + + public Color getDefaultColor() { + return new Color(44, 151, 32); + } + + public Slider getRedSlider() { + return redSlider; + } + + public void setRedSlider(final Slider redSlider) { + this.redSlider = redSlider; + } + + public Slider getGreenSlider() { + return greenSlider; + } + + public void setGreenSlider(final Slider greenSlider) { + this.greenSlider = greenSlider; + } + + public Slider getBlueSlider() { + return blueSlider; + } + + public void setBlueSlider(final Slider blueSlider) { + this.blueSlider = blueSlider; + } + + public VerticalLayout getSliders() { + return sliders; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 83ff7c8e2..a3176d663 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -2,105 +2,126 @@ package org.eclipse.hawkbit.ui.common; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; +import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleBorderWithIcon; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; import com.vaadin.server.FontAwesome; +import com.vaadin.ui.AbstractOrderedLayout; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; -import com.vaadin.ui.FormLayout; +import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Link; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; -public class CommonDialog extends Window { +@Service +public class CommonDialogWindow extends Window { private static final long serialVersionUID = -1321949234316858703L; - private static final Logger LOGGER = LoggerFactory.getLogger(CommonDialog.class); + private static final Logger LOG = LoggerFactory.getLogger(CommonDialogWindow.class); private final VerticalLayout mainLayout = new VerticalLayout(); - private FormLayout formLayout = new FormLayout(); + private String caption; + + private Component content; + + private String helpLink; private Button saveButton; private Button cancelButton; - public CommonDialog() { + public CommonDialogWindow() { - mainLayout.addComponent(formLayout); - mainLayout.addComponent(createActionButtonsLayout()); - setContent(mainLayout); - - setResizable(false); - center(); + init(null, null); } - public CommonDialog(final String title, final FormLayout form, final String helpLink) { + public CommonDialogWindow(final String caption, final Component content, final String helpLink, + final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener) { - if (formLayout != null) { - formLayout = form; + this.caption = caption; + this.content = content; + this.helpLink = helpLink; + + if (null == content) { + // TODO + // throw Exception + } + init(saveButtonClickListener, cancelButtonClickListener); + } + + public void init(final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener) { + + if (content instanceof AbstractOrderedLayout) { + ((AbstractOrderedLayout) content).setSpacing(true); + ((AbstractOrderedLayout) content).setMargin(true); } - formLayout.setSpacing(true); - formLayout.setMargin(true); if (StringUtils.isNotEmpty(helpLink)) { mainLayout.addComponent(createLinkToHelp(helpLink)); } - mainLayout.addComponent(formLayout); - mainLayout.addComponent(createActionButtonsLayout()); + if (null != content) { + mainLayout.addComponent(content); + } + final HorizontalLayout buttonLayout = createActionButtonsLayout(saveButtonClickListener, + cancelButtonClickListener); + mainLayout.addComponent(buttonLayout); + mainLayout.setComponentAlignment(buttonLayout, Alignment.MIDDLE_CENTER); - setCaption(title); + setSizeUndefined(); + setCaption(caption); setContent(mainLayout); setResizable(false); center(); + setModal(true); } - private HorizontalLayout createActionButtonsLayout() { + private HorizontalLayout createActionButtonsLayout(final ClickListener saveButtonClickListener, + final ClickListener cancelButtonClickListener) { final HorizontalLayout hlayout = new HorizontalLayout(); hlayout.setSpacing(true); - saveButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_SAVE, "", "", "", true, - FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); - saveButton.setCaption("save"); - // saveButton.setDescription(i18n.get("configuration.savebutton.tooltip")); + saveButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_SAVE, "save", "", "", + true, FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); + if (null != saveButtonClickListener) { + saveButton.addClickListener(saveButtonClickListener); + } else { + LOG.warn("No ClickListener for saveButton specified"); + } hlayout.addComponent(saveButton); hlayout.setComponentAlignment(saveButton, Alignment.MIDDLE_LEFT); - cancelButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_CANCEL, "", "", "", - true, FontAwesome.UNDO, SPUIButtonStyleSmallNoBorder.class); - cancelButton.setCaption("cancel"); - // cancelButton.setDescription(i18n.get("configuration.cancellbutton.tooltip")); + cancelButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_CANCEL, "cancel", "", + "", true, FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); + if (null != cancelButtonClickListener) { + cancelButton.addClickListener(cancelButtonClickListener); + } else { + LOG.warn("No ClickListener for cancelButton specified"); + } hlayout.addComponent(cancelButton); hlayout.setComponentAlignment(cancelButton, Alignment.MIDDLE_RIGHT); return hlayout; } - public void setSaveButtonClickListener(final ClickListener clickListener) { - saveButton.addClickListener(clickListener); + public void setSaveButtonEnabled(final boolean enabled) { + saveButton.setEnabled(enabled); } - public void setCancelButtonClickListener(final ClickListener clickListener) { - cancelButton.addClickListener(clickListener); + public void setCancelButtonEnabled(final boolean enabled) { + cancelButton.setEnabled(enabled); } private Link createLinkToHelp(final String link) { return SPUIComponentProvider.getHelpLink(link); } - public FormLayout getFormLayout() { - return formLayout; - } - - public void setFormLayout(final FormLayout formLayout) { - this.formLayout = formLayout; - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index bd955252c..6aa0f9837 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -14,6 +14,7 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.decorators.SPUIButtonDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIComboBoxDecorator; @@ -32,8 +33,10 @@ import com.vaadin.server.FontAwesome; import com.vaadin.server.Resource; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; +import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Link; @@ -137,6 +140,24 @@ public final class SPUIComponentProvider { return SPUILabelDecorator.getDeocratedLabel(name, type); } + /** + * Get window component. + * + * @param caption + * window caption + * @param id + * window id + * @param type + * type of window + * @return Window + */ + public static CommonDialogWindow getWindow(final String caption, final String id, final String type, + final Component content, final ClickListener saveButtonClickListener, + final ClickListener cancelButtonClickListener) { + return SPUIWindowDecorator.getDeocratedWindow(caption, id, type, content, saveButtonClickListener, + cancelButtonClickListener); + } + /** * Get window component. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java new file mode 100644 index 000000000..2f8b88d74 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.decorators; + +import com.vaadin.server.Resource; +import com.vaadin.ui.Button; +import com.vaadin.ui.themes.ValoTheme; + +public class SPUIButtonStyleBorderWithIcon implements SPUIButtonDecorator { + + /** + * Style for button: Primary. + */ + + @Override + public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { + + // Set Style + if (null != style) { + if (setStyle) { + button.setStyleName(style); + } else { + button.addStyleName(style); + } + } + button.addStyleName(ValoTheme.LABEL_SMALL); + button.setSizeFull(); + + // Set icon + if (null != icon) { + button.setIcon(icon); + } + return button; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java index 5e5b784c7..539215c7d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java @@ -8,9 +8,12 @@ */ package org.eclipse.hawkbit.ui.decorators; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.Component; import com.vaadin.ui.Window; /** @@ -28,6 +31,38 @@ public final class SPUIWindowDecorator { } + /** + * Decorates window based on type. + * + * @param caption + * window caption + * @param id + * window id + * @param type + * window type + * @return Window + */ + public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type, + final Component content, final ClickListener saveButtonClickListener, + final ClickListener CancelButtonClickListener) { + // TODO helpLink + final CommonDialogWindow window = new CommonDialogWindow(caption, content, null, saveButtonClickListener, + CancelButtonClickListener); + if (null != id) { + window.setId(id); + } + if (SPUIDefinitions.CONFIRMATION_WINDOW.equals(type)) { + window.setDraggable(false); + window.setClosable(true); + window.addStyleName(SPUIStyleDefinitions.CONFIRMATION_WINDOW_CAPTION); + + } else if (SPUIDefinitions.CREATE_UPDATE_WINDOW.equals(type)) { + window.setDraggable(true); + window.setClosable(true); + } + return window; + } + /** * Decorates window based on type. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 9dd695ce0..fa8613a56 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -9,41 +9,35 @@ package org.eclipse.hawkbit.ui.distributions.disttype; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetRepository; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.UiProperties; -import org.eclipse.hawkbit.ui.common.CoordinatesToColor; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent.DistributionSetTypeEnum; -import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; +import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; -import org.eclipse.hawkbit.ui.utils.UINotification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; -import org.vaadin.spring.events.EventBus; -import com.google.common.base.Strings; import com.vaadin.data.Item; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; @@ -53,29 +47,21 @@ import com.vaadin.server.Page; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.CheckBox; -import com.vaadin.ui.ComboBox; import com.vaadin.ui.Component; -import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; -import com.vaadin.ui.Slider; -import com.vaadin.ui.Slider.ValueOutOfBoundsException; import com.vaadin.ui.Table; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; -import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; import com.vaadin.ui.components.colorpicker.ColorChangeEvent; import com.vaadin.ui.components.colorpicker.ColorChangeListener; -import com.vaadin.ui.components.colorpicker.ColorPickerGradient; -import com.vaadin.ui.components.colorpicker.ColorPickerPreview; import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; @@ -84,7 +70,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class CreateUpdateDistSetTypeLayout extends CustomComponent implements ColorChangeListener, ColorSelector { +public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout implements ColorChangeListener, ColorSelector { private static final long serialVersionUID = -5169398523815877767L; private static final Logger LOG = LoggerFactory.getLogger(CreateUpdateDistSetTypeLayout.class); @@ -95,19 +81,6 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co private static final String DIST_TYPE_DESCRIPTION = "description"; private static final String DIST_TYPE_MANDATORY = "mandatory"; private static final String STAR = " * "; - protected static final String DEFAULT_COLOR = "rgb(44,151,32)"; - - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient UINotification uiNotification; @Autowired private transient SoftwareManagement softwareManagement; @@ -121,59 +94,24 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co @Autowired private transient UiProperties uiProperties; - /** - * Instance of ColorPickerPreview. - */ - private SpColorPickerPreview selPreview; - private String createDistTypeStr; private String updateDistTypeStr; private Label createDistType; private Label updateDistType; private Label comboLabel; - private Label madatoryLabel; - private Label colorLabel; - private TextField typeName; private TextField typeKey; - private TextArea typeDesc; - private Button saveDistSetType; - private Button discardDistSetType; - private Button tagColorPreviewBtn; - private OptionGroup createOptiongroup; - private ComboBox typeNameComboBox; - private Color selectedColor; - private ColorPickerGradient colorSelect; - private Slider redSlider; - private Slider greenSlider; - private Slider blueSlider; - private Window distTypeWindow; - private VerticalLayout comboLayout; - private VerticalLayout sliders; - private VerticalLayout colorPickerLayout; private VerticalLayout sliderLayout; private HorizontalLayout colorLayout; private HorizontalLayout distTypeSelectLayout; - private Set selectors; private Table sourceTable; private Table selectedTable; private IndexedContainer selectedTablecontainer; private IndexedContainer sourceTablecontainer; - /** RGB color converter. */ - private final Coordinates2Color rgbConverter = new CoordinatesToColor(); - - /** - * Initialize the dist type tag details layout. - */ - public void init() { - createComponents(); - buildLayout(); - addListeners(); - } - - private void createComponents() { + @Override + protected void createRequiredComponents() { createDistTypeStr = i18n.get("label.create.type"); updateDistTypeStr = i18n.get("label.update.type"); createDistType = SPUIComponentProvider.getLabel(createDistTypeStr, null); @@ -181,115 +119,61 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); madatoryLabel = getMandatoryLabel(); - typeName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", + tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_NAME, true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - typeName.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_NAME); + tagName.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_NAME); typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_KEY, true, "", i18n.get("textfield.key"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeKey.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_KEY); - typeDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", + tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_DESC, false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - typeDesc.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_DESC); - typeDesc.setImmediate(true); - typeDesc.setNullRepresentation(""); + tagDesc.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_DESC); + tagDesc.setImmediate(true); + tagDesc.setNullRepresentation(""); - typeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, + tagNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, "", i18n.get("label.combobox.type")); - typeNameComboBox.setId(SPUIDefinitions.NEW_DISTRIBUTION_SET_TYPE_NAME_COMBO); - typeNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); - typeNameComboBox.setImmediate(true); - typeNameComboBox.setPageLength(SPUIDefinitions.DIST_TYPE_SIZE); + tagNameComboBox.setId(SPUIDefinitions.NEW_DISTRIBUTION_SET_TYPE_NAME_COMBO); + tagNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); + tagNameComboBox.setImmediate(true); + tagNameComboBox.setPageLength(SPUIDefinitions.DIST_TYPE_SIZE); colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); tagColorPreviewBtn = new Button(); tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); - getPreviewButtonColor(DEFAULT_COLOR); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); tagColorPreviewBtn.setStyleName("tag-color-preview"); - saveDistSetType = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_DIST_SET_TYPE_SAVE, "", "", "", true, - FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); - saveDistSetType.addStyleName(ValoTheme.BUTTON_BORDERLESS); - - discardDistSetType = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_DIST_SET_TYPE_COLSE, "", "", - "discard-button-style", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); - discardDistSetType.addStyleName(ValoTheme.BUTTON_BORDERLESS); - - getPreviewButtonColor(DEFAULT_COLOR); - - selectors = new HashSet<>(); - selectedColor = new Color(44, 151, 32); - selPreview = new SpColorPickerPreview(selectedColor); - - colorSelect = new ColorPickerGradient("rgb-gradient", rgbConverter); - colorSelect.setColor(selectedColor); - colorSelect.setWidth("220px"); - - redSlider = createRGBSlider("", "red"); - greenSlider = createRGBSlider("", "green"); - blueSlider = createRGBSlider("", "blue"); - setRgbSliderValues(selectedColor); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + ColorPickerHelper.setRgbSliderValues(getColorPickerLayout()); createUpdateOptionGroup(); - } - private void buildLayout() { - colorPickerLayout = new VerticalLayout(); - colorPickerLayout.setSpacing(true); - colorPickerLayout.addStyleName("color-picker-layout"); - colorPickerLayout.addStyleName("color-picker-layout-ds-type"); + @Override + protected void buildLayout() { + + super.buildLayout(); + getFormLayout().addComponent(typeKey, 4); + distTypeSelectLayout = createTwinColumnLayout(); - sliders = new VerticalLayout(); - sliders.addComponents(redSlider, greenSlider, blueSlider); - - selectors.add(colorSelect); - - comboLayout = new VerticalLayout(); - final VerticalLayout fieldLayout = new VerticalLayout(); - fieldLayout.setSpacing(true); - fieldLayout.setMargin(false); - fieldLayout.addComponent(createOptiongroup); - fieldLayout.addComponent(madatoryLabel); - fieldLayout.addComponent(comboLayout); - fieldLayout.addComponent(typeName); - fieldLayout.addComponent(typeKey); - fieldLayout.addComponent(typeDesc); - - final VerticalLayout colorPreviewGradientLayout = new VerticalLayout(); - colorPreviewGradientLayout.addComponent(selPreview); - colorPreviewGradientLayout.addComponent(colorSelect); - colorPreviewGradientLayout.setComponentAlignment(selPreview, Alignment.MIDDLE_CENTER); - colorPreviewGradientLayout.setComponentAlignment(selPreview, Alignment.MIDDLE_CENTER); - - colorPickerLayout.addComponent(colorPreviewGradientLayout); - colorPickerLayout.setComponentAlignment(colorPreviewGradientLayout, Alignment.MIDDLE_CENTER); - - final HorizontalLayout buttonLayout = new HorizontalLayout(); - buttonLayout.addComponent(saveDistSetType); - buttonLayout.addComponent(discardDistSetType); - buttonLayout.setComponentAlignment(discardDistSetType, Alignment.BOTTOM_RIGHT); - buttonLayout.setComponentAlignment(saveDistSetType, Alignment.BOTTOM_LEFT); - buttonLayout.setImmediate(true); - buttonLayout.addStyleName("window-style"); - buttonLayout.setSizeFull(); - final HorizontalLayout mainLayout = new HorizontalLayout(); final VerticalLayout twinTableLayout = new VerticalLayout(); twinTableLayout.setSizeFull(); twinTableLayout.addComponent(distTypeSelectLayout); - mainLayout.addComponent(fieldLayout); + mainLayout.addComponent(getFormLayout()); mainLayout.addComponent(twinTableLayout); - + colorLayout = new HorizontalLayout(); sliderLayout = new VerticalLayout(); final HorizontalLayout chooseColorLayout = new HorizontalLayout(); @@ -303,9 +187,6 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co mainWindowLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); mainWindowLayout.addComponent(mainLayout); mainWindowLayout.addComponent(colorLayout); - mainWindowLayout.addComponent(buttonLayout); - setCompositionRoot(mainWindowLayout); - typeName.focus(); } private HorizontalLayout createTwinColumnLayout() { @@ -505,122 +386,33 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co } } - public Window getWindow() { - reset(); - distTypeWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW); - distTypeWindow.setContent(this); - return distTypeWindow; - - } - - private Label getMandatoryLabel() { - final Label label = new Label(i18n.get("label.mandatory.field")); - label.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); - return label; - } - - private Slider createRGBSlider(final String caption, final String styleName) { - final Slider slider = new Slider(caption, 0, 255); - slider.setImmediate(true); - slider.setWidth("150px"); - slider.addStyleName(styleName); - return slider; - } - - private void setRgbSliderValues(final Color color) { - try { - final double redColorValue = color.getRed(); - redSlider.setValue(new Double(redColorValue)); - final double blueColorValue = color.getBlue(); - blueSlider.setValue(new Double(blueColorValue)); - final double greenColorValue = color.getGreen(); - greenSlider.setValue(new Double(greenColorValue)); - } catch (final ValueOutOfBoundsException e) { - LOG.error("Unable to set RGB color value to " + color.getRed() + "," + color.getGreen() + "," - + color.getBlue(), e); - } - } - - /** - * Dynamic styles for window. - * - * @param top - * int value - * @param marginLeft - * int value - */ - private void getPreviewButtonColor(final String color) { - Page.getCurrent().getJavaScript().execute(HawkbitCommonUtil.getPreviewButtonColorScript(color)); - } - - private void createUpdateOptionGroup() { - final List optionValues = new ArrayList<>(); - if (permChecker.hasCreateDistributionPermission()) { - optionValues.add(createDistType.getValue()); - } - if (permChecker.hasUpdateDistributionPermission()) { - optionValues.add(updateDistType.getValue()); - } - createOptionGroupByValues(optionValues); - } - - private void createOptionGroupByValues(final List typeOptions) { - createOptiongroup = new OptionGroup("", typeOptions); - createOptiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); - createOptiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); - createOptiongroup.addStyleName("custom-option-group"); - createOptiongroup.setNullSelectionAllowed(false); - createOptiongroup.setCaption(null); - if (!typeOptions.isEmpty()) { - createOptiongroup.select(typeOptions.get(0)); - } - } - private void addListeners() { - saveDistSetType.addClickListener(event -> save()); - discardDistSetType.addClickListener(event -> discard()); - colorSelect.addColorChangeListener(this); - selPreview.addColorChangeListener(this); + getColorPickerLayout().getColorSelect().addColorChangeListener(this); + getColorPickerLayout().getSelPreview().addColorChangeListener(this); tagColorPreviewBtn.addClickListener(event -> previewButtonClicked()); - createOptiongroup.addValueChangeListener(event -> createOptionValueChanged(event)); - typeNameComboBox.addValueChangeListener(event -> typeNameChosen(event)); + optiongroup.addValueChangeListener(event -> createOptionValueChanged(event)); + tagNameComboBox.addValueChangeListener(event -> typeNameChosen(event)); slidersValueChangeListeners(); } - private void save() { - if (mandatoryValuesPresent()) { - final DistributionSetType existingDistTypeByKey = distributionSetManagement - .findDistributionSetTypeByKey(typeKey.getValue()); - final DistributionSetType existingDistTypeByName = distributionSetManagement - .findDistributionSetTypeByName(typeName.getValue()); - if (createOptiongroup.getValue().equals(createDistTypeStr)) { - if (!checkIsDuplicateByKey(existingDistTypeByKey) && !checkIsDuplicate(existingDistTypeByName)) { - crateNewDistributionSetType(); - } - } else { - updateDistributionSetType(existingDistTypeByKey); - } - } - } - - private Boolean mandatoryValuesPresent() { - if (Strings.isNullOrEmpty(typeName.getValue())) { - if (createOptiongroup.getValue().equals(createDistTypeStr)) { - - uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TYPE_NAME_KEY); - } - if (createOptiongroup.getValue().equals(updateDistTypeStr)) { - if (null == typeNameComboBox.getValue()) { - uiNotification.displayValidationError(i18n.get("message.error.missing.typename")); - } else { - uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - } - return Boolean.FALSE; - } - return Boolean.TRUE; - } + // private void save() { + // if (mandatoryValuesPresent()) { + // final DistributionSetType existingDistTypeByKey = + // distributionSetManagement + // .findDistributionSetTypeByKey(typeKey.getValue()); + // final DistributionSetType existingDistTypeByName = + // distributionSetManagement + // .findDistributionSetTypeByName(tagName.getValue()); + // if (createOptiongroup.getValue().equals(createDistTypeStr)) { + // if (!checkIsDuplicateByKey(existingDistTypeByKey) && + // !checkIsDuplicate(existingDistTypeByName)) { + // crateNewDistributionSetType(); + // } + // } else { + // updateDistributionSetType(existingDistTypeByKey); + // } + // } + // } private Boolean checkIsDuplicate(final DistributionSetType existingDistType) { if (existingDistType != null) { @@ -640,24 +432,15 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co return Boolean.FALSE; } - private void closeWindow() { - distTypeWindow.close(); - UI.getCurrent().removeWindow(distTypeWindow); - } - - private void discard() { - UI.getCurrent().removeWindow(distTypeWindow); - } - /** * Create new DistSet Type tag. */ @SuppressWarnings("unchecked") private void crateNewDistributionSetType() { - final String colorPicked = getColorPickedSting(); - final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeName.getValue()); + final String colorPicked = ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview()); + final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String typeKeyValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeKey.getValue()); - final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeDesc.getValue()); + final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); final List itemIds = (List) selectedTable.getItemIds(); if (null != typeNameValue && null != typeKeyValue && null != itemIds && !itemIds.isEmpty()) { DistributionSetType newDistType = new DistributionSetType(typeKeyValue, typeNameValue, typeDescValue); @@ -699,9 +482,9 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co @SuppressWarnings("unchecked") private void updateDistributionSetType(final DistributionSetType existingType) { final List itemIds = (List) selectedTable.getItemIds(); - final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeName.getValue()); + final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String typeKeyValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeKey.getValue()); - final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeDesc.getValue()); + final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); /* remove all SW Module Types before update SW Module Types */ final DistributionSetType updateDistSetType = removeSWModuleTypesFromDistSetType(existingType.getName()); @@ -726,7 +509,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co } } } - updateDistSetType.setColour(getColorPickedSting()); + updateDistSetType.setColour(ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview())); distributionSetManagement.updateDistributionSetType(updateDistSetType); uiNotification .displaySuccess(i18n.get("message.update.success", new Object[] { updateDistSetType.getName() })); @@ -757,104 +540,70 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co return distSetType; } - /** - * Get color picked value in string. - * - * @return String of color picked value. - */ - private String getColorPickedSting() { - return "rgb(" + getSelPreview().getColor().getRed() + "," + getSelPreview().getColor().getGreen() + "," - + getSelPreview().getColor().getBlue() + ")"; - } - - /** - * Color view. - * - * @return ColorPickerPreview as UI - */ - public ColorPickerPreview getSelPreview() { - return selPreview; - } - /** * Open color picker on click of preview button. Auto select the color based * on target tag if already selected. */ - private void previewButtonClicked() { - final String selectedOption = (String) createOptiongroup.getValue(); - if (null != selectedOption && selectedOption.equalsIgnoreCase(updateDistTypeStr) - && null != typeNameComboBox.getValue()) { - - final DistributionSetType existedDistType = distributionSetManagement - .findDistributionSetTypeByKey(typeNameComboBox.getValue().toString()); - if (null != existedDistType) { - selectedColor = existedDistType.getColour() != null ? rgbToColorConverter(existedDistType.getColour()) - : rgbToColorConverter(DEFAULT_COLOR); - } else { - selectedColor = rgbToColorConverter(DEFAULT_COLOR); - } - - } - selPreview.setColor(selectedColor); - sliderLayout.addComponent(sliders); - colorLayout.addComponent(colorPickerLayout); - colorLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); - } - - /** - * Covert RGB code to {@Color}. - * - * @param value - * RGB vale - * @return Color - */ - protected Color rgbToColorConverter(final String value) { - if (value.startsWith("rgb")) { - final String[] colors = value.substring(value.indexOf('(') + 1, value.length() - 1).split(","); - final int red = Integer.parseInt(colors[0]); - final int green = Integer.parseInt(colors[1]); - final int blue = Integer.parseInt(colors[2]); - if (colors.length > 3) { - final int alpha = (int) (Double.parseDouble(colors[3]) * 255d); - return new Color(red, green, blue, alpha); - } else { - return new Color(red, green, blue); - } - } - return null; - } + // private void previewButtonClicked() { + // final String selectedOption = (String) createOptiongroup.getValue(); + // if (null != selectedOption && + // selectedOption.equalsIgnoreCase(updateDistTypeStr) + // && null != typeNameComboBox.getValue()) { + // + // final DistributionSetType existedDistType = distributionSetManagement + // .findDistributionSetTypeByKey(typeNameComboBox.getValue().toString()); + // if (null != existedDistType) { + // getColorPickerLayout().setSelectedColor(existedDistType.getColour() != + // null + // ? ColorPickerHelper.rgbToColorConverter(existedDistType.getColour()) + // : + // ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); + // } else { + // getColorPickerLayout() + // .setSelectedColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); + // } + // } + // getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + // sliderLayout.addComponent(sliders); + // colorLayout.addComponent(getColorPickerLayout()); + // colorLayout.setComponentAlignment(getColorPickerLayout(), + // Alignment.MIDDLE_CENTER); + // } /** * Value change listeners implementations of sliders. */ private void slidersValueChangeListeners() { - redSlider.addValueChangeListener(new ValueChangeListener() { + getColorPickerLayout().getRedSlider().addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = -8336732883300920839L; @Override public void valueChange(final ValueChangeEvent event) { final double red = (Double) event.getProperty().getValue(); - final Color newColor = new Color((int) red, selectedColor.getGreen(), selectedColor.getBlue()); + final Color newColor = new Color((int) red, getColorPickerLayout().getSelectedColor().getGreen(), + getColorPickerLayout().getSelectedColor().getBlue()); setColorToComponents(newColor); } }); - greenSlider.addValueChangeListener(new ValueChangeListener() { + getColorPickerLayout().getGreenSlider().addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1236358037711775663L; @Override public void valueChange(final ValueChangeEvent event) { final double green = (Double) event.getProperty().getValue(); - final Color newColor = new Color(selectedColor.getRed(), (int) green, selectedColor.getBlue()); + final Color newColor = new Color(getColorPickerLayout().getSelectedColor().getRed(), (int) green, + getColorPickerLayout().getSelectedColor().getBlue()); setColorToComponents(newColor); } }); - blueSlider.addValueChangeListener(new ValueChangeListener() { + getColorPickerLayout().getBlueSlider().addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 8466370744686043947L; @Override public void valueChange(final ValueChangeEvent event) { final double blue = (Double) event.getProperty().getValue(); - final Color newColor = new Color(selectedColor.getRed(), selectedColor.getGreen(), (int) blue); + final Color newColor = new Color(getColorPickerLayout().getSelectedColor().getRed(), + getColorPickerLayout().getSelectedColor().getGreen(), (int) blue); setColorToComponents(newColor); } }); @@ -862,9 +611,9 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co private void setColorToComponents(final Color newColor) { setColor(newColor); - colorSelect.setColor(newColor); + getColorPickerLayout().getColorSelect().setColor(newColor); getPreviewButtonColor(newColor.getCSS()); - createDynamicStyleForComponents(typeName, typeKey, typeDesc, newColor.getCSS()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, newColor.getCSS()); } /** @@ -874,13 +623,13 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co * @param tagDesc * @param taregtTagColor */ - private void createDynamicStyleForComponents(final TextField typeName, final TextField typeKey, + private void createDynamicStyleForComponents(final TextField tagName, final TextField typeKey, final TextArea typeDesc, final String typeTagColor) { - typeName.removeStyleName(SPUIDefinitions.TYPE_NAME); + tagName.removeStyleName(SPUIDefinitions.TYPE_NAME); typeKey.removeStyleName(SPUIDefinitions.TYPE_KEY); typeDesc.removeStyleName(SPUIDefinitions.TYPE_DESC); getDistributionDynamicStyles(typeTagColor); - typeName.addStyleName(TYPE_NAME_DYNAMIC_STYLE); + tagName.addStyleName(TYPE_NAME_DYNAMIC_STYLE); typeKey.addStyleName(TYPE_NAME_DYNAMIC_STYLE); typeDesc.addStyleName(TYPE_DESC_DYNAMIC_STYLE); } @@ -926,22 +675,24 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co /** * reset the components. */ - private void reset() { - typeName.setEnabled(true); - typeName.clear(); + @Override + protected void reset() { + tagName.setEnabled(true); + tagName.clear(); typeKey.clear(); - typeDesc.clear(); - colorLayout.removeComponent(colorPickerLayout); - sliderLayout.removeComponent(sliders); + tagDesc.clear(); + colorLayout.removeComponent(getColorPickerLayout()); + sliderLayout.removeComponent(getColorPickerLayout().getSliders()); restoreComponentStyles(); comboLayout.removeComponent(comboLabel); - comboLayout.removeComponent(typeNameComboBox); + comboLayout.removeComponent(tagNameComboBox); selectedTable.removeAllItems(); getSourceTableData(); - createOptiongroup.select(createDistTypeStr); - selectedColor = new Color(44, 151, 32); - selPreview.setColor(selectedColor); + optiongroup.select(createDistTypeStr); + // Default green color + getColorPickerLayout().setSelectedColor(getColorPickerLayout().getDefaultColor()); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); } /** @@ -952,45 +703,46 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co */ private void createOptionValueChanged(final ValueChangeEvent event) { if ("Update Type".equals(event.getProperty().getValue())) { - typeName.clear(); - typeDesc.clear(); + tagName.clear(); + tagDesc.clear(); typeKey.clear(); selectedTable.getContainerDataSource().removeAllItems(); getSourceTableData(); typeKey.setEnabled(false); - typeName.setEnabled(false); + tagName.setEnabled(false); distTypeSelectLayout.setEnabled(false); - populateTypeNameCombo(); + populateTagNameCombo(); comboLayout.addComponent(comboLabel); - comboLayout.addComponent(typeNameComboBox); + comboLayout.addComponent(tagNameComboBox); } else { typeKey.setEnabled(true); - typeName.setEnabled(true); - saveDistSetType.setEnabled(true); + tagName.setEnabled(true); + window.setSaveButtonEnabled(true); distTypeSelectLayout.setEnabled(true); - typeName.clear(); - typeDesc.clear(); + tagName.clear(); + tagDesc.clear(); typeKey.clear(); selectedTable.setEnabled(true); selectedTable.getContainerDataSource().removeAllItems(); sourceTable.getContainerDataSource().removeAllItems(); getSourceTableData(); comboLayout.removeComponent(comboLabel); - comboLayout.removeComponent(typeNameComboBox); + comboLayout.removeComponent(tagNameComboBox); } restoreComponentStyles(); - getPreviewButtonColor(DEFAULT_COLOR); - selPreview.setColor(rgbToColorConverter(DEFAULT_COLOR)); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + getColorPickerLayout().getSelPreview() + .setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); } /** * Populate DistributionSet Type name combo. */ - public void populateTypeNameCombo() { - typeNameComboBox.setContainerDataSource(getDistSetTypeLazyQueryContainer()); - typeNameComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); - + @Override + public void populateTagNameCombo() { + tagNameComboBox.setContainerDataSource(getDistSetTypeLazyQueryContainer()); + tagNameComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); } /** @@ -1016,18 +768,18 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co } private void resetTypeFields() { - typeName.setEnabled(false); + tagName.setEnabled(false); typeKey.setEnabled(false); - typeName.clear(); + tagName.clear(); typeKey.clear(); - typeDesc.clear(); + tagDesc.clear(); restoreComponentStyles(); selectedTable.removeAllItems(); getSourceTableData(); restoreComponentStyles(); - getPreviewButtonColor(DEFAULT_COLOR); - selPreview.setColor(rgbToColorConverter(DEFAULT_COLOR)); - + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + getColorPickerLayout().getSelPreview() + .setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); } /** @@ -1038,24 +790,24 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co * as the selected tag from combo */ private void setTypeTagCombo(final String distSetTypeSelected) { - typeName.setValue(distSetTypeSelected); + tagName.setValue(distSetTypeSelected); getSourceTableData(); selectedTable.getContainerDataSource().removeAllItems(); final DistributionSetType selectedTypeTag = fetchDistributionSetType(distSetTypeSelected); if (null != selectedTypeTag) { - typeDesc.setValue(selectedTypeTag.getDescription()); + tagDesc.setValue(selectedTypeTag.getDescription()); typeKey.setValue(selectedTypeTag.getKey()); if (distributionSetRepository.countByType(selectedTypeTag) <= 0) { distTypeSelectLayout.setEnabled(true); selectedTable.setEnabled(true); - saveDistSetType.setEnabled(true); + window.setSaveButtonEnabled(true); } else { uiNotification.displayValidationError( selectedTypeTag.getName() + " " + i18n.get("message.error.dist.set.type.update")); distTypeSelectLayout.setEnabled(false); selectedTable.setEnabled(false); - saveDistSetType.setEnabled(false); + window.setSaveButtonEnabled(false); } for (final SoftwareModuleType swModuleType : selectedTypeTag.getOptionalModuleTypes()) { addTargetTableforUpdate(swModuleType, false); @@ -1066,16 +818,18 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co } if (null == selectedTypeTag.getColour()) { - selectedColor = new Color(44, 151, 32); - selPreview.setColor(selectedColor); - colorSelect.setColor(selectedColor); - createDynamicStyleForComponents(typeName, typeKey, typeDesc, DEFAULT_COLOR); - getPreviewButtonColor(DEFAULT_COLOR); + getColorPickerLayout() + .setSelectedColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, ColorPickerConstants.DEFAULT_COLOR); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); } else { - selectedColor = rgbToColorConverter(selectedTypeTag.getColour()); - selPreview.setColor(selectedColor); - colorSelect.setColor(selectedColor); - createDynamicStyleForComponents(typeName, typeKey, typeDesc, selectedTypeTag.getColour()); + getColorPickerLayout() + .setSelectedColor(ColorPickerHelper.rgbToColorConverter(selectedTypeTag.getColour())); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, selectedTypeTag.getColour()); getPreviewButtonColor(selectedTypeTag.getColour()); } } @@ -1109,14 +863,13 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co if (color == null) { return; } - selectedColor = color; - selPreview.setColor(selectedColor); - final String colorPickedPreview = selPreview.getColor().getCSS(); - if (typeName.isEnabled() && null != colorSelect) { - createDynamicStyleForComponents(typeName, typeKey, typeDesc, colorPickedPreview); - colorSelect.setColor(selPreview.getColor()); + getColorPickerLayout().setSelectedColor(color); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + final String colorPickedPreview = getColorPickerLayout().getSelPreview().getColor().getCSS(); + if (tagName.isEnabled() && null != getColorPickerLayout().getColorSelect()) { + createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); + getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor()); } - } /* @@ -1140,14 +893,15 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co @Override public void colorChanged(final ColorChangeEvent event) { setColor(event.getColor()); - for (final ColorSelector select : selectors) { - if (!event.getSource().equals(select) && select.equals(this) && !select.getColor().equals(selectedColor)) { - select.setColor(selectedColor); + for (final ColorSelector select : getColorPickerLayout().getSelectors()) { + if (!event.getSource().equals(select) && select.equals(this) + && !select.getColor().equals(getColorPickerLayout().getSelectedColor())) { + select.setColor(getColorPickerLayout().getSelectedColor()); } } - setRgbSliderValues(selectedColor); + ColorPickerHelper.setRgbSliderValues(getColorPickerLayout()); getPreviewButtonColor(event.getColor().getCSS()); - createDynamicStyleForComponents(typeName, typeKey, typeDesc, event.getColor().getCSS()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, event.getColor().getCSS()); } @@ -1155,13 +909,66 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co * reset the tag name and tag description component border color. */ private void restoreComponentStyles() { - typeName.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); - typeDesc.removeStyleName(TYPE_DESC_DYNAMIC_STYLE); + tagName.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); + tagDesc.removeStyleName(TYPE_DESC_DYNAMIC_STYLE); typeKey.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); - typeName.addStyleName(SPUIDefinitions.DIST_SET_TYPE_NAME); - typeDesc.addStyleName(SPUIDefinitions.DIST_SET_TYPE_DESC); + tagName.addStyleName(SPUIDefinitions.DIST_SET_TYPE_NAME); + tagDesc.addStyleName(SPUIDefinitions.DIST_SET_TYPE_DESC); typeKey.addStyleName(SPUIDefinitions.DIST_SET_TYPE_KEY); - getPreviewButtonColor(DEFAULT_COLOR); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + } + + @Override + protected void save(final ClickEvent event) { + if (mandatoryValuesPresent()) { + final DistributionSetType existingDistTypeByKey = distributionSetManagement + .findDistributionSetTypeByKey(typeKey.getValue()); + final DistributionSetType existingDistTypeByName = distributionSetManagement + .findDistributionSetTypeByName(tagName.getValue()); + if (optiongroup.getValue().equals(createDistTypeStr)) { + if (!checkIsDuplicateByKey(existingDistTypeByKey) && !checkIsDuplicate(existingDistTypeByName)) { + crateNewDistributionSetType(); + } + } else { + updateDistributionSetType(existingDistTypeByKey); + } + } + } + + @Override + protected void setTagDetails(final String tagSelected) { + // TODO Auto-generated method stub + + } + + @Override + public void createWindow() { + reset(); + window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event)); + } + + private void createUpdateOptionGroup() { + final List optionValues = new ArrayList<>(); + if (permChecker.hasCreateDistributionPermission()) { + optionValues.add(createDistType.getValue()); + } + if (permChecker.hasUpdateDistributionPermission()) { + optionValues.add(updateDistType.getValue()); + } + createOptionGroupByValues(optionValues); + } + + private void createOptionGroupByValues(final List typeOptions) { + optiongroup = new OptionGroup("", typeOptions); + optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); + optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); + optiongroup.addStyleName("custom-option-group"); + optiongroup.setNullSelectionAllowed(false); + optiongroup.setCaption(null); + if (!typeOptions.isEmpty()) { + optiongroup.select(typeOptions.get(0)); + } } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java index 02c959286..04c6e7579 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java @@ -62,7 +62,6 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { final Window addUpdateWindow = createUpdateDistSetTypeLayout.getWindow(); UI.getCurrent().addWindow(addUpdateWindow); addUpdateWindow.setVisible(Boolean.TRUE); - } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 195a63b6f..c5a578fb5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -23,11 +23,11 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -49,21 +49,17 @@ import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; -import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Alignment; -import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; import com.vaadin.ui.Component; -import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; /** @@ -99,8 +95,8 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { @Autowired private transient UiProperties uiProperties; - private Button saveDistributionBtn; - private Button discardDistributionBtn; + // private Button saveDistributionBtn; + // private Button discardDistributionBtn; private TextField distNameTextField; private TextField distVersionTextField; private Label madatoryLabel; @@ -109,7 +105,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { private ComboBox distsetTypeNameComboBox; private boolean editDistribution = Boolean.FALSE; private Long editDistId; - private Window addDistributionWindow; + private CommonDialogWindow addDistributionWindow; private String originalDistName; private String originalDistVersion; private String originalDistDescription; @@ -133,13 +129,16 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { private void buildLayout() { /* action button layout ( save & discard ) */ - final HorizontalLayout buttonsLayout = new HorizontalLayout(); - buttonsLayout.setSizeFull(); - buttonsLayout.setStyleName("dist-buttons-horz-layout"); - buttonsLayout.addComponents(saveDistributionBtn, discardDistributionBtn); - buttonsLayout.setComponentAlignment(saveDistributionBtn, Alignment.BOTTOM_LEFT); - buttonsLayout.setComponentAlignment(discardDistributionBtn, Alignment.BOTTOM_RIGHT); - buttonsLayout.addStyleName("window-style"); + // final HorizontalLayout buttonsLayout = new HorizontalLayout(); + // buttonsLayout.setSizeFull(); + // buttonsLayout.setStyleName("dist-buttons-horz-layout"); + // buttonsLayout.addComponents(saveDistributionBtn, + // discardDistributionBtn); + // buttonsLayout.setComponentAlignment(saveDistributionBtn, + // Alignment.BOTTOM_LEFT); + // buttonsLayout.setComponentAlignment(discardDistributionBtn, + // Alignment.BOTTOM_RIGHT); + // buttonsLayout.addStyleName("window-style"); /* * The main layout of the window contains mandatory info, textboxes @@ -150,12 +149,12 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { setSizeUndefined(); addComponents(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot()), madatoryLabel, distsetTypeNameComboBox, distNameTextField, distVersionTextField, descTextArea, reqMigStepCheckbox); - - addComponent(buttonsLayout); + + // addComponent(buttonsLayout); setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); distNameTextField.focus(); - - } + + } /** * Create required UI components. @@ -193,15 +192,20 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { reqMigStepCheckbox.addStyleName(ValoTheme.CHECKBOX_SMALL); reqMigStepCheckbox.setId(SPUIComponetIdProvider.DIST_ADD_MIGRATION_CHECK); - /* save or update button */ - saveDistributionBtn = SPUIComponentProvider.getButton(SPUIComponetIdProvider.DIST_ADD_SAVE, "", "", "", true, - FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); - saveDistributionBtn.addClickListener(event -> saveDistribution()); - - /* close button */ - discardDistributionBtn = SPUIComponentProvider.getButton(SPUIComponetIdProvider.DIST_ADD_DISCARD, "", "", "", - true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); - discardDistributionBtn.addClickListener(event -> discardDistribution()); + // /* save or update button */ + // saveDistributionBtn = + // SPUIComponentProvider.getButton(SPUIComponetIdProvider.DIST_ADD_SAVE, + // "", "", "", true, + // FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); + // saveDistributionBtn.addClickListener(event -> saveDistribution()); + // + // /* close button */ + // discardDistributionBtn = + // SPUIComponentProvider.getButton(SPUIComponetIdProvider.DIST_ADD_DISCARD, + // "", "", "", + // true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); + // discardDistributionBtn.addClickListener(event -> + // discardDistribution()); } /** @@ -224,7 +228,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { } private void enableSaveButton() { - saveDistributionBtn.setEnabled(true); + addDistributionWindow.setSaveButtonEnabled(true); } private DistributionSetType getDefaultDistributionSetType() { @@ -234,7 +238,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { } private void disableSaveButton() { - saveDistributionBtn.setEnabled(false); + addDistributionWindow.setSaveButtonEnabled(false); } private void saveDistribution() { @@ -422,7 +426,9 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { distsetTypeNameComboBox.removeStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR); descTextArea.clear(); reqMigStepCheckbox.clear(); - saveDistributionBtn.setEnabled(true); + if (addDistributionWindow != null) { + addDistributionWindow.setSaveButtonEnabled(true); + } removeListeners(); changedComponents.clear(); } @@ -504,7 +510,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { public void populateValuesOfDistribution(final Long editDistId) { this.editDistId = editDistId; editDistribution = Boolean.TRUE; - saveDistributionBtn.setEnabled(false); + addDistributionWindow.setSaveButtonEnabled(false); final DistributionSet distSet = distributionSetManagement.findDistributionSetByIdWithDetails(editDistId); if (distSet != null) { distNameTextField.setValue(distSet.getName()); @@ -526,13 +532,13 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { } } - public Window getWindow() { + public CommonDialogWindow getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); populateRequiredComponents(); resetComponents(); addDistributionWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW); - addDistributionWindow.setContent(this); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), + event -> discardDistribution()); return addDistributionWindow; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 17e17f9bf..ea9a08ef5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -8,33 +8,26 @@ */ package org.eclipse.hawkbit.ui.management.dstag; -import java.util.ArrayList; +import static org.apache.commons.lang3.StringUtils.isNotEmpty; + import java.util.List; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; -import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.eclipse.hawkbit.ui.utils.UINotification; -import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; -import com.google.common.base.Strings; -import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.VaadinSessionScope; import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.OptionGroup; import com.vaadin.ui.UI; -import com.vaadin.ui.Window; -import com.vaadin.ui.themes.ValoTheme; /** * @@ -43,247 +36,12 @@ import com.vaadin.ui.themes.ValoTheme; @SpringComponent @VaadinSessionScope public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayout { + private static final long serialVersionUID = 444276149954167545L; - @Autowired - private transient UINotification uiNotification; - - private static final String MISSING_TAG_NAME = "message.error.missing.tagname"; private static final String TARGET_TAG_NAME_DYNAMIC_STYLE = "new-target-tag-name"; private static final String MSG_TEXTFIELD_NAME = "textfield.name"; - private Window distTagWindow; - - public Window getWindow() { - reset(); - distTagWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW); - distTagWindow.setContent(this); - return distTagWindow; - - } - - @Override - protected void populateTagNameCombo() { - tagNameComboBox.removeAllItems(); - final List distTagNameList = tagManagement.findAllDistributionSetTags(); - distTagNameList.forEach(value -> tagNameComboBox.addItem(value.getName())); - } - - /** - * Update DistributionTag. - */ - @Override - public void save(final ClickEvent event) { - if (mandatoryValuesPresent()) { - final DistributionSetTag existingDistTag = tagManagement.findDistributionSetTag(tagName.getValue()); - if (optiongroup.getValue().equals(createTagNw)) { - if (!checkIsDuplicate(existingDistTag)) { - crateNewTag(); - } - } else { - - updateTag(existingDistTag); - } - } - } - - /** - * Create new tag. - */ - private void crateNewTag() { - - final String colorPicked = getColorPickedSting(); - final String tagNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); - final String tagDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); - - if (null != tagNameValue) { - DistributionSetTag newDistTag = new DistributionSetTag(tagNameValue); - if (null != tagDescValue) { - newDistTag.setDescription(tagDescValue); - } - newDistTag.setColour(new Color(0, 146, 58).getCSS()); - if (colorPicked != null) { - newDistTag.setColour(colorPicked); - } - newDistTag = tagManagement.createDistributionSetTag(newDistTag); - uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { newDistTag.getName() })); - resetDistTagValues(); - - } else { - uiNotification.displayValidationError(i18n.get(MISSING_TAG_NAME)); - - } - - } - - /** - * update tag. - */ - private void updateTag(final DistributionSetTag distObj) { - final String nameUpdateValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); - final String descUpdateValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); - - if (null != nameUpdateValue) { - distObj.setName(nameUpdateValue); - distObj.setDescription(null != descUpdateValue ? descUpdateValue : null); - // update target tag with color selected - distObj.setColour(getColorPickedSting()); - tagManagement.updateDistributionSetTag(distObj); - uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { distObj.getName() })); - closeWindow(); - } else { - uiNotification.displayValidationError(i18n.get("message.tag.update.mandatory")); - } - - } - - private void closeWindow() { - distTagWindow.close(); - UI.getCurrent().removeWindow(distTagWindow); - } - - /** - * RESET. - * - * @param event - */ - @Override - public void discard(final ClickEvent event) { - distTagWindow.setVisible(false); - UI.getCurrent().removeWindow(distTagWindow); - resetDistTagValues(); - } - - /** - * Get color picked value in string. - * - * @return String of color picked value. - */ - private String getColorPickedSting() { - return "rgb(" + getSelPreview().getColor().getRed() + "," + getSelPreview().getColor().getGreen() + "," - + getSelPreview().getColor().getBlue() + ")"; - } - - /** - * Color view. - * - * @return ColorPickerPreview as UI - */ - public SpColorPickerPreview getSelPreview() { - return selPreview; - } - - /** - * RESET. - */ - private void resetDistTagValues() { - tagName.removeStyleName(TARGET_TAG_NAME_DYNAMIC_STYLE); - tagName.addStyleName(SPUIDefinitions.NEW_TARGET_TAG_NAME); - tagName.setValue(""); - tagName.setInputPrompt(i18n.get(MSG_TEXTFIELD_NAME)); - setColor(new Color(0, 146, 58)); - distTagWindow.setVisible(false); - tagPreviewBtnClicked = false; - UI.getCurrent().removeWindow(distTagWindow); - } - - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.management.CreateUpdateTagLayout#createOptionGroup - * () - */ - @Override - protected void createOptionGroup() { - final List optionValues = new ArrayList<>(); - if (permChecker.hasCreateDistributionPermission()) { - optionValues.add(createTag.getValue()); - } - if (permChecker.hasUpdateDistributionPermission()) { - optionValues.add(updateTag.getValue()); - } - - createOptionGroup(optionValues); - } - - private void createOptionGroup(final List tagOptions) { - optiongroup = new OptionGroup("", tagOptions); - optiongroup.setCaption(null); - optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); - optiongroup.addStyleName("custom-option-group"); - optiongroup.setNullSelectionAllowed(false); - if (!tagOptions.isEmpty()) { - optiongroup.select(tagOptions.get(0)); - } - } - - /** - * - * @return - */ - private Boolean mandatoryValuesPresent() { - if (Strings.isNullOrEmpty(tagName.getValue())) { - if (optiongroup.getValue().equals(createTagNw)) { - uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - if (optiongroup.getValue().equals(updateTagNw)) { - if (null == tagNameComboBox.getValue()) { - uiNotification.displayValidationError(i18n.get("message.error.missing.tagname")); - } else { - uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - } - return Boolean.FALSE; - } - return Boolean.TRUE; - } - - /** - * Select tag & set tag name & tag desc values corresponding to selected - * tag. - * - * @param targetTagSelected - * as the selected tag from combo - */ - @Override - public void setTagDetails(final String distTagSelected) { - tagName.setValue(distTagSelected); - final DistributionSetTag selectedDistTag = tagManagement.findDistributionSetTag(distTagSelected); - if (null != selectedDistTag) { - tagDesc.setValue(selectedDistTag.getDescription()); - if (null == selectedDistTag.getColour()) { - selectedColor = new Color(44, 151, 32); - selPreview.setColor(selectedColor); - colorSelect.setColor(selectedColor); - createDynamicStyleForComponents(tagName, tagDesc, DEFAULT_COLOR); - getPreviewButtonColor(DEFAULT_COLOR); - } else { - selectedColor = rgbToColorConverter(selectedDistTag.getColour()); - selPreview.setColor(selectedColor); - colorSelect.setColor(selectedColor); - createDynamicStyleForComponents(tagName, tagDesc, selectedDistTag.getColour()); - getPreviewButtonColor(selectedDistTag.getColour()); - } - } - } - - /** - * Checking Tag already existed or not. - * - * @param existingDistTag - * @return - */ - - private Boolean checkIsDuplicate(final DistributionSetTag existingDistTag) { - if (existingDistTag != null) { - uiNotification.displayValidationError( - i18n.get("message.tag.duplicate.check", new Object[] { existingDistTag.getName() })); - return Boolean.TRUE; - } - return Boolean.FALSE; - } - @EventBusListenerMethod(scope = EventScope.SESSION) // Exception squid:S1172 - event not needed @SuppressWarnings({ "squid:S1172" }) @@ -305,4 +63,104 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo populateTagNameCombo(); } + @Override + protected void populateTagNameCombo() { + tagNameComboBox.removeAllItems(); + final List distTagNameList = tagManagement.findAllDistributionSetTags(); + distTagNameList.forEach(value -> tagNameComboBox.addItem(value.getName())); + } + + /** + * Update DistributionTag. + */ + @Override + public void save(final ClickEvent event) { + if (mandatoryValuesPresent()) { + final DistributionSetTag existingDistTag = tagManagement.findDistributionSetTag(tagName.getValue()); + if (optiongroup.getValue().equals(createTagNw)) { + if (!checkIsDuplicate(existingDistTag)) { + crateNewTag(); + } + } else { + + updateExistingTag(existingDistTag); + } + } + } + + /** + * Create new tag. + */ + protected void crateNewTag() { + super.createNewTag(); + if (isNotEmpty(getTagNameValue())) { + DistributionSetTag newDistTag = new DistributionSetTag(getTagNameValue()); + if (isNotEmpty(getTagDescValue())) { + newDistTag.setDescription(getTagDescValue()); + } + newDistTag.setColour(ColorPickerConstants.START_COLOR.getCSS()); + if (isNotEmpty(getColorPicked())) { + newDistTag.setColour(getColorPicked()); + } + newDistTag = tagManagement.createDistributionSetTag(newDistTag); + displaySuccess(newDistTag.getName()); + resetDistTagValues(); + } else { + displayValidationError(i18n.get(SPUILabelDefinitions.MISSING_TAG_NAME)); + } + } + + /** + * RESET. + * + * @param event + */ + @Override + public void discard(final ClickEvent event) { + super.discard(event); + resetDistTagValues(); + } + + /** + * RESET. + */ + private void resetDistTagValues() { + tagName.removeStyleName(TARGET_TAG_NAME_DYNAMIC_STYLE); + tagName.addStyleName(SPUIDefinitions.NEW_TARGET_TAG_NAME); + tagName.setValue(""); + tagName.setInputPrompt(i18n.get(MSG_TEXTFIELD_NAME)); + setColor(ColorPickerConstants.START_COLOR); + getWindow().setVisible(false); + tagPreviewBtnClicked = false; + UI.getCurrent().removeWindow(getWindow()); + } + + /** + * Select tag & set tag name & tag desc values corresponding to selected + * tag. + * + * @param distTagSelected + * as the selected tag from combo + */ + @Override + public void setTagDetails(final String distTagSelected) { + tagName.setValue(distTagSelected); + final DistributionSetTag selectedDistTag = tagManagement.findDistributionSetTag(distTagSelected); + if (null != selectedDistTag) { + tagDesc.setValue(selectedDistTag.getDescription()); + if (null == selectedDistTag.getColour()) { + setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); + } else { + setTagColor(ColorPickerHelper.rgbToColorConverter(selectedDistTag.getColour()), + selectedDistTag.getColour()); + } + } + } + + @Override + protected void createRequiredComponents() { + super.createRequiredComponents(); + createOptionGroup(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission()); + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java index 46a24f5e1..0eb6508f0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java @@ -8,52 +8,53 @@ */ package org.eclipse.hawkbit.ui.management.tag; -import java.util.HashSet; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetTag; +import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.ui.UiProperties; -import org.eclipse.hawkbit.ui.common.CoordinatesToColor; -import org.eclipse.hawkbit.ui.common.PopupWindowHelp; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerLayout; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import org.eclipse.hawkbit.ui.utils.UINotification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; +import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; -import com.vaadin.server.FontAwesome; import com.vaadin.server.Page; import com.vaadin.shared.ui.colorpicker.Color; -import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.FormLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; -import com.vaadin.ui.Slider; -import com.vaadin.ui.Slider.ValueOutOfBoundsException; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; +import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.components.colorpicker.ColorChangeEvent; import com.vaadin.ui.components.colorpicker.ColorChangeListener; -import com.vaadin.ui.components.colorpicker.ColorPickerGradient; import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; @@ -63,14 +64,16 @@ import com.vaadin.ui.themes.ValoTheme; public abstract class CreateUpdateTagLayout extends CustomComponent implements ColorChangeListener, ColorSelector { private static final long serialVersionUID = 4229177824620576456L; private static final Logger LOG = LoggerFactory.getLogger(CreateUpdateTagLayout.class); - protected static final String DEFAULT_COLOR = "rgb(44,151,32)"; private static final String TAG_NAME_DYNAMIC_STYLE = "new-tag-name"; private static final String TAG_DESC_DYNAMIC_STYLE = "new-tag-desc"; private static final String TAG_DYNAMIC_STYLE = "tag-color-preview"; + protected static final String MESSAGE_ERROR_MISSING_TAGNAME = "message.error.missing.tagname"; protected String createTagNw; protected String updateTagNw; + protected CommonDialogWindow window; + @Autowired private transient UiProperties uiProperties; @@ -85,43 +88,38 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C @Autowired protected SpPermissionChecker permChecker; - /** - * Local Instance of ColorPickerPreview. - */ - protected SpColorPickerPreview selPreview; - protected Label createTag; - protected Label updateTag; + @Autowired + protected transient UINotification uiNotification; + + private final FormLayout formLayout = new FormLayout(); + private Label comboLabel; - private Label colorLabel; - private Label madatoryLabel; + protected Label colorLabel; + protected Label madatoryLabel; protected TextField tagName; protected TextArea tagDesc; - private Button saveTag; - private Button discardTag; - private Button tagColorPreviewBtn; - protected OptionGroup optiongroup; + protected Button tagColorPreviewBtn; + protected OptionGroup optiongroup = new OptionGroup(); protected ComboBox tagNameComboBox; - protected ColorPickerGradient colorSelect; - private Set selectors; - protected Color selectedColor; - - private Slider redSlider; - private Slider greenSlider; - private Slider blueSlider; - - private VerticalLayout comboLayout; - private VerticalLayout sliders; - private VerticalLayout colorPickerLayout; - private HorizontalLayout mainLayout; - private VerticalLayout fieldLayout; - - /** RGB color converter. */ - private final Coordinates2Color rgbConverter = new CoordinatesToColor(); + protected final VerticalLayout comboLayout = new VerticalLayout(); + private final ColorPickerLayout colorPickerLayout = new ColorPickerLayout(); + private final HorizontalLayout mainLayout = new HorizontalLayout(); + final VerticalLayout contentLayout = new VerticalLayout(); protected boolean tagPreviewBtnClicked = false; + private String colorPicked; + private String tagNameValue; + private String tagDescValue; + + protected void createWindow() { + reset(); + setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event))); + } + /** * Save new tag / update new tag. * @@ -134,12 +132,9 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C * * @param event */ - protected abstract void discard(final Button.ClickEvent event); - - /** - * create option group with Create tag/Update tag based on permissions. - */ - protected abstract void createOptionGroup(); + protected void discard(final Button.ClickEvent event) { + UI.getCurrent().removeWindow(window); + } /** * Populate target name combo. @@ -152,9 +147,11 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C * Init the layout. */ public void init() { + createRequiredComponents(); - addListeners(); buildLayout(); + createWindow(); + addListeners(); eventBus.subscribe(this); } @@ -163,11 +160,9 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C eventBus.unsubscribe(this); } - private void createRequiredComponents() { + protected void createRequiredComponents() { createTagNw = i18n.get("label.create.tag"); updateTagNw = i18n.get("label.update.tag"); - createTag = SPUIComponentProvider.getLabel(createTagNw, null); - updateTag = SPUIComponentProvider.getLabel(i18n.get("label.update.tag"), null); comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag"), null); madatoryLabel = getMandatoryLabel(); colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag.color"), null); @@ -178,103 +173,57 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); tagName.setId(SPUIDefinitions.NEW_TARGET_TAG_NAME); - tagDesc = SPUIComponentProvider.getTextArea(null, "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, - false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); + tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", + ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, false, "", i18n.get("textfield.description"), + SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); tagDesc.setId(SPUIDefinitions.NEW_TARGET_TAG_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); - tagNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.tag"), "", "", null, null, false, - "", i18n.get("label.combobox.tag")); + tagNameComboBox = SPUIComponentProvider.getComboBox(null, "", "", null, null, false, "", + i18n.get("label.combobox.tag")); tagNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); tagNameComboBox.setImmediate(true); - saveTag = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_TAG_SAVE, "", "", "", true, - FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); - saveTag.addStyleName(ValoTheme.BUTTON_BORDERLESS); - - discardTag = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_TAG_DISRACD, "", "", - "discard-button-style", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); - discardTag.addStyleName(ValoTheme.BUTTON_BORDERLESS); - tagColorPreviewBtn = new Button(); tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); - getPreviewButtonColor(DEFAULT_COLOR); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); - selectors = new HashSet<>(); - selectedColor = new Color(44, 151, 32); - selPreview = new SpColorPickerPreview(selectedColor); - - colorSelect = new ColorPickerGradient("rgb-gradient", rgbConverter); - colorSelect.setColor(selectedColor); - colorSelect.setWidth("220px"); - - redSlider = createRGBSlider("", "red"); - greenSlider = createRGBSlider("", "green"); - blueSlider = createRGBSlider("", "blue"); - setRgbSliderValues(selectedColor); - - createOptionGroup(); - + ColorPickerHelper.setRgbSliderValues(colorPickerLayout); } - private void buildLayout() { - comboLayout = new VerticalLayout(); - - sliders = new VerticalLayout(); - sliders.addComponents(redSlider, greenSlider, blueSlider); - - selectors.add(colorSelect); - - colorPickerLayout = new VerticalLayout(); - colorPickerLayout.setStyleName("rgb-vertical-layout"); - colorPickerLayout.addComponent(selPreview); - colorPickerLayout.addComponent(colorSelect); - - fieldLayout = new VerticalLayout(); - fieldLayout.setSpacing(false); - fieldLayout.setMargin(false); - fieldLayout.setWidth("100%"); - fieldLayout.setHeight(null); - fieldLayout.addComponent(optiongroup); - fieldLayout.addComponent(comboLayout); - fieldLayout.addComponent(madatoryLabel); - fieldLayout.addComponent(tagName); - fieldLayout.addComponent(tagDesc); + protected void buildLayout() { final HorizontalLayout colorLabelLayout = new HorizontalLayout(); + colorLabelLayout.setMargin(false); colorLabelLayout.addComponents(colorLabel, tagColorPreviewBtn); - fieldLayout.addComponent(colorLabelLayout); - final HorizontalLayout buttonLayout = new HorizontalLayout(); - buttonLayout.addComponent(saveTag); - buttonLayout.addComponent(discardTag); - buttonLayout.setComponentAlignment(discardTag, Alignment.BOTTOM_RIGHT); - buttonLayout.setComponentAlignment(saveTag, Alignment.BOTTOM_LEFT); - buttonLayout.addStyleName("window-style"); - buttonLayout.setWidth("152px"); + formLayout.addComponent(optiongroup); + formLayout.addComponent(comboLayout); + formLayout.addComponent(madatoryLabel); + formLayout.addComponent(tagName); + formLayout.addComponent(tagDesc); + formLayout.addStyleName("form-lastrow"); + formLayout.setSizeFull(); - final VerticalLayout fieldButtonLayout = new VerticalLayout(); - fieldButtonLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); - fieldButtonLayout.addComponent(fieldLayout); - fieldButtonLayout.addComponent(buttonLayout); - fieldButtonLayout.setComponentAlignment(buttonLayout, Alignment.BOTTOM_CENTER); + contentLayout.addComponent(formLayout); + contentLayout.addComponent(colorLabelLayout); + contentLayout.setComponentAlignment(formLayout, Alignment.MIDDLE_CENTER); + contentLayout.setComponentAlignment(colorLabelLayout, Alignment.MIDDLE_LEFT); + contentLayout.setSizeFull(); - mainLayout = new HorizontalLayout(); mainLayout.setSizeFull(); - mainLayout.addComponent(fieldButtonLayout); + mainLayout.addComponent(contentLayout); setCompositionRoot(mainLayout); tagName.focus(); } private void addListeners() { - saveTag.addClickListener(event -> save(event)); - discardTag.addClickListener(event -> discard(event)); - colorSelect.addColorChangeListener(this); - selPreview.addColorChangeListener(this); + colorPickerLayout.getColorSelect().addColorChangeListener(this); + colorPickerLayout.getSelPreview().addColorChangeListener(this); tagColorPreviewBtn.addClickListener(event -> previewButtonClicked()); optiongroup.addValueChangeListener(event -> optionValueChanged(event)); tagNameComboBox.addValueChangeListener(event -> tagNameChosen(event)); @@ -285,11 +234,11 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C * Open color picker on click of preview button. Auto select the color based * on target tag if already selected. */ - private void previewButtonClicked() { + protected void previewButtonClicked() { if (!tagPreviewBtnClicked) { setColor(); - selPreview.setColor(selectedColor); - fieldLayout.addComponent(sliders); + colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); + contentLayout.addComponent(colorPickerLayout.getSliders()); mainLayout.addComponent(colorPickerLayout); mainLayout.setComponentAlignment(colorPickerLayout, Alignment.BOTTOM_CENTER); } @@ -303,7 +252,8 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C } if (tagNameComboBox.getValue() == null) { - selectedColor = rgbToColorConverter(DEFAULT_COLOR); + colorPickerLayout + .setSelectedColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); return; } @@ -312,40 +262,18 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C if (targetTagSelected == null) { final DistributionSetTag distTag = tagManagement .findDistributionSetTag(tagNameComboBox.getValue().toString()); - selectedColor = distTag.getColour() != null ? rgbToColorConverter(distTag.getColour()) - : rgbToColorConverter(DEFAULT_COLOR); + colorPickerLayout.setSelectedColor( + distTag.getColour() != null ? ColorPickerHelper.rgbToColorConverter(distTag.getColour()) + : ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); } else { - selectedColor = targetTagSelected.getColour() != null ? rgbToColorConverter(targetTagSelected.getColour()) - : rgbToColorConverter(DEFAULT_COLOR); + colorPickerLayout.setSelectedColor(targetTagSelected.getColour() != null + ? ColorPickerHelper.rgbToColorConverter(targetTagSelected.getColour()) + : ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); } } - /** - * Covert RGB code to {@Color}. - * - * @param value - * RGB vale - * @return Color - */ - protected Color rgbToColorConverter(final String value) { - if (!value.startsWith("rgb")) { - return null; - } - // RGB color format rgb/rgba(255,255,255,0.1) - final String[] colors = value.substring(value.indexOf('(') + 1, value.length() - 1).split(","); - final int red = Integer.parseInt(colors[0]); - final int green = Integer.parseInt(colors[1]); - final int blue = Integer.parseInt(colors[2]); - if (colors.length > 3) { - final int alpha = (int) (Double.parseDouble(colors[3]) * 255d); - return new Color(red, green, blue, alpha); - } else { - return new Color(red, green, blue); - } - } - - private Label getMandatoryLabel() { + protected Label getMandatoryLabel() { final Label label = new Label(i18n.get("label.mandatory.field")); label.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); return label; @@ -366,12 +294,11 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C tagDesc.clear(); restoreComponentStyles(); - fieldLayout.removeComponent(sliders); + // fieldLayout.removeComponent(colorPickerLayout.getSliders()); mainLayout.removeComponent(colorPickerLayout); - selectedColor = new Color(44, 151, 32); - selPreview.setColor(selectedColor); + colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); + colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); tagPreviewBtnClicked = false; - } /** @@ -381,6 +308,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C * ValueChangeEvent */ private void optionValueChanged(final ValueChangeEvent event) { + if ("Update Tag".equals(event.getProperty().getValue())) { tagName.clear(); tagDesc.clear(); @@ -399,14 +327,14 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C } // close the color picker layout tagPreviewBtnClicked = false; - // reset the selected color - Set defualt color + // reset the selected color - Set default color restoreComponentStyles(); - getPreviewButtonColor(DEFAULT_COLOR); - selPreview.setColor(rgbToColorConverter(DEFAULT_COLOR)); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + colorPickerLayout.getSelPreview() + .setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); // remove the sliders and color picker layout - fieldLayout.removeComponent(sliders); + // fieldLayout.removeComponent(colorPickerLayout.getSliders()); mainLayout.removeComponent(colorPickerLayout); - } /** @@ -421,14 +349,14 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C // hide target name combo comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(tagNameComboBox); - fieldLayout.removeComponent(sliders); + contentLayout.removeComponent(colorPickerLayout.getSliders()); mainLayout.removeComponent(colorPickerLayout); optiongroup.select(createTagNw); // Default green color - selectedColor = new Color(44, 151, 32); - selPreview.setColor(selectedColor); + colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); + colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); tagPreviewBtnClicked = false; } @@ -439,12 +367,13 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C @Override public void colorChanged(final ColorChangeEvent event) { setColor(event.getColor()); - for (final ColorSelector select : selectors) { - if (!event.getSource().equals(select) && select.equals(this) && !select.getColor().equals(selectedColor)) { - select.setColor(selectedColor); + for (final ColorSelector select : colorPickerLayout.getSelectors()) { + if (!event.getSource().equals(select) && select.equals(this) + && !select.getColor().equals(colorPickerLayout.getSelectedColor())) { + select.setColor(colorPickerLayout.getSelectedColor()); } } - setRgbSliderValues(selectedColor); + ColorPickerHelper.setRgbSliderValues(colorPickerLayout); getPreviewButtonColor(event.getColor().getCSS()); createDynamicStyleForComponents(tagName, tagDesc, event.getColor().getCSS()); } @@ -461,28 +390,6 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C Page.getCurrent().getJavaScript().execute(HawkbitCommonUtil.getPreviewButtonColorScript(color)); } - private Slider createRGBSlider(final String caption, final String styleName) { - final Slider slider = new Slider(caption, 0, 255); - slider.setImmediate(true); - slider.setWidth("150px"); - slider.addStyleName(styleName); - return slider; - } - - private void setRgbSliderValues(final Color color) { - try { - final double redColorValue = color.getRed(); - redSlider.setValue(new Double(redColorValue)); - final double blueColorValue = color.getBlue(); - blueSlider.setValue(new Double(blueColorValue)); - final double greenColorValue = color.getGreen(); - greenSlider.setValue(new Double(greenColorValue)); - } catch (final ValueOutOfBoundsException e) { - LOG.error("Unable to set RGB color value to " + color.getRed() + "," + color.getGreen() + "," - + color.getBlue(), e); - } - } - /** * Set tag name and desc field border color based on chosen color. * @@ -507,7 +414,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C tagDesc.removeStyleName(TAG_DESC_DYNAMIC_STYLE); tagName.addStyleName(SPUIDefinitions.TAG_NAME); tagDesc.addStyleName(SPUIDefinitions.TAG_DESC); - getPreviewButtonColor(DEFAULT_COLOR); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); } /** @@ -531,56 +438,44 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C if (color == null) { return; } - selectedColor = color; - selPreview.setColor(selectedColor); - final String colorPickedPreview = selPreview.getColor().getCSS(); - if (tagName.isEnabled() && null != colorSelect) { + colorPickerLayout.setSelectedColor(color); + colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); + final String colorPickedPreview = colorPickerLayout.getSelPreview().getColor().getCSS(); + if (tagName.isEnabled() && null != colorPickerLayout.getColorSelect()) { createDynamicStyleForComponents(tagName, tagDesc, colorPickedPreview); - colorSelect.setColor(selPreview.getColor()); + colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor()); } } - /** - * Value change listeners implementations of sliders. - */ - private void slidersValueChangeListeners() { - redSlider.addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = -8336732888800920839L; - - @Override - public void valueChange(final ValueChangeEvent event) { - final double red = (Double) event.getProperty().getValue(); - final Color newColor = new Color((int) red, selectedColor.getGreen(), selectedColor.getBlue()); - setColorToComponents(newColor); - } - }); - greenSlider.addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = 1236358037766775663L; - - @Override - public void valueChange(final ValueChangeEvent event) { - final double green = (Double) event.getProperty().getValue(); - final Color newColor = new Color(selectedColor.getRed(), (int) green, selectedColor.getBlue()); - setColorToComponents(newColor); - } - }); - blueSlider.addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = 8466370763686043947L; - - @Override - public void valueChange(final ValueChangeEvent event) { - final double blue = (Double) event.getProperty().getValue(); - final Color newColor = new Color(selectedColor.getRed(), selectedColor.getGreen(), (int) blue); - setColorToComponents(newColor); - } - }); + protected void closeWindow() { + window.close(); + UI.getCurrent().removeWindow(window); } - private void setColorToComponents(final Color newColor) { - setColor(newColor); - colorSelect.setColor(newColor); - getPreviewButtonColor(newColor.getCSS()); - createDynamicStyleForComponents(tagName, tagDesc, newColor.getCSS()); + /** + * create option group with Create tag/Update tag based on permissions. + */ + protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePersmission) { + final List optionValues = new ArrayList<>(); + if (hasCreatePermission) { + optionValues.add(createTagNw); + } + if (hasUpdatePersmission) { + optionValues.add(updateTagNw); + } + createOptionGroup(optionValues); + } + + protected void createOptionGroup(final List tagOptions) { + optiongroup = new OptionGroup("", tagOptions); + optiongroup.setCaption("Select Action"); + optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); + optiongroup.addStyleName("custom-option-group"); + + optiongroup.setNullSelectionAllowed(false); + if (!tagOptions.isEmpty()) { + optiongroup.select(tagOptions.get(0)); + } } @Override @@ -591,4 +486,168 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C public void removeColorChangeListener(final ColorChangeListener listener) { } + public ColorPickerLayout getColorPickerLayout() { + return colorPickerLayout; + } + + public CommonDialogWindow getWindow() { + reset(); + return window; + } + + public void setWindow(final CommonDialogWindow window) { + this.window = window; + } + + /** + * Value change listeners implementations of sliders. + */ + private void slidersValueChangeListeners() { + colorPickerLayout.getRedSlider().addValueChangeListener(new ValueChangeListener() { + private static final long serialVersionUID = -8336732888800920839L; + + @Override + public void valueChange(final ValueChangeEvent event) { + final double red = (Double) event.getProperty().getValue(); + final Color newColor = new Color((int) red, colorPickerLayout.getSelectedColor().getGreen(), + colorPickerLayout.getSelectedColor().getBlue()); + setColorToComponents(newColor); + } + }); + colorPickerLayout.getGreenSlider().addValueChangeListener(new ValueChangeListener() { + private static final long serialVersionUID = 1236358037766775663L; + + @Override + public void valueChange(final ValueChangeEvent event) { + final double green = (Double) event.getProperty().getValue(); + final Color newColor = new Color(colorPickerLayout.getSelectedColor().getRed(), (int) green, + colorPickerLayout.getSelectedColor().getBlue()); + setColorToComponents(newColor); + } + }); + colorPickerLayout.getBlueSlider().addValueChangeListener(new ValueChangeListener() { + private static final long serialVersionUID = 8466370763686043947L; + + @Override + public void valueChange(final ValueChangeEvent event) { + final double blue = (Double) event.getProperty().getValue(); + final Color newColor = new Color(colorPickerLayout.getSelectedColor().getRed(), + colorPickerLayout.getSelectedColor().getGreen(), (int) blue); + setColorToComponents(newColor); + } + }); + } + + private void setColorToComponents(final Color newColor) { + setColor(newColor); + colorPickerLayout.getColorSelect().setColor(newColor); + getPreviewButtonColor(newColor.getCSS()); + createDynamicStyleForComponents(tagName, tagDesc, newColor.getCSS()); + } + + /** + * Create new tag. + */ + protected void createNewTag() { + colorPicked = ColorPickerHelper.getColorPickedString(colorPickerLayout.getSelPreview()); + tagNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); + tagDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); + } + + /** + * update tag. + */ + protected void updateExistingTag(final Tag targetObj) { + final String nameUpdateValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); + final String descUpdateValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); + + if (null != nameUpdateValue) { + targetObj.setName(nameUpdateValue); + targetObj.setDescription(null != descUpdateValue ? descUpdateValue : null); + targetObj.setColour(ColorPickerHelper.getColorPickedString(colorPickerLayout.getSelPreview())); + if (targetObj instanceof TargetTag) { + tagManagement.updateTargetTag((TargetTag) targetObj); + } else if (targetObj instanceof DistributionSetTag) { + tagManagement.updateDistributionSetTag((DistributionSetTag) targetObj); + } + uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { targetObj.getName() })); + closeWindow(); + } else { + uiNotification.displayValidationError(i18n.get("message.tag.update.mandatory")); + } + } + + protected void displaySuccess(final String tagName) { + uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { tagName })); + } + + protected void displayValidationError(final String errorMessage) { + uiNotification.displayValidationError(errorMessage); + } + + protected void setTagColor(final Color selectedColor, final String previewColor) { + getColorPickerLayout().setSelectedColor(selectedColor); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); + createDynamicStyleForComponents(tagName, tagDesc, previewColor); + getPreviewButtonColor(previewColor); + } + + /** + * + * @return + */ + protected Boolean mandatoryValuesPresent() { + if (Strings.isNullOrEmpty(tagName.getValue())) { + if (optiongroup.getValue().equals(createTagNw)) { + displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); + } + if (optiongroup.getValue().equals(updateTagNw)) { + if (null == tagNameComboBox.getValue()) { + displayValidationError(i18n.get(MESSAGE_ERROR_MISSING_TAGNAME)); + } else { + displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); + } + } + return Boolean.FALSE; + } + return Boolean.TRUE; + } + + protected Boolean checkIsDuplicate(final Tag existingTag) { + if (existingTag != null) { + displayValidationError(i18n.get("message.tag.duplicate.check", new Object[] { existingTag.getName() })); + return Boolean.TRUE; + } + return Boolean.FALSE; + } + + public String getColorPicked() { + return colorPicked; + } + + public void setColorPicked(final String colorPicked) { + this.colorPicked = colorPicked; + } + + public String getTagNameValue() { + return tagNameValue; + } + + public void setTagNameValue(final String tagNameValue) { + this.tagNameValue = tagNameValue; + } + + public String getTagDescValue() { + return tagDescValue; + } + + public void setTagDescValue(final String tagDescValue) { + this.tagDescValue = tagDescValue; + } + + public FormLayout getFormLayout() { + return formLayout; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 67db1181b..1fed8fe22 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -15,6 +15,7 @@ import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -37,9 +38,11 @@ import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.VaadinSessionScope; +import com.vaadin.ui.AbstractOrderedLayout; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.FormLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; @@ -79,12 +82,12 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private TextField nameTextField; private TextArea descTextArea; private Label madatoryLabel; - private Button saveTarget; - private Button discardTarget; +// private Button saveTarget; +// private Button discardTarget; private boolean editTarget = Boolean.FALSE; private String controllerId; private VerticalLayout mainLayout; - private Window addTargetWindow; + private CommonDialogWindow addTargetWindow; private String oldTargetName; private String oldTargetDesc; @@ -100,7 +103,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { /* register all listeners related to the Window */ addListeners(); setCompositionRoot(mainLayout); - } private void createRequiredComponents() { @@ -124,25 +126,26 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { madatoryLabel = new Label(i18n.get("label.mandatory.field")); madatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); - /* save or update button */ - saveTarget = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_SAVE, "", "", "", true, - FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); - saveTarget.addClickListener(event -> saveTargetListner()); +// /* save or update button */ +// saveTarget = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_SAVE, "", "", "", true, +// FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); +// saveTarget.addClickListener(event -> saveTargetListner()); - /* close button */ - discardTarget = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_DISCARD, "", "", "", true, - FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); - discardTarget.addClickListener(event -> discardTargetListner()); +// /* close button */ +// discardTarget = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_DISCARD, "", "", "", true, +// FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); +// discardTarget.addClickListener(event -> discardTargetListner()); } private void buildLayout() { /* action button layout (save & dicard) */ - final HorizontalLayout buttonsLayout = new HorizontalLayout(); - buttonsLayout.setSizeFull(); - buttonsLayout.addComponents(saveTarget, discardTarget); - buttonsLayout.setComponentAlignment(saveTarget, Alignment.BOTTOM_LEFT); - buttonsLayout.setComponentAlignment(discardTarget, Alignment.BOTTOM_RIGHT); - buttonsLayout.addStyleName("window-style"); +// final HorizontalLayout buttonsLayout = new HorizontalLayout(); +// buttonsLayout.setSizeFull(); +// buttonsLayout.addComponents(saveTarget, discardTarget); +// buttonsLayout.setComponentAlignment(saveTarget, Alignment.BOTTOM_LEFT); +// buttonsLayout.setComponentAlignment(discardTarget, Alignment.BOTTOM_RIGHT); +// buttonsLayout.addStyleName("window-style"); + /* * The main layout of the window contains mandatory info, textboxes * (controller Id, name & description) and action buttons layout @@ -151,13 +154,21 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { mainLayout.setSpacing(Boolean.TRUE); mainLayout.addStyleName("lay-color"); mainLayout.setSizeUndefined(); - mainLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); - mainLayout.addComponent(madatoryLabel); - mainLayout.setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); +// mainLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); +// mainLayout.addComponent(madatoryLabel); +// mainLayout.setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); + + FormLayout formLayout = new FormLayout(); + formLayout.addComponent(madatoryLabel); + formLayout.addComponent(controllerIDTextField); + formLayout.addComponent(nameTextField); + formLayout.addComponent(descTextArea); + mainLayout.addComponent(formLayout); + if (Boolean.TRUE.equals(editTarget)) { madatoryLabel.setVisible(Boolean.FALSE); } - mainLayout.addComponents(madatoryLabel, controllerIDTextField, nameTextField, descTextArea, buttonsLayout); +// mainLayout.addComponents(madatoryLabel, controllerIDTextField, nameTextField, descTextArea, buttonsLayout); nameTextField.focus(); } @@ -179,9 +190,9 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { @Override public void textChange(final TextChangeEvent event) { if (event.getText().equals(oldTargetName) && descTextArea.getValue().equals(oldTargetDesc)) { - saveTarget.setEnabled(false); + addTargetWindow.setSaveButtonEnabled(false); } else { - saveTarget.setEnabled(true); + addTargetWindow.setSaveButtonEnabled(true); } } @@ -200,14 +211,14 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { @Override public void textChange(final TextChangeEvent event) { if (event.getText().equals(oldTargetDesc) && nameTextField.getValue().equals(oldTargetName)) { - saveTarget.setEnabled(false); + addTargetWindow.setSaveButtonEnabled(false); } else { - saveTarget.setEnabled(true); + addTargetWindow.setSaveButtonEnabled(true); } } }); - } + } /** * Update the Target if modified. @@ -271,8 +282,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); addTargetWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW); - addTargetWindow.setContent(this); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(),event -> discardTargetListner()); return addTargetWindow; } @@ -335,7 +345,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { if (target.getDescription() != null) { descTextArea.setValue(target.getDescription()); } - saveTarget.setEnabled(Boolean.FALSE); + addTargetWindow.setSaveButtonEnabled(Boolean.FALSE); oldTargetDesc = descTextArea.getValue(); oldTargetName = nameTextField.getValue(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java index a098f61c3..e938f68f3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java @@ -19,7 +19,6 @@ import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.ui.UiProperties; -import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.dstable.DistributionBeanQuery; @@ -45,6 +44,7 @@ import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.combobox.FilteringMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; import com.vaadin.ui.CustomComponent; @@ -280,14 +280,12 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { final HorizontalLayout uploaderLayout = new HorizontalLayout(); uploaderLayout.addComponent(bulkUploader); - // uploaderLayout.addComponent(linkToSystemConfigHelp); - // uploaderLayout.setComponentAlignment(linkToSystemConfigHelp, - // Alignment.BOTTOM_RIGHT); - // uploaderLayout.setExpandRatio(bulkUploader, 1.0F); + uploaderLayout.addComponent(linkToSystemConfigHelp); + uploaderLayout.setComponentAlignment(linkToSystemConfigHelp, Alignment.BOTTOM_RIGHT); + uploaderLayout.setExpandRatio(bulkUploader, 1.0F); uploaderLayout.setSizeFull(); - mainLayout.addComponents(captionLayout, - new PopupWindowHelp(uiproperties.getLinks().getDocumentation().getDeploymentView()), dsNamecomboBox, - descTextArea, tokenVerticalLayout, descTextArea, progressBar, targetsCountLabel, uploaderLayout); + mainLayout.addComponents(captionLayout, dsNamecomboBox, descTextArea, tokenVerticalLayout, descTextArea, + progressBar, targetsCountLabel, uploaderLayout); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java deleted file mode 100644 index f3e29f5af..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java +++ /dev/null @@ -1,268 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.management.targettag; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; -import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; -import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.eclipse.hawkbit.ui.utils.UINotification; -import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventScope; -import org.vaadin.spring.events.annotation.EventBusListenerMethod; - -import com.google.common.base.Strings; -import com.vaadin.shared.ui.colorpicker.Color; -import com.vaadin.spring.annotation.SpringComponent; -import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.OptionGroup; -import com.vaadin.ui.UI; -import com.vaadin.ui.Window; -import com.vaadin.ui.themes.ValoTheme; - -/** - * - * - */ -@SpringComponent -@ViewScope -public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { - - private static final long serialVersionUID = 2446682350481560235L; - - @Autowired - private transient UINotification uiNotification; - - private Window targetTagWindow; - - @Override - protected void createOptionGroup() { - final List optionValues = new ArrayList<>(); - if (permChecker.hasCreateTargetPermission()) { - optionValues.add(createTag.getValue()); - } - if (permChecker.hasUpdateTargetPermission()) { - optionValues.add(updateTag.getValue()); - } - - createOptionGroup(optionValues); - } - - private void createOptionGroup(final List tagOptions) { - optiongroup = new OptionGroup("", tagOptions); - optiongroup.setCaption(null); - optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); - optiongroup.addStyleName("custom-option-group"); - - optiongroup.setNullSelectionAllowed(false); - if (!tagOptions.isEmpty()) { - optiongroup.select(tagOptions.get(0)); - } - } - - public Window getWindow() { - reset(); - targetTagWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW); - targetTagWindow.setContent(this); - return targetTagWindow; - - } - - @EventBusListenerMethod(scope = EventScope.SESSION) - // Exception squid:S1172 - event not needed - @SuppressWarnings({ "squid:S1172" }) - void onEventTargetTagCreated(final TargetTagCreatedBulkEvent event) { - populateTagNameCombo(); - } - - @EventBusListenerMethod(scope = EventScope.SESSION) - // Exception squid:S1172 - event not needed - @SuppressWarnings({ "squid:S1172" }) - void onEventTargetDeletedEvent(final TargetTagDeletedEvent event) { - populateTagNameCombo(); - } - - @EventBusListenerMethod(scope = EventScope.SESSION) - // Exception squid:S1172 - event not needed - @SuppressWarnings({ "squid:S1172" }) - void onEventTargetTagUpdateEvent(final TargetTagUpdateEvent event) { - populateTagNameCombo(); - } - - /** - * Populate target name combo. - */ - @Override - public void populateTagNameCombo() { - tagNameComboBox.removeAllItems(); - final List trgTagNameList = tagManagement.findAllTargetTags(); - trgTagNameList.forEach(value -> tagNameComboBox.addItem(value.getName())); - } - - /** - * Select tag & set tag name & tag desc values corresponding to selected - * tag. - * - * @param targetTagSelected - * as the selected tag from combo - */ - @Override - public void setTagDetails(final String targetTagSelected) { - tagName.setValue(targetTagSelected); - final TargetTag selectedTargetTag = tagManagement.findTargetTag(targetTagSelected); - if (null != selectedTargetTag) { - tagDesc.setValue(selectedTargetTag.getDescription()); - if (null == selectedTargetTag.getColour()) { - selectedColor = new Color(44, 151, 32); - selPreview.setColor(selectedColor); - colorSelect.setColor(selectedColor); - createDynamicStyleForComponents(tagName, tagDesc, DEFAULT_COLOR); - getPreviewButtonColor(DEFAULT_COLOR); - } else { - selectedColor = rgbToColorConverter(selectedTargetTag.getColour()); - selPreview.setColor(selectedColor); - colorSelect.setColor(selectedColor); - createDynamicStyleForComponents(tagName, tagDesc, selectedTargetTag.getColour()); - getPreviewButtonColor(selectedTargetTag.getColour()); - } - } - } - - @Override - public void save(final ClickEvent event) { - if (mandatoryValuesPresent()) { - final TargetTag existingTag = tagManagement.findTargetTag(tagName.getValue()); - if (optiongroup.getValue().equals(createTagNw)) { - if (!checkIsDuplicate(existingTag)) { - createNewTag(); - } - } else { - - updateTag(existingTag); - } - } - } - - private Boolean checkIsDuplicate(final TargetTag existingTag) { - if (existingTag != null) { - uiNotification.displayValidationError( - i18n.get("message.tag.duplicate.check", new Object[] { existingTag.getName() })); - return Boolean.TRUE; - } - return Boolean.FALSE; - } - - private Boolean mandatoryValuesPresent() { - if (Strings.isNullOrEmpty(tagName.getValue())) { - if (optiongroup.getValue().equals(createTagNw)) { - uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - if (optiongroup.getValue().equals(updateTagNw)) { - if (null == tagNameComboBox.getValue()) { - uiNotification.displayValidationError(i18n.get("message.error.missing.tagname")); - } else { - uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - } - return Boolean.FALSE; - } - return Boolean.TRUE; - } - - /** - * Create new tag. - */ - private void createNewTag() { - final String colorPicked = getColorPickedString(); - final String tagNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); - final String tagDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); - if (null != tagNameValue) { - TargetTag newTargetTag = new TargetTag(tagNameValue); - if (null != tagDescValue) { - newTargetTag.setDescription(tagDescValue); - } - newTargetTag.setColour(new Color(0, 146, 58).getCSS()); - if (colorPicked != null) { - newTargetTag.setColour(colorPicked); - } - newTargetTag = tagManagement.createTargetTag(newTargetTag); - uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { newTargetTag.getName() })); - closeWindow(); - } else { - uiNotification.displayValidationError(i18n.get("message.error.missing.tagname")); - - } - } - - /** - * update tag. - */ - private void updateTag(final TargetTag targetObj) { - final String nameUpdateValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); - final String descUpdateValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); - - if (null != nameUpdateValue) { - targetObj.setName(nameUpdateValue); - targetObj.setDescription(null != descUpdateValue ? descUpdateValue : null); - targetObj.setColour(getColorPickedString()); - tagManagement.updateTargetTag(targetObj); - uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { targetObj.getName() })); - closeWindow(); - } else { - uiNotification.displayValidationError(i18n.get("message.tag.update.mandatory")); - } - - } - - private void closeWindow() { - targetTagWindow.close(); - UI.getCurrent().removeWindow(targetTagWindow); - } - - /** - * remove target tab window. - * - * @param event - */ - @Override - public void discard(final ClickEvent event) { - UI.getCurrent().removeWindow(targetTagWindow); - } - - /** - * Get color picked value in string. - * - * @return String of color picked value. - */ - private String getColorPickedString() { - return "rgb(" + getSelPreview().getColor().getRed() + "," + getSelPreview().getColor().getGreen() + "," - + getSelPreview().getColor().getBlue() + ")"; - } - - /** - * Color view. - * - * @return ColorPickerPreview as UI - */ - public SpColorPickerPreview getSelPreview() { - return selPreview; - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java new file mode 100644 index 000000000..1c664fe13 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java @@ -0,0 +1,135 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.management.targettag; + +import static org.apache.commons.lang3.StringUtils.isNotEmpty; + +import java.util.List; + +import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; +import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; +import org.eclipse.hawkbit.repository.model.TargetTag; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; +import org.vaadin.spring.events.EventScope; +import org.vaadin.spring.events.annotation.EventBusListenerMethod; + +import com.vaadin.spring.annotation.SpringComponent; +import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.Button.ClickEvent; + +/** + * + * + */ +@SpringComponent +@ViewScope +public class CreateUpdateTargetTagLayoutWindow extends CreateUpdateTagLayout { + + private static final long serialVersionUID = 2446682350481560235L; + + @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) + void onEventTargetTagCreated(final TargetTagCreatedBulkEvent event) { + populateTagNameCombo(); + } + + @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) + void onEventTargetDeletedEvent(final TargetTagDeletedEvent event) { + populateTagNameCombo(); + } + + @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) + void onEventTargetTagUpdateEvent(final TargetTagUpdateEvent event) { + populateTagNameCombo(); + } + + /** + * Populate target name combo. + */ + @Override + public void populateTagNameCombo() { + tagNameComboBox.removeAllItems(); + final List trgTagNameList = tagManagement.findAllTargetTags(); + trgTagNameList.forEach(value -> tagNameComboBox.addItem(value.getName())); + } + + /** + * Select tag & set tag name & tag desc values corresponding to selected + * tag. + * + * @param targetTagSelected + * as the selected tag from combo + */ + @Override + public void setTagDetails(final String targetTagSelected) { + tagName.setValue(targetTagSelected); + final TargetTag selectedTargetTag = tagManagement.findTargetTag(targetTagSelected); + if (null != selectedTargetTag) { + tagDesc.setValue(selectedTargetTag.getDescription()); + if (null == selectedTargetTag.getColour()) { + setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); + } else { + setTagColor(ColorPickerHelper.rgbToColorConverter(selectedTargetTag.getColour()), + selectedTargetTag.getColour()); + } + } + } + + @Override + public void save(final ClickEvent event) { + if (mandatoryValuesPresent()) { + final TargetTag existingTag = tagManagement.findTargetTag(tagName.getValue()); + if (optiongroup.getValue().equals(createTagNw)) { + if (!checkIsDuplicate(existingTag)) { + createNewTag(); + } + } else { + updateExistingTag(existingTag); + } + } + } + + /** + * Create new tag. + */ + @Override + protected void createNewTag() { + super.createNewTag(); + if (isNotEmpty(getTagNameValue())) { + TargetTag newTargetTag = new TargetTag(getTagNameValue()); + if (isNotEmpty(getTagDescValue())) { + newTargetTag.setDescription(getTagDescValue()); + } + newTargetTag.setColour(ColorPickerConstants.START_COLOR.getCSS()); + if (isNotEmpty(getColorPicked())) { + newTargetTag.setColour(getColorPicked()); + } + newTargetTag = tagManagement.createTargetTag(newTargetTag); + displaySuccess(newTargetTag.getName()); + closeWindow(); + } else { + displayValidationError(i18n.get(MESSAGE_ERROR_MISSING_TAGNAME)); + } + } + + @Override + protected void createRequiredComponents() { + super.createRequiredComponents(); + createOptionGroup(permChecker.hasCreateTargetPermission(), permChecker.hasUpdateTargetPermission()); + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java index c4393e3aa..6e4c73a92 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java @@ -62,7 +62,7 @@ public class MultipleTargetFilter extends Accordion implements SelectedTabChange private CustomTargetTagFilterButtonClick customTargetTagFilterButtonClick; @Autowired - private CreateUpdateTargetTagLayout createUpdateTargetTagLayout; + private CreateUpdateTargetTagLayoutWindow createUpdateTargetTagLayout; @Autowired private SpPermissionChecker permChecker; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java index 6093843fd..e99677b1c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java @@ -34,7 +34,7 @@ public class TargetTagFilterHeader extends AbstractFilterHeader { private I18N i18n; @Autowired - private CreateUpdateTargetTagLayout createUpdateTargetTagLayout; + private CreateUpdateTargetTagLayoutWindow createUpdateTargetTagLayout; @Autowired private ManagementUIState managementUIState; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 893595f53..90a04ba2a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -27,7 +27,6 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondit import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.ui.UiProperties; -import org.eclipse.hawkbit.ui.common.CommonDialog; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery; @@ -61,7 +60,7 @@ import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; -import com.vaadin.ui.FormLayout; +import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Link; @@ -80,7 +79,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class AddUpdateRolloutWindowLayout extends CommonDialog { +public class AddUpdateRolloutWindowLayout extends CustomComponent { private static final long serialVersionUID = 2999293468801479916L; @@ -152,23 +151,12 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { private TextArea targetFilterQuery; - public AddUpdateRolloutWindowLayout() { - super(); - } - - public AddUpdateRolloutWindowLayout(final String title, final FormLayout form, final String helpLink) { - super(title, form, helpLink); - } - /** * Create components and layout. */ public void init() { - // createRequiredComponents(); - // buildLayout(); - setCaption(i18n.get("caption.configure.rollout")); - initForm(); - resetFields(); + createRequiredComponents(); + buildLayout(); } public Window getWindow() { @@ -219,38 +207,26 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { mainLayout.addComponents(madatoryLabel, rolloutName, distributionSet, getTargetFilterLayout(), getGroupDetailsLayout(), getTriggerThresoldLayout(), getErrorThresholdLayout(), description, actionTypeOptionGroupLayout, linkToHelp, getSaveDiscardButtonLayout()); - - mainLayout.addComponent(new Label("TEST TEST TEST")); mainLayout.setComponentAlignment(linkToHelp, Alignment.BOTTOM_RIGHT); -<<<<<<< HEAD -======= setCompositionRoot(mainLayout); ->>>>>>> refs/heads/master rolloutName.focus(); } private HorizontalLayout getGroupDetailsLayout() { - createGroupSizeLabel(); - createNoOfGroupsField(); final HorizontalLayout groupLayout = new HorizontalLayout(); groupLayout.setCaption(i18n.get("prompt.number.of.groups")); groupLayout.setSizeFull(); groupLayout.addComponents(noOfGroups, groupSizeLabel); - groupLayout.setExpandRatio(noOfGroups, 3.0F); - groupLayout.setExpandRatio(groupSizeLabel, 1.0F); + groupLayout.setExpandRatio(noOfGroups, 1.0F); groupLayout.setComponentAlignment(groupSizeLabel, Alignment.MIDDLE_LEFT); return groupLayout; } private HorizontalLayout getErrorThresholdLayout() { - createErrorThreshold(); - createErrorThresholdOptionGroup(); final HorizontalLayout errorThresoldLayout = new HorizontalLayout(); errorThresoldLayout.setSizeFull(); errorThresoldLayout.addComponents(errorThreshold, errorThresholdOptionGroup); - errorThresoldLayout.setExpandRatio(errorThreshold, 3.0F); - errorThresoldLayout.setExpandRatio(errorThresholdOptionGroup, 1.0F); - errorThresoldLayout.setCaption(i18n.get("prompt.error.threshold")); + errorThresoldLayout.setExpandRatio(errorThreshold, 1.0F); return errorThresoldLayout; } @@ -266,22 +242,18 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } private HorizontalLayout getTriggerThresoldLayout() { - createTriggerThresold(); final HorizontalLayout triggerThresholdLayout = new HorizontalLayout(); triggerThresholdLayout.setCaption(i18n.get("prompt.tigger.thresold")); triggerThresholdLayout.setSizeFull(); - final Label percentSymbol = getPercentHintLabel(); - triggerThresholdLayout.addComponents(triggerThreshold, percentSymbol); + triggerThresholdLayout.addComponents(triggerThreshold, getPercentHintLabel()); triggerThresholdLayout.setExpandRatio(triggerThreshold, 1.0F); - triggerThresholdLayout.setExpandRatio(percentSymbol, 5.0F); - return triggerThresholdLayout; } private Label getPercentHintLabel() { final Label percentSymbol = new Label("%"); percentSymbol.addStyleName(ValoTheme.LABEL_TINY + " " + ValoTheme.LABEL_BOLD); - percentSymbol.setSizeFull(); + percentSymbol.setSizeUndefined(); return percentSymbol; } @@ -295,24 +267,6 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { return buttonsLayout; } - private void initForm() { - - getFormLayout().addComponent(createRolloutNameField()); - getFormLayout().addComponent(createDistributionSetCombo()); - populateDistributionSet(); - getFormLayout().addComponent(createTargetFilterQueryCombo()); - populateTargetFilterQuery(); - getFormLayout().addComponent(getGroupDetailsLayout()); - getFormLayout().addComponent(getTriggerThresoldLayout()); - getFormLayout().addComponent(getErrorThresholdLayout()); - getFormLayout().addComponent(createDescription()); - getFormLayout().addComponent(actionTypeOptionGroupLayout); - actionTypeOptionGroupLayout.selectDefaultOption(); - - // getFormLayout().addComponent(createTotalTargetsLabel()); - // getFormLayout().addComponent(createTargetFilterQuery()); - } - private void createRequiredComponents() { madatoryLabel = createMandatoryLabel(); rolloutName = createRolloutNameField(); @@ -322,12 +276,12 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { targetFilterQueryCombo = createTargetFilterQueryCombo(); populateTargetFilterQuery(); - // noOfGroups = createNoOfGroupsField(); - // groupSizeLabel = createGroupSizeLabel(); - // triggerThreshold = createTriggerThresold(); - // errorThreshold = createErrorThresold(); - // description = createDescription(); - // errorThresholdOptionGroup = createErrorThresholdOptionGroup(); + noOfGroups = createNoOfGroupsField(); + groupSizeLabel = createGroupSizeLabel(); + triggerThreshold = createTriggerThresold(); + errorThreshold = createErrorThresold(); + description = createDescription(); + errorThresholdOptionGroup = createErrorThresholdOptionGroup(); setDefaultSaveStartGroupOption(); saveRolloutBtn = createSaveButton(); discardRollloutBtn = createDiscardButton(); @@ -341,12 +295,13 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } - private void createGroupSizeLabel() { - groupSizeLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); - groupSizeLabel.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); - groupSizeLabel.setImmediate(true); - groupSizeLabel.setVisible(false); - groupSizeLabel.setSizeUndefined(); + private Label createGroupSizeLabel() { + final Label groupSize = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + groupSize.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); + groupSize.setImmediate(true); + groupSize.setVisible(false); + groupSize.setSizeUndefined(); + return groupSize; } private TextArea createTargetFilterQuery() { @@ -370,17 +325,17 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { return targetCountLabel; } - private void createErrorThresholdOptionGroup() { - errorThresholdOptionGroup = new OptionGroup(); + private OptionGroup createErrorThresholdOptionGroup() { + final OptionGroup errorThresoldOptions = new OptionGroup(); for (final ERRORTHRESOLDOPTIONS option : ERRORTHRESOLDOPTIONS.values()) { - errorThresholdOptionGroup.addItem(option.getValue()); + errorThresoldOptions.addItem(option.getValue()); } - errorThresholdOptionGroup.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_OPTION_ID); - errorThresholdOptionGroup.addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL); - errorThresholdOptionGroup.addStyleName(SPUIStyleDefinitions.ROLLOUT_OPTION_GROUP); - errorThresholdOptionGroup.setSizeUndefined(); - errorThresholdOptionGroup.addValueChangeListener(event -> onErrorThresoldOptionChange(event)); - setDefaultSaveStartGroupOption(); + errorThresoldOptions.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_OPTION_ID); + errorThresoldOptions.addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL); + errorThresoldOptions.addStyleName(SPUIStyleDefinitions.ROLLOUT_OPTION_GROUP); + errorThresoldOptions.setSizeUndefined(); + errorThresoldOptions.addValueChangeListener(event -> onErrorThresoldOptionChange(event)); + return errorThresoldOptions; } private void onErrorThresoldOptionChange(final ValueChangeEvent event) { @@ -395,15 +350,15 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } private ComboBox createTargetFilterQueryCombo() { - targetFilterQueryCombo = SPUIComponentProvider.getComboBox(i18n.get("prompt.target.filter"), "", "", null, null, - true, "", i18n.get("prompt.target.filter")); - targetFilterQueryCombo.setImmediate(true); - targetFilterQueryCombo.setPageLength(7); - targetFilterQueryCombo.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); - targetFilterQueryCombo.setId(SPUIComponetIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID); - targetFilterQueryCombo.setSizeFull(); - targetFilterQueryCombo.addValueChangeListener(event -> onTargetFilterChange()); - return targetFilterQueryCombo; + final ComboBox targetFilter = SPUIComponentProvider.getComboBox(null, "", "", null, null, true, "", + i18n.get("prompt.target.filter")); + targetFilter.setImmediate(true); + targetFilter.setPageLength(7); + targetFilter.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); + targetFilter.setId(SPUIComponetIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID); + targetFilter.setSizeFull(); + targetFilter.addValueChangeListener(event -> onTargetFilterChange()); + return targetFilter; } private void onTargetFilterChange() { @@ -634,41 +589,47 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } private TextArea createDescription() { - description = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", - ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), + final TextArea descriptionField = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), + "text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - description.setId(SPUIComponetIdProvider.ROLLOUT_DESCRIPTION_ID); - description.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); - description.setSizeFull(); - return description; + descriptionField.setId(SPUIComponetIdProvider.ROLLOUT_DESCRIPTION_ID); + descriptionField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); + descriptionField.setSizeFull(); + return descriptionField; } - private void createErrorThreshold() { - errorThreshold = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, - i18n.get("prompt.error.threshold"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - errorThreshold.addValidator(new ThresholdFieldValidator()); - errorThreshold.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_ID); - errorThreshold.setMaxLength(7); - errorThreshold.setSizeFull(); + private TextField createErrorThresold() { + final TextField errorField = SPUIComponentProvider.getTextField(i18n.get("prompt.error.threshold"), "", + ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.error.threshold"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + errorField.addValidator(new ThresholdFieldValidator()); + errorField.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_ID); + errorField.setMaxLength(7); + errorField.setSizeFull(); + return errorField; } - private void createTriggerThresold() { - triggerThreshold = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, - i18n.get("prompt.tigger.thresold"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - triggerThreshold.setId(SPUIComponetIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); - triggerThreshold.addValidator(new ThresholdFieldValidator()); - triggerThreshold.setSizeFull(); - triggerThreshold.setMaxLength(3); + private TextField createTriggerThresold() { + final TextField thresholdField = SPUIComponentProvider.getTextField(i18n.get("prompt.tigger.thresold"), "", + ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.tigger.thresold"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + thresholdField.setId(SPUIComponetIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); + thresholdField.addValidator(new ThresholdFieldValidator()); + thresholdField.setSizeFull(); + thresholdField.setMaxLength(3); + return thresholdField; } - private void createNoOfGroupsField() { - noOfGroups = SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, - i18n.get("prompt.number.of.groups"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - noOfGroups.setId(SPUIComponetIdProvider.ROLLOUT_NO_OF_GROUPS_ID); - noOfGroups.addValidator(new GroupNumberValidator()); - noOfGroups.setSizeFull(); - noOfGroups.setMaxLength(3); - noOfGroups.addValueChangeListener(evevt -> onGroupNumberChange()); + private TextField createNoOfGroupsField() { + final TextField noOfGroupsField = SPUIComponentProvider.getTextField(i18n.get("prompt.number.of.groups"), "", + ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.number.of.groups"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + noOfGroupsField.setId(SPUIComponetIdProvider.ROLLOUT_NO_OF_GROUPS_ID); + noOfGroupsField.addValidator(new GroupNumberValidator()); + noOfGroupsField.setSizeFull(); + noOfGroupsField.setMaxLength(3); + noOfGroupsField.addValueChangeListener(evevt -> onGroupNumberChange()); + return noOfGroupsField; } private void onGroupNumberChange() { @@ -681,14 +642,14 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } private ComboBox createDistributionSetCombo() { - distributionSet = SPUIComponentProvider.getComboBox(i18n.get("prompt.distribution.set"), "", "", null, null, - true, "", i18n.get("prompt.distribution.set")); - distributionSet.setImmediate(true); - distributionSet.setPageLength(7); - distributionSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); - distributionSet.setId(SPUIComponetIdProvider.ROLLOUT_DS_ID); - distributionSet.setSizeFull(); - return distributionSet; + final ComboBox dsSet = SPUIComponentProvider.getComboBox(i18n.get("prompt.distribution.set"), "", "", null, + null, true, "", i18n.get("prompt.distribution.set")); + dsSet.setImmediate(true); + dsSet.setPageLength(7); + dsSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); + dsSet.setId(SPUIComponetIdProvider.ROLLOUT_DS_ID); + dsSet.setSizeFull(); + return dsSet; } private void populateDistributionSet() { @@ -706,12 +667,12 @@ public class AddUpdateRolloutWindowLayout extends CommonDialog { } private TextField createRolloutNameField() { - rolloutName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, true, - null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - rolloutName.setId(SPUIComponetIdProvider.ROLLOUT_NAME_FIELD_ID); - rolloutName.setSizeFull(); - - return rolloutName; + final TextField rolloutNameField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", + ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + rolloutNameField.setId(SPUIComponetIdProvider.ROLLOUT_NAME_FIELD_ID); + rolloutNameField.setSizeFull(); + return rolloutNameField; } private Label createMandatoryLabel() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 29be2c8c2..a63dd37e8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -96,8 +96,8 @@ public class RolloutListGrid extends AbstractGrid { @Autowired private transient RolloutManagement rolloutManagement; - @Autowired - private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; + // @Autowired + private final AddUpdateRolloutWindowLayout addUpdateRolloutWindow = new AddUpdateRolloutWindowLayout(); @Autowired private UINotification uiNotification; @@ -110,7 +110,6 @@ public class RolloutListGrid extends AbstractGrid { private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); - /** * Handles the RolloutEvent to refresh Grid. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index dd19c72a8..f4d2a325f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -15,6 +15,7 @@ import org.eclipse.hawkbit.ui.common.grid.AbstractGridHeader; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; +import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -27,6 +28,7 @@ import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.UI; +import com.vaadin.ui.Window; /** * @@ -47,6 +49,9 @@ public class RolloutListHeader extends AbstractGridHeader { @Autowired private transient EventBus.SessionEventBus eventBus; + @Autowired + private I18N i18n; + @Autowired private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; @@ -54,6 +59,7 @@ public class RolloutListHeader extends AbstractGridHeader { @PostConstruct protected void init() { super.init(); + addUpdateRolloutWindow.init(); } @Override @@ -89,11 +95,11 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected void addNewItem(final ClickEvent event) { - addUpdateRolloutWindow.init(); addUpdateRolloutWindow.resetComponents(); - addUpdateRolloutWindow.init(); - UI.getCurrent().addWindow(addUpdateRolloutWindow); - addUpdateRolloutWindow.setVisible(Boolean.TRUE); + final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); + UI.getCurrent().addWindow(addTargetWindow); + addTargetWindow.setVisible(Boolean.TRUE); + } @Override diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss index beb405c30..ba02cfbda 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss @@ -288,4 +288,13 @@ font-style:normal; font-weight:normal; } + + .hawkbit [class*="margin-bottom"] > tbody > [class*="lastrow"] > td { + padding-bottom: 12px !important; + } + + .form-lastrow { + padding-bottom: 12px !important; + } + } diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss index 94073eada..7b4bfe0d1 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss @@ -11,8 +11,8 @@ //Color picker layout position adjustment .rgb-vertical-layout { - margin-top: 100px !important; - padding-bottom: 50px; + // margin-top: 100px !important; + padding-bottom: 12px; } //Discard icon in create/update popup diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss index 3242b5907..ad5556f08 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-content.scss @@ -133,6 +133,7 @@ //Create/update popup footer button layout style .window-style { margin-bottom: 4px !important; + margin-top: 4px !important; } //Table details style From f02485129e4223c4845cbea388c2d765471f3969 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 15:24:28 +0200 Subject: [PATCH 116/371] Extend migration guide Signed-off-by: SirWayne --- MIGRATION.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MIGRATION.md b/MIGRATION.md index 8db1ee57c..f9d9fff51 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -11,3 +11,10 @@ ### REST API model changes for clients - ENTITYPagedList classes have been removed; generic PagedList used instead (e.g. PagedList instead of TargetPagedList). - ENTITYsrest classes have been removed; List used instead (e.g. List instead of TargetsRest) + +### Renamed api annotations +- Annotation `org.eclipse.hawkbit.rest.resource.EnableRestResources` have changed to `org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi` +- Annotation `org.eclipse.hawkbit.ddi.resource.EnableDirectDeviceApi` have changed to `org.eclipse.hawkbit.ddi.annotation.EnableDdiApi` + +### Renamed maven modules +- Module hawkbit-mgmt-api-client have changed to hawkbit-example-mgmt-simulator \ No newline at end of file From 27721c7cf803a82559fb0ec90716d96a0b18cb98 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 15:39:47 +0200 Subject: [PATCH 117/371] Move Ddi client Signed-off-by: SirWayne --- .../hawkbit-example-ddi-feign-client/pom.xml | 35 +-- .../hawkbit/ddi/client/DdiDecoder.java | 54 ---- .../ddi/client/DdiDefaultFeignClient.java | 94 ------- .../hawkbit/ddi/client/DdiExampleClient.java | 232 ------------------ .../AuthenticationInterceptor.java | 19 -- .../AuthenticationInterceptorFactory.java | 34 --- ...ecurityTokenAuthenticationInterceptor.java | 35 --- .../RootControllerResourceClient.java | 3 +- ...RootControllerResourceClientConstants.java | 26 -- .../ArtifactsPersistenceStrategy.java | 31 --- .../client/strategy/DoNotSaveArtifacts.java | 28 --- .../SaveArtifactsToLocalTempDirectories.java | 34 --- 12 files changed, 10 insertions(+), 615 deletions(-) delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java delete mode 100644 examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java diff --git a/examples/hawkbit-example-ddi-feign-client/pom.xml b/examples/hawkbit-example-ddi-feign-client/pom.xml index 3450231cd..8256b5b30 100644 --- a/examples/hawkbit-example-ddi-feign-client/pom.xml +++ b/examples/hawkbit-example-ddi-feign-client/pom.xml @@ -38,51 +38,32 @@ hawkbit-example-core-feign-client ${project.version} - - org.eclipse.hawkbit - hawkbit-ddi-api - ${project.version} - org.eclipse.hawkbit hawkbit-ddi-dl-api ${project.version} - org.springframework.cloud - spring-cloud-starter-feign + org.eclipse.hawkbit + hawkbit-ddi-api + ${project.version} + + + com.google.guava + guava com.netflix.feign feign-core + com.netflix.feign feign-jackson - - javax.servlet - javax.servlet-api - - - - org.springframework.plugin - spring-plugin-core - com.fasterxml.jackson.core jackson-databind - - - - com.google.guava - guava - - - commons-lang - commons-lang - - diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java deleted file mode 100644 index 79f0758e0..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDecoder.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.Collection; -import java.util.Map; - -import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; -import org.springframework.hateoas.hal.Jackson2HalModule; -import org.springframework.http.ResponseEntity; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; - -import feign.Response; -import feign.codec.Decoder; -import feign.jackson.JacksonDecoder; - -/** - * Decoder for DDI client. - * - */ -public class DdiDecoder implements Decoder { - - private static final String OCTET_STREAM = "[application/octet-stream]"; - - private final ObjectMapper mapper; - - public DdiDecoder() { - mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .registerModule(new Jackson2HalModule()); - } - - @Override - public Object decode(final Response response, final Type type) throws IOException { - - final Map> header = response.headers(); - final String contentType = String.valueOf(header.get("Content-Type")); - if (contentType.equals(OCTET_STREAM)) { - return ResponseEntity.ok(response.body().asInputStream()); - } - final ResponseEntityDecoder responseEntityDecoder = new ResponseEntityDecoder(new JacksonDecoder(mapper)); - return responseEntityDecoder.decode(response, type); - } - -} diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java deleted file mode 100644 index e579c07b5..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client; - -import org.apache.commons.lang.Validate; -import org.eclipse.hawkbit.ddi.client.authenctication.AuthenticationInterceptor; -import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; -import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClientConstants; -import org.eclipse.hawkbit.feign.core.client.ApplicationJsonRequestHeaderInterceptor; -import org.eclipse.hawkbit.feign.core.client.IgnoreMultipleConsumersProducersSpringMvcContract; - -import feign.Feign; -import feign.Feign.Builder; -import feign.Logger; -import feign.Logger.Level; -import feign.jackson.JacksonEncoder; - -/** - * Default implementation of DDI client. - */ -public class DdiDefaultFeignClient { - - private RootControllerResourceClient rootControllerResourceClient; - private final Builder feignBuilder; - private final String baseUrl; - private final String tenant; - - /** - * Constructor for default DDI feign client with no authentication. - * - * @param baseUrl - * the base url of the client - * @param tenant - * the tenant - */ - public DdiDefaultFeignClient(final String baseUrl, final String tenant) { - this(baseUrl, tenant, null); - } - - /** - * Constructor for default DDI feign client with authentication. - * - * @param baseUrl - * the base url of the client - * @param tenant - * the tenant - * @param authenticationInterceptor - */ - public DdiDefaultFeignClient(final String baseUrl, final String tenant, - final AuthenticationInterceptor authenticationInterceptor) { - feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) - .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) - .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()).decoder(new DdiDecoder()); - if (authenticationInterceptor != null) { - feignBuilder.requestInterceptor(authenticationInterceptor); - } - Validate.notNull(baseUrl, "A baseUrl has to be set"); - Validate.notNull(tenant, "A tenant has to be set"); - this.baseUrl = baseUrl; - this.tenant = tenant; - } - - /** - * Get the feign builder. - * - * @return the feign builder - */ - public Builder getFeignBuilder() { - return feignBuilder; - } - - /** - * Get the rootController resource client. - * - * @return the rootController resource client - */ - public RootControllerResourceClient getRootControllerResourceClient() { - - if (rootControllerResourceClient == null) { - String rootControllerResourcePath = this.baseUrl + RootControllerResourceClientConstants.PATH; - rootControllerResourcePath = rootControllerResourcePath.replace("{tenant}", tenant); - rootControllerResourceClient = feignBuilder.target(RootControllerResourceClient.class, - rootControllerResourcePath); - } - return rootControllerResourceClient; - } - -} diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java deleted file mode 100644 index 2c0421067..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java +++ /dev/null @@ -1,232 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client; - -import java.io.IOException; -import java.io.InputStream; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.temporal.ChronoField; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -import org.eclipse.hawkbit.ddi.client.authenctication.AuthenticationInterceptor; -import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; -import org.eclipse.hawkbit.ddi.client.strategy.ArtifactsPersistenceStrategy; -import org.eclipse.hawkbit.ddi.json.model.DdiActionFeedback; -import org.eclipse.hawkbit.ddi.json.model.DdiArtifact; -import org.eclipse.hawkbit.ddi.json.model.DdiChunk; -import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase; -import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase; -import org.eclipse.hawkbit.ddi.json.model.DdiResult; -import org.eclipse.hawkbit.ddi.json.model.DdiResult.FinalResult; -import org.eclipse.hawkbit.ddi.json.model.DdiStatus; -import org.eclipse.hawkbit.ddi.json.model.DdiStatus.ExecutionStatus; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.hateoas.Link; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -/** - * DDI example client based on defualt DDI feign client. - */ -public class DdiExampleClient implements Runnable { - - private static final Logger LOGGER = LoggerFactory.getLogger(DdiExampleClient.class); - - private final String controllerId; - private Long actionIdOfLastInstalltion; - private final RootControllerResourceClient rootControllerResourceClient; - private final ArtifactsPersistenceStrategy persistenceStrategy; - private DdiClientStatus clientStatus; - private FinalResult finalResultOfCurrentUpdate; - - /** - * Constructor for the DDI example client. - * - * @param baseUrl - * the base url of the hawkBit server - * @param controllerId - * the controller id that will be simulated - * @param tenant - * the tenant - * @param persistenceStrategy - * the persistence strategy for downloading artifacts - */ - public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, - final ArtifactsPersistenceStrategy persistenceStrategy) { - this(baseUrl, controllerId, tenant, persistenceStrategy, null); - } - - /** - * Constructor for the DDI example client. - * - * @param baseUrl - * the base url of the hawkBit server - * @param controllerId - * the controller id that will be simulated - * @param tenant - * the tenant - * @param persistenceStrategy - * the persistence strategy for downloading artifacts - * @param authenticationInterceptor - * the authentication intercepter to authenticate the DDI client, - * might be {@code null} - */ - public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant, - final ArtifactsPersistenceStrategy persistenceStrategy, - final AuthenticationInterceptor authenticationInterceptor) { - this.controllerId = controllerId; - this.rootControllerResourceClient = new DdiDefaultFeignClient(baseUrl, tenant, authenticationInterceptor) - .getRootControllerResourceClient(); - this.actionIdOfLastInstalltion = null; - this.persistenceStrategy = persistenceStrategy; - this.clientStatus = DdiClientStatus.DOWN; - } - - @Override - public void run() { - clientStatus = DdiClientStatus.UP; - ResponseEntity response; - while (clientStatus == DdiClientStatus.UP) { - LOGGER.info(" Controller {} polling from hawkBit server", controllerId); - response = rootControllerResourceClient.getControllerBase(controllerId); - final String pollingTimeFormReponse = response.getBody().getConfig().getPolling().getSleep(); - final LocalTime localtime = LocalTime.parse(pollingTimeFormReponse); - final long pollingIntervalInMillis = localtime.getLong(ChronoField.MILLI_OF_DAY); - final Link controllerDeploymentBaseLink = response.getBody().getLink("deploymentBase"); - if (controllerDeploymentBaseLink != null) { - final Long actionId = getActionIdOutOfLink(controllerDeploymentBaseLink); - final Integer resource = getResourceOutOfLink(controllerDeploymentBaseLink); - if (actionId != actionIdOfLastInstalltion) { - finalResultOfCurrentUpdate = FinalResult.NONE; - startDownload(actionId, resource); - finishUpdateProcess(actionId); - actionIdOfLastInstalltion = actionId; - } - } - try { - Thread.sleep(pollingIntervalInMillis); - } catch (final InterruptedException e) { - LOGGER.error("Error during sleep"); - } - } - } - - /** - * Stop the DDI example client - */ - public void stop() { - clientStatus = DdiClientStatus.DOWN; - } - - private void startDownload(final Long actionId, final Integer resource) { - final ResponseEntity respone = rootControllerResourceClient - .getControllerBasedeploymentAction(controllerId, actionId, resource); - final DdiDeploymentBase ddiDeploymentBase = respone.getBody(); - final List chunks = ddiDeploymentBase.getDeployment().getChunks(); - for (final DdiChunk chunk : chunks) { - downloadArtifacts(chunk, actionId); - } - } - - private void downloadArtifacts(final DdiChunk chunk, final Long actionId) { - final List artifactList = chunk.getArtifacts(); - if (artifactList.isEmpty()) { - sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, - "No artifacts to download for softwaremodule " + chunk.getName()); - return; - } - for (final DdiArtifact ddiArtifact : artifactList) { - if (finalResultOfCurrentUpdate != FinalResult.FAILURE) { - downloadArtifact(actionId, ddiArtifact); - } - } - } - - private void downloadArtifact(final Long actionId, final DdiArtifact ddiArtifact) { - - final String artifact = ddiArtifact.getFilename(); - final Link downloadLink = ddiArtifact.getLink("download-http"); - final String[] downloadLinkSep = downloadLink.getHref().split(Pattern.quote("/")); - final Long softwareModuleId = Long.valueOf(downloadLinkSep[8]); - - sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, - "Starting download of artifact " + artifact); - LOGGER.info("Starting download of artifact " + artifact); - - final ResponseEntity responseDownloadArtifact = rootControllerResourceClient - .downloadArtifact(controllerId, softwareModuleId, artifact); - final HttpStatus statsuCode = responseDownloadArtifact.getStatusCode(); - LOGGER.info("Finished download with stataus {}", statsuCode); - - try { - persistenceStrategy.handleInputStream(responseDownloadArtifact.getBody(), artifact); - sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, - "Downloaded artifact " + artifact); - } catch (final IOException e) { - LOGGER.error("Download of artifact failed", e); - sendFeedBackMessage(actionId, ExecutionStatus.PROCEEDING, FinalResult.NONE, - "Download of artifact " + artifact + "failed"); - finalResultOfCurrentUpdate = FinalResult.FAILURE; - } - - } - - private void sendFeedBackMessage(final Long actionId, final ExecutionStatus executionStatus, - final FinalResult finalResult, final String message) { - final DdiResult result = new DdiResult(finalResult, null); - final List details = new ArrayList<>(); - details.add(message); - final DdiStatus ddiStatus = new DdiStatus(executionStatus, result, details); - final String time = String.valueOf(LocalDateTime.now()); - final DdiActionFeedback feedback = new DdiActionFeedback(actionId, time, ddiStatus); - rootControllerResourceClient.postBasedeploymentActionFeedback(feedback, controllerId, actionId); - LOGGER.info("Sent feedback message to HaktBit"); - } - - private void finishUpdateProcess(final Long actionId) { - - if (finalResultOfCurrentUpdate == FinalResult.FAILURE) { - sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.FAILURE, "Error during update process"); - } - - if (finalResultOfCurrentUpdate == FinalResult.NONE) { - sendFeedBackMessage(actionId, ExecutionStatus.CLOSED, FinalResult.SUCESS, - "Simulated installation successful"); - } - - } - - private Long getActionIdOutOfLink(final Link controllerDeploymentBaseLink) { - final String[] ending = splitControllerDeploymentBaseLinkInActionIdAndResource(controllerDeploymentBaseLink); - return Long.valueOf(ending[0]); - } - - private Integer getResourceOutOfLink(final Link controllerDeploymentBaseLink) { - final String[] ending = splitControllerDeploymentBaseLinkInActionIdAndResource(controllerDeploymentBaseLink); - return Integer.valueOf(ending[1].substring(2)); - } - - private String[] splitControllerDeploymentBaseLinkInActionIdAndResource(final Link controllerDeploymentBaseLink) { - final String link = controllerDeploymentBaseLink.getHref(); - final String[] segments = link.split(Pattern.quote("/")); - return segments[8].split(Pattern.quote("?")); - } - - /** - * Enum for DDI running status. - */ - public enum DdiClientStatus { - UP, DOWN; - } - -} diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java deleted file mode 100644 index f1a746c1b..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptor.java +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client.authenctication; - -import feign.RequestInterceptor; - -/** - * An DdiClient authentication intercepter to provide credential information - * e.g. in http-headers. - */ -public interface AuthenticationInterceptor extends RequestInterceptor { - -} diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java deleted file mode 100644 index 5d2fb6706..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/AuthenticationInterceptorFactory.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client.authenctication; - -/** - * A factory to create {@link AuthenticationInterceptor}s. - */ -public class AuthenticationInterceptorFactory { - - private AuthenticationInterceptorFactory() { - // factory class no public constructor - } - - /** - * Creates a new {@link AuthenticationInterceptor} to authenticate a - * Ddi-Client via a target-security-token HTTP authorization header. - * - * @param targetSecurityToken - * the target-security-token to be added to the HTTP - * 'TargetToken' authorization header - * @return the authentication interceptor which can be used to authenticate - * an Ddi-Client - */ - public static AuthenticationInterceptor createTargetSecurityAuthenticator(final String targetSecurityToken) { - return new TargetSecurityTokenAuthenticationInterceptor(targetSecurityToken); - } - -} diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java deleted file mode 100644 index 93559dd6d..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/authenctication/TargetSecurityTokenAuthenticationInterceptor.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client.authenctication; - -import com.google.common.net.HttpHeaders; - -import feign.RequestTemplate; - -/** - * Implementation of the {@link AuthenticationInterceptor} to add a given - * target-security-token to the HTTP authorization header. - */ -class TargetSecurityTokenAuthenticationInterceptor implements AuthenticationInterceptor { - - private final String targetSecurityToken; - - /** - * @param targetSecurityToken - * the security token to add to the authorization header - */ - TargetSecurityTokenAuthenticationInterceptor(final String targetSecurityToken) { - this.targetSecurityToken = targetSecurityToken; - } - - @Override - public void apply(final RequestTemplate template) { - template.header(HttpHeaders.AUTHORIZATION, "TargetToken " + targetSecurityToken); - } -} diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java index db41a6e86..389f65da7 100644 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java +++ b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java @@ -8,13 +8,14 @@ */ package org.eclipse.hawkbit.ddi.client.resource; +import org.eclipse.hawkbit.ddi.rest.api.DdiRestConstants; import org.eclipse.hawkbit.ddi.rest.api.DdiRootControllerRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the Rootcontroller resource of the DDI API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/" + RootControllerResourceClientConstants.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + DdiRestConstants.BASE_V1_REQUEST_MAPPING) public interface RootControllerResourceClient extends DdiRootControllerRestApi { } diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java deleted file mode 100644 index 07d31337e..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClientConstants.java +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client.resource; - -/** - * - * Constants for RootController resource client. - */ -public class RootControllerResourceClientConstants { - - public static final String PATH = "{tenant}/controller/v1"; - - /** - * Private constructor to prevent instantiation. - */ - private RootControllerResourceClientConstants() { - - } - -} diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java deleted file mode 100644 index d7e99522e..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/ArtifactsPersistenceStrategy.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client.strategy; - -import java.io.IOException; -import java.io.InputStream; - -/** - * Interface of persistence strategy. - */ -@FunctionalInterface -public interface ArtifactsPersistenceStrategy { - - /** - * Method handling the artifact download. - * - * @param in - * the input stream - * @param artifactName - * the name of the artifact - * @throws IOException - */ - public void handleInputStream(InputStream in, String artifactName) throws IOException; - -} diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java deleted file mode 100644 index 4d71528b2..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/DoNotSaveArtifacts.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client.strategy; - -import java.io.IOException; -import java.io.InputStream; - -/** - * Implementation of {@link ArtifactsPersistenceStrategy} for not downloading - * any artifacts. - */ -public class DoNotSaveArtifacts implements ArtifactsPersistenceStrategy { - - @Override - public void handleInputStream(final InputStream in, final String artifactName) throws IOException { - - while (in.read() != -1) { - ; - } - } - -} diff --git a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java b/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java deleted file mode 100644 index afcc01419..000000000 --- a/examples/hawkbit-example-ddi-feign-client/src/main/java/org/eclipse/hawkbit/ddi/client/strategy/SaveArtifactsToLocalTempDirectories.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client.strategy; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import com.google.common.io.ByteStreams; -import com.google.common.io.Files; - -/** - * Implementation of {@link ArtifactsPersistenceStrategy} for downloading - * artifacts to the temp directory. - */ -public class SaveArtifactsToLocalTempDirectories implements ArtifactsPersistenceStrategy { - - @Override - public void handleInputStream(final InputStream in, final String artifactName) throws IOException { - final File tempDir = Files.createTempDir(); - final File file = new File(tempDir, artifactName); - final OutputStream out = new FileOutputStream(file); - ByteStreams.copy(in, out); - } - -} From c9248a80db20d91eb7e7fdd24706bfec27f0c58a Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 18 May 2016 16:05:10 +0200 Subject: [PATCH 118/371] Updated readme.md for changes module names Signed-off-by: Jonathan Philip Knoblauch --- examples/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/README.md b/examples/README.md index ce8d26962..0aebbc117 100644 --- a/examples/README.md +++ b/examples/README.md @@ -5,8 +5,8 @@ Example projects that show how _hawkBit_ can be used to create, run or access an - `hawkbit-custom-theme-example` : Example for a customized theme for Management UI. - `hawkbit-device-simulator` : Simulates device software updates, leveraging the hawkBit device integration options. - `hawkbit-example-app` : Allows you to run the Spring Boot hawkBit app. Includes all _hawkBit_ interfaces, i.e. DDI, DMF, Mgmt-API, Mgmt-UI. -- `hawkbit-example-ddi-client` : Example _hawkBit_ DDI client based on the _hawkBit_ DDI API. Includes simulation of target. -- `hawkbit-example-feign-core-client` : Core resources for the examples. -- `hawkbit-example-mgmt-client` : Example client for the _hawkBit_ Management API -- `hawkbit-example-mgmt-spring-client` : Example client for the _hawkBit_ Management API based on Spring Boot. +- `hawkbit-example-core-feign-client` : Core resources for the client examples. +- `hawkbit-example-ddi-feign-client` : Example _hawkBit_ DDI client based on the _hawkBit_ DDI API. +- `hawkbit-example-mgmt-feign-client` : Example _hawkBit_ Management client based on the _hawkBit_ Management API +- `hawkbit-example-mgmt-simulator` : Example client simulation for the _hawkBit_ Management API based on Spring Boot and the hawkbit-example-mgmt-feign-client. From fcd6cef3fbd7607089918161e86bf8ce67325f4c Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 18 May 2016 16:16:11 +0200 Subject: [PATCH 119/371] Updated readme.md due to changes modules structure Signed-off-by: Jonathan Philip Knoblauch --- .../README.md | 8 ++--- .../README.md | 29 +++++-------------- .../README.md | 8 ++--- .../hawkbit-example-mgmt-simulator/README.md | 2 +- 4 files changed, 16 insertions(+), 31 deletions(-) diff --git a/examples/hawkbit-example-core-feign-client/README.md b/examples/hawkbit-example-core-feign-client/README.md index 27d1ea04e..bcded015e 100644 --- a/examples/hawkbit-example-core-feign-client/README.md +++ b/examples/hawkbit-example-core-feign-client/README.md @@ -1,13 +1,13 @@ -# Eclipse.IoT hawkBit - Example Feign Core Client +# Eclipse.IoT hawkBit - Example Core Feign Client -This modules contains core resources that are needed by the hawkBit Example DDI Client and the hawkBit Example Management Spring Client. +This modules contains core resources that are needed by the hawkBit Example DDI Feign Client and the hawkBit Example Mgmt Feign Client. # Compile -#### Build hawkbit-example-feign-core-client +#### Build hawkbit-example-core-feign-client ``` -$ cd hawkbit/examples/hawkbit-example-feign-core-client +$ cd hawkbit/examples/hawkbit-example-core-feign-client $ mvn clean install ``` diff --git a/examples/hawkbit-example-ddi-feign-client/README.md b/examples/hawkbit-example-ddi-feign-client/README.md index 8b016ed5e..d1e1bd18d 100644 --- a/examples/hawkbit-example-ddi-feign-client/README.md +++ b/examples/hawkbit-example-ddi-feign-client/README.md @@ -1,29 +1,14 @@ -# Eclipse.IoT hawkBit - Example DDI Client +# Eclipse.IoT hawkBit - Example DDI Feign Client -The hawkBit Example DDI Client is an implementation of a simulated device/target that communicates with the hawkBit server via the DDI API. +This modules contains an example feign client implementation based on the DDI API. -# Compile, Run and Getting Started +Powered by [Feign](https://github.com/Netflix/feign). -#### Build hawkbit-example-ddi-client +# Compile + +#### Build hawkbit-example-ddi-feign-client ``` -$ cd hawkbit/examples/hawkbit-example-ddi-client +$ cd hawkbit/examples/hawkbit-example-ddi-feign-client $ mvn clean install ``` - -#### Run hawkBit Example DDI Client - -Start the [hawkBit example app](../hawkbit-example-app). - -Create an instance of the hawkBit Example DDI Client and run it as thread e.g. in the ExecutorService. - -``` -DdiExampleClient ddiExampleClient = new DdiExampleClient("http://localhost:8080/", "controllerIdName", "DEFAULT", new DoNotSaveArtifacts()); -ExecutorService executorService = Executors.newFixedThreadPool(1); -executorService.execute(ddiExampleClient); -``` - -#### Getting started with hawkBit Example DDI Client - -After the hawkBit Example DDI Client has started it will poll once against the given hawkBit server and form then depending on your polling configuration. After the hawkBit Example DDI Client has polled successful you will see a target in the deployment view regarding the given controller id of your hawkBit Example DDI Client. You can know assign a distributionSet to the target and let the hawkBit Example DDI Client simulated an update. - diff --git a/examples/hawkbit-example-mgmt-feign-client/README.md b/examples/hawkbit-example-mgmt-feign-client/README.md index b73ddd96b..3a2dcf61b 100644 --- a/examples/hawkbit-example-mgmt-feign-client/README.md +++ b/examples/hawkbit-example-mgmt-feign-client/README.md @@ -1,15 +1,15 @@ -# Eclipse.IoT hawkBit - Example Management Client +# Eclipse.IoT hawkBit - Example Management Feign Client -This modules contains an example feign client implementation based on the Mgmt API. +This modules contains an example feign client implementation based on the Management API. Powered by [Feign](https://github.com/Netflix/feign). # Compile -#### Build hawkbit-example-mgmt-client +#### Build hawkbit-example-mgmt-feign-client ``` -$ cd hawkbit/examples/hawkbit-example-mgmt-client +$ cd hawkbit/examples/hawkbit-example-mgmt-feign-client $ mvn clean install ``` diff --git a/examples/hawkbit-example-mgmt-simulator/README.md b/examples/hawkbit-example-mgmt-simulator/README.md index 9e11e212d..f49d84320 100644 --- a/examples/hawkbit-example-mgmt-simulator/README.md +++ b/examples/hawkbit-example-mgmt-simulator/README.md @@ -1,6 +1,6 @@ # Eclipse.IoT hawkBit - Management API Example Client -Example Spring Boot client that shows how to efficiently use the hawkBit Example Management Client and the hawkBit Management API. +Example Spring Boot client that shows how to efficiently use the hawkBit Example Management Fiegn Client and the hawkBit Management API. Powered by [Feign](https://github.com/Netflix/feign). From 3c0d5396b043434f1e2de19364584f971818a3fa Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 18 May 2016 16:16:30 +0200 Subject: [PATCH 120/371] Removed default implementations as JaCoCo has problems with those. Split software management. Signed-off-by: Kai Zimmermann --- .../SecurityManagedConfiguration.java | 6 +- .../amqp/AmqpMessageHandlerService.java | 8 +- .../amqp/AmqpMessageHandlerServiceTest.java | 2 +- .../repository/ArtifactManagement.java | 27 +- .../repository/ControllerManagement.java | 6 +- .../repository/DeploymentManagement.java | 19 +- .../repository/DistributionSetFilter.java | 3 - .../repository/DistributionSetManagement.java | 24 +- .../hawkbit/repository/ReportManagement.java | 2 +- .../repository/RolloutGroupManagement.java | 4 + .../hawkbit/repository/RolloutManagement.java | 2 +- .../hawkbit/repository/RolloutScheduler.java | 6 +- .../repository/SoftwareManagement.java | 471 ++++++++++++++++ .../TenantConfigurationManagement.java | 14 +- .../repository/jpa/DeploymentHelper.java | 100 ++++ .../repository/jpa/JpaArtifactManagement.java | 16 + .../jpa/JpaControllerManagement.java | 8 +- .../jpa/JpaDeploymentManagement.java | 1 - .../jpa/JpaDistributionSetManagement.java | 25 +- ...gement.java => JpaSoftwareManagement.java} | 508 ++++-------------- .../hawkbit/AbstractIntegrationTest.java | 2 +- .../org/eclipse/hawkbit/TestDataUtil.java | 2 +- .../repository/SoftwareManagementTest.java | 2 +- .../utils/RepositoryDataGenerator.java | 2 +- .../hawkbit/controller/RootController.java | 2 +- .../rest/resource/DistributionSetMapper.java | 2 +- .../resource/DistributionSetResource.java | 2 +- .../resource/DistributionSetTypeMapper.java | 2 +- .../resource/DistributionSetTypeResource.java | 2 +- .../resource/DownloadArtifactResource.java | 2 +- .../rest/resource/SoftwareModuleMapper.java | 2 +- .../rest/resource/SoftwareModuleResource.java | 2 +- .../resource/SoftwareModuleTypeResource.java | 2 +- .../resource/DistributionSetResourceTest.java | 2 +- .../UploadViewConfirmationWindowLayout.java | 2 +- .../smtable/BaseSwModuleBeanQuery.java | 2 +- .../SoftwareModuleAddUpdateWindow.java | 2 +- .../smtable/SoftwareModuleTable.java | 2 +- .../CreateUpdateSoftwareTypeLayout.java | 2 +- .../smtype/SMTypeFilterButtonClick.java | 2 +- .../common/SoftwareModuleTypeBeanQuery.java | 2 +- .../CreateUpdateDistSetTypeLayout.java | 2 +- .../dstable/DistributionSetDetails.java | 2 +- .../dstable/DistributionSetTable.java | 2 +- ...DistributionsConfirmationWindowLayout.java | 2 +- .../smtable/SwModuleBeanQuery.java | 2 +- .../distributions/smtable/SwModuleTable.java | 2 +- .../smtype/DistSMTypeFilterButtonClick.java | 2 +- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 2 +- pom.xml | 2 +- 50 files changed, 789 insertions(+), 523 deletions(-) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/{SoftwareManagement.java => JpaSoftwareManagement.java} (55%) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java index 9638377eb..0b321842f 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java @@ -24,11 +24,11 @@ import org.eclipse.hawkbit.ExcludePathAwareShallowETagFilter; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.im.authentication.TenantUserPasswordAuthenticationToken; import org.eclipse.hawkbit.im.authentication.UserAuthenticationFilter; -import org.eclipse.hawkbit.repository.ControllerManagement; -import org.eclipse.hawkbit.repository.SystemManagement; -import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.rest.resource.RestConstants; import org.eclipse.hawkbit.security.ControllerTenantAwareAuthenticationDetailsSource; import org.eclipse.hawkbit.security.DdiSecurityProperties; 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 f26d7f3f7..3756688c2 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 @@ -371,18 +371,18 @@ public class AmqpMessageHandlerService extends BaseAmqpService { logAndThrowMessageError(message, "Status for action does not exisit."); } - final Action addUpdateActionStatus = getUpdateActionStatus(action, actionStatus); + final Action addUpdateActionStatus = getUpdateActionStatus(actionStatus); if (!addUpdateActionStatus.isActive()) { lookIfUpdateAvailable(action.getTarget()); } } - private Action getUpdateActionStatus(final Action action, final ActionStatus actionStatus) { + private Action getUpdateActionStatus(final ActionStatus actionStatus) { if (actionStatus.getStatus().equals(Status.CANCELED)) { - return controllerManagement.addCancelActionStatus(actionStatus, action); + return controllerManagement.addCancelActionStatus(actionStatus); } - return controllerManagement.addUpdateActionStatus(actionStatus, action); + return controllerManagement.addUpdateActionStatus(actionStatus); } private Action checkActionExist(final Message message, final ActionUpdateStatus actionUpdateStatus) { 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 3051e4e22..e057144df 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 @@ -346,7 +346,7 @@ public class AmqpMessageHandlerServiceTest { // Mock final Action action = createActionWithTarget(22L, Status.FINISHED); when(controllerManagementMock.findActionWithDetails(Matchers.any())).thenReturn(action); - when(controllerManagementMock.addUpdateActionStatus(Matchers.any(), Matchers.any())).thenReturn(action); + when(controllerManagementMock.addUpdateActionStatus(Matchers.any())).thenReturn(action); // for the test the same action can be used final List actionList = new ArrayList<>(); actionList.add(action); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java index 977b9f171..19f3bcee2 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java @@ -32,8 +32,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.hateoas.Identifiable; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Transactional; /** * Service for {@link Artifact} management operations. @@ -99,11 +97,8 @@ public interface ArtifactManagement { * @throw ArtifactUploadFailedException if upload fails */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - default LocalArtifact createLocalArtifact(final InputStream inputStream, final Long moduleId, final String filename, - final boolean overrideExisting) { - return createLocalArtifact(inputStream, moduleId, filename, null, null, overrideExisting, null); - } + LocalArtifact createLocalArtifact(@NotNull InputStream inputStream, @NotNull Long moduleId, final String filename, + final boolean overrideExisting); /** * Persists artifact binary as provided by given InputStream. assign the @@ -126,11 +121,8 @@ public interface ArtifactManagement { * @throw ArtifactUploadFailedException if upload fails */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - default LocalArtifact createLocalArtifact(final InputStream inputStream, final Long moduleId, final String filename, - final boolean overrideExisting, final String contentType) { - return createLocalArtifact(inputStream, moduleId, filename, null, null, overrideExisting, contentType); - } + LocalArtifact createLocalArtifact(@NotNull InputStream inputStream, @NotNull Long moduleId, + @NotNull String filename, final boolean overrideExisting, @NotNull String contentType); /** * Persists artifact binary as provided by given InputStream. assign the @@ -282,14 +274,7 @@ public interface ArtifactManagement { * @return the found {@link SoftwareModule}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - default SoftwareModule findSoftwareModuleWithDetails(@NotNull final Long id) { - final SoftwareModule result = findSoftwareModuleById(id); - if (result != null) { - result.getArtifacts().size(); - } - - return result; - } + SoftwareModule findSoftwareModuleWithDetails(@NotNull Long id); /** * Loads {@link org.eclipse.hawkbit.artifact.server.json.model.Artifact} @@ -307,4 +292,4 @@ public interface ArtifactManagement { + SpringEvalExpressions.HAS_CONTROLLER_DOWNLOAD) DbArtifact loadLocalArtifactBinary(@NotNull LocalArtifact artifact); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index b70ad3bdd..2b18ab7ff 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -249,9 +249,7 @@ public interface ControllerManagement { */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) @Transactional(isolation = Isolation.READ_UNCOMMITTED) - default TargetInfo updateLastTargetQuery(@NotNull final TargetInfo target, @NotNull final URI address) { - return updateTargetStatus(target, null, System.currentTimeMillis(), address); - } + TargetInfo updateLastTargetQuery(@NotNull TargetInfo target, @NotNull URI address); /** * Update selective the target status of a given {@code target}. @@ -273,4 +271,4 @@ public interface ControllerManagement { TargetInfo updateTargetStatus(@NotNull TargetInfo targetInfo, TargetUpdateStatus status, Long lastTargetQuery, URI address); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 789383ce7..cffc3b8ad 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -8,9 +8,7 @@ */ package org.eclipse.hawkbit.repository; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import javax.validation.constraints.NotNull; @@ -82,14 +80,8 @@ public interface DeploymentManagement { * {@link DistributionSetType}. */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) - // Exception squid:S2095: see - // https://jira.sonarsource.com/browse/SONARJAVA-1478 - @SuppressWarnings({ "squid:S2095" }) - default DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, final ActionType actionType, - final long forcedTimestamp, @NotEmpty final String... targetIDs) { - return assignDistributionSet(dsID, Arrays.stream(targetIDs) - .map(t -> new TargetWithActionType(t, actionType, forcedTimestamp)).collect(Collectors.toList())); - } + DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, final ActionType actionType, + final long forcedTimestamp, @NotEmpty final String... targetIDs); /** * method assigns the {@link DistributionSet} to all {@link Target}s by @@ -154,10 +146,7 @@ public interface DeploymentManagement { * {@link DistributionSetType}. */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) - default DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, - @NotEmpty final String... targetIDs) { - return assignDistributionSet(dsID, ActionType.FORCED, Action.NO_FORCE_TIME, targetIDs); - } + DistributionSetAssignmentResult assignDistributionSet(@NotNull Long dsID, @NotEmpty String... targetIDs); /** * Cancels given {@link Action} for given {@link Target}. The method will @@ -450,4 +439,4 @@ public interface DeploymentManagement { + SpringEvalExpressions.IS_SYSTEM_CODE) Action startScheduledAction(@NotNull Action action); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java index a545209e4..728a4d0c5 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java @@ -14,9 +14,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; /** * Holds distribution set filter parameters. - * - * - * */ public final class DistributionSetFilter { private final Boolean isDeleted; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index 965ecd9f6..bea9f2719 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -11,7 +11,6 @@ package org.eclipse.hawkbit.repository; import java.util.Collection; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import javax.persistence.Entity; import javax.validation.constraints.NotNull; @@ -163,9 +162,7 @@ public interface DistributionSetManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) @Transactional(isolation = Isolation.READ_UNCOMMITTED) - default List createDistributionSetTypes(@NotNull final Collection types) { - return types.stream().map(this::createDistributionSetType).collect(Collectors.toList()); - } + List createDistributionSetTypes(@NotNull Collection types); /** *

@@ -183,10 +180,7 @@ public interface DistributionSetManagement { * to delete */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - default void deleteDistributionSet(@NotNull final DistributionSet set) { - deleteDistributionSet(set.getId()); - } + void deleteDistributionSet(@NotNull DistributionSet set); /** * Deleted {@link DistributionSet}s by their IDs. That is either a soft @@ -235,11 +229,8 @@ public interface DistributionSetManagement { * to look for. * @return {@link DistributionSet} or null if it does not exist */ - @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - default DistributionSet findDistributionSetById(@NotNull final Long distid) { - return findDistributionSetByIdWithDetails(distid); - } + DistributionSet findDistributionSetById(@NotNull Long distid); /** * Find {@link DistributionSet} based on given ID including (lazy loaded) @@ -487,11 +478,8 @@ public interface DistributionSetManagement { * the assignment outcome. */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - default DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty final Collection sets, - @NotNull final DistributionSetTag tag) { - return toggleTagAssignment(sets.stream().map(ds -> ds.getId()).collect(Collectors.toList()), tag.getName()); - } + DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty Collection sets, + @NotNull DistributionSetTag tag); /** * Toggles {@link DistributionSetTag} assignment to given @@ -588,4 +576,4 @@ public interface DistributionSetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) DistributionSetType updateDistributionSetType(@NotNull DistributionSetType dsType); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java index 40ee21d9b..6208d395c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java @@ -206,4 +206,4 @@ public interface ReportManagement { } -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index 7c5503c19..9654b8368 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -21,6 +21,10 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; +/** + * Repository management service for RolloutGroup. + * + */ public interface RolloutGroupManagement { /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index bf4924692..357108576 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -335,4 +335,4 @@ public interface RolloutManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) float getFinishedPercentForRunningGroup(@NotNull Long rolloutId, @NotNull RolloutGroup rolloutGroup); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java index 03ece28ee..1d4150217 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java @@ -32,7 +32,7 @@ import org.springframework.stereotype.Component; @Profile("!test") public class RolloutScheduler { - private static final Logger logger = LoggerFactory.getLogger(RolloutScheduler.class); + private static final Logger LOGGER = LoggerFactory.getLogger(RolloutScheduler.class); @Autowired private TenantAware tenantAware; @@ -57,7 +57,7 @@ public class RolloutScheduler { */ @Scheduled(initialDelayString = RolloutProperties.Scheduler.PROP_SCHEDULER_DELAY_PLACEHOLDER, fixedDelayString = RolloutProperties.Scheduler.PROP_SCHEDULER_DELAY_PLACEHOLDER) public void rolloutScheduler() { - logger.debug("rollout schedule checker has been triggered."); + LOGGER.debug("rollout schedule checker has been triggered."); // run this code in system code privileged to have the necessary // permission to query and create entities. systemSecurityContext.runAsSystem(() -> { @@ -68,7 +68,7 @@ public class RolloutScheduler { // iterate through all tenants and execute the rollout check for // each tenant seperately. final List tenants = systemManagement.findTenants(); - logger.info("Checking rollouts for {} tenants", tenants.size()); + LOGGER.info("Checking rollouts for {} tenants", tenants.size()); for (final String tenant : tenants) { tenantAware.runAsTenant(tenant, () -> { rolloutManagement.checkRunningRollouts(rolloutProperties.getScheduler().getFixedDelay()); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java new file mode 100644 index 000000000..063a3a0f1 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java @@ -0,0 +1,471 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository; + +import java.util.Collection; +import java.util.List; + +import javax.persistence.Entity; +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; +import org.hibernate.validator.constraints.NotEmpty; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.security.access.prepost.PreAuthorize; + +/** + * Service for managing {@link SoftwareModule}s. + * + */ +public interface SoftwareManagement { + + /** + * Updates existing {@link SoftwareModule}. Update-able values are + * {@link SoftwareModule#getDescription()} + * {@link SoftwareModule#getVendor()}. + * + * @param sm + * to update + * + * @return the saved {@link Entity}. + * + * @throws NullPointerException + * of {@link SoftwareModule#getId()} is null + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + SoftwareModule updateSoftwareModule(@NotNull SoftwareModule sm); + + /** + * Updates existing {@link SoftwareModuleType}. Update-able value is + * {@link SoftwareModuleType#getDescription()} and + * {@link SoftwareModuleType#getColour()}. + * + * @param sm + * to update + * @return updated {@link Entity} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + SoftwareModuleType updateSoftwareModuleType(@NotNull SoftwareModuleType sm); + + /** + * + * @param swModule + * SoftwareModule to create + * @return SoftwareModule + * @throws EntityAlreadyExistsException + * if a given entity already exists + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + SoftwareModule createSoftwareModule(@NotNull SoftwareModule swModule); + + /** + * Create {@link SoftwareModule}s in the repository. + * + * @param swModules + * {@link SoftwareModule}s to create + * @return SoftwareModule + * @throws EntityAlreadyExistsException + * if a given entity already exists + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + List createSoftwareModule(@NotNull Iterable swModules); + + /** + * retrieves the {@link SoftwareModule}s by their {@link SoftwareModuleType} + * . + * + * @param pageable + * page parameters + * @param type + * to be filtered on + * @return the found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Slice findSoftwareModulesByType(@NotNull Pageable pageable, @NotNull SoftwareModuleType type); + + /** + * Counts {@link SoftwareModule}s with given {@link SoftwareModuleType}. + * + * @param type + * to count + * @return number of found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countSoftwareModulesByType(@NotNull SoftwareModuleType type); + + /** + * Finds {@link SoftwareModule} by given id. + * + * @param id + * to search for + * @return the found {@link SoftwareModule}s or null if not + * found. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + SoftwareModule findSoftwareModuleById(@NotNull Long id); + + /** + * retrieves {@link SoftwareModule} by their name AND version AND type.. + * + * @param name + * of the {@link SoftwareModule} + * @param version + * of the {@link SoftwareModule} + * @param type + * of the {@link SoftwareModule} + * @return the found {@link SoftwareModule} or null + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModule findSoftwareModuleByNameAndVersion(@NotEmpty String name, @NotEmpty String version, + @NotNull SoftwareModuleType type); + + /** + * Deletes the given {@link SoftwareModule} {@link Entity}. + * + * @param bsm + * is the {@link SoftwareModule} to be deleted + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteSoftwareModule(@NotNull SoftwareModule bsm); + + /** + * Deletes {@link SoftwareModule}s which is any if the given ids. + * + * @param ids + * of the Software Modules to be deleted + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteSoftwareModules(@NotNull Iterable ids); + + /** + * Retrieves all software modules. Deleted ones are filtered. + * + * @param pageable + * pagination parameter + * @return the found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Slice findSoftwareModulesAll(@NotNull Pageable pageable); + + /** + * Count all {@link SoftwareModule}s in the repository that are not marked + * as deleted. + * + * @return number of {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countSoftwareModulesAll(); + + /** + * Retrieves software module including details ( + * {@link SoftwareModule#getArtifacts()}). + * + * @param id + * parameter + * @param isDeleted + * parameter + * @return the found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModule findSoftwareModuleWithDetails(@NotNull Long id); + + /** + * Retrieves all {@link SoftwareModule}s with a given specification. + * + * @param spec + * the specification to filter the software modules + * @param pageable + * pagination parameter + * @return the found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModulesByPredicate(@NotNull Specification spec, + @NotNull Pageable pageable); + + /** + * Retrieves all {@link SoftwareModuleType}s with a given specification. + * + * @param spec + * the specification to filter the software modules types + * @param pageable + * pagination parameter + * @return the found {@link SoftwareModuleType}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModuleTypesByPredicate(@NotNull Specification spec, + @NotNull Pageable pageable); + + /** + * Retrieves all software modules with a given list of ids + * {@link SoftwareModule#getId()}. + * + * @param ids + * to search for + * @return {@link List} of found {@link SoftwareModule}s + */ + List findSoftwareModulesById(@NotEmpty Collection ids); + + /** + * Filter {@link SoftwareModule}s with given + * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} + * and {@link SoftwareModule#getType()} that are not marked as deleted. + * + * @param pageable + * page parameter + * @param searchText + * to be filtered as "like" on {@link SoftwareModule#getName()} + * @param type + * to be filtered as "like" on {@link SoftwareModule#getType()} + * @return the page of found {@link SoftwareModule} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Slice findSoftwareModuleByFilters(@NotNull Pageable pageable, String searchText, + SoftwareModuleType type); + + /** + * Filter {@link SoftwareModule}s with given + * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} + * search text and {@link SoftwareModule#getType()} that are not marked as + * deleted and sort them by means of given distribution set related modules + * on top of the list. + * + * After that the modules are sorted by {@link SoftwareModule#getName()} and + * {@link SoftwareModule#getVersion()} in ascending order. + * + * @param pageable + * page parameter + * @param orderByDistributionId + * the ID of distribution set to be ordered on top + * @param searchText + * filtered as "like" on {@link SoftwareModule#getName()} + * @param type + * filtered as "equal" on {@link SoftwareModule#getType()} + * @return the page of found {@link SoftwareModule} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( + @NotNull Pageable pageable, @NotNull Long orderByDistributionId, String searchText, + SoftwareModuleType type); + + /** + * Counts {@link SoftwareModule}s with given + * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} + * and {@link SoftwareModule#getType()} that are not marked as deleted. + * + * @param searchText + * to search for in name and version + * @param type + * to filter the result + * @return number of found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countSoftwareModuleByFilters(String searchText, SoftwareModuleType type); + + /** + * @param pageable + * parameter + * @return all {@link SoftwareModuleType}s in the repository. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModuleTypesAll(@NotNull Pageable pageable); + + /** + * @return number of {@link SoftwareModuleType}s in the repository. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countSoftwareModuleTypesAll(); + + /** + * + * @param key + * to search for + * @return {@link SoftwareModuleType} in the repository with given + * {@link SoftwareModuleType#getKey()} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModuleType findSoftwareModuleTypeByKey(@NotNull String key); + + /** + * + * @param id + * to search for + * @return {@link SoftwareModuleType} in the repository with given + * {@link SoftwareModuleType#getId()} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModuleType findSoftwareModuleTypeById(@NotNull Long id); + + /** + * + * @param name + * to search for + * @return all {@link SoftwareModuleType}s in the repository with given + * {@link SoftwareModuleType#getName()} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModuleType findSoftwareModuleTypeByName(@NotNull String name); + + /** + * Creates new {@link SoftwareModuleType}. + * + * @param type + * to create + * @return created {@link Entity} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + SoftwareModuleType createSoftwareModuleType(@NotNull SoftwareModuleType type); + + /** + * Creates multiple {@link SoftwareModuleType}s. + * + * @param types + * to create + * @return created {@link Entity} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + List createSoftwareModuleType(@NotNull final Collection types); + + /** + * Deletes or marks as delete in case the type is in use. + * + * @param type + * to delete + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteSoftwareModuleType(@NotNull SoftwareModuleType type); + + /** + * @param pageable + * the page request to page the result set + * @param set + * to search for + * @return all {@link SoftwareModule}s that are assigned to given + * {@link DistributionSet}. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModuleByAssignedTo(@NotNull Pageable pageable, @NotNull DistributionSet set); + + /** + * @param pageable + * the page request to page the result set + * @param set + * to search for + * @param type + * to filter + * @return all {@link SoftwareModule}s that are assigned to given + * {@link DistributionSet} filtered by {@link SoftwareModuleType}. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModuleByAssignedToAndType(@NotNull Pageable pageable, @NotNull DistributionSet set, + @NotNull SoftwareModuleType type); + + /** + * creates or updates a single software module meta data entry. + * + * @param metadata + * the meta data entry to create or update + * @return the updated or created software module meta data entry + * @throws EntityAlreadyExistsException + * in case the meta data entry already exists for the specific + * key + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + SoftwareModuleMetadata createSoftwareModuleMetadata(@NotNull SoftwareModuleMetadata metadata); + + /** + * creates a list of software module meta data entries. + * + * @param metadata + * the meta data entries to create or update + * @return the updated or created software module meta data entries + * @throws EntityAlreadyExistsException + * in case one of the meta data entry already exists for the + * specific key + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + List createSoftwareModuleMetadata(@NotNull Collection metadata); + + /** + * updates a distribution set meta data value if corresponding entry exists. + * + * @param metadata + * the meta data entry to be updated + * @return the updated meta data entry + * @throws EntityNotFoundException + * in case the meta data entry does not exists and cannot be + * updated + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + SoftwareModuleMetadata updateSoftwareModuleMetadata(@NotNull SoftwareModuleMetadata metadata); + + /** + * deletes a software module meta data entry. + * + * @param id + * the ID of the software module meta data to delete + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + void deleteSoftwareModuleMetadata(@NotNull SwMetadataCompositeKey id); + + /** + * finds all meta data by the given software module id. + * + * @param swId + * the software module id to retrieve the meta data from + * @param pageable + * the page request to page the result + * @return a paged result of all meta data entries for a given software + * module id + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModuleMetadataBySoftwareModuleId(@NotNull Long swId, + @NotNull Pageable pageable); + + /** + * finds all meta data by the given software module id. + * + * @param softwareModuleId + * the software module id to retrieve the meta data from + * @param spec + * the specification to filter the result + * @param pageable + * the page request to page the result + * @return a paged result of all meta data entries for a given software + * module id + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModuleMetadataBySoftwareModuleId(@NotNull Long softwareModuleId, + @NotNull Specification spec, @NotNull Pageable pageable); + + /** + * finds a single software module meta data by its id. + * + * @param id + * the id of the software module meta data containing the meta + * data key and the ID of the software module + * @return the found SoftwareModuleMetadata or {@code null} if not exits + * @throws EntityNotFoundException + * in case the meta data does not exists for the given key + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModuleMetadata findSoftwareModuleMetadata(@NotNull SwMetadataCompositeKey id); + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java index 10a88b232..a5eaf4006 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; @@ -9,6 +17,10 @@ import org.springframework.core.convert.ConversionFailedException; import org.springframework.core.env.Environment; import org.springframework.security.access.prepost.PreAuthorize; +/** + * Management service for tenant configurations. + * + */ public interface TenantConfigurationManagement { /** @@ -131,4 +143,4 @@ public interface TenantConfigurationManagement { @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) void deleteConfiguration(TenantConfigurationKey configurationKey); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java new file mode 100644 index 000000000..adcca7c73 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java @@ -0,0 +1,100 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.util.List; +import java.util.stream.Collectors; + +import javax.persistence.EntityManager; +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; + +/** + * Utility class for deployment related topics. + * + */ +public final class DeploymentHelper { + + private DeploymentHelper() { + // utility class + } + + /** + * Internal helper method used only inside service level. As a result is no + * additional security necessary. + * + * @param target + * to update + * @param status + * of the target + * @param setInstalledDate + * to set + * @param entityManager + * for the operation + * @param targetInfoRepository + * for the operation + * + * @return updated target + */ + static Target updateTargetInfo(@NotNull final Target target, @NotNull final TargetUpdateStatus status, + final boolean setInstalledDate, final TargetInfoRepository targetInfoRepository, + final EntityManager entityManager) { + final TargetInfo ts = target.getTargetInfo(); + ts.setUpdateStatus(status); + + if (setInstalledDate) { + ts.setInstallationDate(System.currentTimeMillis()); + } + targetInfoRepository.save(ts); + return entityManager.merge(target); + } + + /** + * This method is called, when cancellation has been successful. It sets the + * action to canceled, resets the meta data of the target and in case there + * is a new action this action is triggered. + * + * @param action + * the action which is set to canceled + * @param actionRepository + * for the operation + * @param targetManagement + * for the operation + * @param entityManager + * for the operation + * @param targetInfoRepository + * for the operation + */ + static void successCancellation(final Action action, final ActionRepository actionRepository, + final TargetManagement targetManagement, final TargetInfoRepository targetInfoRepository, + final EntityManager entityManager) { + + // set action inactive + action.setActive(false); + action.setStatus(Status.CANCELED); + + final Target target = action.getTarget(); + final List nextActiveActions = actionRepository.findByTargetAndActiveOrderByIdAsc(target, true).stream() + .filter(a -> !a.getId().equals(action.getId())).collect(Collectors.toList()); + + if (nextActiveActions.isEmpty()) { + target.setAssignedDistributionSet(target.getTargetInfo().getInstalledDistributionSet()); + updateTargetInfo(target, TargetUpdateStatus.IN_SYNC, false, targetInfoRepository, entityManager); + } else { + target.setAssignedDistributionSet(nextActiveActions.get(0).getDistributionSet()); + } + targetManagement.updateTarget(target); + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java index c6d30208c..7bae73a8b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java @@ -267,4 +267,20 @@ public class JpaArtifactManagement implements ArtifactManagement { LOG.debug("storing new artifact into repository {}", artifact); return localArtifactRepository.save(artifact); } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public LocalArtifact createLocalArtifact(final InputStream inputStream, final Long moduleId, final String filename, + final boolean overrideExisting) { + return createLocalArtifact(inputStream, moduleId, filename, null, null, overrideExisting, null); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public LocalArtifact createLocalArtifact(final InputStream inputStream, final Long moduleId, final String filename, + final boolean overrideExisting, final String contentType) { + return createLocalArtifact(inputStream, moduleId, filename, null, null, overrideExisting, contentType); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index 76363cca9..8834b2ae0 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -409,9 +409,15 @@ public class JpaControllerManagement implements ControllerManagement { } @Override - @Transactional(isolation = Isolation.READ_UNCOMMITTED) public String getSecurityTokenByControllerId(final String controllerId) { final Target target = targetRepository.findByControllerId(controllerId); return target != null ? target.getSecurityToken() : null; } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public TargetInfo updateLastTargetQuery(final TargetInfo target, final URI address) { + return updateTargetStatus(target, null, System.currentTimeMillis(), address); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index 50bbd2d31..d905fb7b1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -133,7 +133,6 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Override @Modifying @Transactional(isolation = Isolation.READ_COMMITTED) - @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, final String... targetIDs) { return assignDistributionSet(dsID, ActionType.FORCED, Action.NO_FORCE_TIME, targetIDs); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index 160cf613c..d045cd549 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -18,14 +18,15 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import javax.persistence.EntityManager; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagAssigmentResultEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.DistributionSetFilter; -import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; +import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityLockedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -660,4 +661,26 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { distributionSets.forEach(ds -> ds.getTags().remove(tag)); return distributionSetRepository.save(distributionSets); } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public List createDistributionSetTypes(final Collection types) { + return types.stream().map(this::createDistributionSetType).collect(Collectors.toList()); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void deleteDistributionSet(final DistributionSet set) { + deleteDistributionSet(set.getId()); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public DistributionSetTagAssignmentResult toggleTagAssignment(final Collection sets, + final DistributionSetTag tag) { + return toggleTagAssignment(sets.stream().map(ds -> ds.getId()).collect(Collectors.toList()), tag.getName()); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java similarity index 55% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index 813f2e5a6..a3566f07f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -17,17 +17,16 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.ListJoin; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; -import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; @@ -42,7 +41,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule_; import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.repository.specifications.SoftwareModuleSpecification; import org.eclipse.hawkbit.repository.specifications.SpecificationsBuilder; -import org.hibernate.validator.constraints.NotEmpty; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.AuditorAware; import org.springframework.data.domain.Page; @@ -61,13 +59,13 @@ import com.google.common.base.Strings; import com.google.common.collect.Sets; /** - * Business facade for managing {@link SoftwareModule}s. + * JPA implementation of SoftwareManagement. * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service -public class SoftwareManagement { +public class JpaSoftwareManagement implements SoftwareManagement { @Autowired private EntityManager entityManager; @@ -96,23 +94,10 @@ public class SoftwareManagement { @Autowired private ArtifactManagement artifactManagement; - /** - * Updates existing {@link SoftwareModule}. Update-able values are - * {@link SoftwareModule#getDescription()} - * {@link SoftwareModule#getVendor()}. - * - * @param sm - * to update - * - * @return the saved {@link Entity}. - * - * @throws NullPointerException - * of {@link SoftwareModule#getId()} is null - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public SoftwareModule updateSoftwareModule(@NotNull final SoftwareModule sm) { + public SoftwareModule updateSoftwareModule(final SoftwareModule sm) { checkNotNull(sm.getId()); final SoftwareModule module = softwareModuleRepository.findOne(sm.getId()); @@ -130,19 +115,10 @@ public class SoftwareManagement { return updated ? softwareModuleRepository.save(module) : module; } - /** - * Updates existing {@link SoftwareModuleType}. Update-able value is - * {@link SoftwareModuleType#getDescription()} and - * {@link SoftwareModuleType#getColour()}. - * - * @param sm - * to update - * @return updated {@link Entity} - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public SoftwareModuleType updateSoftwareModuleType(@NotNull final SoftwareModuleType sm) { + public SoftwareModuleType updateSoftwareModuleType(final SoftwareModuleType sm) { checkNotNull(sm.getId()); final SoftwareModuleType type = softwareModuleTypeRepository.findOne(sm.getId()); @@ -159,37 +135,20 @@ public class SoftwareManagement { return updated ? softwareModuleTypeRepository.save(type) : type; } - /** - * - * @param swModule - * SoftwareModule to create - * @return SoftwareModule - * @throws EntityAlreadyExistsException - * if a given entity already exists - */ + @Override @Modifying - @Transactional - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public SoftwareModule createSoftwareModule(@NotNull final SoftwareModule swModule) { + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public SoftwareModule createSoftwareModule(final SoftwareModule swModule) { if (null != swModule.getId()) { throw new EntityAlreadyExistsException(); } return softwareModuleRepository.save(swModule); } - /** - * Create {@link SoftwareModule}s in the repository. - * - * @param swModules - * {@link SoftwareModule}s to create - * @return SoftwareModule - * @throws EntityAlreadyExistsException - * if a given entity already exists - */ + @Override @Modifying - @Transactional - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public List createSoftwareModule(@NotNull final Iterable swModules) { + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public List createSoftwareModule(final Iterable swModules) { swModules.forEach(swModule -> { if (null != swModule.getId()) { throw new EntityAlreadyExistsException(); @@ -200,19 +159,8 @@ public class SoftwareManagement { } - /** - * retrieves the {@link SoftwareModule}s by their {@link SoftwareModuleType} - * . - * - * @param pageable - * page parameters - * @param type - * to be filtered on - * @return the found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Slice findSoftwareModulesByType(@NotNull final Pageable pageable, - @NotNull final SoftwareModuleType type) { + @Override + public Slice findSoftwareModulesByType(final Pageable pageable, final SoftwareModuleType type) { final List> specList = new ArrayList<>(); @@ -225,15 +173,8 @@ public class SoftwareManagement { return findSwModuleByCriteriaAPI(pageable, specList); } - /** - * Counts {@link SoftwareModule}s with given {@link SoftwareModuleType}. - * - * @param type - * to count - * @return number of found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Long countSoftwareModulesByType(@NotNull final SoftwareModuleType type) { + @Override + public Long countSoftwareModulesByType(final SoftwareModuleType type) { final List> specList = new ArrayList<>(); @@ -246,63 +187,29 @@ public class SoftwareManagement { return countSwModuleByCriteriaAPI(specList); } - /** - * Finds {@link SoftwareModule} by given id. - * - * @param id - * to search for - * @return the found {@link SoftwareModule}s or null if not - * found. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) - public SoftwareModule findSoftwareModuleById(@NotNull final Long id) { + @Override + public SoftwareModule findSoftwareModuleById(final Long id) { return artifactManagement.findSoftwareModuleById(id); } - /** - * retrieves {@link SoftwareModule} by their name AND version AND type.. - * - * @param name - * of the {@link SoftwareModule} - * @param version - * of the {@link SoftwareModule} - * @param type - * of the {@link SoftwareModule} - * @return the found {@link SoftwareModule} or null - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public SoftwareModule findSoftwareModuleByNameAndVersion(@NotEmpty final String name, - @NotEmpty final String version, @NotNull final SoftwareModuleType type) { + @Override + public SoftwareModule findSoftwareModuleByNameAndVersion(final String name, final String version, + final SoftwareModuleType type) { return softwareModuleRepository.findOneByNameAndVersionAndType(name, version, type); } - /** - * Deletes the given {@link SoftwareModule} {@link Entity}. - * - * @param bsm - * is the {@link SoftwareModule} to be deleted - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteSoftwareModule(@NotNull final SoftwareModule bsm) { - - deleteSoftwareModules(Sets.newHashSet(bsm.getId())); - } - private boolean isUnassigned(final SoftwareModule bsmMerged) { return distributionSetRepository.findByModules(bsmMerged).isEmpty(); } - private Slice findSwModuleByCriteriaAPI(@NotNull final Pageable pageable, - @NotEmpty final List> specList) { + private Slice findSwModuleByCriteriaAPI(final Pageable pageable, + final List> specList) { return criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable, SoftwareModule.class); } - private Long countSwModuleByCriteriaAPI(@NotEmpty final List> specList) { + private Long countSwModuleByCriteriaAPI(final List> specList) { return softwareModuleRepository.count(SpecificationsBuilder.combineWithAnd(specList)); } @@ -312,16 +219,10 @@ public class SoftwareManagement { } } - /** - * Deletes {@link SoftwareModule}s which is any if the given ids. - * - * @param ids - * of the Software Modules to be deleted - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteSoftwareModules(@NotNull final Iterable ids) { + public void deleteSoftwareModules(final Iterable ids) { final List swModulesToDelete = softwareModuleRepository.findByIdIn(ids); final Set assignedModuleIds = new HashSet<>(); swModulesToDelete.forEach(swModule -> { @@ -349,15 +250,8 @@ public class SoftwareManagement { } } - /** - * Retrieves all software modules. Deleted ones are filtered. - * - * @param pageable - * pagination parameter - * @return the found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Slice findSoftwareModulesAll(@NotNull final Pageable pageable) { + @Override + public Slice findSoftwareModulesAll(final Pageable pageable) { final List> specList = new ArrayList<>(); @@ -376,13 +270,7 @@ public class SoftwareManagement { return findSwModuleByCriteriaAPI(pageable, specList); } - /** - * Count all {@link SoftwareModule}s in the repository that are not marked - * as deleted. - * - * @return number of {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + @Override public Long countSoftwareModulesAll() { final List> specList = new ArrayList<>(); @@ -393,79 +281,31 @@ public class SoftwareManagement { return countSwModuleByCriteriaAPI(specList); } - /** - * Retrieves software module including details ( - * {@link SoftwareModule#getArtifacts()}). - * - * @param id - * parameter - * @param isDeleted - * parameter - * @return the found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public SoftwareModule findSoftwareModuleWithDetails(@NotNull final Long id) { + @Override + public SoftwareModule findSoftwareModuleWithDetails(final Long id) { return artifactManagement.findSoftwareModuleWithDetails(id); } - /** - * Retrieves all {@link SoftwareModule}s with a given specification. - * - * @param spec - * the specification to filter the software modules - * @param pageable - * pagination parameter - * @return the found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findSoftwareModulesByPredicate(@NotNull final Specification spec, - @NotNull final Pageable pageable) { + @Override + public Page findSoftwareModulesByPredicate(final Specification spec, + final Pageable pageable) { return softwareModuleRepository.findAll(spec, pageable); } - /** - * Retrieves all {@link SoftwareModuleType}s with a given specification. - * - * @param spec - * the specification to filter the software modules types - * @param pageable - * pagination parameter - * @return the found {@link SoftwareModuleType}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findSoftwareModuleTypesByPredicate( - @NotNull final Specification spec, @NotNull final Pageable pageable) { + @Override + public Page findSoftwareModuleTypesByPredicate(final Specification spec, + final Pageable pageable) { return softwareModuleTypeRepository.findAll(spec, pageable); } - /** - * Retrieves all software modules with a given list of ids - * {@link SoftwareModule#getId()}. - * - * @param ids - * to search for - * @return {@link List} of found {@link SoftwareModule}s - */ + @Override @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public List findSoftwareModulesById(@NotEmpty final List ids) { + public List findSoftwareModulesById(final Collection ids) { return softwareModuleRepository.findByIdIn(ids); } - /** - * Filter {@link SoftwareModule}s with given - * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} - * and {@link SoftwareModule#getType()} that are not marked as deleted. - * - * @param pageable - * page parameter - * @param searchText - * to be filtered as "like" on {@link SoftwareModule#getName()} - * @param type - * to be filtered as "like" on {@link SoftwareModule#getType()} - * @return the page of found {@link SoftwareModule} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Slice findSoftwareModuleByFilters(@NotNull final Pageable pageable, final String searchText, + @Override + public Slice findSoftwareModuleByFilters(final Pageable pageable, final String searchText, final SoftwareModuleType type) { final List> specList = new ArrayList<>(); @@ -495,29 +335,9 @@ public class SoftwareManagement { return findSwModuleByCriteriaAPI(pageable, specList); } - /** - * Filter {@link SoftwareModule}s with given - * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} - * search text and {@link SoftwareModule#getType()} that are not marked as - * deleted and sort them by means of given distribution set related modules - * on top of the list. - * - * After that the modules are sorted by {@link SoftwareModule#getName()} and - * {@link SoftwareModule#getVersion()} in ascending order. - * - * @param pageable - * page parameter - * @param orderByDistributionId - * the ID of distribution set to be ordered on top - * @param searchText - * filtered as "like" on {@link SoftwareModule#getName()} - * @param type - * filtered as "equal" on {@link SoftwareModule#getType()} - * @return the page of found {@link SoftwareModule} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + @Override public Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( - @NotNull final Pageable pageable, @NotNull final Long orderByDistributionId, final String searchText, + final Pageable pageable, final Long orderByDistributionId, final String searchText, final SoftwareModuleType type) { final List resultList = new ArrayList<>(); @@ -594,9 +414,6 @@ public class SoftwareManagement { return specList; } - /** - * @param specifications - */ private Predicate[] specificationsToPredicate(final List> specifications, final Root root, final CriteriaQuery query, final CriteriaBuilder cb, final Predicate... additionalPredicates) { @@ -608,18 +425,7 @@ public class SoftwareManagement { return predicates.toArray(new Predicate[predicates.size()]); } - /** - * Counts {@link SoftwareModule}s with given - * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} - * and {@link SoftwareModule#getType()} that are not marked as deleted. - * - * @param searchText - * to search for in name and version - * @param type - * to filter the result - * @return number of found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + @Override public Long countSoftwareModuleByFilters(final String searchText, final SoftwareModuleType type) { final List> specList = new ArrayList<>(); @@ -640,71 +446,35 @@ public class SoftwareManagement { return countSwModuleByCriteriaAPI(specList); } - /** - * @param pageable - * parameter - * @return all {@link SoftwareModuleType}s in the repository. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findSoftwareModuleTypesAll(@NotNull final Pageable pageable) { + @Override + public Page findSoftwareModuleTypesAll(final Pageable pageable) { return softwareModuleTypeRepository.findByDeleted(pageable, false); } - /** - * @return number of {@link SoftwareModuleType}s in the repository. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + @Override public Long countSoftwareModuleTypesAll() { return softwareModuleTypeRepository.countByDeleted(false); } - /** - * - * @param key - * to search for - * @return {@link SoftwareModuleType} in the repository with given - * {@link SoftwareModuleType#getKey()} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public SoftwareModuleType findSoftwareModuleTypeByKey(@NotNull final String key) { + @Override + public SoftwareModuleType findSoftwareModuleTypeByKey(final String key) { return softwareModuleTypeRepository.findByKey(key); } - /** - * - * @param id - * to search for - * @return {@link SoftwareModuleType} in the repository with given - * {@link SoftwareModuleType#getId()} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public SoftwareModuleType findSoftwareModuleTypeById(@NotNull final Long id) { + @Override + public SoftwareModuleType findSoftwareModuleTypeById(final Long id) { return softwareModuleTypeRepository.findOne(id); } - /** - * - * @param name - * to search for - * @return all {@link SoftwareModuleType}s in the repository with given - * {@link SoftwareModuleType#getName()} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public SoftwareModuleType findSoftwareModuleTypeByName(@NotNull final String name) { + @Override + public SoftwareModuleType findSoftwareModuleTypeByName(final String name) { return softwareModuleTypeRepository.findByName(name); } - /** - * Creates new {@link SoftwareModuleType}. - * - * @param type - * to create - * @return created {@link Entity} - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public SoftwareModuleType createSoftwareModuleType(@NotNull final SoftwareModuleType type) { + public SoftwareModuleType createSoftwareModuleType(final SoftwareModuleType type) { if (type.getId() != null) { throw new EntityAlreadyExistsException("Given type contains an Id!"); } @@ -712,30 +482,10 @@ public class SoftwareManagement { return softwareModuleTypeRepository.save(type); } - /** - * Creates multiple {@link SoftwareModuleType}s. - * - * @param types - * to create - * @return created {@link Entity} - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public List createSoftwareModuleType(@NotNull final Collection types) { - return types.stream().map(this::createSoftwareModuleType).collect(Collectors.toList()); - } - - /** - * Deletes or markes as delete in case the type is in use. - * - * @param type - * to delete - */ - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteSoftwareModuleType(@NotNull final SoftwareModuleType type) { + public void deleteSoftwareModuleType(final SoftwareModuleType type) { if (softwareModuleRepository.countByType(type) > 0 || distributionSetTypeRepository.countByElementsSmType(type) > 0) { @@ -747,50 +497,21 @@ public class SoftwareManagement { } } - /** - * @param pageable - * the page request to page the result set - * @param set - * to search for - * @return all {@link SoftwareModule}s that are assigned to given - * {@link DistributionSet}. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findSoftwareModuleByAssignedTo(@NotNull final Pageable pageable, - @NotNull final DistributionSet set) { + @Override + public Page findSoftwareModuleByAssignedTo(final Pageable pageable, final DistributionSet set) { return softwareModuleRepository.findByAssignedTo(pageable, set); } - /** - * @param pageable - * the page request to page the result set - * @param set - * to search for - * @param type - * to filter - * @return all {@link SoftwareModule}s that are assigned to given - * {@link DistributionSet} filtered by {@link SoftwareModuleType}. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findSoftwareModuleByAssignedToAndType(@NotNull final Pageable pageable, - @NotNull final DistributionSet set, @NotNull final SoftwareModuleType type) { + @Override + public Page findSoftwareModuleByAssignedToAndType(final Pageable pageable, + final DistributionSet set, final SoftwareModuleType type) { return softwareModuleRepository.findByAssignedToAndType(pageable, set, type); } - /** - * creates or updates a single software module meta data entry. - * - * @param metadata - * the meta data entry to create or update - * @return the updated or created software module meta data entry - * @throws EntityAlreadyExistsException - * in case the meta data entry already exists for the specific - * key - */ + @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public SoftwareModuleMetadata createSoftwareModuleMetadata(@NotNull final SoftwareModuleMetadata metadata) { + public SoftwareModuleMetadata createSoftwareModuleMetadata(final SoftwareModuleMetadata metadata) { if (softwareModuleMetadataRepository.exists(metadata.getId())) { throwMetadataKeyAlreadyExists(metadata.getId().getKey()); } @@ -802,21 +523,11 @@ public class SoftwareManagement { return softwareModuleMetadataRepository.save(metadata); } - /** - * creates a list of software module meta data entries. - * - * @param metadata - * the meta data entries to create or update - * @return the updated or created software module meta data entries - * @throws EntityAlreadyExistsException - * in case one of the meta data entry already exists for the - * specific key - */ + @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public List createSoftwareModuleMetadata( - @NotEmpty final Collection metadata) { + final Collection metadata) { for (final SoftwareModuleMetadata softwareModuleMetadata : metadata) { checkAndThrowAlreadyExistsIfSoftwareModuleMetadataExists(softwareModuleMetadata.getId()); } @@ -824,20 +535,10 @@ public class SoftwareManagement { return softwareModuleMetadataRepository.save(metadata); } - /** - * updates a distribution set meta data value if corresponding entry exists. - * - * @param metadata - * the meta data entry to be updated - * @return the updated meta data entry - * @throws EntityNotFoundException - * in case the meta data entry does not exists and cannot be - * updated - */ + @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public SoftwareModuleMetadata updateSoftwareModuleMetadata(@NotNull final SoftwareModuleMetadata metadata) { + public SoftwareModuleMetadata updateSoftwareModuleMetadata(final SoftwareModuleMetadata metadata) { // check if exists otherwise throw entity not found exception findSoftwareModuleMetadata(metadata.getId()); // touch it to update the lock revision because we are modifying the @@ -847,50 +548,22 @@ public class SoftwareManagement { return softwareModuleMetadataRepository.save(metadata); } - /** - * deletes a software module meta data entry. - * - * @param id - * the ID of the software module meta data to delete - */ + @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public void deleteSoftwareModuleMetadata(@NotNull final SwMetadataCompositeKey id) { + public void deleteSoftwareModuleMetadata(final SwMetadataCompositeKey id) { softwareModuleMetadataRepository.delete(id); } - /** - * finds all meta data by the given software module id. - * - * @param swId - * the software module id to retrieve the meta data from - * @param pageable - * the page request to page the result - * @return a paged result of all meta data entries for a given software - * module id - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findSoftwareModuleMetadataBySoftwareModuleId(@NotNull final Long swId, - @NotNull final Pageable pageable) { + @Override + public Page findSoftwareModuleMetadataBySoftwareModuleId(final Long swId, + final Pageable pageable) { return softwareModuleMetadataRepository.findBySoftwareModuleId(swId, pageable); } - /** - * finds all meta data by the given software module id. - * - * @param softwareModuleId - * the software module id to retrieve the meta data from - * @param spec - * the specification to filter the result - * @param pageable - * the page request to page the result - * @return a paged result of all meta data entries for a given software - * module id - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + @Override public Page findSoftwareModuleMetadataBySoftwareModuleId(final Long softwareModuleId, - @NotNull final Specification spec, @NotNull final Pageable pageable) { + final Specification spec, final Pageable pageable) { return softwareModuleMetadataRepository .findAll( (Specification) (root, query, @@ -901,18 +574,8 @@ public class SoftwareManagement { pageable); } - /** - * finds a single software module meta data by its id. - * - * @param id - * the id of the software module meta data containing the meta - * data key and the ID of the software module - * @return the found SoftwareModuleMetadata or {@code null} if not exits - * @throws EntityNotFoundException - * in case the meta data does not exists for the given key - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public SoftwareModuleMetadata findSoftwareModuleMetadata(@NotNull final SwMetadataCompositeKey id) { + @Override + public SoftwareModuleMetadata findSoftwareModuleMetadata(final SwMetadataCompositeKey id) { final SoftwareModuleMetadata findOne = softwareModuleMetadataRepository.findOne(id); if (findOne == null) { throw new EntityNotFoundException("Metadata with key '" + id.getKey() + "' does not exist"); @@ -931,4 +594,19 @@ public class SoftwareManagement { throw new EntityAlreadyExistsException("Metadata entry with key '" + metadataKey + "' already exists"); } + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void deleteSoftwareModule(final SoftwareModule bsm) { + deleteSoftwareModules(Sets.newHashSet(bsm.getId())); + } + + @Override + @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public List createSoftwareModuleType(final Collection types) { + + return types.stream().map(this::createSoftwareModuleType).collect(Collectors.toList()); + } + } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java index 99b93926f..dafc21eef 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java @@ -22,6 +22,7 @@ import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.jpa.ActionRepository; import org.eclipse.hawkbit.repository.jpa.ActionStatusRepository; @@ -32,7 +33,6 @@ import org.eclipse.hawkbit.repository.jpa.ExternalArtifactRepository; import org.eclipse.hawkbit.repository.jpa.LocalArtifactRepository; import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; import org.eclipse.hawkbit.repository.jpa.RolloutRepository; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.jpa.SoftwareModuleMetadataRepository; import org.eclipse.hawkbit.repository.jpa.SoftwareModuleRepository; import org.eclipse.hawkbit.repository.jpa.SoftwareModuleTypeRepository; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java index 11106eaf1..03a9b230f 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java @@ -18,7 +18,7 @@ import java.util.UUID; import org.apache.commons.io.IOUtils; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java index 849cf8e30..04eccb13e 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java @@ -270,7 +270,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Searches for software modules based on a list of IDs.") public void findSoftwareModulesById() { - final List modules = new ArrayList(); + final List modules = new ArrayList<>(); modules.add(softwareManagement.createSoftwareModule(new SoftwareModule(osType, "poky-una", "3.0.2", null, "")) .getId()); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java index e2e86bed1..f27c7b707 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java @@ -30,7 +30,7 @@ import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.jpa.TagManagement; import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java index 9dfcbae55..db5efd37c 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java @@ -30,8 +30,8 @@ import org.eclipse.hawkbit.controller.model.DeploymentBase; import org.eclipse.hawkbit.controller.model.Result.FinalResult; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java index 95e3f0c8d..8051146a1 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetMapper.java @@ -16,8 +16,8 @@ import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetType; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java index 9e9dc2369..a30927ebf 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java @@ -18,9 +18,9 @@ import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetFields; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.jpa.TargetWithActionType; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java index fbe22af5c..409caf01d 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeMapper.java @@ -14,8 +14,8 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.rest.resource.api.DistributionSetTypeRestApi; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java index 32e87e05e..8798f0ec8 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java @@ -12,8 +12,8 @@ import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetTypeFields; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java index 5c057acd4..00f8f4756 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DownloadArtifactResource.java @@ -13,8 +13,8 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.rest.resource.helper.RestResourceConversionHelper; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java index 8732cc1d1..01dfae9cd 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleMapper.java @@ -14,8 +14,8 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java index 0d7a4b8f0..830443cbd 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResource.java @@ -12,10 +12,10 @@ import java.io.IOException; import java.util.List; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SoftwareModuleFields; import org.eclipse.hawkbit.repository.SoftwareModuleMetadataFields; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java index df042d38c..e3498f141 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeResource.java @@ -10,9 +10,9 @@ package org.eclipse.hawkbit.rest.resource; import java.util.List; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SoftwareModuleTypeFields; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java index 9d823e832..ac1c95374 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java @@ -32,9 +32,9 @@ import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.jpa.ActionRepository; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java index 364b659da..e6284d5d6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java @@ -14,7 +14,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.artifacts.state.CustomFile; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java index d1d034555..ea49d2f1f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 6a033bfd8..1e4029087 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.io.Serializable; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java index 4fea3df08..478438891 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java @@ -12,7 +12,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 4039a2be2..f2e43c1fb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -13,8 +13,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java index 4727ecae7..4a4006c2a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/SMTypeFilterButtonClick.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtype; import java.io.Serializable; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java index f8d6dba66..b1c274672 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java @@ -11,8 +11,8 @@ package org.eclipse.hawkbit.ui.common; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 0e3ed8da3..d7f5d2748 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.jpa.DistributionSetRepository; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.common.CoordinatesToColor; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java index 32bb0ce86..a1d1ffcfe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java @@ -14,7 +14,7 @@ import java.util.Map; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index ca469c967..e92e4e735 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -18,8 +18,8 @@ import java.util.Map.Entry; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java index 45e02b2ca..a97c5786d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java @@ -17,7 +17,7 @@ import java.util.Set; import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java index 84ac0f1dc..eb53cef55 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java index 17b565774..eeea33723 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.details.ArtifactDetailsLayout; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java index d270c36f2..6f29ed661 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterButtonClick.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.distributions.smtype; import java.io.Serializable; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterSingleButtonClick; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index abd1942c4..0e71567af 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -20,7 +20,7 @@ import java.util.Map.Entry; import java.util.TimeZone; import org.apache.commons.lang3.StringUtils; -import org.eclipse.hawkbit.repository.jpa.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.NamedEntity; diff --git a/pom.xml b/pom.xml index b6d09758e..10e60e763 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ https://projects.eclipse.org/projects/iot.hawkbit https://circleci.com/gh/eclipse/hawkbit - 0.7.2.201409121644 + 0.7.6.201602180812 1.4 From c2bf9222b7d4029c30c5c9f41db7eb913f088b61 Mon Sep 17 00:00:00 2001 From: Asharani Date: Thu, 19 May 2016 10:51:12 +0530 Subject: [PATCH 121/371] Signed-off-by: Asharani --- .../ui/artifacts/event/UploadStatusEvent.java | 2 +- .../ui/artifacts/upload/UploadHandler.java | 53 ++++++++++-- .../ui/artifacts/upload/UploadLayout.java | 5 +- .../upload/UploadStatusInfoWindow.java | 83 ++++++++++++++----- .../src/main/resources/messages.properties | 4 + .../src/main/resources/messages_de.properties | 6 +- .../src/main/resources/messages_en.properties | 5 +- 7 files changed, 123 insertions(+), 35 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java index 96513a52a..8a4da9f6d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java @@ -15,7 +15,7 @@ package org.eclipse.hawkbit.ui.artifacts.event; public class UploadStatusEvent { public enum UploadStatusEventType { - UPLOAD_FAILED, UPLOAD_IN_PROGRESS, UPLOAD_STARTED, UPLOAD_FINISHED, UPLOAD_SUCCESSFUL, UPLOAD_STREAMING_FAILED, UPLOAD_STREAMING_FINISHED + UPLOAD_FAILED, UPLOAD_IN_PROGRESS, UPLOAD_STARTED, UPLOAD_FINISHED, UPLOAD_SUCCESSFUL, UPLOAD_STREAMING_FAILED, UPLOAD_STREAMING_FINISHED, ABORT_UPLOAD } private UploadStatusEventType uploadProgressEventType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index 848fa2da5..45a55d138 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -15,7 +15,6 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.exception.ArtifactUploadFailedException; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadFileStatus; import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent.UploadStatusEventType; @@ -29,7 +28,6 @@ import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.server.StreamVariable; -import com.vaadin.ui.UI; import com.vaadin.ui.Upload; import com.vaadin.ui.Upload.FailedEvent; import com.vaadin.ui.Upload.FailedListener; @@ -66,6 +64,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene private volatile String mimeType = null; private volatile boolean streamingInterrupted = false; private volatile boolean uploadInterrupted = false; + private volatile boolean aborted = false; private String failureReason; private final I18N i18n; @@ -77,6 +76,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene UploadHandler(final String fileName, final long fileSize, final UploadLayout view, final long maxSize, final Upload upload, final String mimeType, SoftwareModule selectedSw) { super(); + this.aborted = false; this.fileName = fileName; this.fileSize = fileSize; this.view = view; @@ -87,6 +87,23 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene this.i18n = SpringContextHelper.getBean(I18N.class); this.eventBus = SpringContextHelper.getBean(EventBus.SessionEventBus.class); this.artifactUploadState = SpringContextHelper.getBean(ArtifactUploadState.class); + eventBus.subscribe(this); + } + + @PreDestroy + void destroy() { + /* + * It's good manners to do this, even though vaadin-spring will + * automatically unsubscribe when this UI is garbage collected. + */ + eventBus.unsubscribe(this); + } + + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final UploadStatusEventType event) { + if (event == UploadStatusEventType.ABORT_UPLOAD) { + aborted = true; + } } /** @@ -98,6 +115,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene public final OutputStream getOutputStream() { try { streamingInterrupted = false; + failureReason = null; return view.saveUploadedFileDetails(fileName, fileSize, mimeType, selectedSw); } catch (final ArtifactUploadFailedException e) { LOG.error("Atifact upload failed {} ", e); @@ -116,6 +134,8 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public OutputStream receiveUpload(final String fileName, final String mimeType) { uploadInterrupted = false; + aborted = false; + failureReason = null; this.fileName = fileName; this.mimeType = mimeType; // reset has directory flag before upload @@ -232,10 +252,13 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene if (readBytes > maxSize || contentLength > maxSize) { LOG.error("User tried to upload more than was allowed ({}).", maxSize); failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); - eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( - fileName, failureReason, selectedSwForUpload))); - upload.interruptUpload(); - uploadInterrupted = true; + interruptFileUpload(); + return; + } + if (aborted) { + LOG.error("User aborted file upload"); + failureReason = i18n.get("message.uploadedfile.aborted"); + interruptFileUpload(); return; } eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_IN_PROGRESS, @@ -254,9 +277,13 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene if (event.getBytesReceived() > maxSize || event.getContentLength() > maxSize) { LOG.error("User tried to upload more than was allowed ({}).", maxSize); failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); - eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( - fileName, failureReason, selectedSw))); - streamingInterrupted = true; + interruptFileStreaming(); + return; + } + if (aborted) { + LOG.error("User aborted the upload"); + failureReason = i18n.get("message.uploadedfile.aborted"); + interruptFileStreaming(); return; } eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_IN_PROGRESS, new UploadFileStatus( @@ -345,4 +372,12 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene return true; } + private void interruptFileStreaming() { + streamingInterrupted = true; + } + + private void interruptFileUpload() { + upload.interruptUpload(); + uploadInterrupted = true; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index cbf766da8..4eaa61096 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -532,8 +532,7 @@ public class UploadLayout extends VerticalLayout { */ boolean enableProcessBtn() { if (artifactUploadState.getNumberOfFilesActuallyUpload().intValue() >= artifactUploadState - .getNumberOfFileUploadsExpected().intValue() - && artifactUploadState.getNumberOfFilesActuallyUpload().get() != 0) { + .getNumberOfFileUploadsExpected().intValue() && !getFileSelected().isEmpty()) { processBtn.setEnabled(true); artifactUploadState.getNumberOfFilesActuallyUpload().set(0); artifactUploadState.getNumberOfFileUploadsExpected().set(0); @@ -729,7 +728,7 @@ public class UploadLayout extends VerticalLayout { private boolean isUploadComplete() { int uploadedCount = artifactUploadState.getNumberOfFilesActuallyUpload().intValue(); int expectedUploadsCount = artifactUploadState.getNumberOfFileUploadsExpected().intValue(); - return uploadedCount == expectedUploadsCount; + return uploadedCount == expectedUploadsCount; } private void onUploadFailure(final UploadStatusEvent event) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java index e2a486e6c..351d625c9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java @@ -18,8 +18,10 @@ import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent.UploadStatusEventType; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; +import org.eclipse.hawkbit.ui.common.ConfirmationDialog; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; +import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -66,6 +68,9 @@ public class UploadStatusInfoWindow extends Window { @Autowired private ArtifactUploadState artifactUploadState; + @Autowired + private I18N i18n; + private static final String PROGRESS = "Progress"; private static final String FILE_NAME = "File name"; @@ -82,6 +87,8 @@ public class UploadStatusInfoWindow extends Window { private volatile boolean errorOccured = false; + private volatile boolean uploadAborted = false; + private Button minimizeButton; private VerticalLayout mainLayout; @@ -91,9 +98,10 @@ public class UploadStatusInfoWindow extends Window { private Button closeButton; private Button resizeButton; - - private UI ui; + private UI ui; + + private ConfirmationDialog confirmDialog; /** * Default Constructor. @@ -118,10 +126,10 @@ public class UploadStatusInfoWindow extends Window { setContent(mainLayout); eventBus.subscribe(this); ui = UI.getCurrent(); - + + createConfirmDialog(); } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final UploadStatusEvent event) { if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_IN_PROGRESS) { @@ -139,13 +147,12 @@ public class UploadStatusInfoWindow extends Window { ui.access(() -> uploadSucceeded(event.getUploadStatus().getFileName())); } } - + private void onStartOfUpload(UploadStatusEvent event) { uploadSessionStarted(); uploadStarted(event.getUploadStatus().getFileName()); } - @PreDestroy void destroy() { /* @@ -154,7 +161,7 @@ public class UploadStatusInfoWindow extends Window { */ eventBus.unsubscribe(this); } - + private void restoreState() { Indexed container = grid.getContainerDataSource(); if (container.getItemIds().isEmpty()) { @@ -246,7 +253,7 @@ public class UploadStatusInfoWindow extends Window { @Override public JsonValue encode(final String value) { - String result ; + String result; switch (value) { case "Finished": result = "

" + FontAwesome.CHECK_CIRCLE.getHtml() + "
"; @@ -266,20 +273,28 @@ public class UploadStatusInfoWindow extends Window { * Automatically close if not error has occured. */ void uploadSessionFinished() { - if (!errorOccured) { - close(); + uploadAborted = false; + if (!errorOccured && !artifactUploadState.isStatusPopupMinimized()) { + clearWindow(); } artifactUploadState.setUploadCompleted(true); minimizeButton.setEnabled(false); + closeButton.setEnabled(true); + confirmDialog.getWindow().close(); + UI.getCurrent().removeWindow(confirmDialog.getWindow()); } void uploadSessionStarted() { - if (!artifactUploadState.isStatusPopupMinimized()) { - close(); + if (artifactUploadState.getNumberOfFilesActuallyUpload().intValue() == 0 + && artifactUploadState.getNumberOfFileUploadsFailed().intValue() == 0 + && !artifactUploadState.isStatusPopupMinimized()) { openWindow(); } - minimizeButton.setEnabled(true); - artifactUploadState.setUploadCompleted(false); + if (!uploadAborted) { + minimizeButton.setEnabled(true); + closeButton.setEnabled(true); + artifactUploadState.setUploadCompleted(false); + } } void openWindow() { @@ -304,11 +319,11 @@ public class UploadStatusInfoWindow extends Window { } void updateProgress(final String filename, final long readBytes, final long contentLength) { - final Item item = uploads.getItem(filename); + final Item item = uploads.getItem(filename); if (item != null) { double progress = (double) readBytes / (double) contentLength; item.getItemProperty(PROGRESS).setValue(progress); - List uploadStatusObjectList = (List) artifactUploadState + List uploadStatusObjectList = (List) artifactUploadState .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) .collect(Collectors.toList()); if (!uploadStatusObjectList.isEmpty()) { @@ -340,9 +355,7 @@ public class UploadStatusInfoWindow extends Window { } void uploadFailed(final String filename, final String errorReason) { - if (!errorOccured) { - errorOccured = true; - } + errorOccured = true; String status = "Failed"; final Item item = uploads.getItem(filename); if (item != null) { @@ -363,6 +376,9 @@ public class UploadStatusInfoWindow extends Window { errorOccured = false; uploads.removeAllItems(); setWindowMode(WindowMode.NORMAL); + setColumnWidth(); + setPopupSizeInMinMode(); + resizeButton.setIcon(FontAwesome.EXPAND); this.close(); artifactUploadState.getUploadedFileStatusList().clear(); artifactUploadState.getNumberOfFileUploadsFailed().set(0); @@ -421,7 +437,34 @@ public class UploadStatusInfoWindow extends Window { SPUIComponetIdProvider.UPLOAD_STATUS_POPUP_CLOSE_BUTTON_ID, "", "", "", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); closeBtn.addStyleName(ValoTheme.BUTTON_BORDERLESS); - closeBtn.addClickListener(event -> clearWindow()); + closeBtn.addClickListener(event -> onClose()); return closeBtn; } + + private void onClose() { + if (!artifactUploadState.isUploadCompleted()) { + confirmAbortAction(); + } else { + clearWindow(); + } + } + + private void confirmAbortAction() { + UI.getCurrent().addWindow(confirmDialog.getWindow()); + confirmDialog.getWindow().bringToFront(); + } + + private void createConfirmDialog() { + confirmDialog = new ConfirmationDialog(i18n.get("caption.cancel.action.confirmbox"), + i18n.get("message.abort.upload"), i18n.get("button.ok"), i18n.get("button.cancel"), ok -> { + if (ok) { + eventBus.publish(this, UploadStatusEventType.ABORT_UPLOAD); + uploadAborted = true; + errorOccured = true; + minimizeButton.setEnabled(false); + closeButton.setEnabled(false); + } + }); + } + } diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 25dabd354..7efc6e16d 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -86,6 +86,7 @@ caption.cancel.action.confirmbox = Confirm action cancel caption.forcequit.action.confirmbox = Confirm force quit action caption.forced.datefield = Force update at time caption.force.action.confirmbox = Confirm Force Active Action +caption.confirm.abort.action = Confirm abort action caption.filter.delete.confirmbox = Confirm Filter Delete Action @@ -321,8 +322,11 @@ message.duplicate.filename = Duplicate file name message.swModule.deleted = {0} Software module(s) deleted message.upload.failed = Streaming Failed message.uploadedfile.size.exceeded = File size exceeded .Allowed size {0} bytes +message.uploadedfile.aborted = File upload aborted message.file.not.found = File not found message.artifact.deleted =Artifact with file {0} deleted successfully +message.abort.upload = Are you sure that you want to abort the upload? + upload.swModuleTable.header = Software module diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 39661e3c9..6a1e25222 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -85,8 +85,9 @@ caption.forced.datefield = Force update at time caption.force.action.confirmbox = Confirm Force Active Action caption.filter.simple = Simple Filter caption.filter.custom = Custom Filter - caption.filter.delete.confirmbox = Confirm Filter Delete Action +caption.confirm.abort.action = Confirm abort action + # Labels prefix with - label label.dist.details.type = Type : @@ -319,8 +320,11 @@ message.swModule.deleted = {0} Software module(s) deleted message.error.missing.tagname = Please select tag name message.upload.failed = Streaming Failed message.uploadedfile.size.exceeded = File size exceeded .Allowed size {0} bytes +message.uploadedfile.aborted = File upload aborted message.file.not.found = File not found message.artifact.deleted =Artifact with file {0} deleted successfully +message.abort.upload = Are you sure that you want to abort the upload? + upload.swModuleTable.header = Software module diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 23df35ad2..d512b9b97 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -85,8 +85,8 @@ caption.soft.delete.confirmbox = Confirm Software Module Delete Action caption.cancel.action.confirmbox = Confirm action cancellation caption.forced.datefield = Force update at time caption.force.action.confirmbox = Confirm Force Active Action - caption.filter.delete.confirmbox = Confirm Filter Delete Action +caption.confirm.abort.action = Confirm abort action # Labels prefix with - label label.dist.details.type = Type : @@ -313,7 +313,10 @@ message.duplicate.filename = Duplicate file name message.swModule.deleted = {0} Software module(s) deleted message.upload.failed = Streaming Failed message.uploadedfile.size.exceeded = File size exceeded .Allowed size {0} bytes +message.uploadedfile.aborted = File upload aborted message.file.not.found = File not found +message.abort.upload = Are you sure that you want to abort the upload? + upload.swModuleTable.header = Software module upload.selectedfile.name = file selected for upload From 4387c8203bd7bcfae1d6ec472d64bbf7b126fadc Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 19 May 2016 09:57:43 +0200 Subject: [PATCH 122/371] optimize ColorPickerLayout Signed-off-by: Melanie Retter --- .../CreateUpdateSoftwareTypeLayout.java | 417 ++++++------------ .../ui/colorPicker/ColorPickerLayout.java | 24 +- .../CreateUpdateDistSetTypeLayout.java | 64 +-- .../management/tag/CreateUpdateTagLayout.java | 12 +- 4 files changed, 150 insertions(+), 367 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 044163e35..4fbe61303 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -9,34 +9,29 @@ package org.eclipse.hawkbit.ui.artifacts.smtype; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; -import org.eclipse.hawkbit.ui.common.CommonDialogWindow; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.CoordinatesToColor; import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; -import org.eclipse.hawkbit.ui.utils.UINotification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; -import org.vaadin.spring.events.EventBus; import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; @@ -48,20 +43,15 @@ import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; -import com.vaadin.ui.ComboBox; -import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; -import com.vaadin.ui.Slider; -import com.vaadin.ui.Slider.ValueOutOfBoundsException; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; -import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.components.colorpicker.ColorChangeEvent; import com.vaadin.ui.components.colorpicker.ColorChangeListener; -import com.vaadin.ui.components.colorpicker.ColorPickerGradient; import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; @@ -71,34 +61,20 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements ColorChangeListener, ColorSelector { +public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout + implements ColorChangeListener, ColorSelector { private static final long serialVersionUID = -5169398523815919367L; private static final Logger LOG = LoggerFactory.getLogger(CreateUpdateSoftwareTypeLayout.class); - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private I18N i18n; - - /** - * Instance of ColorPickerPreview. - */ - private SpColorPickerPreview selPreview; - - @Autowired - private transient UINotification uiNotification; - @Autowired private transient SoftwareManagement swTypeManagementService; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private transient UiProperties uiProperties; + private VerticalLayout sliderLayout; + private HorizontalLayout colorLayout; private String createTypeStr; private String updateTypeStr; private String singleAssignStr; @@ -108,49 +84,16 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C private Label singleAssign; private Label multiAssign; private Label comboLabel; - private Label colorLabel; - private Label madatoryLabel; - private TextField typeName; private TextField typeKey; - private TextArea typeDesc; - // private Button saveTag; - // private Button discardTag; - private Button tagColorPreviewBtn; private OptionGroup createOptiongroup; private OptionGroup assignOptiongroup; - private ComboBox typeNameComboBox; - protected static final String DEFAULT_COLOR = "rgb(44,151,32)"; private static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; private static final String TAG_DYNAMIC_STYLE = "tag-color-preview"; - private Set selectors; - private Color selectedColor; - private ColorPickerGradient colorSelect; - private Slider redSlider; - private Slider greenSlider; - private Slider blueSlider; - private CommonDialogWindow swTypeWindow; - protected boolean tagPreviewBtnClicked = false; - private VerticalLayout comboLayout; - private VerticalLayout sliders; - private VerticalLayout colorPickerLayout; - private HorizontalLayout mainLayout; - private VerticalLayout fieldLayout; /** RGB color converter. */ private final Coordinates2Color rgbConverter = new CoordinatesToColor(); - /** - * Initialize the artifact details layout. - */ - public void init() { - createComponents(); - buildLayout(); - addListeners(); - } - - // TODO MR WINDOW - private void createComponents() { createTypeStr = i18n.get("label.create.type"); updateTypeStr = i18n.get("label.update.type"); @@ -165,133 +108,72 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); - typeName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", + tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - typeName.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_NAME); + tagName.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_NAME); typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_KEY, true, "", i18n.get("textfield.key"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeKey.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_KEY); - typeDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", + tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - typeDesc.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC); - typeDesc.setImmediate(true); - typeDesc.setNullRepresentation(""); + tagDesc.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC); + tagDesc.setImmediate(true); + tagDesc.setNullRepresentation(""); - typeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, + tagNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, "", i18n.get("label.combobox.type")); - typeNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); - typeNameComboBox.setImmediate(true); - - // saveTag = - // SPUIComponentProvider.getButton(SPUIDefinitions.NEW_SW_TYPE_SAVE, "", - // "", "", true, FontAwesome.SAVE, - // SPUIButtonStyleSmallNoBorder.class); - // saveTag.addStyleName(ValoTheme.BUTTON_BORDERLESS); - // - // discardTag = - // SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_TAG_DISRACD, - // "", "", - // "discard-button-style", true, FontAwesome.TIMES, - // SPUIButtonStyleSmallNoBorder.class); - // discardTag.addStyleName(ValoTheme.BUTTON_BORDERLESS); + tagNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); + tagNameComboBox.setImmediate(true); tagColorPreviewBtn = new Button(); tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); - getPreviewButtonColor(DEFAULT_COLOR); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); - selectors = new HashSet<>(); - selectedColor = new Color(44, 151, 32); - selPreview = new SpColorPickerPreview(selectedColor); - - colorSelect = new ColorPickerGradient("rgb-gradient", rgbConverter); - colorSelect.setColor(selectedColor); - colorSelect.setWidth("220px"); - - redSlider = createRGBSlider("", "red"); - greenSlider = createRGBSlider("", "green"); - blueSlider = createRGBSlider("", "blue"); - setRgbSliderValues(selectedColor); + ColorPickerHelper.setRgbSliderValues(colorPickerLayout); createUpdateOptionGroup(); singleMultiOptionGroup(); - } - private void buildLayout() { - comboLayout = new VerticalLayout(); + @Override + protected void buildLayout() { - sliders = new VerticalLayout(); - sliders.addComponents(redSlider, greenSlider, blueSlider); + super.buildLayout(); + getFormLayout().addComponent(typeKey, 4); + getFormLayout().addComponent(assignOptiongroup, 5); - selectors.add(colorSelect); + final HorizontalLayout mainLayout = new HorizontalLayout(); - colorPickerLayout = new VerticalLayout(); - colorPickerLayout.setStyleName("rgb-vertical-layout"); - colorPickerLayout.addComponent(selPreview); - colorPickerLayout.addComponent(colorSelect); + mainLayout.addComponent(getFormLayout()); - fieldLayout = new VerticalLayout(); - fieldLayout.setSizeUndefined(); - fieldLayout.setSpacing(true); - fieldLayout.setMargin(false); - // fieldLayout.setWidth("100%"); - // fieldLayout.setHeight(null); - fieldLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); - fieldLayout.addComponent(createOptiongroup); - fieldLayout.addComponent(comboLayout); - fieldLayout.addComponent(madatoryLabel); - fieldLayout.addComponent(typeName); - fieldLayout.addComponent(typeKey); - fieldLayout.addComponent(typeDesc); - fieldLayout.addComponent(assignOptiongroup); + colorLayout = new HorizontalLayout(); + sliderLayout = new VerticalLayout(); + final HorizontalLayout chooseColorLayout = new HorizontalLayout(); + chooseColorLayout.addComponents(colorLabel, tagColorPreviewBtn); + chooseColorLayout.setComponentAlignment(colorLabel, Alignment.TOP_CENTER); + chooseColorLayout.setComponentAlignment(tagColorPreviewBtn, Alignment.TOP_CENTER); + sliderLayout.addComponent(chooseColorLayout); + colorLayout.addComponent(sliderLayout); - final HorizontalLayout colorLabelLayout = new HorizontalLayout(); - colorLabelLayout.addComponents(colorLabel, tagColorPreviewBtn); - fieldLayout.addComponent(colorLabelLayout); - - // final HorizontalLayout buttonLayout = new HorizontalLayout(); - // buttonLayout.addComponent(saveTag); - // buttonLayout.addComponent(discardTag); - // buttonLayout.setComponentAlignment(discardTag, - // Alignment.BOTTOM_RIGHT); - // buttonLayout.setComponentAlignment(saveTag, Alignment.BOTTOM_LEFT); - // buttonLayout.addStyleName("window-style"); - // buttonLayout.setWidth("152px"); - - // TODO MR WINDOW - - final VerticalLayout fieldButtonLayout = new VerticalLayout(); - fieldButtonLayout.addComponent(fieldLayout); - // fieldButtonLayout.addComponent(buttonLayout); - - mainLayout = new HorizontalLayout(); - mainLayout.addComponent(fieldButtonLayout); - setCompositionRoot(mainLayout); - typeName.focus(); + final VerticalLayout mainWindowLayout = new VerticalLayout(); + mainWindowLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); + mainWindowLayout.addComponent(mainLayout); + mainWindowLayout.addComponent(colorLayout); } - private void addListeners() { - colorSelect.addColorChangeListener(this); - selPreview.addColorChangeListener(this); - tagColorPreviewBtn.addClickListener(event -> previewButtonClicked()); - createOptiongroup.addValueChangeListener(event -> createOptionValueChanged(event)); - typeNameComboBox.addValueChangeListener(event -> typeNameChosen(event)); - slidersValueChangeListeners(); - } - - public CommonDialogWindow getWindow() { + @Override + public void createWindow() { reset(); - swTypeWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(), event -> discard()); - return swTypeWindow; + window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event)); } /** @@ -302,71 +184,51 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C */ private void createOptionValueChanged(final ValueChangeEvent event) { if ("Update Type".equals(event.getProperty().getValue())) { - typeName.clear(); - typeDesc.clear(); + tagName.clear(); + tagDesc.clear(); typeKey.clear(); typeKey.setEnabled(false); - typeName.setEnabled(false); + tagName.setEnabled(false); assignOptiongroup.setEnabled(false); - populateTypeNameCombo(); + populateTagNameCombo(); // show target name combo comboLayout.addComponent(comboLabel); - comboLayout.addComponent(typeNameComboBox); + comboLayout.addComponent(tagNameComboBox); } else { typeKey.setEnabled(true); - typeName.setEnabled(true); - typeName.clear(); - typeDesc.clear(); + tagName.setEnabled(true); + tagName.clear(); + tagDesc.clear(); typeKey.clear(); assignOptiongroup.setEnabled(true); // hide target name combo comboLayout.removeComponent(comboLabel); - comboLayout.removeComponent(typeNameComboBox); + comboLayout.removeComponent(tagNameComboBox); } // close the color picker layout tagPreviewBtnClicked = false; // reset the selected color - Set defualt color restoreComponentStyles(); - getPreviewButtonColor(DEFAULT_COLOR); - selPreview.setColor(rgbToColorConverter(DEFAULT_COLOR)); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + getColorPickerLayout().getSelPreview() + .setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); // remove the sliders and color picker layout - fieldLayout.removeComponent(sliders); - mainLayout.removeComponent(colorPickerLayout); - } - - /** - * Populate Software Module Type name combo. - */ - public void populateTypeNameCombo() { - typeNameComboBox.setContainerDataSource(HawkbitCommonUtil.createLazyQueryContainer( - new BeanQueryFactory(SoftwareModuleTypeBeanQuery.class))); - typeNameComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); + // TODO MR + // fieldLayout.removeComponent(sliders); + // mainLayout.removeComponent(colorPickerLayout); } /** * reset the components. */ - private void reset() { - typeName.setEnabled(true); - typeName.clear(); + @Override + protected void reset() { + + super.reset(); typeKey.clear(); - typeDesc.clear(); - restoreComponentStyles(); - - // hide target name combo - comboLayout.removeComponent(comboLabel); - comboLayout.removeComponent(typeNameComboBox); - fieldLayout.removeComponent(sliders); - mainLayout.removeComponent(colorPickerLayout); - - createOptiongroup.select(createTypeStr); assignOptiongroup.select(singleAssignStr); - // Default green color - selectedColor = new Color(44, 151, 32); - selPreview.setColor(selectedColor); - tagPreviewBtnClicked = false; } private void typeNameChosen(final ValueChangeEvent event) { @@ -379,21 +241,23 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C } private void resetTagNameField() { - typeName.setEnabled(false); - typeName.clear(); + tagName.setEnabled(false); + tagName.clear(); typeKey.clear(); - typeDesc.clear(); + tagDesc.clear(); restoreComponentStyles(); - fieldLayout.removeComponent(sliders); - mainLayout.removeComponent(colorPickerLayout); + + // fieldLayout.removeComponent(sliders); + // mainLayout.removeComponent(colorPickerLayout); assignOptiongroup.select(singleAssignStr); // Default green color - selectedColor = new Color(44, 151, 32); - selPreview.setColor(selectedColor); - tagPreviewBtnClicked = false; + // TODO extra method + colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); + colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); + tagPreviewBtnClicked = false; } /** @@ -404,11 +268,11 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C * as the selected tag from combo */ private void setTypeTagCombo(final String targetTagSelected) { - typeName.setValue(targetTagSelected); + tagName.setValue(targetTagSelected); final SoftwareModuleType selectedTypeTag = swTypeManagementService .findSoftwareModuleTypeByName(targetTagSelected); if (null != selectedTypeTag) { - typeDesc.setValue(selectedTypeTag.getDescription()); + tagDesc.setValue(selectedTypeTag.getDescription()); typeKey.setValue(selectedTypeTag.getKey()); if (selectedTypeTag.getMaxAssignments() == Integer.MAX_VALUE) { assignOptiongroup.setValue(multiAssignStr); @@ -416,35 +280,25 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C assignOptiongroup.setValue(singleAssignStr); } + // TODO extra method if (null == selectedTypeTag.getColour()) { - selectedColor = new Color(44, 151, 32); - selPreview.setColor(selectedColor); - colorSelect.setColor(selectedColor); - createDynamicStyleForComponents(typeName, typeKey, typeDesc, DEFAULT_COLOR); - getPreviewButtonColor(DEFAULT_COLOR); + getColorPickerLayout() + .setSelectedColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, ColorPickerConstants.DEFAULT_COLOR); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); } else { - selectedColor = rgbToColorConverter(selectedTypeTag.getColour()); - selPreview.setColor(selectedColor); - colorSelect.setColor(selectedColor); - createDynamicStyleForComponents(typeName, typeKey, typeDesc, selectedTypeTag.getColour()); + getColorPickerLayout() + .setSelectedColor(ColorPickerHelper.rgbToColorConverter(selectedTypeTag.getColour())); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, selectedTypeTag.getColour()); getPreviewButtonColor(selectedTypeTag.getColour()); } - } } - /** - * Dynamic styles for window. - * - * @param top - * int value - * @param marginLeft - * int value - */ - private void getPreviewButtonColor(final String color) { - Page.getCurrent().getJavaScript().execute(HawkbitCommonUtil.getPreviewButtonColorScript(color)); - } - private void createUpdateOptionGroup() { final List optionValues = new ArrayList<>(); if (permChecker.hasCreateDistributionPermission()) { @@ -482,34 +336,6 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C assignOptiongroup.select(tagOptions.get(0)); } - private Label getMandatoryLabel() { - final Label label = new Label(i18n.get("label.mandatory.field")); - label.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); - return label; - } - - private Slider createRGBSlider(final String caption, final String styleName) { - final Slider slider = new Slider(caption, 0, 255); - slider.setImmediate(true); - slider.setWidth("150px"); - slider.addStyleName(styleName); - return slider; - } - - private void setRgbSliderValues(final Color color) { - try { - final double redColorValue = color.getRed(); - redSlider.setValue(new Double(redColorValue)); - final double blueColorValue = color.getBlue(); - blueSlider.setValue(new Double(blueColorValue)); - final double greenColorValue = color.getGreen(); - greenSlider.setValue(new Double(greenColorValue)); - } catch (final ValueOutOfBoundsException e) { - LOG.error("Unable to set RGB color value to " + color.getRed() + "," + color.getGreen() + "," - + color.getBlue(), e); - } - } - /** * Value change listeners implementations of sliders. */ @@ -546,19 +372,20 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C }); } + // TODO extra method private void setColorToComponents(final Color newColor) { setColor(newColor); - colorSelect.setColor(newColor); + getColorPickerLayout().getColorSelect().setColor(newColor); getPreviewButtonColor(newColor.getCSS()); - createDynamicStyleForComponents(typeName, typeKey, typeDesc, newColor.getCSS()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, newColor.getCSS()); } /** * reset the tag name and tag description component border color. */ private void restoreComponentStyles() { - typeName.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); - typeDesc.removeStyleName(TYPE_DESC_DYNAMIC_STYLE); + tagName.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); + tagDesc.removeStyleName(TYPE_DESC_DYNAMIC_STYLE); typeKey.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); getPreviewButtonColor(DEFAULT_COLOR); } @@ -566,7 +393,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C private void save() { if (mandatoryValuesPresent()) { final SoftwareModuleType existingType = swTypeManagementService - .findSoftwareModuleTypeByName(typeName.getValue()); + .findSoftwareModuleTypeByName(tagName.getValue()); if (createOptiongroup.getValue().equals(createTypeStr)) { if (!checkIsKeyDuplicate(typeKey.getValue()) && !checkIsDuplicate(existingType)) { createNewSWModuleType(); @@ -588,14 +415,15 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C return Boolean.FALSE; } + @Override private Boolean mandatoryValuesPresent() { - if (Strings.isNullOrEmpty(typeName.getValue()) && Strings.isNullOrEmpty(typeKey.getValue())) { + if (Strings.isNullOrEmpty(tagName.getValue()) && Strings.isNullOrEmpty(typeKey.getValue())) { if (createOptiongroup.getValue().equals(createTypeStr)) { uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TYPE_NAME_KEY); } if (createOptiongroup.getValue().equals(updateTypeStr)) { - if (null == typeNameComboBox.getValue()) { - uiNotification.displayValidationError(i18n.get("message.error.missing.typename")); + if (null == tagNameComboBox.getValue()) { + uiNotification.displayValidationError(i18n.get("message.error.missing.tagName")); } else { uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); } @@ -614,24 +442,15 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C return Boolean.FALSE; } - private void closeWindow() { - swTypeWindow.close(); - UI.getCurrent().removeWindow(swTypeWindow); - } - - private void discard() { - UI.getCurrent().removeWindow(swTypeWindow); - } - /** * Create new tag. */ private void createNewSWModuleType() { int assignNumber = 0; final String colorPicked = getColorPickedString(); - final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeName.getValue()); + final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String typeKeyValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeKey.getValue()); - final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeDesc.getValue()); + final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); final String assignValue = (String) assignOptiongroup.getValue(); if (null != assignValue && assignValue.equalsIgnoreCase(singleAssignStr)) { assignNumber = 1; @@ -684,8 +503,8 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C */ private void updateSWModuleType(final SoftwareModuleType existingType) { - final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeName.getValue()); - final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeDesc.getValue()); + final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); + final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); if (null != typeNameValue) { existingType.setName(typeNameValue); @@ -708,14 +527,15 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C * Open color picker on click of preview button. Auto select the color based * on target tag if already selected. */ + @Override private void previewButtonClicked() { if (!tagPreviewBtnClicked) { final String selectedOption = (String) createOptiongroup.getValue(); if (null != selectedOption && selectedOption.equalsIgnoreCase(updateTypeStr)) { - if (null != typeNameComboBox.getValue()) { + if (null != tagNameComboBox.getValue()) { final SoftwareModuleType typeSelected = swTypeManagementService - .findSoftwareModuleTypeByName(typeNameComboBox.getValue().toString()); + .findSoftwareModuleTypeByName(tagNameComboBox.getValue().toString()); if (null != typeSelected) { selectedColor = typeSelected.getColour() != null ? rgbToColorConverter(typeSelected.getColour()) : rgbToColorConverter(DEFAULT_COLOR); @@ -776,8 +596,8 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C selectedColor = color; selPreview.setColor(selectedColor); final String colorPickedPreview = selPreview.getColor().getCSS(); - if (typeName.isEnabled() && null != colorSelect) { - createDynamicStyleForComponents(typeName, typeKey, typeDesc, colorPickedPreview); + if (tagName.isEnabled() && null != colorSelect) { + createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); colorSelect.setColor(selPreview.getColor()); } @@ -798,7 +618,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C } setRgbSliderValues(selectedColor); getPreviewButtonColor(event.getColor().getCSS()); - createDynamicStyleForComponents(typeName, typeKey, typeDesc, event.getColor().getCSS()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, event.getColor().getCSS()); } /** @@ -808,12 +628,12 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C * @param tagDesc * @param taregtTagColor */ - private void createDynamicStyleForComponents(final TextField typeName, final TextField typeKey, - final TextArea typeDesc, final String typeTagColor) { + private void createDynamicStyleForComponents(final TextField tagName, final TextField typeKey, + final TextArea tagDesc, final String typeTagColor) { getTargetDynamicStyles(typeTagColor); - typeName.addStyleName(TYPE_NAME_DYNAMIC_STYLE); + tagName.addStyleName(TYPE_NAME_DYNAMIC_STYLE); typeKey.addStyleName(TYPE_NAME_DYNAMIC_STYLE); - typeDesc.addStyleName(TYPE_DESC_DYNAMIC_STYLE); + tagDesc.addStyleName(TYPE_DESC_DYNAMIC_STYLE); } /** @@ -827,4 +647,23 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C .execute(HawkbitCommonUtil.changeToNewSelectedPreviewColor(colorPickedPreview)); } + @Override + protected void save(final ClickEvent event) { + // TODO Auto-generated method stub + + } + + @Override + protected void populateTagNameCombo() { + tagNameComboBox.setContainerDataSource(HawkbitCommonUtil.createLazyQueryContainer( + new BeanQueryFactory(SoftwareModuleTypeBeanQuery.class))); + tagNameComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); + } + + @Override + protected void setTagDetails(final String tagSelected) { + // TODO Auto-generated method stub + + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java index 9e294cf9b..db5c46ffb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java @@ -8,12 +8,12 @@ import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; +import com.vaadin.ui.GridLayout; import com.vaadin.ui.Slider; -import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.components.colorpicker.ColorPickerGradient; import com.vaadin.ui.components.colorpicker.ColorSelector; -public class ColorPickerLayout extends VerticalLayout { +public class ColorPickerLayout extends GridLayout { private static final long serialVersionUID = -7025970080613796692L; @@ -33,15 +33,22 @@ public class ColorPickerLayout extends VerticalLayout { private Slider greenSlider; private Slider blueSlider; - private final VerticalLayout sliders = new VerticalLayout(); - public ColorPickerLayout() { + setColumns(2); + setRows(4); + setCaption("Choose Color"); + init(); setStyleName("rgb-vertical-layout"); - addComponent(selPreview); - addComponent(colorSelect); + + addComponent(redSlider, 0, 1); + addComponent(greenSlider, 0, 2); + addComponent(blueSlider, 0, 3); + + addComponent(selPreview, 1, 0); + addComponent(colorSelect, 1, 1, 1, 3); } public void init() { @@ -58,7 +65,6 @@ public class ColorPickerLayout extends VerticalLayout { greenSlider = createRGBSlider("", "green"); blueSlider = createRGBSlider("", "blue"); - sliders.addComponents(redSlider, greenSlider, blueSlider); selectors.add(colorSelect); } @@ -130,8 +136,4 @@ public class ColorPickerLayout extends VerticalLayout { this.blueSlider = blueSlider; } - public VerticalLayout getSliders() { - return sliders; - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index fa8613a56..54a142ef1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -386,15 +386,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } } - private void addListeners() { - getColorPickerLayout().getColorSelect().addColorChangeListener(this); - getColorPickerLayout().getSelPreview().addColorChangeListener(this); - tagColorPreviewBtn.addClickListener(event -> previewButtonClicked()); - optiongroup.addValueChangeListener(event -> createOptionValueChanged(event)); - tagNameComboBox.addValueChangeListener(event -> typeNameChosen(event)); - slidersValueChangeListeners(); - } - // private void save() { // if (mandatoryValuesPresent()) { // final DistributionSetType existingDistTypeByKey = @@ -677,22 +668,12 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme */ @Override protected void reset() { - tagName.setEnabled(true); - tagName.clear(); + + super.reset(); typeKey.clear(); - tagDesc.clear(); - colorLayout.removeComponent(getColorPickerLayout()); - sliderLayout.removeComponent(getColorPickerLayout().getSliders()); restoreComponentStyles(); - comboLayout.removeComponent(comboLabel); - comboLayout.removeComponent(tagNameComboBox); selectedTable.removeAllItems(); getSourceTableData(); - optiongroup.select(createDistTypeStr); - - // Default green color - getColorPickerLayout().setSelectedColor(getColorPickerLayout().getDefaultColor()); - getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); } /** @@ -758,28 +739,13 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme return disttypeContainer; } - private void typeNameChosen(final ValueChangeEvent event) { - final String typeSelected = (String) event.getProperty().getValue(); - if (null != typeSelected) { - setTypeTagCombo(typeSelected); - } else { - resetTypeFields(); - } - } - - private void resetTypeFields() { - tagName.setEnabled(false); + @Override + protected void resetTagNameField() { + super.resetTagNameField(); typeKey.setEnabled(false); - tagName.clear(); typeKey.clear(); - tagDesc.clear(); - restoreComponentStyles(); selectedTable.removeAllItems(); getSourceTableData(); - restoreComponentStyles(); - getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); - getColorPickerLayout().getSelPreview() - .setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); } /** @@ -789,7 +755,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme * @param targetTagSelected * as the selected tag from combo */ - private void setTypeTagCombo(final String distSetTypeSelected) { + @Override + protected void setTagDetails(final String distSetTypeSelected) { tagName.setValue(distSetTypeSelected); getSourceTableData(); selectedTable.getContainerDataSource().removeAllItems(); @@ -872,17 +839,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } } - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.components.colorpicker.ColorSelector#getColor() - */ - @Override - public Color getColor() { - - return null; - } - /* * (non-Javadoc) * @@ -935,12 +891,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } } - @Override - protected void setTagDetails(final String tagSelected) { - // TODO Auto-generated method stub - - } - @Override public void createWindow() { reset(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java index 0eb6508f0..ba81d9016 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java @@ -18,7 +18,6 @@ import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerLayout; @@ -74,9 +73,6 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C protected CommonDialogWindow window; - @Autowired - private transient UiProperties uiProperties; - @Autowired protected I18N i18n; @@ -104,7 +100,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C protected ComboBox tagNameComboBox; protected final VerticalLayout comboLayout = new VerticalLayout(); - private final ColorPickerLayout colorPickerLayout = new ColorPickerLayout(); + protected final ColorPickerLayout colorPickerLayout = new ColorPickerLayout(); private final HorizontalLayout mainLayout = new HorizontalLayout(); final VerticalLayout contentLayout = new VerticalLayout(); @@ -238,7 +234,6 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C if (!tagPreviewBtnClicked) { setColor(); colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); - contentLayout.addComponent(colorPickerLayout.getSliders()); mainLayout.addComponent(colorPickerLayout); mainLayout.setComponentAlignment(colorPickerLayout, Alignment.BOTTOM_CENTER); } @@ -288,13 +283,11 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C } } - private void resetTagNameField() { + protected void resetTagNameField() { tagName.setEnabled(false); tagName.clear(); - tagDesc.clear(); restoreComponentStyles(); - // fieldLayout.removeComponent(colorPickerLayout.getSliders()); mainLayout.removeComponent(colorPickerLayout); colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); @@ -349,7 +342,6 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C // hide target name combo comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(tagNameComboBox); - contentLayout.removeComponent(colorPickerLayout.getSliders()); mainLayout.removeComponent(colorPickerLayout); optiongroup.select(createTagNw); From 176f190ec662bb408b80a455441038bb8a0db872 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 19 May 2016 10:15:02 +0200 Subject: [PATCH 123/371] Update docu and readme.md Signed-off-by: SirWayne --- README.md | 10 ++++------ examples/hawkbit-example-core-feign-client/README.md | 2 +- examples/hawkbit-example-ddi-feign-client/README.md | 6 +++--- examples/hawkbit-example-mgmt-feign-client/README.md | 6 +++--- .../resource/MgmtDistributionSetClientResource.java | 4 ++-- .../resource/MgmtDistributionSetTagClientResource.java | 5 ++--- .../MgmtDistributionSetTypeClientResource.java | 4 ++-- .../resource/MgmtDownloadArtifactClientResource.java | 5 ++--- .../client/resource/MgmtDownloadClientResource.java | 6 ++---- .../client/resource/MgmtRolloutClientResource.java | 5 ++--- .../resource/MgmtSoftwareModuleClientResource.java | 5 ++--- .../resource/MgmtSoftwareModuleTypeClientResource.java | 5 ++--- ...ientResource.java => MgmtSystemClientResource.java} | 6 +++--- ...ce.java => MgmtSystemManagementClientResource.java} | 6 +++--- .../mgmt/client/resource/MgmtTargetClientResource.java | 5 ++--- .../client/resource/MgmtTargetTagClientResource.java | 4 ++-- examples/hawkbit-example-mgmt-simulator/README.md | 6 +++--- examples/hawkbit-example-mgmt-simulator/pom.xml | 2 +- 18 files changed, 41 insertions(+), 51 deletions(-) rename examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{SystemClientResource.java => MgmtSystemClientResource.java} (71%) rename examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/{SystemManagementClientResource.java => MgmtSystemManagementClientResource.java} (70%) diff --git a/README.md b/README.md index a4119e7b1..1a33e0c60 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,9 @@ $ java -jar ./examples/hawkbit-example-app/target/hawkbit-example-app-#version#. $ java -jar ./examples/hawkbit-device-simulator/target/hawkbit-device-simulator-#version#.jar ``` #### Generate Getting Started data -[Example Management API Client](examples/hawkbit-mgmt-api-client) +[Example Management API Client](examples/hawkbit-example-mgmt-simulator) ``` -$ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#version#.jar +$ java -jar ./examples/hawkbit-example-mgmt-simulator/target/hawkbit-example-mgmt-simulator-#version#.jar ``` # Releases and Roadmap @@ -70,11 +70,9 @@ $ java -jar ./examples/hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-#v * `hawkbit-http-security` : Implementation for security filters for HTTP. * `hawkbit-mgmt-api` : The hawkBit Management API * `hawkbit-mgmt-resource` : Implementation of the hawkBit Management API -* `hawkbit-mgmt-ui` : Vaadin UI. * `hawkbit-repository` : Repository implementation based on SQL for all meta-data. * `hawkbit-rest-core` : Core elements for the rest modules. * `hawkbit-security-core` : Core security elements. * `hawkbit-security-integration` : Security integration elements to integrate security into hawkBit. -* `hawkbit-system-api` : The hawkBit System API -* `hawkbit-system-resource` : Implementation of the hawkBit System API -* `hawkbit-test-report` : Test reports \ No newline at end of file +* `hawkbit-test-report` : Test reports +* `hawkbit-ui` : Vaadin UI. \ No newline at end of file diff --git a/examples/hawkbit-example-core-feign-client/README.md b/examples/hawkbit-example-core-feign-client/README.md index bcded015e..432a31c41 100644 --- a/examples/hawkbit-example-core-feign-client/README.md +++ b/examples/hawkbit-example-core-feign-client/README.md @@ -1,6 +1,6 @@ # Eclipse.IoT hawkBit - Example Core Feign Client -This modules contains core resources that are needed by the hawkBit Example DDI Feign Client and the hawkBit Example Mgmt Feign Client. +This modules contains core beans that are needed to create a [Feign Client](https://github.com/Netflix/feign) with hwakBit. # Compile diff --git a/examples/hawkbit-example-ddi-feign-client/README.md b/examples/hawkbit-example-ddi-feign-client/README.md index d1e1bd18d..0eae90c23 100644 --- a/examples/hawkbit-example-ddi-feign-client/README.md +++ b/examples/hawkbit-example-ddi-feign-client/README.md @@ -1,7 +1,7 @@ -# Eclipse.IoT hawkBit - Example DDI Feign Client - -This modules contains an example feign client implementation based on the DDI API. +# Eclipse.IoT hawkBit - Example DDI Feign Client API +This modules contains the declarative client binding resources of the DDI API. +For more information see 'Feign Inheritance Support' at [Spring Cloud] (http://projects.spring.io/spring-cloud/spring-cloud.html). Powered by [Feign](https://github.com/Netflix/feign). # Compile diff --git a/examples/hawkbit-example-mgmt-feign-client/README.md b/examples/hawkbit-example-mgmt-feign-client/README.md index 3a2dcf61b..b5b7eb3d2 100644 --- a/examples/hawkbit-example-mgmt-feign-client/README.md +++ b/examples/hawkbit-example-mgmt-feign-client/README.md @@ -1,7 +1,7 @@ -# Eclipse.IoT hawkBit - Example Management Feign Client - -This modules contains an example feign client implementation based on the Management API. +# Eclipse.IoT hawkBit - Example Management Feign Client API +This modules contains the declarative client binding resources of the Management API. +For more information see 'Feign Inheritance Support' at [Spring Cloud] (http://projects.spring.io/spring-cloud/spring-cloud.html). Powered by [Feign](https://github.com/Netflix/feign). # Compile 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 b513f43f1..7bf696a8f 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,13 @@ 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}/" + MgmtDistributionSetClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING) public interface MgmtDistributionSetClientResource extends MgmtDistributionSetRestApi { - static String PATH = "rest/v1/distributionsets"; } 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 6d4f60bb7..783cc09fa 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,13 +9,12 @@ 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}/" + MgmtDistributionSetTagClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING) public interface MgmtDistributionSetTagClientResource extends MgmtDistributionSetTagRestApi { - - static String PATH = "rest/v1/distributionsettags"; } 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 fe745968f..35f26781f 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,14 @@ 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}/" + MgmtDistributionSetTypeClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) public interface MgmtDistributionSetTypeClientResource extends MgmtDistributionSetTypeRestApi { - static String PATH = "rest/v1/distributionsettypes"; } 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 3f7917f22..f32e448ac 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; /** * */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtDownloadArtifactClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) public interface MgmtDownloadArtifactClientResource extends MgmtDownloadArtifactRestApi { - static String PATH = "rest/v1/softwaremodules"; - } 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 2626b8a90..9a1dcee61 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,14 +9,12 @@ 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}/" + MgmtDownloadClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE) public interface MgmtDownloadClientResource extends MgmtDownloadRestApi { - - static String PATH = "api/v1/downloadserver/"; - } 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 430550b3a..d2643a938 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,14 +8,13 @@ */ 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}/" + MgmtRolloutClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.ROLLOUT_V1_REQUEST_MAPPING) public interface MgmtRolloutClientResource extends MgmtRolloutRestApi { - - static String PATH = "rest/v1/rollouts"; } 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 cc6dbd477..16ea188bd 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,6 +9,7 @@ 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; @@ -23,11 +24,9 @@ import feign.Param; /** * Client binding for the SoftwareModule resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtSoftwareModuleClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) public interface MgmtSoftwareModuleClientResource extends MgmtSoftwareModuleRestApi { - static String PATH = "rest/v1/softwaremodules"; - @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts") ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @Param("file") final MultipartFile file, 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 6d5ca476c..766ec215f 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,14 +8,13 @@ */ 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 oftwareModuleType resource of the management API. */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtSoftwareModuleTypeClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) public interface MgmtSoftwareModuleTypeClientResource extends MgmtSoftwareModuleTypeRestApi { - - static String PATH = "rest/v1/softwaremoduletypes"; } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemClientResource.java similarity index 71% rename from examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemClientResource.java index 8d94cddb9..7d6967fed 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemClientResource.java @@ -8,6 +8,7 @@ */ 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; @@ -15,7 +16,6 @@ import org.springframework.cloud.netflix.feign.FeignClient; * Client binding for the {@link MgmtSystemRestApi}. * */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/" + SystemClientResource.PATH) -public interface SystemClientResource extends MgmtSystemRestApi { - static String PATH = "rest/v1/system"; +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING) +public interface MgmtSystemClientResource extends MgmtSystemRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemManagementClientResource.java similarity index 70% rename from examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java rename to examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemManagementClientResource.java index 21aa7b7c1..d1974b43f 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSystemManagementClientResource.java @@ -8,6 +8,7 @@ */ 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; @@ -15,8 +16,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; * Client binding for the {@link MgmtSystemManagementRestApi}. * */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/" + SystemManagementClientResource.PATH) -public interface SystemManagementClientResource extends MgmtSystemManagementRestApi { - static String PATH = "system/admin"; +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.SYSTEM_ADMIN_MAPPING) +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 19f78a12f..872c4251a 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,14 +8,13 @@ */ 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}/" + MgmtTargetClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING) public interface MgmtTargetClientResource extends MgmtTargetRestApi { - - static String PATH = "rest/v1/targets"; } 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 475008cf3..7b0c213af 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,13 @@ */ 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}/" + MgmtTargetTagClientResource.PATH) +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING) public interface MgmtTargetTagClientResource extends MgmtTargetTagRestApi { - static String PATH = "rest/v1/targettags"; } diff --git a/examples/hawkbit-example-mgmt-simulator/README.md b/examples/hawkbit-example-mgmt-simulator/README.md index f49d84320..772084629 100644 --- a/examples/hawkbit-example-mgmt-simulator/README.md +++ b/examples/hawkbit-example-mgmt-simulator/README.md @@ -1,4 +1,4 @@ -# Eclipse.IoT hawkBit - Management API Example Client +# Eclipse.IoT hawkBit - Example Management Feign Client Example Spring Boot client that shows how to efficiently use the hawkBit Example Management Fiegn Client and the hawkBit Management API. @@ -10,13 +10,13 @@ Run getting started example - $ java -jar hawkbit-mgmt-api-client-#version#.jar + $ java -jar hawkbit-example-mgmt-simulator-#version#.jar Run create and start rollout example - $ java -jar hawkbit-mgmt-api-client-#version#.jar --createrollout + $ java -jar hawkbit-example-mgmt-simulator-#version#.jar --createrollout ## This example shows diff --git a/examples/hawkbit-example-mgmt-simulator/pom.xml b/examples/hawkbit-example-mgmt-simulator/pom.xml index fbe099f40..469290dfc 100644 --- a/examples/hawkbit-example-mgmt-simulator/pom.xml +++ b/examples/hawkbit-example-mgmt-simulator/pom.xml @@ -18,7 +18,7 @@ jar hawkbit-example-mgmt-simulator - hawkBit-example :: Management Feign Client + hawkBit-example :: Management feign client simulator From 3e5330a5e6d7dc9f02f7ec8b9ae6fa62fd584d88 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 19 May 2016 11:16:26 +0200 Subject: [PATCH 124/371] Completed management separation. Signed-off-by: Kai Zimmermann --- .../security/SecurityAutoConfiguration.java | 2 +- .../SecurityManagedConfiguration.java | 6 +- .../RepositoryApplicationConfiguration.java | 2 +- .../repository/ArtifactManagement.java | 6 +- .../repository/ControllerManagement.java | 26 +- .../repository/DeploymentManagement.java | 7 +- .../DistributionSetAssignmentResult.java | 11 +- .../repository/DistributionSetFilter.java | 94 +-- .../repository/DistributionSetManagement.java | 4 + .../hawkbit/repository/ReportManagement.java | 194 +++--- .../repository/RolloutGroupManagement.java | 164 ++--- .../hawkbit/repository/RolloutManagement.java | 336 +++++----- .../hawkbit/repository/RolloutProperties.java | 12 +- .../hawkbit/repository/RolloutScheduler.java | 1 - .../repository/SoftwareManagement.java | 608 ++++++++--------- .../hawkbit/repository/SystemManagement.java | 93 +++ .../hawkbit/repository/TagManagement.java | 236 +++++++ .../TargetFilterQueryManagement.java | 99 +++ .../hawkbit/repository/TargetManagement.java | 604 +++++++++++++++++ .../TenantConfigurationManagement.java | 136 ++-- .../repository/TenantStatsManagement.java | 33 + .../repository/jpa/DeploymentHelper.java | 1 + .../jpa/JpaControllerManagement.java | 1 + .../jpa/JpaDeploymentManagement.java | 12 +- .../jpa/JpaDistributionSetManagement.java | 4 +- .../repository/jpa/JpaReportManagement.java | 2 +- .../jpa/JpaRolloutGroupManagement.java | 4 +- .../repository/jpa/JpaRolloutManagement.java | 6 +- .../repository/jpa/JpaSoftwareManagement.java | 6 +- ...nagement.java => JpaSystemManagement.java} | 89 +-- ...gManagement.java => JpaTagManagement.java} | 239 ++----- ...va => JpaTargetFilterQueryManagement.java} | 102 +-- ...nagement.java => JpaTargetManagement.java} | 631 +++--------------- ...ent.java => JpaTenantStatsManagement.java} | 18 +- .../model/helper/SystemManagementHolder.java | 2 +- .../hawkbit/AbstractIntegrationTest.java | 8 +- .../org/eclipse/hawkbit/TestDataUtil.java | 2 +- .../hawkbit/repository/TagManagementTest.java | 1 - .../TargetFilterQueryManagenmentTest.java | 1 - .../utils/RepositoryDataGenerator.java | 4 +- .../resource/DistributionSetResource.java | 4 +- .../resource/DistributionSetTagResource.java | 2 +- .../resource/SystemManagementResource.java | 2 +- .../hawkbit/rest/resource/TargetResource.java | 2 +- .../rest/resource/TargetTagResource.java | 4 +- .../resource/DistributionSetResourceTest.java | 2 +- .../tagdetails/AbstractTargetTagToken.java | 2 +- .../tagdetails/DistributionTagToken.java | 2 +- .../ui/common/tagdetails/TargetTagToken.java | 2 +- .../dstable/DistributionSetTable.java | 2 +- .../dstable/ManageDistBeanQuery.java | 2 +- .../footer/DSDeleteActionsLayout.java | 2 +- .../CreateOrUpdateFilterHeader.java | 2 +- .../CustomTargetBeanQuery.java | 2 +- .../FilterQueryValidation.java | 2 +- .../TargetFilterBeanQuery.java | 2 +- .../filtermanagement/TargetFilterTable.java | 2 +- .../DistributionAddUpdateWindowLayout.java | 2 +- .../dstable/DistributionBeanQuery.java | 2 +- .../management/dstable/DistributionTable.java | 2 +- .../dstag/DistributionTagBeanQuery.java | 2 +- .../management/footer/CountMessageLabel.java | 2 +- .../footer/DeleteActionsLayout.java | 2 +- .../ManangementConfirmationWindowLayout.java | 2 +- .../management/tag/CreateUpdateTagLayout.java | 2 +- .../targettable/BulkUploadHandler.java | 4 +- .../TargetAddUpdateWindowLayout.java | 2 +- .../targettable/TargetBeanQuery.java | 2 +- .../TargetBulkUpdateWindowLayout.java | 2 +- .../management/targettable/TargetTable.java | 2 +- .../CustomTargetTagFilterButtonClick.java | 2 +- .../targettag/TargetTagBeanQuery.java | 2 +- .../targettag/TargetTagFilterButtons.java | 2 +- .../rollout/AddUpdateRolloutWindowLayout.java | 2 +- .../rollout/DistributionBeanQuery.java | 2 +- .../ui/rollout/rollout/RolloutBeanQuery.java | 2 +- .../DefaultDistributionSetTypeLayout.java | 2 +- 77 files changed, 2095 insertions(+), 1792 deletions(-) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/{SystemManagement.java => JpaSystemManagement.java} (82%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/{TagManagement.java => JpaTagManagement.java} (51%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/{TargetFilterQueryManagement.java => JpaTargetFilterQueryManagement.java} (51%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/{TargetManagement.java => JpaTargetManagement.java} (52%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/{TenantStatsManagement.java => JpaTenantStatsManagement.java} (73%) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java index 8a3a50ad2..8c44f0496 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java @@ -19,8 +19,8 @@ import org.eclipse.hawkbit.im.authentication.PermissionService; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.im.authentication.UserAuthenticationFilter; -import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.DdiSecurityProperties; +import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.SpringSecurityAuditorAware; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java index 0b321842f..9638377eb 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java @@ -24,11 +24,11 @@ import org.eclipse.hawkbit.ExcludePathAwareShallowETagFilter; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; -import org.eclipse.hawkbit.repository.ControllerManagement; -import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.im.authentication.TenantUserPasswordAuthenticationToken; import org.eclipse.hawkbit.im.authentication.UserAuthenticationFilter; +import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.SystemManagement; +import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.rest.resource.RestConstants; import org.eclipse.hawkbit.security.ControllerTenantAwareAuthenticationDetailsSource; import org.eclipse.hawkbit.security.DdiSecurityProperties; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index 1c562364f..d5e8db96f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -12,8 +12,8 @@ import java.util.HashMap; import java.util.Map; import org.eclipse.hawkbit.aspects.ExceptionMappingAspectHandler; +import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.repository.model.helper.AfterTransactionCommitExecutorHolder; import org.eclipse.hawkbit.repository.model.helper.CacheManagerHolder; import org.eclipse.hawkbit.repository.model.helper.SecurityTokenGeneratorHolder; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java index 19f3bcee2..7854640da 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java @@ -277,13 +277,11 @@ public interface ArtifactManagement { SoftwareModule findSoftwareModuleWithDetails(@NotNull Long id); /** - * Loads {@link org.eclipse.hawkbit.artifact.server.json.model.Artifact} - * from store for given {@link LocalArtifact}. + * Loads {@link DbArtifact} from store for given {@link LocalArtifact}. * * @param artifact * to search for - * @return loaded - * {@link org.eclipse.hawkbit.artifact.server.json.model.Artifact} + * @return loaded {@link DbArtifact} * * @throws GridFSDBFileNotFoundException * if file could not be found in store diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index 2b18ab7ff..4ee3b1275 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -43,16 +43,6 @@ public interface ControllerManagement { String SERVER_MESSAGE_PREFIX = "Update Server: "; - /** - * Simple addition of a new {@link ActionStatus} entry to the {@link Action} - * . No state changes. - * - * @param statusMessage - * to add to the action - */ - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - void addInformationalActionStatus(@NotNull ActionStatus statusMessage); - /** * Adds an {@link ActionStatus} for a cancel {@link Action} including * potential state changes for the target and the {@link Action} itself. @@ -68,6 +58,16 @@ public interface ControllerManagement { @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) Action addCancelActionStatus(@NotNull ActionStatus actionStatus); + /** + * Simple addition of a new {@link ActionStatus} entry to the {@link Action} + * . No state changes. + * + * @param statusMessage + * to add to the action + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + void addInformationalActionStatus(@NotNull ActionStatus statusMessage); + /** * Adds an {@link ActionStatus} entry for an update {@link Action} including * potential state changes for the target and the {@link Action} itself. @@ -133,14 +133,14 @@ public interface ControllerManagement { List findSoftwareModulesByDistributionSet(@NotNull DistributionSet distributionSet); /** - * Retrieves last {@link UpdateAction} for a download of an artifact of - * given module and target. + * Retrieves last {@link Action} for a download of an artifact of given + * module and target. * * @param controllerId * to look for * @param module * that should be assigned to the target - * @return last {@link UpdateAction} for given combination + * @return last {@link Action} for given combination * * @throws EntityNotFoundException * if action for given combination could not be found diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index cffc3b8ad..754d66b65 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository; +import java.util.Collection; import java.util.List; import javax.validation.constraints.NotNull; @@ -99,7 +100,7 @@ public interface DeploymentManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) DistributionSetAssignmentResult assignDistributionSet(@NotNull Long dsID, - @NotEmpty List targets); + @NotEmpty Collection targets); // TODO document: why are rollouts in the signature ? can all the parameters // be null or the list empty? @@ -123,7 +124,7 @@ public interface DeploymentManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) DistributionSetAssignmentResult assignDistributionSet(@NotNull Long dsID, - @NotEmpty List targets, Rollout rollout, RolloutGroup rolloutGroup); + @NotEmpty Collection targets, Rollout rollout, RolloutGroup rolloutGroup); /** * method assigns the {@link DistributionSet} to all {@link Target}s by @@ -210,7 +211,7 @@ public interface DeploymentManagement { * the roll out group for this action */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - void createScheduledAction(List targets, DistributionSet distributionSet, ActionType actionType, + void createScheduledAction(Collection targets, DistributionSet distributionSet, ActionType actionType, long forcedTime, Rollout rollout, RolloutGroup rolloutGroup); /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java index c79fb669d..ad947879a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java @@ -11,7 +11,6 @@ package org.eclipse.hawkbit.repository; import java.util.Collections; import java.util.List; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.Target; @@ -53,11 +52,6 @@ public class DistributionSetAssignmentResult extends AssignmentResult { this.targetManagement = targetManagement; } - @Override - public List getAssignedEntity() { - return targetManagement.findTargetByControllerID(assignedTargets); - } - /** * @return the actionIds */ @@ -65,4 +59,9 @@ public class DistributionSetAssignmentResult extends AssignmentResult { return actions; } + @Override + public List getAssignedEntity() { + return targetManagement.findTargetByControllerID(assignedTargets); + } + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java index 728a4d0c5..54f7eb8e5 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java @@ -16,32 +16,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; * Holds distribution set filter parameters. */ public final class DistributionSetFilter { - private final Boolean isDeleted; - private final Boolean isComplete; - private final DistributionSetType type; - private final String searchText; - private final Boolean selectDSWithNoTag; - private final Collection tagNames; - private final String assignedTargetId; - private final String installedTargetId; - - /** - * Parametric constructor. - * - * @param builder - * DistributionSetFilterBuilder - */ - public DistributionSetFilter(final DistributionSetFilterBuilder builder) { - this.isDeleted = builder.isDeleted; - this.isComplete = builder.isComplete; - this.type = builder.type; - this.searchText = builder.searchText; - this.selectDSWithNoTag = builder.selectDSWithNoTag; - this.tagNames = builder.tagNames; - this.assignedTargetId = builder.assignedTargetId; - this.installedTargetId = builder.installedTargetId; - } - /** * * Distribution set filter builder. @@ -68,8 +42,13 @@ public final class DistributionSetFilter { return new DistributionSetFilter(this); } - public DistributionSetFilterBuilder setIsDeleted(final Boolean isDeleted) { - this.isDeleted = isDeleted; + public DistributionSetFilterBuilder setAssignedTargetId(final String assignedTargetId) { + this.assignedTargetId = assignedTargetId; + return this; + } + + public DistributionSetFilterBuilder setInstalledTargetId(final String installedTargetId) { + this.installedTargetId = installedTargetId; return this; } @@ -78,8 +57,8 @@ public final class DistributionSetFilter { return this; } - public DistributionSetFilterBuilder setType(final DistributionSetType type) { - this.type = type; + public DistributionSetFilterBuilder setIsDeleted(final Boolean isDeleted) { + this.isDeleted = isDeleted; return this; } @@ -98,28 +77,53 @@ public final class DistributionSetFilter { return this; } - public DistributionSetFilterBuilder setAssignedTargetId(final String assignedTargetId) { - this.assignedTargetId = assignedTargetId; - return this; - } - - public DistributionSetFilterBuilder setInstalledTargetId(final String installedTargetId) { - this.installedTargetId = installedTargetId; + public DistributionSetFilterBuilder setType(final DistributionSetType type) { + this.type = type; return this; } } + private final Boolean isDeleted; + private final Boolean isComplete; + private final DistributionSetType type; + private final String searchText; + private final Boolean selectDSWithNoTag; + private final Collection tagNames; + private final String assignedTargetId; - public Boolean getIsDeleted() { - return isDeleted; + private final String installedTargetId; + + /** + * Parametric constructor. + * + * @param builder + * DistributionSetFilterBuilder + */ + public DistributionSetFilter(final DistributionSetFilterBuilder builder) { + this.isDeleted = builder.isDeleted; + this.isComplete = builder.isComplete; + this.type = builder.type; + this.searchText = builder.searchText; + this.selectDSWithNoTag = builder.selectDSWithNoTag; + this.tagNames = builder.tagNames; + this.assignedTargetId = builder.assignedTargetId; + this.installedTargetId = builder.installedTargetId; + } + + public String getAssignedTargetId() { + return assignedTargetId; + } + + public String getInstalledTargetId() { + return installedTargetId; } public Boolean getIsComplete() { return isComplete; } - public DistributionSetType getType() { - return type; + public Boolean getIsDeleted() { + return isDeleted; } public String getSearchText() { @@ -134,12 +138,8 @@ public final class DistributionSetFilter { return tagNames; } - public String getAssignedTargetId() { - return assignedTargetId; - } - - public String getInstalledTargetId() { - return installedTargetId; + public DistributionSetType getType() { + return type; } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index bea9f2719..db737df4a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -41,6 +41,10 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; +/** + * Management service for {@link DistributionSet}s. + * + */ public interface DistributionSetManagement { // TODO rename/document the whole with details thing (document what the diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java index 6208d395c..933f2ad9e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java @@ -32,15 +32,81 @@ import org.springframework.security.access.prepost.PreAuthorize; public interface ReportManagement { /** - * Generates a report of all targets of their current update status count. - * For each {@link TargetUpdateStatus} an total count of targets which are - * in this status currently. + * Data base format. * - * @return a data report series which contains the target count for each - * target update status + * + * + * @param */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - DataReportSeries targetStatus(); + public interface DateType { + /** + * @param s + * @return T + */ + T format(String s); + + /** + * h2 format. + * + * @return String + */ + String h2Format(); + + /** + * mysql format. + * + * @return String + */ + String mySqlFormat(); + } + + /** + * Return DateTypes. + */ + public static final class DateTypes implements Serializable { + private static final long serialVersionUID = 1L; + private static final PerMonth PER_MONTH = new PerMonth(); + + /** + * @return PerMonth + */ + public static PerMonth perMonth() { + return PER_MONTH; + } + + private DateTypes() { + + } + } + + /** + * Gives the date format based on DB H2 or mySql. + * + * + * + */ + public static final class PerMonth implements DateType, Serializable { + private static final long serialVersionUID = 1L; + private static final String DATE_PATTERN = "yyyy-MM"; + + @Override + public LocalDate format(final String s) { + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_PATTERN); + final YearMonth ym = YearMonth.parse(s, formatter); + return ym.atDay(1); + } + + @Override + public String h2Format() { + return DATE_PATTERN; + } + + @Override + public String mySqlFormat() { + return "%Y-%m"; + } + + } /** * Generates a report of the top x distribution set assigned usage as a list @@ -81,22 +147,6 @@ public interface ReportManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) List> distributionUsageInstalled(int topXEntries); - /** - * Generates report for target created over period. - * - * @param dateType - * {@link PerMonth} - * @param from - * start date - * @param to - * end date - * @return DataReportSeries ListReportSeries list of target created - * count - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - DataReportSeries targetsCreatedOverPeriod(@NotNull DateType dateType, - @NotNull LocalDateTime from, @NotNull LocalDateTime to); - /** * Generates report for feedback over period. * @@ -113,6 +163,22 @@ public interface ReportManagement { DataReportSeries feedbackReceivedOverTime(@NotNull DateType dateType, @NotNull LocalDateTime from, @NotNull LocalDateTime to); + /** + * Generates report for target created over period. + * + * @param dateType + * {@link PerMonth} + * @param from + * start date + * @param to + * end date + * @return DataReportSeries ListReportSeries list of target created + * count + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DataReportSeries targetsCreatedOverPeriod(@NotNull DateType dateType, + @NotNull LocalDateTime from, @NotNull LocalDateTime to); + /** * Generates a report as a {@link ListReportSeries} targets polled based on * the {@link TargetStatus#getLastTargetQuery()} within an hour, day, week, @@ -130,80 +196,14 @@ public interface ReportManagement { DataReportSeries targetsLastPoll(); /** - * Return DateTypes. + * Generates a report of all targets of their current update status count. + * For each {@link TargetUpdateStatus} an total count of targets which are + * in this status currently. + * + * @return a data report series which contains the target count for each + * target update status */ - public static final class DateTypes implements Serializable { - private static final long serialVersionUID = 1L; - private static final PerMonth PER_MONTH = new PerMonth(); - - private DateTypes() { - - } - - /** - * @return PerMonth - */ - public static PerMonth perMonth() { - return PER_MONTH; - } - } - - /** - * Data base format. - * - * - * - * @param - */ - public interface DateType { - /** - * @param s - * @return T - */ - T format(String s); - - /** - * h2 format. - * - * @return String - */ - String h2Format(); - - /** - * mysql format. - * - * @return String - */ - String mySqlFormat(); - } - - /** - * Gives the date format based on DB H2 or mySql. - * - * - * - */ - public static final class PerMonth implements DateType, Serializable { - private static final long serialVersionUID = 1L; - private static final String DATE_PATTERN = "yyyy-MM"; - - @Override - public LocalDate format(final String s) { - final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_PATTERN); - final YearMonth ym = YearMonth.parse(s, formatter); - return ym.atDay(1); - } - - @Override - public String h2Format() { - return DATE_PATTERN; - } - - @Override - public String mySqlFormat() { - return "%Y-%m"; - } - - } + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DataReportSeries targetStatus(); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index 9654b8368..baff4586c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -27,47 +27,6 @@ import org.springframework.security.access.prepost.PreAuthorize; */ public interface RolloutGroupManagement { - /** - * Retrieves a single {@link RolloutGroup} by its ID. - * - * @param rolloutGroupId - * the ID of the rollout group to find - * @return the found {@link RolloutGroup} by its ID or {@code null} if it - * does not exists - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - RolloutGroup findRolloutGroupById(@NotNull Long rolloutGroupId); - - /** - * Retrieves a page of {@link RolloutGroup}s filtered by a given - * {@link Rollout}. - * - * @param rolloutId - * the ID of the rollout to filter the {@link RolloutGroup}s - * @param page - * the page request to sort and limit the result - * @return a page of found {@link RolloutGroup}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findRolloutGroupsByRolloutId(@NotNull Long rolloutId, @NotNull Pageable page); - - /** - * Retrieves a page of {@link RolloutGroup}s filtered by a given - * {@link Rollout} and the given {@link Specification}. - * - * @param rolloutId - * the ID of the rollout to filter the {@link RolloutGroup}s - * @param specification - * the specification to filter the result set based on attributes - * of the {@link RolloutGroup} - * @param page - * the page request to sort and limit the result - * @return a page of found {@link RolloutGroup}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findRolloutGroupsAll(@NotNull Rollout rollout, - @NotNull Specification specification, @NotNull Pageable page); - /** * Retrieves a page of {@link RolloutGroup}s filtered by a given * {@link Rollout} with the detailed status. @@ -81,47 +40,6 @@ public interface RolloutGroupManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) Page findAllRolloutGroupsWithDetailedStatus(@NotNull Long rolloutId, @NotNull Pageable page); - /** - * Get count of targets in different status in rollout group. - * - * @param rolloutGroupId - * rollout group id - * @return rolloutGroup with details of targets count for different statuses - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - RolloutGroup findRolloutGroupWithDetailedStatus(@NotNull Long rolloutGroupId); - - // TODO discuss: target read perm missing? - /** - * Get targets of specified rollout group. - * - * @param rolloutGroup - * rollout group - * @param specification - * the specification for filtering the targets of a rollout group - * @param page - * the page request to sort and limit the result - * - * @return Page list of targets of a rollout group - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, - @NotNull Specification specification, @NotNull Pageable page); - - // TODO discuss: target read perm missing? - /** - * Get targets of specified rollout group. - * - * @param rolloutGroup - * rollout group - * @param page - * the page request to sort and limit the result - * - * @return Page list of targets of a rollout group - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, @NotNull Pageable page); - // TODO discuss: target read perm missing? /** * @@ -141,4 +59,86 @@ public interface RolloutGroupManagement { Page findAllTargetsWithActionStatus(@NotNull PageRequest pageRequest, @NotNull RolloutGroup rolloutGroup); + /** + * Retrieves a single {@link RolloutGroup} by its ID. + * + * @param rolloutGroupId + * the ID of the rollout group to find + * @return the found {@link RolloutGroup} by its ID or {@code null} if it + * does not exists + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + RolloutGroup findRolloutGroupById(@NotNull Long rolloutGroupId); + + /** + * Retrieves a page of {@link RolloutGroup}s filtered by a given + * {@link Rollout} and the given {@link Specification}. + * + * @param rolloutId + * the ID of the rollout to filter the {@link RolloutGroup}s + * @param specification + * the specification to filter the result set based on attributes + * of the {@link RolloutGroup} + * @param page + * the page request to sort and limit the result + * @return a page of found {@link RolloutGroup}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Page findRolloutGroupsAll(@NotNull Rollout rollout, + @NotNull Specification specification, @NotNull Pageable page); + + /** + * Retrieves a page of {@link RolloutGroup}s filtered by a given + * {@link Rollout}. + * + * @param rolloutId + * the ID of the rollout to filter the {@link RolloutGroup}s + * @param page + * the page request to sort and limit the result + * @return a page of found {@link RolloutGroup}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Page findRolloutGroupsByRolloutId(@NotNull Long rolloutId, @NotNull Pageable page); + + // TODO discuss: target read perm missing? + /** + * Get targets of specified rollout group. + * + * @param rolloutGroup + * rollout group + * @param page + * the page request to sort and limit the result + * + * @return Page list of targets of a rollout group + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, @NotNull Pageable page); + + // TODO discuss: target read perm missing? + /** + * Get targets of specified rollout group. + * + * @param rolloutGroup + * rollout group + * @param specification + * the specification for filtering the targets of a rollout group + * @param page + * the page request to sort and limit the result + * + * @return Page list of targets of a rollout group + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, + @NotNull Specification specification, @NotNull Pageable page); + + /** + * Get count of targets in different status in rollout group. + * + * @param rolloutGroupId + * rollout group id + * @return rolloutGroup with details of targets count for different statuses + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + RolloutGroup findRolloutGroupWithDetailedStatus(@NotNull Long rolloutGroupId); + } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index 357108576..118be12fa 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -33,38 +33,54 @@ import org.springframework.security.access.prepost.PreAuthorize; public interface RolloutManagement { /** - * Retrieves all rollouts. + * Checking running rollouts. Rollouts which are checked updating the + * {@link Rollout#setLastCheck(long)} to indicate that the current instance + * is handling the specific rollout. This code should run as system-code. * - * @param page - * the page request to sort and limit the result - * @return a page of found rollouts + *
+     * {@code
+     *  SystemSecurityContext.runAsSystem(new Callable() {
+     *     public Void call() throws Exception {
+     *        //run system-code
+     *     }
+     * });
+     *  }
+     * 
+ * + * This method is attend to be called by a scheduler. + * {@link RolloutScheduler}. And must be running in an transaction so it's + * splitted from the scheduler. + * + * Rollouts which are currently running are investigated, by means the + * error- and finish condition of running groups in this rollout are + * evaluated. + * + * @param delayBetweenChecks + * the time in milliseconds of the delay between the further and + * this check. This check is only applied if the last check is + * less than (lastcheck-delay). */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findAll(@NotNull Pageable page); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) + void checkRunningRollouts(long delayBetweenChecks); /** - * Retrieves all rollouts found by the given specification. + * Counts all {@link Rollout}s in the repository. * - * @param specification - * the specification to filter rollouts - * @param page - * the page request to sort and limit the result - * @return a page of found rollouts + * @return number of roll outs */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findAllWithDetailedStatusByPredicate(@NotNull Specification specification, - @NotNull Pageable page); + Long countRolloutsAll(); /** - * Retrieves a specific rollout by its ID. + * Count rollouts by given text in name or description. * - * @param rolloutId - * the ID of the rollout to retrieve - * @return the founded rollout or {@code null} if rollout with given ID does - * not exists + * @param searchText + * name or description + * @return total count rollouts for specified filter text. */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Rollout findRolloutById(@NotNull Long rolloutId); + Long countRolloutsAllByFilters(@NotEmpty String searchText); /** * Persists a new rollout entity. The filter within the @@ -131,6 +147,138 @@ public interface RolloutManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) Rollout createRolloutAsync(@NotNull Rollout rollout, int amountGroup, @NotNull RolloutGroupConditions conditions); + /** + * Retrieves all rollouts. + * + * @param page + * the page request to sort and limit the result + * @return a page of found rollouts + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Page findAll(@NotNull Pageable page); + + /** + * Get count of targets in different status in rollout. + * + * @param page + * the page request to sort and limit the result + * @return a list of rollouts with details of targets count for different + * statuses + * + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Page findAllRolloutsWithDetailedStatus(@NotNull Pageable page); + + /** + * Retrieves all rollouts found by the given specification. + * + * @param specification + * the specification to filter rollouts + * @param page + * the page request to sort and limit the result + * @return a page of found rollouts + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Page findAllWithDetailedStatusByPredicate(@NotNull Specification specification, + @NotNull Pageable page); + + /** + * Finds rollouts by given text in name or description. + * + * @param pageable + * the page request to sort and limit the result + * @param searchText + * search text which matches name or description of rollout + * @return the founded rollout or {@code null} if rollout with given ID does + * not exists + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Slice findRolloutByFilters(@NotNull Pageable pageable, @NotEmpty String searchText); + + /** + * Retrieves a specific rollout by its ID. + * + * @param rolloutId + * the ID of the rollout to retrieve + * @return the founded rollout or {@code null} if rollout with given ID does + * not exists + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Rollout findRolloutById(@NotNull Long rolloutId); + + /** + * Retrieves a specific rollout by its name. + * + * @param rolloutName + * the name of the rollout to retrieve + * @return the founded rollout or {@code null} if rollout with given name + * does not exists + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Rollout findRolloutByName(@NotNull String rolloutName); + + /** + * Get count of targets in different status in rollout. + * + * @param rolloutId + * rollout id + * @return rollout details of targets count for different statuses + * + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + Rollout findRolloutWithDetailedStatus(@NotNull Long rolloutId); + + /*** + * Get finished percentage details for a specified group which is in running + * state. + * + * @param rolloutId + * the ID of the {@link Rollout} + * @param rolloutGroup + * the ID of the {@link RolloutGroup} + * @return percentage finished + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + float getFinishedPercentForRunningGroup(@NotNull Long rolloutId, @NotNull RolloutGroup rolloutGroup); + + /** + * Pauses a rollout which is currently running. The Rollout switches + * {@link RolloutStatus#PAUSED}. {@link RolloutGroup}s which are currently + * running will be untouched. {@link RolloutGroup}s which are + * {@link RolloutGroupStatus#SCHEDULED} will not be started and keep in + * {@link RolloutGroupStatus#SCHEDULED} state until the rollout is + * {@link RolloutManagement#resumeRollout(Rollout)}. + * + * Switching the rollout status to {@link RolloutStatus#PAUSED} is + * sufficient due the {@link #checkRunningRollouts(long)} will not check + * this rollout anymore. + * + * @param rollout + * the rollout to be paused. + * + * @throws RolloutIllegalStateException + * if given rollout is not in {@link RolloutStatus#RUNNING}. + * Only running rollouts can be paused. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) + void pauseRollout(@NotNull Rollout rollout); + + /** + * Resumes a paused rollout. The rollout switches back to + * {@link RolloutStatus#RUNNING} state which is then picked up again by the + * {@link #checkRunningRollouts(long)}. + * + * @param rollout + * the rollout to be resumed + * @throws RolloutIllegalStateException + * if given rollout is not in {@link RolloutStatus#PAUSED}. Only + * paused rollouts can be resumed. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) + void resumeRollout(@NotNull Rollout rollout); + /** * Starts a rollout which has been created. The rollout must be in * {@link RolloutStatus#READY} state. The according actions will be created @@ -176,118 +324,6 @@ public interface RolloutManagement { + SpringEvalExpressions.IS_SYSTEM_CODE) Rollout startRolloutAsync(@NotNull Rollout rollout); - /** - * Pauses a rollout which is currently running. The Rollout switches - * {@link RolloutStatus#PAUSED}. {@link RolloutGroup}s which are currently - * running will be untouched. {@link RolloutGroup}s which are - * {@link RolloutGroupStatus#SCHEDULED} will not be started and keep in - * {@link RolloutGroupStatus#SCHEDULED} state until the rollout is - * {@link RolloutManagement#resumeRollout(Rollout)}. - * - * Switching the rollout status to {@link RolloutStatus#PAUSED} is - * sufficient due the {@link #checkRunningRollouts(long)} will not check - * this rollout anymore. - * - * @param rollout - * the rollout to be paused. - * - * @throws RolloutIllegalStateException - * if given rollout is not in {@link RolloutStatus#RUNNING}. - * Only running rollouts can be paused. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) - void pauseRollout(@NotNull Rollout rollout); - - /** - * Resumes a paused rollout. The rollout switches back to - * {@link RolloutStatus#RUNNING} state which is then picked up again by the - * {@link #checkRunningRollouts(long)}. - * - * @param rollout - * the rollout to be resumed - * @throws RolloutIllegalStateException - * if given rollout is not in {@link RolloutStatus#PAUSED}. Only - * paused rollouts can be resumed. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) - void resumeRollout(@NotNull Rollout rollout); - - /** - * Checking running rollouts. Rollouts which are checked updating the - * {@link Rollout#setLastCheck(long)} to indicate that the current instance - * is handling the specific rollout. This code should run as system-code. - * - *
-     * {@code
-     *  SystemSecurityContext.runAsSystem(new Callable() {
-     *     public Void call() throws Exception {
-     *        //run system-code
-     *     }
-     * });
-     *  }
-     * 
- * - * This method is attend to be called by a scheduler. - * {@link RolloutScheduler}. And must be running in an transaction so it's - * splitted from the scheduler. - * - * Rollouts which are currently running are investigated, by means the - * error- and finish condition of running groups in this rollout are - * evaluated. - * - * @param delayBetweenChecks - * the time in milliseconds of the delay between the further and - * this check. This check is only applied if the last check is - * less than (lastcheck-delay). - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) - void checkRunningRollouts(long delayBetweenChecks); - - /** - * Counts all {@link Rollout}s in the repository. - * - * @return number of roll outs - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Long countRolloutsAll(); - - /** - * Count rollouts by given text in name or description. - * - * @param searchText - * name or description - * @return total count rollouts for specified filter text. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Long countRolloutsAllByFilters(@NotEmpty String searchText); - - /** - * Finds rollouts by given text in name or description. - * - * @param pageable - * the page request to sort and limit the result - * @param searchText - * search text which matches name or description of rollout - * @return the founded rollout or {@code null} if rollout with given ID does - * not exists - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Slice findRolloutByFilters(@NotNull Pageable pageable, @NotEmpty String searchText); - - /** - * Retrieves a specific rollout by its name. - * - * @param rolloutName - * the name of the rollout to retrieve - * @return the founded rollout or {@code null} if rollout with given name - * does not exists - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Rollout findRolloutByName(@NotNull String rolloutName); - /** * Update rollout details. * @@ -299,40 +335,4 @@ public interface RolloutManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) Rollout updateRollout(@NotNull Rollout rollout); - /** - * Get count of targets in different status in rollout. - * - * @param page - * the page request to sort and limit the result - * @return a list of rollouts with details of targets count for different - * statuses - * - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findAllRolloutsWithDetailedStatus(@NotNull Pageable page); - - /** - * Get count of targets in different status in rollout. - * - * @param rolloutId - * rollout id - * @return rollout details of targets count for different statuses - * - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Rollout findRolloutWithDetailedStatus(@NotNull Long rolloutId); - - /*** - * Get finished percentage details for a specified group which is in running - * state. - * - * @param rolloutId - * the ID of the {@link Rollout} - * @param rolloutGroup - * the ID of the {@link RolloutGroup} - * @return percentage finished - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - float getFinishedPercentForRunningGroup(@NotNull Long rolloutId, @NotNull RolloutGroup rolloutGroup); - } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutProperties.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutProperties.java index 2384fa480..9b3a37093 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutProperties.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutProperties.java @@ -18,12 +18,6 @@ import org.springframework.stereotype.Component; @Component @ConfigurationProperties("hawkbit.rollout") public class RolloutProperties { - private final Scheduler scheduler = new Scheduler(); - - public Scheduler getScheduler() { - return scheduler; - } - /** * Rollout scheduler configuration. */ @@ -47,4 +41,10 @@ public class RolloutProperties { } + private final Scheduler scheduler = new Scheduler(); + + public Scheduler getScheduler() { + return scheduler; + } + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java index 1d4150217..bc8f25feb 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.repository; import java.util.List; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java index 063a3a0f1..b3b9e7380 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java @@ -36,235 +36,6 @@ import org.springframework.security.access.prepost.PreAuthorize; */ public interface SoftwareManagement { - /** - * Updates existing {@link SoftwareModule}. Update-able values are - * {@link SoftwareModule#getDescription()} - * {@link SoftwareModule#getVendor()}. - * - * @param sm - * to update - * - * @return the saved {@link Entity}. - * - * @throws NullPointerException - * of {@link SoftwareModule#getId()} is null - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - SoftwareModule updateSoftwareModule(@NotNull SoftwareModule sm); - - /** - * Updates existing {@link SoftwareModuleType}. Update-able value is - * {@link SoftwareModuleType#getDescription()} and - * {@link SoftwareModuleType#getColour()}. - * - * @param sm - * to update - * @return updated {@link Entity} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - SoftwareModuleType updateSoftwareModuleType(@NotNull SoftwareModuleType sm); - - /** - * - * @param swModule - * SoftwareModule to create - * @return SoftwareModule - * @throws EntityAlreadyExistsException - * if a given entity already exists - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - SoftwareModule createSoftwareModule(@NotNull SoftwareModule swModule); - - /** - * Create {@link SoftwareModule}s in the repository. - * - * @param swModules - * {@link SoftwareModule}s to create - * @return SoftwareModule - * @throws EntityAlreadyExistsException - * if a given entity already exists - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - List createSoftwareModule(@NotNull Iterable swModules); - - /** - * retrieves the {@link SoftwareModule}s by their {@link SoftwareModuleType} - * . - * - * @param pageable - * page parameters - * @param type - * to be filtered on - * @return the found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Slice findSoftwareModulesByType(@NotNull Pageable pageable, @NotNull SoftwareModuleType type); - - /** - * Counts {@link SoftwareModule}s with given {@link SoftwareModuleType}. - * - * @param type - * to count - * @return number of found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Long countSoftwareModulesByType(@NotNull SoftwareModuleType type); - - /** - * Finds {@link SoftwareModule} by given id. - * - * @param id - * to search for - * @return the found {@link SoftwareModule}s or null if not - * found. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) - SoftwareModule findSoftwareModuleById(@NotNull Long id); - - /** - * retrieves {@link SoftwareModule} by their name AND version AND type.. - * - * @param name - * of the {@link SoftwareModule} - * @param version - * of the {@link SoftwareModule} - * @param type - * of the {@link SoftwareModule} - * @return the found {@link SoftwareModule} or null - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - SoftwareModule findSoftwareModuleByNameAndVersion(@NotEmpty String name, @NotEmpty String version, - @NotNull SoftwareModuleType type); - - /** - * Deletes the given {@link SoftwareModule} {@link Entity}. - * - * @param bsm - * is the {@link SoftwareModule} to be deleted - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - void deleteSoftwareModule(@NotNull SoftwareModule bsm); - - /** - * Deletes {@link SoftwareModule}s which is any if the given ids. - * - * @param ids - * of the Software Modules to be deleted - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - void deleteSoftwareModules(@NotNull Iterable ids); - - /** - * Retrieves all software modules. Deleted ones are filtered. - * - * @param pageable - * pagination parameter - * @return the found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Slice findSoftwareModulesAll(@NotNull Pageable pageable); - - /** - * Count all {@link SoftwareModule}s in the repository that are not marked - * as deleted. - * - * @return number of {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Long countSoftwareModulesAll(); - - /** - * Retrieves software module including details ( - * {@link SoftwareModule#getArtifacts()}). - * - * @param id - * parameter - * @param isDeleted - * parameter - * @return the found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - SoftwareModule findSoftwareModuleWithDetails(@NotNull Long id); - - /** - * Retrieves all {@link SoftwareModule}s with a given specification. - * - * @param spec - * the specification to filter the software modules - * @param pageable - * pagination parameter - * @return the found {@link SoftwareModule}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findSoftwareModulesByPredicate(@NotNull Specification spec, - @NotNull Pageable pageable); - - /** - * Retrieves all {@link SoftwareModuleType}s with a given specification. - * - * @param spec - * the specification to filter the software modules types - * @param pageable - * pagination parameter - * @return the found {@link SoftwareModuleType}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findSoftwareModuleTypesByPredicate(@NotNull Specification spec, - @NotNull Pageable pageable); - - /** - * Retrieves all software modules with a given list of ids - * {@link SoftwareModule#getId()}. - * - * @param ids - * to search for - * @return {@link List} of found {@link SoftwareModule}s - */ - List findSoftwareModulesById(@NotEmpty Collection ids); - - /** - * Filter {@link SoftwareModule}s with given - * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} - * and {@link SoftwareModule#getType()} that are not marked as deleted. - * - * @param pageable - * page parameter - * @param searchText - * to be filtered as "like" on {@link SoftwareModule#getName()} - * @param type - * to be filtered as "like" on {@link SoftwareModule#getType()} - * @return the page of found {@link SoftwareModule} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Slice findSoftwareModuleByFilters(@NotNull Pageable pageable, String searchText, - SoftwareModuleType type); - - /** - * Filter {@link SoftwareModule}s with given - * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} - * search text and {@link SoftwareModule#getType()} that are not marked as - * deleted and sort them by means of given distribution set related modules - * on top of the list. - * - * After that the modules are sorted by {@link SoftwareModule#getName()} and - * {@link SoftwareModule#getVersion()} in ascending order. - * - * @param pageable - * page parameter - * @param orderByDistributionId - * the ID of distribution set to be ordered on top - * @param searchText - * filtered as "like" on {@link SoftwareModule#getName()} - * @param type - * filtered as "equal" on {@link SoftwareModule#getType()} - * @return the page of found {@link SoftwareModule} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( - @NotNull Pageable pageable, @NotNull Long orderByDistributionId, String searchText, - SoftwareModuleType type); - /** * Counts {@link SoftwareModule}s with given * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} @@ -280,12 +51,23 @@ public interface SoftwareManagement { Long countSoftwareModuleByFilters(String searchText, SoftwareModuleType type); /** - * @param pageable - * parameter - * @return all {@link SoftwareModuleType}s in the repository. + * Count all {@link SoftwareModule}s in the repository that are not marked + * as deleted. + * + * @return number of {@link SoftwareModule}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findSoftwareModuleTypesAll(@NotNull Pageable pageable); + Long countSoftwareModulesAll(); + + /** + * Counts {@link SoftwareModule}s with given {@link SoftwareModuleType}. + * + * @param type + * to count + * @return number of found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countSoftwareModulesByType(@NotNull SoftwareModuleType type); /** * @return number of {@link SoftwareModuleType}s in the repository. @@ -294,34 +76,63 @@ public interface SoftwareManagement { Long countSoftwareModuleTypesAll(); /** + * Create {@link SoftwareModule}s in the repository. * - * @param key - * to search for - * @return {@link SoftwareModuleType} in the repository with given - * {@link SoftwareModuleType#getKey()} + * @param swModules + * {@link SoftwareModule}s to create + * @return SoftwareModule + * @throws EntityAlreadyExistsException + * if a given entity already exists */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - SoftwareModuleType findSoftwareModuleTypeByKey(@NotNull String key); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + List createSoftwareModule(@NotNull Collection swModules); /** * - * @param id - * to search for - * @return {@link SoftwareModuleType} in the repository with given - * {@link SoftwareModuleType#getId()} + * @param swModule + * SoftwareModule to create + * @return SoftwareModule + * @throws EntityAlreadyExistsException + * if a given entity already exists */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - SoftwareModuleType findSoftwareModuleTypeById(@NotNull Long id); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + SoftwareModule createSoftwareModule(@NotNull SoftwareModule swModule); /** + * creates a list of software module meta data entries. * - * @param name - * to search for - * @return all {@link SoftwareModuleType}s in the repository with given - * {@link SoftwareModuleType#getName()} + * @param metadata + * the meta data entries to create or update + * @return the updated or created software module meta data entries + * @throws EntityAlreadyExistsException + * in case one of the meta data entry already exists for the + * specific key */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - SoftwareModuleType findSoftwareModuleTypeByName(@NotNull String name); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + List createSoftwareModuleMetadata(@NotNull Collection metadata); + + /** + * creates or updates a single software module meta data entry. + * + * @param metadata + * the meta data entry to create or update + * @return the updated or created software module meta data entry + * @throws EntityAlreadyExistsException + * in case the meta data entry already exists for the specific + * key + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + SoftwareModuleMetadata createSoftwareModuleMetadata(@NotNull SoftwareModuleMetadata metadata); + + /** + * Creates multiple {@link SoftwareModuleType}s. + * + * @param types + * to create + * @return created {@link Entity} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + List createSoftwareModuleType(@NotNull final Collection types); /** * Creates new {@link SoftwareModuleType}. @@ -334,14 +145,31 @@ public interface SoftwareManagement { SoftwareModuleType createSoftwareModuleType(@NotNull SoftwareModuleType type); /** - * Creates multiple {@link SoftwareModuleType}s. + * Deletes the given {@link SoftwareModule} {@link Entity}. * - * @param types - * to create - * @return created {@link Entity} + * @param bsm + * is the {@link SoftwareModule} to be deleted */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - List createSoftwareModuleType(@NotNull final Collection types); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteSoftwareModule(@NotNull SoftwareModule bsm); + + /** + * deletes a software module meta data entry. + * + * @param id + * the ID of the software module meta data to delete + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + void deleteSoftwareModuleMetadata(@NotNull SwMetadataCompositeKey id); + + /** + * Deletes {@link SoftwareModule}s which is any if the given ids. + * + * @param ids + * of the Software Modules to be deleted + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteSoftwareModules(@NotNull Collection ids); /** * Deletes or marks as delete in case the type is in use. @@ -378,52 +206,61 @@ public interface SoftwareManagement { @NotNull SoftwareModuleType type); /** - * creates or updates a single software module meta data entry. + * Filter {@link SoftwareModule}s with given + * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} + * and {@link SoftwareModule#getType()} that are not marked as deleted. * - * @param metadata - * the meta data entry to create or update - * @return the updated or created software module meta data entry - * @throws EntityAlreadyExistsException - * in case the meta data entry already exists for the specific - * key + * @param pageable + * page parameter + * @param searchText + * to be filtered as "like" on {@link SoftwareModule#getName()} + * @param type + * to be filtered as "like" on {@link SoftwareModule#getType()} + * @return the page of found {@link SoftwareModule} */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - SoftwareModuleMetadata createSoftwareModuleMetadata(@NotNull SoftwareModuleMetadata metadata); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Slice findSoftwareModuleByFilters(@NotNull Pageable pageable, String searchText, + SoftwareModuleType type); /** - * creates a list of software module meta data entries. - * - * @param metadata - * the meta data entries to create or update - * @return the updated or created software module meta data entries - * @throws EntityAlreadyExistsException - * in case one of the meta data entry already exists for the - * specific key - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - List createSoftwareModuleMetadata(@NotNull Collection metadata); - - /** - * updates a distribution set meta data value if corresponding entry exists. - * - * @param metadata - * the meta data entry to be updated - * @return the updated meta data entry - * @throws EntityNotFoundException - * in case the meta data entry does not exists and cannot be - * updated - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - SoftwareModuleMetadata updateSoftwareModuleMetadata(@NotNull SoftwareModuleMetadata metadata); - - /** - * deletes a software module meta data entry. + * Finds {@link SoftwareModule} by given id. * * @param id - * the ID of the software module meta data to delete + * to search for + * @return the found {@link SoftwareModule}s or null if not + * found. */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - void deleteSoftwareModuleMetadata(@NotNull SwMetadataCompositeKey id); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + SoftwareModule findSoftwareModuleById(@NotNull Long id); + + /** + * retrieves {@link SoftwareModule} by their name AND version AND type.. + * + * @param name + * of the {@link SoftwareModule} + * @param version + * of the {@link SoftwareModule} + * @param type + * of the {@link SoftwareModule} + * @return the found {@link SoftwareModule} or null + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModule findSoftwareModuleByNameAndVersion(@NotEmpty String name, @NotEmpty String version, + @NotNull SoftwareModuleType type); + + /** + * finds a single software module meta data by its id. + * + * @param id + * the id of the software module meta data containing the meta + * data key and the ID of the software module + * @return the found SoftwareModuleMetadata or {@code null} if not exits + * @throws EntityNotFoundException + * in case the meta data does not exists for the given key + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModuleMetadata findSoftwareModuleMetadata(@NotNull SwMetadataCompositeKey id); /** * finds all meta data by the given software module id. @@ -456,16 +293,179 @@ public interface SoftwareManagement { @NotNull Specification spec, @NotNull Pageable pageable); /** - * finds a single software module meta data by its id. + * Filter {@link SoftwareModule}s with given + * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} + * search text and {@link SoftwareModule#getType()} that are not marked as + * deleted and sort them by means of given distribution set related modules + * on top of the list. + * + * After that the modules are sorted by {@link SoftwareModule#getName()} and + * {@link SoftwareModule#getVersion()} in ascending order. * - * @param id - * the id of the software module meta data containing the meta - * data key and the ID of the software module - * @return the found SoftwareModuleMetadata or {@code null} if not exits - * @throws EntityNotFoundException - * in case the meta data does not exists for the given key + * @param pageable + * page parameter + * @param orderByDistributionId + * the ID of distribution set to be ordered on top + * @param searchText + * filtered as "like" on {@link SoftwareModule#getName()} + * @param type + * filtered as "equal" on {@link SoftwareModule#getType()} + * @return the page of found {@link SoftwareModule} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - SoftwareModuleMetadata findSoftwareModuleMetadata(@NotNull SwMetadataCompositeKey id); + Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( + @NotNull Pageable pageable, @NotNull Long orderByDistributionId, String searchText, + SoftwareModuleType type); + + /** + * Retrieves all software modules. Deleted ones are filtered. + * + * @param pageable + * pagination parameter + * @return the found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Slice findSoftwareModulesAll(@NotNull Pageable pageable); + + /** + * Retrieves all software modules with a given list of ids + * {@link SoftwareModule#getId()}. + * + * @param ids + * to search for + * @return {@link List} of found {@link SoftwareModule}s + */ + List findSoftwareModulesById(@NotEmpty Collection ids); + + /** + * Retrieves all {@link SoftwareModule}s with a given specification. + * + * @param spec + * the specification to filter the software modules + * @param pageable + * pagination parameter + * @return the found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModulesByPredicate(@NotNull Specification spec, + @NotNull Pageable pageable); + + /** + * retrieves the {@link SoftwareModule}s by their {@link SoftwareModuleType} + * . + * + * @param pageable + * page parameters + * @param type + * to be filtered on + * @return the found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Slice findSoftwareModulesByType(@NotNull Pageable pageable, @NotNull SoftwareModuleType type); + + /** + * + * @param id + * to search for + * @return {@link SoftwareModuleType} in the repository with given + * {@link SoftwareModuleType#getId()} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModuleType findSoftwareModuleTypeById(@NotNull Long id); + + /** + * + * @param key + * to search for + * @return {@link SoftwareModuleType} in the repository with given + * {@link SoftwareModuleType#getKey()} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModuleType findSoftwareModuleTypeByKey(@NotNull String key); + + /** + * + * @param name + * to search for + * @return all {@link SoftwareModuleType}s in the repository with given + * {@link SoftwareModuleType#getName()} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModuleType findSoftwareModuleTypeByName(@NotNull String name); + + /** + * @param pageable + * parameter + * @return all {@link SoftwareModuleType}s in the repository. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModuleTypesAll(@NotNull Pageable pageable); + + /** + * Retrieves all {@link SoftwareModuleType}s with a given specification. + * + * @param spec + * the specification to filter the software modules types + * @param pageable + * pagination parameter + * @return the found {@link SoftwareModuleType}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findSoftwareModuleTypesByPredicate(@NotNull Specification spec, + @NotNull Pageable pageable); + + /** + * Retrieves software module including details ( + * {@link SoftwareModule#getArtifacts()}). + * + * @param id + * parameter + * @param isDeleted + * parameter + * @return the found {@link SoftwareModule}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + SoftwareModule findSoftwareModuleWithDetails(@NotNull Long id); + + /** + * Updates existing {@link SoftwareModule}. Update-able values are + * {@link SoftwareModule#getDescription()} + * {@link SoftwareModule#getVendor()}. + * + * @param sm + * to update + * + * @return the saved {@link Entity}. + * + * @throws NullPointerException + * of {@link SoftwareModule#getId()} is null + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + SoftwareModule updateSoftwareModule(@NotNull SoftwareModule sm); + + /** + * updates a distribution set meta data value if corresponding entry exists. + * + * @param metadata + * the meta data entry to be updated + * @return the updated meta data entry + * @throws EntityNotFoundException + * in case the meta data entry does not exists and cannot be + * updated + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + SoftwareModuleMetadata updateSoftwareModuleMetadata(@NotNull SoftwareModuleMetadata metadata); + + /** + * Updates existing {@link SoftwareModuleType}. Update-able value is + * {@link SoftwareModuleType#getDescription()} and + * {@link SoftwareModuleType#getColour()}. + * + * @param sm + * to update + * @return updated {@link Entity} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + SoftwareModuleType updateSoftwareModuleType(@NotNull SoftwareModuleType sm); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java new file mode 100644 index 000000000..b62ed0ad3 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository; + +import java.util.List; + +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.report.model.SystemUsageReport; +import org.eclipse.hawkbit.repository.model.TenantMetaData; +import org.eclipse.hawkbit.tenancy.TenantAware; +import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.security.access.prepost.PreAuthorize; + +/** + * Central system management operations of the update server. + * + */ +public interface SystemManagement { + + /** + * Checks if a specific tenant exists. The tenant will not be created lazy. + * + * @return {@code true} in case the tenant exits or {@code false} if not + */ + String currentTenant(); + + /** + * Deletes all data related to a given tenant. + * + * @param tenant + * to delete + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) + void deleteTenant(@NotNull String tenant); + + /** + * + * @return list of all tenant names in the system. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) + List findTenants(); + + /** + * Calculated system usage statistics, both overall for the entire system + * and per tenant; + * + * @return SystemUsageReport of the current system + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) + SystemUsageReport getSystemUsageStatistics(); + + /** + * @return {@link TenantMetaData} of {@link TenantAware#getCurrentTenant()} + */ + TenantMetaData getTenantMetadata(); + + // TODO figure out why this is necessary and clean this up + @Bean + KeyGenerator currentTenantKeyGenerator(); + + /** + * Returns {@link TenantMetaData} of given and current tenant. + * + * DISCLAIMER: this variant is used during initial login (where the tenant + * is not yet in the session). Please user {@link #getTenantMetadata()} for + * regular requests. + * + * @param tenant + * to retrieve data for + * @return {@link TenantMetaData} of given tenant + */ + TenantMetaData getTenantMetadata(@NotNull String tenant); + + /** + * Update call for {@link TenantMetaData}. + * + * @param metaData + * to update + * @return updated {@link TenantMetaData} entity + */ + TenantMetaData updateTenantMetadata(@NotNull TenantMetaData metaData); + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java new file mode 100644 index 000000000..929bd745c --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java @@ -0,0 +1,236 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository; + +import java.util.Collection; +import java.util.List; + +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetTag; +import org.eclipse.hawkbit.repository.model.Tag; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetTag; +import org.hibernate.validator.constraints.NotEmpty; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.security.access.prepost.PreAuthorize; + +/** + * Management service for {@link Tag}s. + * + */ +public interface TagManagement { + + /** + * count {@link TargetTag}s. + * + * @return size of {@link TargetTag}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + long countTargetTags(); + + /** + * Creates a {@link DistributionSet}. + * + * @param distributionSetTag + * to be created. + * @return the new {@link DistributionSet} + * @throws EntityAlreadyExistsException + * if distributionSetTag already exists + * + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + DistributionSetTag createDistributionSetTag(@NotNull DistributionSetTag distributionSetTag); + + /** + * Creates multiple {@link DistributionSetTag}s. + * + * @param distributionSetTags + * to be created + * @return the new {@link DistributionSetTag} + * @throws EntityAlreadyExistsException + * if a given entity already exists + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) + List createDistributionSetTags(@NotNull Collection distributionSetTags); + + /** + * Creates a new {@link TargetTag}. + * + * @param targetTag + * to be created + * + * @return the new created {@link TargetTag} + * + * @throws EntityAlreadyExistsException + * if given object already exists + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) + TargetTag createTargetTag(@NotNull TargetTag targetTag); + + /** + * created multiple {@link TargetTag}s. + * + * @param targetTags + * to be created + * @return the new created {@link TargetTag}s + * + * @throws EntityAlreadyExistsException + * if given object has already an ID. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) + List createTargetTags(@NotNull Iterable targetTags); + + /** + * Deletes {@link DistributionSetTag} by given + * {@link DistributionSetTag#getName()}. + * + * @param tagName + * to be deleted + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) + void deleteDistributionSetTag(@NotEmpty String tagName); + + /** + * Deletes {@link TargetTag} with given name. + * + * @param targetTagName + * tag name of the {@link TargetTag} to be deleted + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) + void deleteTargetTag(@NotEmpty String targetTagName); + + /** + * + * @return all {@link DistributionSetTag}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + List findAllDistributionSetTags(); + + /** + * returns all {@link DistributionSetTag}s. + * + * @param pageReq + * page parameter + * @return all {@link DistributionSetTag}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findAllDistributionSetTags(@NotNull Pageable pageReq); + + /** + * Retrieves all DistributionSet tags based on the given specification. + * + * @param spec + * the specification for the query + * @param pageable + * pagination parameter + * @return the found {@link DistributionSetTag}s, never {@code null} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Page findAllDistributionSetTags(@NotNull Specification spec, + @NotNull Pageable pageable); + + /** + * @return all {@link TargetTag}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findAllTargetTags(); + + /** + * returns all {@link TargetTag}s. + * + * @param pageReq + * page parameter + * + * @return all {@link TargetTag}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findAllTargetTags(@NotNull Pageable pageReq); + + /** + * Retrieves all target tags based on the given specification. + * + * @param spec + * the specification for the query + * @param pageable + * pagination parameter + * @return the found {@link Target}s, never {@code null} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findAllTargetTags(@NotNull Specification spec, @NotNull Pageable pageable); + + /** + * Find {@link DistributionSet} based on given name. + * + * @param name + * to look for. + * @return {@link DistributionSet} or null if it does not exist + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DistributionSetTag findDistributionSetTag(@NotEmpty String name); + + /** + * Finds {@link DistributionSetTag} by given id. + * + * @param id + * to search for + * @return the found {@link DistributionSetTag}s or null if not + * found. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + DistributionSetTag findDistributionSetTagById(@NotNull Long id); + + /** + * Find {@link TargetTag} based on given Name. + * + * @param name + * to look for. + * @return {@link TargetTag} or null if it does not exist + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + TargetTag findTargetTag(@NotEmpty String name); + + /** + * Finds {@link TargetTag} by given id. + * + * @param id + * to search for + * @return the found {@link TargetTag}s or null if not found. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + TargetTag findTargetTagById(@NotNull Long id); + + /** + * Updates an existing {@link DistributionSetTag}. + * + * @param distributionSetTag + * to be updated + * @return the updated {@link DistributionSet} + * @throws NullPointerException + * of {@link DistributionSetTag#getName()} is null + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) + DistributionSetTag updateDistributionSetTag(@NotNull DistributionSetTag distributionSetTag); + + /** + * updates the {@link TargetTag}. + * + * @param targetTag + * the {@link TargetTag} with updated values + * @return the updated {@link TargetTag} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) + TargetTag updateTargetTag(@NotNull TargetTag targetTag); + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java new file mode 100644 index 000000000..caf045c93 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java @@ -0,0 +1,99 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository; + +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.model.TargetFilterQuery; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.security.access.prepost.PreAuthorize; + +/** + * Management service for {@link TargetFilterQuery}s. + * + */ +public interface TargetFilterQueryManagement { + + /** + * creating new {@link TargetFilterQuery}. + * + * @param customTargetFilter + * @return the created {@link TargetFilterQuery} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) + TargetFilterQuery createTargetFilterQuery(@NotNull TargetFilterQuery customTargetFilter); + + /** + * Delete target filter query. + * + * @param targetFilterQueryId + * IDs of target filter query to be deleted + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) + void deleteTargetFilterQuery(@NotNull Long targetFilterQueryId); + + /** + * + * Retrieves all target filter query{@link TargetFilterQuery}. + * + * @param pageable + * pagination parameter + * @return the found {@link TargetFilterQuery}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findAllTargetFilterQuery(@NotNull Pageable pageable); + + /** + * Retrieves all target filter query which {@link TargetFilterQuery}. + * + * + * @param pageable + * pagination parameter + * @param name + * target filter query name + * @return the page with the found {@link TargetFilterQuery} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findTargetFilterQueryByFilters(@NotNull Pageable pageable, String name); + + /** + * Find target filter query by id. + * + * @param targetFilterQueryId + * Target filter query id + * @return the found {@link TargetFilterQuery} + * + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + TargetFilterQuery findTargetFilterQueryById(@NotNull Long targetFilterQueryId); + + /** + * Find target filter query by name. + * + * @param targetFilterQueryName + * Target filter query name + * @return the found {@link TargetFilterQuery} + * + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + TargetFilterQuery findTargetFilterQueryByName(@NotNull String targetFilterQueryName); + + /** + * updates the {@link TargetFilterQuery}. + * + * @param targetFilterQuery + * to be updated + * @return the updated {@link TargetFilterQuery} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) + TargetFilterQuery updateTargetFilterQuery(@NotNull TargetFilterQuery targetFilterQuery); + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java new file mode 100644 index 000000000..ae7724e31 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -0,0 +1,604 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository; + +import java.net.URI; +import java.util.Collection; +import java.util.List; + +import javax.persistence.Entity; +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Tag; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetFilterQuery; +import org.eclipse.hawkbit.repository.model.TargetIdName; +import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.repository.model.TargetTag; +import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; +import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.hibernate.validator.constraints.NotEmpty; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.security.access.prepost.PreAuthorize; + +/** + * Management service for {@link Target}s. + * + */ +public interface TargetManagement { + + /** + * Assign a {@link TargetTag} assignment to given {@link Target}s. + * + * @param targetIds + * to assign for + * @param tag + * to assign + * @return list of assigned targets + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) + List assignTag(@NotEmpty Collection targetIds, @NotNull TargetTag tag); + + /** + * Counts number of targets with given + * {@link Target#getAssignedDistributionSet()}. + * + * @param distId + * to search for + * + * @return number of found {@link Target}s. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countTargetByAssignedDistributionSet(@NotNull Long distId); + + /** + * Count {@link Target}s for all the given filter parameters. + * + * @param status + * find targets having on of these {@link TargetUpdateStatus}s. + * Set to null in case this is not required. + * @param searchText + * to find targets having the text anywhere in name or + * description. Set null in case this is not + * required. + * @param installedOrAssignedDistributionSetId + * to find targets having the {@link DistributionSet} as + * installed or assigned. Set to null in case this + * is not required. + * @param tagNames + * to find targets which are having any one in this tag names. + * Set null in case this is not required. + * @param selectTargetWithNoTag + * flag to select targets with no tag assigned + * + * @return the found number {@link Target}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countTargetByFilters(Collection status, String searchText, + Long installedOrAssignedDistributionSetId, Boolean selectTargetWithNoTag, String... tagNames); + + /** + * Counts number of targets with given + * {@link TargetInfo#getInstalledDistributionSet()}. + * + * @param distId + * to search for + * @return number of found {@link Target}s. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countTargetByInstalledDistributionSet(@NotNull Long distId); + + /** + * Count {@link TargetFilterQuery}s for given target filter query. + * + * @param targetFilterQuery + * {link TargetFilterQuery} + * @return the found number {@link TargetFilterQuery}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countTargetByTargetFilterQuery(@NotEmpty String targetFilterQuery); + + /** + * Count {@link TargetFilterQuery}s for given filter parameter. + * + * @param targetFilterQuery + * {link TargetFilterQuery} + * @return the found number {@link TargetFilterQuery}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countTargetByTargetFilterQuery(@NotNull TargetFilterQuery targetFilterQuery); + + /** + * Counts all {@link Target}s in the repository. + * + * @return number of targets + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countTargetsAll(); + + /** + * creating a new {@link Target}. + * + * @param target + * to be created + * @return the created {@link Target} + * + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + Target createTarget(@NotNull Target target); + + /** + * creating new {@link Target}s including poll status data. useful + * especially in plug and play scenarios. + * + * @param target + * to be created * + * @param status + * of the target + * @param lastTargetQuery + * if a plug and play case + * @param address + * if a plug and play case + * + * @throws EntityAlreadyExistsException + * if {@link Target} with given {@link Target#getControllerId()} + * already exists. + * + * @return created {@link Target} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + Target createTarget(@NotNull Target target, @NotNull TargetUpdateStatus status, Long lastTargetQuery, URI address); + + /** + * creates multiple {@link Target}s. If some of the given {@link Target}s + * already exists in the DB a {@link EntityAlreadyExistsException} is + * thrown. {@link Target}s contain all objects of the parameter targets, + * including duplicates. + * + * @param targets + * to be created. + * @return the created {@link Target}s + * + * @throws EntityAlreadyExistsException + * of one of the given targets already exist. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) + List createTargets(@NotNull Collection targets); + + /** + * creating a new {@link Target} including poll status data. useful + * especially in plug and play scenarios. + * + * @param targets + * to be created * + * @param status + * of the target + * @param lastTargetQuery + * if a plug and play case + * @param address + * if a plug and play case + * + * @return newly created target + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) + List createTargets(@NotNull Collection targets, @NotNull TargetUpdateStatus status, + Long lastTargetQuery, URI address); + + /** + * Deletes all targets with the given IDs. + * + * @param targetIDs + * the technical IDs of the targets to be deleted + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) + void deleteTargets(@NotEmpty Long... targetIDs); + + /** + * finds all {@link Target#getControllerId()} which are currently in the + * database. + * + * @return all IDs of all {@link Target} in the system + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findAllTargetIds(); + + /** + * Finds all targets for all the given parameters but returns not the full + * target but {@link TargetIdName}. + * + * @param pageRequest + * the pageRequest to enhance the query for paging and sorting + * + * @param filterByStatus + * find targets having this {@link TargetUpdateStatus}s. Set to + * null in case this is not required. + * @param filterBySearchText + * to find targets having the text anywhere in name or + * description. Set null in case this is not + * required. + * @param installedOrAssignedDistributionSetId + * to find targets having the {@link DistributionSet} as + * installed or assigned. Set to null in case this + * is not required. + * @param filterByTagNames + * to find targets which are having any one in this tag names. + * Set null in case this is not required. + * @param selectTargetWithNoTag + * flag to select targets with no tag assigned + * + * @return the found {@link TargetIdName}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findAllTargetIdsByFilters(@NotNull Pageable pageRequest, + Collection filterByStatus, String filterBySearchText, + Long installedOrAssignedDistributionSetId, Boolean selectTargetWithNoTag, String... filterByTagNames); + + /** + * Finds all targets for all the given parameter {@link TargetFilterQuery} + * and returns not the full target but {@link TargetIdName}. + * + * @param pageRequest + * the pageRequest to enhance the query for paging and sorting + * @param targetFilterQuery + * {@link TargetFilterQuery} + * @return the found {@link TargetIdName}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findAllTargetIdsByTargetFilterQuery(@NotNull Pageable pageRequest, + @NotNull TargetFilterQuery targetFilterQuery); + + /** + * retrieves {@link Target}s by the assigned {@link DistributionSet} without + * details, i.e. NO {@link Target#getTags()} and {@link Target#getActions()} + * possible. + * + * + * @param distributionSetID + * the ID of the {@link DistributionSet} + * @param pageReq + * page parameter + * @return the found {@link Target}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) + Page findTargetByAssignedDistributionSet(@NotNull Long distributionSetID, @NotNull Pageable pageReq); + + /** + * Retrieves {@link Target}s by the assigned {@link DistributionSet} without + * details, i.e. NO {@link Target#getTags()} and {@link Target#getActions()} + * possible including additional filtering based on the given {@code spec}. + * + * @param distributionSetID + * the ID of the {@link DistributionSet} + * @param spec + * the specification to filter the result set + * @param pageReq + * page parameter + * @return the found {@link Target}s, never {@code null} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) + Page findTargetByAssignedDistributionSet(@NotNull Long distributionSetID, + @NotNull Specification spec, @NotNull Pageable pageReq); + + /** + * Find {@link Target} based on given ID returns found Target without + * details, i.e. NO {@link Target#getTags()} and {@link Target#getActions()} + * possible. + * + * @param controllerIDs + * to look for. + * @return List of found{@link Target}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findTargetByControllerID(@NotEmpty Collection controllerIDs); + + /** + * Find {@link Target} based on given ID returns found Target without + * details, i.e. NO {@link Target#getTags()} and {@link Target#getActions()} + * possible. + * + * @param controllerId + * to look for. + * @return {@link Target} or null if it does not exist + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Target findTargetByControllerID(@NotEmpty String controllerId); + + /** + * Find {@link Target} based on given ID returns found Target with details, + * i.e. {@link Target#getTags()} and {@link Target#getActions()} are + * possible. + * + * Note: try to use {@link #findTargetByControllerID(String)} as much as + * possible. + * + * @param controllerId + * to look for. + * @return {@link Target} or null if it does not exist + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Target findTargetByControllerIDWithDetails(@NotEmpty String controllerId); + + /** + * Filter {@link Target}s for all the given parameters. If all parameters + * except pageable are null, all available {@link Target}s are returned. + * + * @param pageable + * page parameters + * @param status + * find targets having this {@link TargetUpdateStatus}s. Set to + * null in case this is not required. + * @param searchText + * to find targets having the text anywhere in name or + * description. Set null in case this is not + * required. + * @param installedOrAssignedDistributionSetId + * to find targets having the {@link DistributionSet} as + * installed or assigned. Set to null in case this + * is not required. + * @param tagNames + * to find targets which are having any one in this tag names. + * Set null in case this is not required. + * @param selectTargetWithNoTag + * flag to select targets with no tag assigned + * + * @return the found {@link Target}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Slice findTargetByFilters(@NotNull Pageable pageable, Collection status, + String searchText, Long installedOrAssignedDistributionSetId, Boolean selectTargetWithNoTag, + String... tagNames); + + /** + * retrieves {@link Target}s by the installed {@link DistributionSet}without + * details, i.e. NO {@link Target#getTags()} and {@link Target#getActions()} + * possible. + * + * @param distributionSetID + * the ID of the {@link DistributionSet} + * @param pageReq + * page parameter + * @return the found {@link Target}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) + Page findTargetByInstalledDistributionSet(@NotNull Long distributionSetID, @NotNull Pageable pageReq); + + /** + * retrieves {@link Target}s by the installed {@link DistributionSet}without + * details, i.e. NO {@link Target#getTags()} and {@link Target#getActions()} + * possible including additional filtering based on the given {@code spec}. + * + * @param distributionSetId + * the ID of the {@link DistributionSet} + * @param spec + * the specification to filter the result + * @param pageable + * page parameter + * @return the found {@link Target}s, never {@code null} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) + Page findTargetByInstalledDistributionSet(@NotNull Long distributionSetId, + @NotNull Specification spec, @NotNull Pageable pageable); + + /** + * Retrieves the {@link Target} which have a certain + * {@link TargetUpdateStatus} without details, i.e. NO + * {@link Target#getTags()} and {@link Target#getActions()} possible. + * + * @param pageable + * page parameter + * @param status + * the {@link TargetUpdateStatus} to be filtered on + * @return the found {@link Target}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findTargetByUpdateStatus(@NotNull Pageable pageable, @NotNull TargetUpdateStatus status); + + /** + * Retrieves all targets without details, i.e. NO {@link Target#getTags()} + * and {@link Target#getActions()} possible + * + * @param pageable + * pagination parameter + * @return the found {@link Target}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Slice findTargetsAll(@NotNull Pageable pageable); + + /** + * Retrieves all targets based on the given specification. + * + * @param spec + * the specification for the query + * @param pageable + * pagination parameter + * @return the found {@link Target}s, never {@code null} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findTargetsAll(@NotNull Specification spec, @NotNull Pageable pageable); + + /** + * Retrieves all targets without details, i.e. NO {@link Target#getTags()} + * and {@link Target#getActions()} possible based on + * {@link TargetFilterQuery#getQuery()} + * + * @param targetFilterQuery + * in string notation + * @param pageable + * pagination parameter + * @return the found {@link Target}s, never {@code null} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Slice findTargetsAll(@NotNull String targetFilterQuery, @NotNull Pageable pageable); + + /** + * Retrieves all targets without details, i.e. NO {@link Target#getTags()} + * and {@link Target#getActions()} possible based on + * {@link TargetFilterQuery#getQuery()} + * + * @param targetFilterQuery + * the specification for the query + * @param pageable + * pagination parameter + * + * @return the found {@link Target}s, never {@code null} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Slice findTargetsAll(@NotNull TargetFilterQuery targetFilterQuery, @NotNull Pageable pageable); + + /** + * method retrieves all {@link Target}s from the repo in the following + * order: + *

+ * 1) {@link Target}s which have the given {@link DistributionSet} as + * {@link Target#getTargetInfo()} + * {@link TargetInfo#getInstalledDistributionSet()} + *

+ * 2) {@link Target}s which have the given {@link DistributionSet} as + * {@link Target#getAssignedDistributionSet()} + *

+ * 3) {@link Target}s which have no connection to the given + * {@link DistributionSet}. + * + * @param pageable + * the page request to page the result set + * @param orderByDistributionId + * {@link DistributionSet#getId()} to be ordered by + * @param filterByDistributionId + * {@link DistributionSet#getId()} to be filter the result. Set + * to null in case this is not required. + * @param filterByStatus + * find targets having this {@link TargetUpdateStatus}s. Set to + * null in case this is not required. + * @param filterBySearchText + * to find targets having the text anywhere in name or + * description. Set null in case this is not + * required. + * @param installedOrAssignedDistributionSetId + * to find targets having the {@link DistributionSet} as + * installed or assigned. Set to null in case this + * is not required. + * @param filterByTagNames + * to find targets which are having any one in this tag names. + * Set null in case this is not required. + * @param selectTargetWithNoTag + * flag to select targets with no tag assigned + * @return a paged result {@link Page} of the {@link Target}s in a defined + * order. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Slice findTargetsAllOrderByLinkedDistributionSet(@NotNull Pageable pageable, + @NotNull Long orderByDistributionId, Long filterByDistributionId, + Collection filterByStatus, String filterBySearchText, Boolean selectTargetWithNoTag, + String... filterByTagNames); + + /** + * retrieves a list of {@link Target}s by their controller ID with details, + * i.e. {@link Target#getTags()} are possible. + * + * Note: try to use {@link #findTargetByControllerID(String)} as much as + * possible. + * + * @param controllerIDs + * {@link Target}s Names parameter + * @return the found {@link Target}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findTargetsByControllerIDsWithTags(@NotNull List controllerIDs); + + /** + * Find targets by tag name. + * + * @param tagName + * tag name + * @return list of matching targets + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + List findTargetsByTag(@NotEmpty String tagName); + + /** + * Toggles {@link TargetTag} assignment to given {@link Target}s by means + * that if some (or all) of the targets in the list have the {@link Tag} not + * yet assigned, they will be. If all of theme have the tag already assigned + * they will be removed instead. + * + * @param targetIds + * to toggle for + * @param tagName + * to toggle + * @return TagAssigmentResult with all meta data of the assignment outcome. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) + TargetTagAssignmentResult toggleTagAssignment(@NotEmpty Collection targetIds, @NotEmpty String tagName); + + /** + * {@link Entity} based method call for + * {@link #toggleTagAssignment(Collection, String)}. + * + * @param targets + * to toggle for + * @param tag + * to toggle + * @return TagAssigmentResult with all meta data of the assignment outcome. + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) + TargetTagAssignmentResult toggleTagAssignment(@NotEmpty Collection targets, @NotNull TargetTag tag); + + /** + * Un-assign all {@link Target} from a given {@link TargetTag} . + * + * @param tag + * to un-assign all targets + * @return list of unassigned targets + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) + List unAssignAllTargetsByTag(@NotNull TargetTag tag); + + /** + * Un-assign a {@link TargetTag} assignment to given {@link Target}. + * + * @param controllerID + * to un-assign for + * @param targetTag + * to un-assign + * @return the unassigned target or if no target is unassigned + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) + Target unAssignTag(@NotEmpty String controllerID, @NotNull TargetTag targetTag); + + /** + * updates the {@link Target}. + * + * @param target + * to be updated + * @return the updated {@link Target} + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + Target updateTarget(@NotNull Target target); + + /** + * updates multiple {@link Target}s. + * + * @param targets + * to be updated + * @return the updated {@link Target}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_CONTROLLER) + List updateTargets(@NotNull Iterable targets); + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java index a5eaf4006..d9647e610 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java @@ -23,6 +23,74 @@ import org.springframework.security.access.prepost.PreAuthorize; */ public interface TenantConfigurationManagement { + /** + * Adds or updates a specific configuration for a specific tenant. + * + * + * @param configurationKey + * the key of the configuration + * @param value + * the configuration value which will be written into the + * database. + * @return the configuration value which was just written into the database. + * @throws TenantConfigurationValidatorException + * if the {@code propertyType} and the value in general does not + * match the expected type and format defined by the Key + * @throws ConversionFailedException + * if the property cannot be converted to the given + */ + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) + TenantConfigurationValue addOrUpdateConfiguration(TenantConfigurationKey configurationKey, T value); + + /** + * Build the tenant configuration by the given key + * + * @param configurationKey + * the key + * @param propertyType + * the property type + * @param tenantConfiguration + * the configuration + * @return if no default value is set and no database value available + * or returns the tenant configuration value + */ + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) + TenantConfigurationValue buildTenantConfigurationValueByKey(TenantConfigurationKey configurationKey, + Class propertyType, TenantConfiguration tenantConfiguration); + + /** + * Deletes a specific configuration for the current tenant. Does nothing in + * case there is no tenant specific configuration value. + * + * @param configurationKey + * the configuration key to be deleted + */ + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) + void deleteConfiguration(TenantConfigurationKey configurationKey); + + /** + * Retrieves a configuration value from the e.g. tenant overwritten + * configuration values or in case the tenant does not a have a specific + * configuration the global default value hold in the {@link Environment}. + * + * @param configurationKey + * the key of the configuration + * @return the converted configuration value either from the tenant specific + * configuration stored or from the fall back default values or + * {@code null} in case key has not been configured and not default + * value exists + * @throws TenantConfigurationValidatorException + * if the {@code propertyType} and the value in general does not + * match the expected type and format defined by the Key + * @throws ConversionFailedException + * if the property cannot be converted to the given + * {@code propertyType} + */ + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) + TenantConfigurationValue getConfigurationValue(TenantConfigurationKey configurationKey); + /** * Retrieves a configuration value from the e.g. tenant overwritten * configuration values or in case the tenant does not a have a specific @@ -51,45 +119,6 @@ public interface TenantConfigurationManagement { TenantConfigurationValue getConfigurationValue(TenantConfigurationKey configurationKey, Class propertyType); - /** - * Build the tenant configuration by the given key - * - * @param configurationKey - * the key - * @param propertyType - * the property type - * @param tenantConfiguration - * the configuration - * @return if no default value is set and no database value available - * or returns the tenant configuration value - */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) - TenantConfigurationValue buildTenantConfigurationValueByKey(TenantConfigurationKey configurationKey, - Class propertyType, TenantConfiguration tenantConfiguration); - - /** - * Retrieves a configuration value from the e.g. tenant overwritten - * configuration values or in case the tenant does not a have a specific - * configuration the global default value hold in the {@link Environment}. - * - * @param configurationKey - * the key of the configuration - * @return the converted configuration value either from the tenant specific - * configuration stored or from the fall back default values or - * {@code null} in case key has not been configured and not default - * value exists - * @throws TenantConfigurationValidatorException - * if the {@code propertyType} and the value in general does not - * match the expected type and format defined by the Key - * @throws ConversionFailedException - * if the property cannot be converted to the given - * {@code propertyType} - */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) - TenantConfigurationValue getConfigurationValue(TenantConfigurationKey configurationKey); - /** * returns the global configuration property either defined in the property * file or an default value otherwise. @@ -114,33 +143,4 @@ public interface TenantConfigurationManagement { + SpringEvalExpressions.IS_SYSTEM_CODE) T getGlobalConfigurationValue(TenantConfigurationKey configurationKey, Class propertyType); - /** - * Adds or updates a specific configuration for a specific tenant. - * - * - * @param configurationKey - * the key of the configuration - * @param value - * the configuration value which will be written into the - * database. - * @return the configuration value which was just written into the database. - * @throws TenantConfigurationValidatorException - * if the {@code propertyType} and the value in general does not - * match the expected type and format defined by the Key - * @throws ConversionFailedException - * if the property cannot be converted to the given - */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) - TenantConfigurationValue addOrUpdateConfiguration(TenantConfigurationKey configurationKey, T value); - - /** - * Deletes a specific configuration for the current tenant. Does nothing in - * case there is no tenant specific configuration value. - * - * @param configurationKey - * the configuration key to be deleted - */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) - void deleteConfiguration(TenantConfigurationKey configurationKey); - } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java new file mode 100644 index 000000000..bb4ca8ef0 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository; + +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.report.model.TenantUsage; +import org.springframework.security.access.prepost.PreAuthorize; + +/** + * Management service for statistics of a single tenant. + * + */ +public interface TenantStatsManagement { + + /** + * Service for stats of a single tenant. Opens a new transaction and as a + * result can an be used for multiple tenants, i.e. to allow in one session + * to collect data of all tenants in the system. + * + * @param tenant + * to collect for + * @return collected statistics + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) + TenantUsage getStatsOfTenant(String tenant); + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java index adcca7c73..f5123c792 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java @@ -14,6 +14,7 @@ import java.util.stream.Collectors; import javax.persistence.EntityManager; import javax.validation.constraints.NotNull; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.Target; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index 8834b2ae0..a7706440d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -19,6 +19,7 @@ import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.repository.ControllerManagement; +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; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index d905fb7b1..0c5df3b3f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -33,6 +34,7 @@ import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.ForceQuitActionNotAllowedException; @@ -75,7 +77,7 @@ import com.google.common.collect.Lists; import com.google.common.eventbus.EventBus; /** - * JPA implementation for DeploymentManagement. + * JPA implementation for {@link DeploymentManagement}. * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @@ -156,7 +158,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Transactional(isolation = Isolation.READ_COMMITTED) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, - final List targets) { + final Collection targets) { final DistributionSet set = distributoinSetRepository.findOne(dsID); if (set == null) { throw new EntityNotFoundException( @@ -171,7 +173,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Transactional(isolation = Isolation.READ_COMMITTED) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, - final List targets, final Rollout rollout, final RolloutGroup rolloutGroup) { + final Collection targets, final Rollout rollout, final RolloutGroup rolloutGroup) { final DistributionSet set = distributoinSetRepository.findOne(dsID); if (set == null) { throw new EntityNotFoundException( @@ -200,7 +202,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { * {@link DistributionSetType}. */ private DistributionSetAssignmentResult assignDistributionSetToTargets(@NotNull final DistributionSet set, - final List targetsWithActionType, final Rollout rollout, + final Collection targetsWithActionType, final Rollout rollout, final RolloutGroup rolloutGroup) { if (!set.isComplete()) { @@ -456,7 +458,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Override @Modifying @Transactional(isolation = Isolation.READ_COMMITTED) - public void createScheduledAction(final List targets, final DistributionSet distributionSet, + public void createScheduledAction(final Collection targets, final DistributionSet distributionSet, final ActionType actionType, final long forcedTime, final Rollout rollout, final RolloutGroup rolloutGroup) { // cancel all current scheduled actions for this target. E.g. an action diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index d045cd549..da999e7cb 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -27,6 +27,8 @@ import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.DistributionSetFilter; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.SystemManagement; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityLockedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -59,7 +61,7 @@ import com.google.common.base.Strings; import com.google.common.eventbus.EventBus; /** - * Business facade for managing the {@link DistributionSet}s. + * JPA implementation of {@link DistributionSetManagement}. * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java index f0f704352..523f91374 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java @@ -51,7 +51,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; /** - * Service layer for generating hawkBit reports. + * JPA implementation of {@link ReportManagement}. * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java index 3de83d381..b7ced5511 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java @@ -40,15 +40,13 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; /** - * RolloutGroupManagement to control rollout groups. This service secures all - * the functionality based on the {@link PreAuthorize} annotation on methods. + * JPA implementation of {@link RolloutGroupManagement}. */ @Validated @Service diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index 1f6e9b9a4..e4636f890 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -20,6 +20,7 @@ import javax.persistence.EntityManager; import org.eclipse.hawkbit.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; @@ -52,7 +53,6 @@ import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; @@ -65,9 +65,7 @@ import org.springframework.util.Assert; import org.springframework.validation.annotation.Validated; /** - * RolloutManagement to control rollouts e.g. like creating, starting, resuming - * and pausing rollouts. This service secures all the functionality based on the - * {@link PreAuthorize} annotation on methods. + * JPA implementation of {@link RolloutManagement}. */ @Validated @Service diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index a3566f07f..3f25dff29 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -59,7 +59,7 @@ import com.google.common.base.Strings; import com.google.common.collect.Sets; /** - * JPA implementation of SoftwareManagement. + * JPA implementation of {@link SoftwareManagement}. * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @@ -148,7 +148,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public List createSoftwareModule(final Iterable swModules) { + public List createSoftwareModule(final Collection swModules) { swModules.forEach(swModule -> { if (null != swModule.getId()) { throw new EntityAlreadyExistsException(); @@ -222,7 +222,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public void deleteSoftwareModules(final Iterable ids) { + public void deleteSoftwareModules(final Collection ids) { final List swModulesToDelete = softwareModuleRepository.findByIdIn(ids); final Set assignedModuleIds = new HashSet<>(); swModulesToDelete.forEach(swModule -> { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java similarity index 82% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index 67f7bf93f..b7a08fc2e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -14,11 +14,11 @@ import java.util.List; import java.util.stream.Collectors; import javax.persistence.EntityManager; -import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.cache.TenancyCacheManager; -import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.report.model.SystemUsageReport; +import org.eclipse.hawkbit.repository.SystemManagement; +import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @@ -33,7 +33,6 @@ import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.cache.interceptor.SimpleKeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; @@ -41,13 +40,13 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; /** - * Central system management operations of the SP server. + * JPA implementation of {@link SystemManagement}. * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service -public class SystemManagement { +public class JpaSystemManagement implements SystemManagement { @Autowired private EntityManager entityManager; @@ -107,14 +106,7 @@ public class SystemManagement { private final ThreadLocal createInitialTenant = new ThreadLocal<>(); - /** - * Calculated system usage statistics, both overall for the entire system - * and per tenant; - * - * @return SystemUsageReport of the current system - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) + @Override public SystemUsageReport getSystemUsageStatistics() { BigDecimal sumOfArtifacts = (BigDecimal) entityManager @@ -156,35 +148,18 @@ public class SystemManagement { })); } - /** - * Registers the key generator for the {@link #currentTenant()} method - * because this key generator is aware of the {@link #createInitialTenant} - * thread local in case we are currently creating a tenant and insert the - * default distribution set types. - * - * @return the {@link CurrentTenantKeyGenerator} - */ - @Bean + @Override @Transactional(propagation = Propagation.SUPPORTS) - public CurrentTenantKeyGenerator currentTenantKeyGenerator() { + @Bean + public KeyGenerator currentTenantKeyGenerator() { return new CurrentTenantKeyGenerator(); } - /** - * Returns {@link TenantMetaData} of given and current tenant. - * - * DISCLAIMER: this variant is used during initial login (where the tenant - * is not yet in the session). Please user {@link #getTenantMetadata()} for - * regular requests. - * - * @param tenant - * @return - */ + @Override @Cacheable(value = "tenantMetadata", key = "#tenant.toUpperCase()") @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - @NotNull - public TenantMetaData getTenantMetadata(@NotNull final String tenant) { + public TenantMetaData getTenantMetadata(final String tenant) { final TenantMetaData result = tenantMetaDataRepository.findByTenantIgnoreCase(tenant); // Create if it does not exist @@ -201,28 +176,16 @@ public class SystemManagement { return result; } - /** - * - * @return list of all tenant names in the system. - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @Override public List findTenants() { return tenantMetaDataRepository.findAll().stream().map(md -> md.getTenant()).collect(Collectors.toList()); } - /** - * Deletes all data related to a given tenant. - * - * @param tenant - * to delete - */ + @Override @CacheEvict(value = { "tenantMetadata" }, key = "#tenant.toUpperCase()") @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) - public void deleteTenant(@NotNull final String tenant) { + public void deleteTenant(final String tenant) { cacheManager.evictCaches(tenant); cacheManager.getCache("currentTenant").evict(currentTenantKeyGenerator().generate(null, null)); tenantAware.runAsTenant(tenant, () -> { @@ -246,13 +209,10 @@ public class SystemManagement { }); } - /** - * @return {@link TenantMetaData} of {@link TenantAware#getCurrentTenant()} - */ + @Override @Cacheable(value = "tenantMetadata", keyGenerator = "tenantKeyGenerator") @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - @NotNull public TenantMetaData getTenantMetadata() { if (tenantAware.getCurrentTenant() == null) { throw new IllegalStateException("Tenant not set"); @@ -261,13 +221,7 @@ public class SystemManagement { return getTenantMetadata(tenantAware.getCurrentTenant()); } - /** - * Checks if a specific tenant exists. The tenant will not be created lazy. - * - * @param tenant - * the tenant to check - * @return {@code true} in case the tenant exits or {@code false} if not - */ + @Override @Cacheable(value = "currentTenant", keyGenerator = "currentTenantKeyGenerator") // set transaction to not supported, due we call this in // BaseEntity#prePersist methods @@ -290,18 +244,11 @@ public class SystemManagement { return initialTenantCreation; } - /** - * Update call for {@link TenantMetaData}. - * - * @param metaData - * to update - * @return updated {@link TenantMetaData} entity - */ + @Override @CachePut(value = "tenantMetadata", key = "#metaData.tenant.toUpperCase()") @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - @NotNull - public TenantMetaData updateTenantMetadata(@NotNull final TenantMetaData metaData) { + public TenantMetaData updateTenantMetadata(final TenantMetaData metaData) { if (!tenantMetaDataRepository.exists(metaData.getId())) { throw new EntityNotFoundException("Metadata does not exist: " + metaData.getId()); } @@ -340,7 +287,7 @@ public class SystemManagement { * currently created and not the one currently in the {@link TenantAware}. * */ - private class CurrentTenantKeyGenerator implements KeyGenerator { + public class CurrentTenantKeyGenerator implements KeyGenerator { @Override // Exception squid:S923 - override @SuppressWarnings({ "squid:S923" }) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java similarity index 51% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TagManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java index dbca65a00..f1b885b13 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TagManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java @@ -10,11 +10,10 @@ package org.eclipse.hawkbit.repository.jpa; import static com.google.common.base.Preconditions.checkNotNull; +import java.util.Collection; import java.util.LinkedList; import java.util.List; -import javax.validation.constraints.NotNull; - import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; @@ -22,21 +21,18 @@ import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; -import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.tenancy.TenantAware; -import org.hibernate.validator.constraints.NotEmpty; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; @@ -45,13 +41,13 @@ import org.springframework.validation.annotation.Validated; import com.google.common.eventbus.EventBus; /** - * Management service class for {@link Tag}s. + * JP>A implementation of {@link TagManagement}. * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service -public class TagManagement { +public class JpaTagManagement implements TagManagement { @Autowired private TargetTagRepository targetTagRepository; @@ -74,34 +70,14 @@ public class TagManagement { @Autowired private AfterTransactionCommitExecutor afterCommit; - /** - * Find {@link TargetTag} based on given Name. - * - * @param name - * to look for. - * @return {@link TargetTag} or null if it does not exist - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public TargetTag findTargetTag(@NotEmpty final String name) { + @Override + public TargetTag findTargetTag(final String name) { return targetTagRepository.findByNameEquals(name); } - /** - * Creates a new {@link TargetTag}. - * - * @param targetTag - * to be created - * - * @return the new created {@link TargetTag} - * - * @throws EntityAlreadyExistsException - * if given object already exists - */ - @Modifying + @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) - public TargetTag createTargetTag(@NotNull final TargetTag targetTag) { + public TargetTag createTargetTag(final TargetTag targetTag) { if (null != targetTag.getId()) { throw new EntityAlreadyExistsException(); } @@ -118,21 +94,10 @@ public class TagManagement { return save; } - /** - * created multiple {@link TargetTag}s. - * - * @param targetTags - * to be created - * @return the new created {@link TargetTag}s - * - * @throws EntityAlreadyExistsException - * if given object has already an ID. - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) - public List createTargetTags(@NotNull final Iterable targetTags) { + public List createTargetTags(final Iterable targetTags) { targetTags.forEach(tag -> { if (tag.getId() != null) { throw new EntityAlreadyExistsException(); @@ -144,16 +109,10 @@ public class TagManagement { return save; } - /** - * Deletes {@link TargetTag} with given name. - * - * @param targetTagName - * tag name of the {@link TargetTag} to be deleted - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) - public void deleteTargetTag(@NotEmpty final String targetTagName) { + public void deleteTargetTag(final String targetTagName) { final TargetTag tag = targetTagRepository.findByNameEquals(targetTagName); final List changed = new LinkedList<>(); @@ -172,54 +131,25 @@ public class TagManagement { } - /** - * returns all {@link TargetTag}s. - * - * @return all {@link TargetTag}s - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + @Override public List findAllTargetTags() { return targetTagRepository.findAll(); } - /** - * Retrieves all target tags based on the given specification. - * - * @param spec - * the specification for the query - * @param pageable - * pagination parameter - * @return the found {@link Target}s, never {@code null} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findAllTargetTags(@NotNull final Specification spec, - @NotNull final Pageable pageable) { + @Override + public Page findAllTargetTags(final Specification spec, final Pageable pageable) { return targetTagRepository.findAll(spec, pageable); } - /** - * count {@link TargetTag}s. - * - * @return size of {@link TargetTag}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + @Override public long countTargetTags() { return targetTagRepository.count(); } - /** - * updates the {@link TargetTag}. - * - * @param targetTag - * the {@link TargetTag} - * @return the new {@link TargetTag} - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public TargetTag updateTargetTag(@NotNull final TargetTag targetTag) { + public TargetTag updateTargetTag(final TargetTag targetTag) { checkNotNull(targetTag.getName()); checkNotNull(targetTag.getId()); final TargetTag save = targetTagRepository.save(targetTag); @@ -227,32 +157,15 @@ public class TagManagement { return save; } - /** - * Find {@link DistributionSet} based on given name. - * - * @param name - * to look for. - * @return {@link DistributionSet} or null if it does not exist - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSetTag findDistributionSetTag(@NotEmpty final String name) { + @Override + public DistributionSetTag findDistributionSetTag(final String name) { return distributionSetTagRepository.findByNameEquals(name); } - /** - * Creates a {@link DistributionSet}. - * - * @param distributionSetTag - * to be created. - * @return the new {@link DistributionSet} - * @throws EntityAlreadyExistsException - * if distributionSetTag already exists - * - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public DistributionSetTag createDistributionSetTag(@NotNull final DistributionSetTag distributionSetTag) { + public DistributionSetTag createDistributionSetTag(final DistributionSetTag distributionSetTag) { if (null != distributionSetTag.getId()) { throw new EntityAlreadyExistsException(); } @@ -268,20 +181,11 @@ public class TagManagement { return save; } - /** - * Creates multiple {@link DistributionSetTag}s. - * - * @param distributionSetTags - * to be created - * @return the new {@link DistributionSetTag} - * @throws EntityAlreadyExistsException - * if a given entity already exists - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) public List createDistributionSetTags( - @NotNull final Iterable distributionSetTags) { + final Collection distributionSetTags) { for (final DistributionSetTag dsTag : distributionSetTags) { if (dsTag.getId() != null) { throw new EntityAlreadyExistsException(); @@ -294,17 +198,10 @@ public class TagManagement { return save; } - /** - * Deletes {@link DistributionSetTag} by given - * {@link DistributionSetTag#getName()}. - * - * @param tagNames - * to be deleted - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) - public void deleteDistributionSetTag(@NotEmpty final String tagName) { + public void deleteDistributionSetTag(final String tagName) { final DistributionSetTag tag = distributionSetTagRepository.findByNameEquals(tagName); final List changed = new LinkedList<>(); @@ -321,20 +218,10 @@ public class TagManagement { afterCommit.afterCommit(() -> eventBus.post(new DistributionSetTagDeletedEvent(tag))); } - /** - * Updates an existing {@link DistributionSetTag}. - * - * @param distributionSetTag - * to be updated - * @return the updated {@link DistributionSet} - * @throws NullPointerException - * of {@link DistributionSetTag#getName()} is null - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSetTag updateDistributionSetTag(@NotNull final DistributionSetTag distributionSetTag) { + public DistributionSetTag updateDistributionSetTag(final DistributionSetTag distributionSetTag) { checkNotNull(distributionSetTag.getName()); checkNotNull(distributionSetTag.getId()); final DistributionSetTag save = distributionSetTagRepository.save(distributionSetTag); @@ -343,80 +230,34 @@ public class TagManagement { return save; } - /** - * returns all {@link DistributionTag}s. - * - * @return all {@link DistributionTag}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + @Override public List findAllDistributionSetTags() { return distributionSetTagRepository.findAll(); } - /** - * Finds {@link TargetTag} by given id. - * - * @param id - * to search for - * @return the found {@link TargetTag}s or null if not found. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public TargetTag findTargetTagById(@NotNull final Long id) { + @Override + public TargetTag findTargetTagById(final Long id) { return targetTagRepository.findOne(id); } - /** - * Finds {@link DistributionSetTag} by given id. - * - * @param id - * to search for - * @return the found {@link DistributionSetTag}s or null if not - * found. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public DistributionSetTag findDistributionSetTagById(@NotNull final Long id) { + @Override + public DistributionSetTag findDistributionSetTagById(final Long id) { return distributionSetTagRepository.findOne(id); } - /** - * returns all {@link TargetTag}s. - * - * @param pageReq - * page parameter - * - * @return all {@link TargetTag}s - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findAllTargetTags(@NotNull final Pageable pageReq) { + @Override + public Page findAllTargetTags(final Pageable pageReq) { return targetTagRepository.findAll(pageReq); } - /** - * returns all {@link DistributionSetTag}s. - * - * @param pageReq - * page parameter - * @return all {@link DistributionSetTag}s - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Page findAllDistributionSetTags(@NotNull final Pageable pageReq) { + @Override + public Page findAllDistributionSetTags(final Pageable pageReq) { return distributionSetTagRepository.findAll(pageReq); } - /** - * Retrieves all DistributionSet tags based on the given specification. - * - * @param spec - * the specification for the query - * @param pageable - * pagination parameter - * @return the found {@link DistributionSetTag}s, never {@code null} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findAllDistributionSetTags(@NotNull final Specification spec, - @NotNull final Pageable pageable) { + @Override + public Page findAllDistributionSetTags(final Specification spec, + final Pageable pageable) { return distributionSetTagRepository.findAll(spec, pageable); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java similarity index 51% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java index 18ab0c486..a8c6b014f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java @@ -11,9 +11,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.ArrayList; import java.util.List; -import javax.validation.constraints.NotNull; - -import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.specifications.SpecificationsBuilder; @@ -24,7 +22,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specifications; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; @@ -34,28 +31,21 @@ import org.springframework.validation.annotation.Validated; import com.google.common.base.Strings; /** - * Business service facade for managing {@link TargetFilterQuery}s. + * JPA implementation of {@link TargetFilterQueryManagement}. * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service -public class TargetFilterQueryManagement { +public class JpaTargetFilterQueryManagement implements TargetFilterQueryManagement { @Autowired private TargetFilterQueryRepository targetFilterQueryRepository; - /** - * creating new {@link TargetFilterQuery}. - * - * @param customTargetFilter - * @return the created {@link TargetFilterQuery} - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) - public TargetFilterQuery createTargetFilterQuery(@NotNull final TargetFilterQuery customTargetFilter) { + public TargetFilterQuery createTargetFilterQuery(final TargetFilterQuery customTargetFilter) { if (targetFilterQueryRepository.findByName(customTargetFilter.getName()) != null) { throw new EntityAlreadyExistsException(customTargetFilter.getName()); @@ -63,44 +53,20 @@ public class TargetFilterQueryManagement { return targetFilterQueryRepository.save(customTargetFilter); } - /** - * Delete target filter query. - * - * @param targetFilterQueryId - * IDs of target filter query to be deleted - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) - public void deleteTargetFilterQuery(@NotNull final Long targetFilterQueryId) { + public void deleteTargetFilterQuery(final Long targetFilterQueryId) { targetFilterQueryRepository.delete(targetFilterQueryId); } - /** - * - * Retrieves all target filter query{@link TargetFilterQuery}. - * - * @param pageable - * pagination parameter - * @return the found {@link TargetFilterQuery}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findAllTargetFilterQuery(@NotNull final Pageable pageable) { + @Override + public Page findAllTargetFilterQuery(final Pageable pageable) { return targetFilterQueryRepository.findAll(pageable); } - /** - * Retrieves all target filter query which {@link TargetFilterQuery}. - * - * - * @param pageable - * pagination parameter - * @param name - * target filter query name - * @return the page with the found {@link TargetFilterQuery} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findTargetFilterQueryByFilters(@NotNull final Pageable pageable, final String name) { + @Override + public Page findTargetFilterQueryByFilters(final Pageable pageable, final String name) { final List> specList = new ArrayList<>(); if (!Strings.isNullOrEmpty(name)) { specList.add(TargetFilterQuerySpecification.likeName(name)); @@ -108,15 +74,7 @@ public class TargetFilterQueryManagement { return findTargetFilterQueryByCriteriaAPI(pageable, specList); } - /** - * - * @param pageable - * pagination parameter - * @param specList - * list of @link {@link Specification} - * @return the page with the found {@link TargetFilterQuery} - */ - private Page findTargetFilterQueryByCriteriaAPI(@NotNull final Pageable pageable, + private Page findTargetFilterQueryByCriteriaAPI(final Pageable pageable, final List> specList) { if (specList == null || specList.isEmpty()) { return targetFilterQueryRepository.findAll(pageable); @@ -126,44 +84,20 @@ public class TargetFilterQueryManagement { return targetFilterQueryRepository.findAll(specs, pageable); } - /** - * Find target filter query by name. - * - * @param targetFilterQueryName - * Target filter query name - * @return the found {@link TargetFilterQuery} - * - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public TargetFilterQuery findTargetFilterQueryByName(@NotNull final String targetFilterQueryName) { + @Override + public TargetFilterQuery findTargetFilterQueryByName(final String targetFilterQueryName) { return targetFilterQueryRepository.findByName(targetFilterQueryName); } - /** - * Find target filter query by id. - * - * @param targetFilterQueryId - * Target filter query id - * @return the found {@link TargetFilterQuery} - * - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public TargetFilterQuery findTargetFilterQueryById(@NotNull final Long targetFilterQueryId) { + @Override + public TargetFilterQuery findTargetFilterQueryById(final Long targetFilterQueryId) { return targetFilterQueryRepository.findOne(targetFilterQueryId); } - /** - * updates the {@link TargetFilterQuery}. - * - * @param targetFilterQuery - * to be updated - * @return the updated {@link TargetFilterQuery} - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public TargetFilterQuery updateTargetFilterQuery(@NotNull final TargetFilterQuery targetFilterQuery) { + public TargetFilterQuery updateTargetFilterQuery(final TargetFilterQuery targetFilterQuery) { Assert.notNull(targetFilterQuery.getId()); return targetFilterQueryRepository.save(targetFilterQuery); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java similarity index 52% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java index 01d6eb527..513d5b52c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java @@ -17,7 +17,6 @@ import java.util.List; import java.util.stream.Collectors; import javax.annotation.PreDestroy; -import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; @@ -27,17 +26,14 @@ import javax.persistence.criteria.JoinType; import javax.persistence.criteria.Order; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; -import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.Constants; import org.eclipse.hawkbit.eventbus.event.TargetTagAssigmentResultEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; -import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSet_; -import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetIdName; @@ -50,7 +46,6 @@ import org.eclipse.hawkbit.repository.model.Target_; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.specifications.TargetSpecifications; -import org.hibernate.validator.constraints.NotEmpty; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.data.domain.Page; @@ -61,7 +56,6 @@ import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; @@ -73,13 +67,13 @@ import com.google.common.collect.Lists; import com.google.common.eventbus.EventBus; /** - * Business service facade for managing {@link Target}s. + * JPA implementation of {@link TargetManagement}. * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service -public class TargetManagement { +public class JpaTargetManagement implements TargetManagement { @Autowired private EntityManager entityManager; @@ -102,34 +96,13 @@ public class TargetManagement { @Autowired private AfterTransactionCommitExecutor afterCommit; - /** - * Find {@link Target} based on given ID returns found Target without - * details, i.e. NO {@link Target#getTags()} and - * {@link Target#getActiveActions()} possible. - * - * @param controllerId - * to look for. - * @return {@link Target} or null if it does not exist - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Target findTargetByControllerID(@NotEmpty final String controllerId) { + @Override + public Target findTargetByControllerID(final String controllerId) { return targetRepository.findByControllerId(controllerId); } - /** - * Find {@link Target} based on given ID returns found Target with details, - * i.e. {@link Target#getTags()} and {@link Target#getActiveActions()} are - * possible. - * - * Note: try to use {@link #findTargetByControllerID(String)} as much as - * possible. - * - * @param controllerId - * to look for. - * @return {@link Target} or null if it does not exist - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Target findTargetByControllerIDWithDetails(@NotEmpty final String controllerId) { + @Override + public Target findTargetByControllerIDWithDetails(final String controllerId) { final Target result = targetRepository.findByControllerId(controllerId); // load lazy relations if (result != null) { @@ -146,40 +119,18 @@ public class TargetManagement { return result; } - /** - * Find {@link Target} based on given ID returns found Target without - * details, i.e. NO {@link Target#getTags()} and - * {@link Target#getActiveActions()} possible. - * - * @param controllerIDs - * to look for. - * @return List of found{@link Target}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findTargetByControllerID(@NotEmpty final Collection controllerIDs) { + @Override + public List findTargetByControllerID(final Collection controllerIDs) { return targetRepository.findAll(TargetSpecifications.byControllerIdWithStatusAndAssignedInJoin(controllerIDs)); } - /** - * Counts all {@link Target}s in the repository. - * - * @return number of targets - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + @Override public Long countTargetsAll() { return targetRepository.count(); } - /** - * Retrieves all targets without details, i.e. NO {@link Target#getTags()} - * and {@link Target#getActiveActions()} possible - * - * @param pageable - * pagination parameter - * @return the found {@link Target}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Slice findTargetsAll(@NotNull final Pageable pageable) { + @Override + public Slice findTargetsAll(final Pageable pageable) { // workarround - no join fetch allowed that is why we need specification // instead of query for // count() of Pageable @@ -192,113 +143,50 @@ public class TargetManagement { return criteriaNoCountDao.findAll(spec, pageable, Target.class); } - /** - * Retrieves all targets without details, i.e. NO {@link Target#getTags()} - * and {@link Target#getActiveActions()} possible based on - * {@link TargetFilterQuery#getQuery()} - * - * @param targetFilterQuery - * @param pageable - * @return - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Slice findTargetsAll(@NotNull final TargetFilterQuery targetFilterQuery, - @NotNull final Pageable pageable) { + @Override + public Slice findTargetsAll(final TargetFilterQuery targetFilterQuery, final Pageable pageable) { return findTargetsAll(RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class), pageable); } - /** - * Retrieves all targets without details, i.e. NO {@link Target#getTags()} - * and {@link Target#getActiveActions()} possible based on - * {@link TargetFilterQuery#getQuery()} - * - * @param targetFilterQuery - * @param pageable - * @return - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Slice findTargetsAll(@NotNull final String targetFilterQuery, @NotNull final Pageable pageable) { + @Override + public Slice findTargetsAll(final String targetFilterQuery, final Pageable pageable) { return findTargetsAll(RSQLUtility.parse(targetFilterQuery, TargetFields.class), pageable); } - /** - * Retrieves all targets based on the given specification. - * - * @param spec - * the specification for the query - * @param pageable - * pagination parameter - * @return the found {@link Target}s, never {@code null} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findTargetsAll(@NotNull final Specification spec, @NotNull final Pageable pageable) { + @Override + public Page findTargetsAll(final Specification spec, final Pageable pageable) { return targetRepository.findAll(spec, pageable); } - /** - * retrieves a list of {@link Target}s by their controller ID with details, - * i.e. {@link Target#getTags()} are possible. - * - * Note: try to use {@link #findTargetByControllerID(String)} as much as - * possible. - * - * @param controllerIDs - * {@link Target}s Names parameter - * @return the found {@link Target}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findTargetsByControllerIDsWithTags(@NotNull final List controllerIDs) { + @Override + public List findTargetsByControllerIDsWithTags(final List controllerIDs) { final List> partition = Lists.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT); return partition.stream() .map(ids -> targetRepository.findAll(TargetSpecifications.byControllerIdWithStatusAndTagsInJoin(ids))) .flatMap(t -> t.stream()).collect(Collectors.toList()); } - /** - * updates the {@link Target}. - * - * @param target - * to be updated - * @return the updated {@link Target} - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) - public Target updateTarget(@NotNull final Target target) { + public Target updateTarget(final Target target) { Assert.notNull(target.getId()); target.setNew(false); return targetRepository.save(target); } - /** - * updates multiple {@link Target}s. - * - * @param targets - * to be updated - * @return the updated {@link Target}s - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) - public List updateTargets(@NotNull final List targets) { + public List updateTargets(final Iterable targets) { targets.forEach(target -> target.setNew(false)); return targetRepository.save(targets); } - /** - * Deletes all targets with the given IDs. - * - * @param targetIDs - * the technical IDs of the targets to be deleted - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) - public void deleteTargets(@NotEmpty final Long... targetIDs) { + public void deleteTargets(final Long... targetIDs) { // we need to select the target IDs first to check the if the targetIDs // belonging to the // tenant! Delete statement are not automatically enhanced with the @@ -312,81 +200,25 @@ public class TargetManagement { } } - /** - * retrieves {@link Target}s by the assigned {@link DistributionSet} without - * details, i.e. NO {@link Target#getTags()} and - * {@link Target#getActiveActions()} possible. - * - * - * @param distributionSetID - * the ID of the {@link DistributionSet} - * @param pageReq - * page parameter - * @return the found {@link Target}s - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) - public Page findTargetByAssignedDistributionSet(@NotNull final Long distributionSetID, - @NotNull final Pageable pageReq) { + @Override + public Page findTargetByAssignedDistributionSet(final Long distributionSetID, final Pageable pageReq) { return targetRepository.findByAssignedDistributionSetId(pageReq, distributionSetID); } - /** - * Retrieves {@link Target}s by the assigned {@link DistributionSet} without - * details, i.e. NO {@link Target#getTags()} and - * {@link Target#getActiveActions()} possible including additional filtering - * based on the given {@code spec}. - * - * @param distributionSetID - * the ID of the {@link DistributionSet} - * @param spec - * the specification to filter the result set - * @param pageReq - * page parameter - * @return the found {@link Target}s, never {@code null} - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) - public Page findTargetByAssignedDistributionSet(@NotNull final Long distributionSetID, - final Specification spec, @NotNull final Pageable pageReq) { + @Override + public Page findTargetByAssignedDistributionSet(final Long distributionSetID, + final Specification spec, final Pageable pageReq) { return targetRepository.findAll((Specification) (root, query, cb) -> cb.and( TargetSpecifications.hasAssignedDistributionSet(distributionSetID).toPredicate(root, query, cb), spec.toPredicate(root, query, cb)), pageReq); } - /** - * retrieves {@link Target}s by the installed {@link DistributionSet}without - * details, i.e. NO {@link Target#getTags()} and - * {@link Target#getActiveActions()} possible. - * - * @param distributionSetID - * the ID of the {@link DistributionSet} - * @param pageReq - * page parameter - * @return the found {@link Target}s - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) - public Page findTargetByInstalledDistributionSet(@NotNull final Long distributionSetID, - @NotNull final Pageable pageReq) { + @Override + public Page findTargetByInstalledDistributionSet(final Long distributionSetID, final Pageable pageReq) { return targetRepository.findByTargetInfoInstalledDistributionSetId(pageReq, distributionSetID); } - /** - * retrieves {@link Target}s by the installed {@link DistributionSet}without - * details, i.e. NO {@link Target#getTags()} and - * {@link Target#getActiveActions()} possible including additional filtering - * based on the given {@code spec}. - * - * @param distributionSetId - * the ID of the {@link DistributionSet} - * @param spec - * the specification to filter the result - * @param pageable - * page parameter - * @return the found {@link Target}s, never {@code null} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) + @Override public Page findTargetByInstalledDistributionSet(final Long distributionSetId, final Specification spec, final Pageable pageable) { return targetRepository.findAll((Specification) (root, query, cb) -> cb.and( @@ -394,82 +226,21 @@ public class TargetManagement { spec.toPredicate(root, query, cb)), pageable); } - /** - * Retrieves the {@link Target} which have a certain - * {@link TargetUpdateStatus} without details, i.e. NO - * {@link Target#getTags()} and {@link Target#getActiveActions()} possible. - * - * @param pageable - * page parameter - * @param status - * the {@link TargetUpdateStatus} to be filtered on - * @return the found {@link Target}s - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Page findTargetByUpdateStatus(@NotNull final Pageable pageable, - @NotNull final TargetUpdateStatus status) { + @Override + public Page findTargetByUpdateStatus(final Pageable pageable, final TargetUpdateStatus status) { return targetRepository.findByTargetInfoUpdateStatus(pageable, status); } - /** - * Filter {@link Target}s for all the given parameters. If all parameters - * except pageable are null, all available {@link Target}s are returned. - * - * @param pageable - * page parameters - * @param status - * find targets having this {@link TargetUpdateStatus}s. Set to - * null in case this is not required. - * @param searchText - * to find targets having the text anywhere in name or - * description. Set null in case this is not - * required. - * @param installedOrAssignedDistributionSetId - * to find targets having the {@link DistributionSet} as - * installed or assigned. Set to null in case this - * is not required. - * @param tagNames - * to find targets which are having any one in this tag names. - * Set null in case this is not required. - * @param selectTargetWithNoTag - * flag to select targets with no tag assigned - * - * @return the found {@link Target}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Slice findTargetByFilters(@NotNull final Pageable pageable, - final Collection status, final String searchText, - final Long installedOrAssignedDistributionSetId, final Boolean selectTargetWithNoTag, - final String... tagNames) { + @Override + public Slice findTargetByFilters(final Pageable pageable, final Collection status, + final String searchText, final Long installedOrAssignedDistributionSetId, + final Boolean selectTargetWithNoTag, final String... tagNames) { final List> specList = buildSpecificationList(status, searchText, installedOrAssignedDistributionSetId, selectTargetWithNoTag, true, tagNames); return findByCriteriaAPI(pageable, specList); } - /** - * Count {@link Target}s for all the given filter parameters. - * - * @param status - * find targets having on of these {@link TargetUpdateStatus}s. - * Set to null in case this is not required. - * @param searchText - * to find targets having the text anywhere in name or - * description. Set null in case this is not - * required. - * @param installedOrAssignedDistributionSetId - * to find targets having the {@link DistributionSet} as - * installed or assigned. Set to null in case this - * is not required. - * @param tagNames - * to find targets which are having any one in this tag names. - * Set null in case this is not required. - * @param selectTargetWithNoTag - * flag to select targets with no tag assigned - * - * @return the found number {@link Target}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + @Override public Long countTargetByFilters(final Collection status, final String searchText, final Long installedOrAssignedDistributionSetId, final Boolean selectTargetWithNoTag, final String... tagNames) { @@ -498,15 +269,6 @@ public class TargetManagement { return specList; } - /** - * executes findAll with the given {@link Target} {@link Specification}s. - * - * @param pageable - * paging parameter - * @param specList - * list of @link {@link Specification} - * @return the page with the found {@link Target} - */ private Slice findByCriteriaAPI(final Pageable pageable, final List> specList) { if (specList == null || specList.isEmpty()) { return criteriaNoCountDao.findAll(pageable, Target.class); @@ -522,44 +284,18 @@ public class TargetManagement { return targetRepository.count(SpecificationsBuilder.combineWithAnd(specList)); } - /** - * {@link Entity} based method call for - * {@link #toggleTagAssignment(Collection, String)}. - * - * @param targets - * to toggle for - * @param tag - * to toggle - * @return TagAssigmentResult with all metadata of the assignment outcome. - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public TargetTagAssignmentResult toggleTagAssignment(@NotEmpty final List targets, - @NotNull final TargetTag tag) { + public TargetTagAssignmentResult toggleTagAssignment(final Collection targets, final TargetTag tag) { return toggleTagAssignment( targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), tag.getName()); } - /** - * Toggles {@link TargetTag} assignment to given {@link Target}s by means - * that if some (or all) of the targets in the list have the {@link Tag} not - * yet assigned, they will be. If all of theme have the tag already assigned - * they will be removed instead. - * - * @param targetIds - * to toggle for - * @param tagName - * to toogle - * @return TagAssigmentResult with all metadata of the assigment outcome. - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public TargetTagAssignmentResult toggleTagAssignment(@NotEmpty final Collection targetIds, - @NotNull final String tagName) { + public TargetTagAssignmentResult toggleTagAssignment(final Collection targetIds, final String tagName) { final TargetTag tag = targetTagRepository.findByNameEquals(tagName); final List alreadyAssignedTargets = targetRepository.findByTagNameAndControllerIdIn(tagName, targetIds); final List allTargets = targetRepository @@ -588,20 +324,10 @@ public class TargetManagement { return result; } - /** - * Assign a {@link TargetTag} assignment to given {@link Target}s. - * - * @param targetIds - * to assign for - * @param tagName - * to assign - * @return list of assigned targets - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public List assignTag(@NotEmpty final Collection targetIds, @NotNull final TargetTag tag) { + public List assignTag(final Collection targetIds, final TargetTag tag) { final List allTargets = targetRepository .findAll(TargetSpecifications.byControllerIdWithStatusAndTagsInJoin(targetIds)); @@ -617,7 +343,7 @@ public class TargetManagement { return save; } - private List unAssignTag(@NotEmpty final Collection targets, @NotNull final TargetTag tag) { + private List unAssignTag(final Collection targets, final TargetTag tag) { targets.forEach(target -> target.getTags().remove(tag)); final List save = targetRepository.save(targets); @@ -629,83 +355,26 @@ public class TargetManagement { return save; } - /** - * Unassign all {@link Target} from a given {@link TargetTag} . - * - * @param tag - * to unassign all targets - * @return list of unassigned targets - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public List unAssignAllTargetsByTag(@NotNull final TargetTag tag) { + public List unAssignAllTargetsByTag(final TargetTag tag) { return unAssignTag(tag.getAssignedToTargets(), tag); } - /** - * Unassign a {@link TargetTag} assignment to given {@link Target}. - * - * @param controllerID - * to unassign for - * @param targetTag - * to unassign - * @return the unassigned target or if no target is unassigned - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public Target unAssignTag(@NotNull final String controllerID, @NotNull final TargetTag targetTag) { + public Target unAssignTag(final String controllerID, final TargetTag targetTag) { final List allTargets = targetRepository .findAll(TargetSpecifications.byControllerIdWithStatusAndTagsInJoin(Arrays.asList(controllerID))); final List unAssignTag = unAssignTag(allTargets, targetTag); return unAssignTag.isEmpty() ? null : unAssignTag.get(0); } - /** - * method retrieves all {@link Target}s from the repo in the following - * order: - *

- * 1) {@link Target}s which have the given {@link DistributionSet} as - * {@link Target#getTargetStatus()} - * {@link TargetStatus#getInstalledDistributionSet()} - *

- * 2) {@link Target}s which have the given {@link DistributionSet} as - * {@link Target#getAssignedDistributionSet()} - *

- * 3) {@link Target}s which have no connection to the given - * {@link DistributionSet}. - * - * @param pageable - * the page request to page the result set - * @param orderByDistributionId - * {@link DistributionSet#getId()} to be ordered by - * @param filterByDistributionId - * {@link DistributionSet#getId()} to be filter the result. Set - * to null in case this is not required. - * @param filterByStatus - * find targets having this {@link TargetUpdateStatus}s. Set to - * null in case this is not required. - * @param filterBySearchText - * to find targets having the text anywhere in name or - * description. Set null in case this is not - * required. - * @param installedOrAssignedDistributionSetId - * to find targets having the {@link DistributionSet} as - * installed or assigned. Set to null in case this - * is not required. - * @param filterByTagNames - * to find targets which are having any one in this tag names. - * Set null in case this is not required. - * @param selectTargetWithNoTag - * flag to select targets with no tag assigned - * @return a paged result {@link Page} of the {@link Target}s in a defined - * order. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Slice findTargetsAllOrderByLinkedDistributionSet(@NotNull final Pageable pageable, - @NotNull final Long orderByDistributionId, final Long filterByDistributionId, + @Override + public Slice findTargetsAllOrderByLinkedDistributionSet(final Pageable pageable, + final Long orderByDistributionId, final Long filterByDistributionId, final Collection filterByStatus, final String filterBySearchText, final Boolean selectTargetWithNoTag, final String... filterByTagNames) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); @@ -756,9 +425,6 @@ public class TargetManagement { return new SliceImpl<>(resultList, pageable, hasNext); } - /** - * @param specifications - */ private static Predicate[] specificationsToPredicate(final List> specifications, final Root root, final CriteriaQuery query, final CriteriaBuilder cb) { final Predicate[] predicates = new Predicate[specifications.size()]; @@ -768,40 +434,17 @@ public class TargetManagement { return predicates; } - /** - * Counts number of targets with given - * {@link Target#getAssignedDistributionSet()}. - * - * @param distId - * to search for - * - * @return number of found {@link Target}s. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + @Override public Long countTargetByAssignedDistributionSet(final Long distId) { return targetRepository.countByAssignedDistributionSetId(distId); } - /** - * Counts number of targets with given - * {@link TargetStatus#getInstalledDistributionSet()}. - * - * @param distId - * to search for - * @return number of found {@link Target}s. - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + @Override public Long countTargetByInstalledDistributionSet(final Long distId) { return targetRepository.countByTargetInfoInstalledDistributionSetId(distId); } - /** - * finds all {@link Target#getControllerId()} which are currently in the - * database. - * - * @return all IDs of all {@link Target} in the system - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + @Override public List findAllTargetIds() { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery query = cb.createQuery(TargetIdName.class); @@ -811,34 +454,8 @@ public class TargetManagement { } - /** - * Finds all targets for all the given parameters but returns not the full - * target but {@link TargetIdName}. - * - * @param pageRequest - * the pageRequest to enhance the query for paging and sorting - * - * @param filterByStatus - * find targets having this {@link TargetUpdateStatus}s. Set to - * null in case this is not required. - * @param filterBySearchText - * to find targets having the text anywhere in name or - * description. Set null in case this is not - * required. - * @param installedOrAssignedDistributionSetId - * to find targets having the {@link DistributionSet} as - * installed or assigned. Set to null in case this - * is not required. - * @param filterByTagNames - * to find targets which are having any one in this tag names. - * Set null in case this is not required. - * @param selectTargetWithNoTag - * flag to select targets with no tag assigned - * - * @return the found {@link TargetIdName}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findAllTargetIdsByFilters(@NotNull final Pageable pageRequest, + @Override + public List findAllTargetIdsByFilters(final Pageable pageRequest, final Collection filterByStatus, final String filterBySearchText, final Long installedOrAssignedDistributionSetId, final Boolean selectTargetWithNoTag, final String... filterByTagNames) { @@ -871,19 +488,9 @@ public class TargetManagement { .collect(Collectors.toList()); } - /** - * Finds all targets for all the given parameter {@link TargetFilterQuery} - * and returns not the full target but {@link TargetIdName}. - * - * @param pageRequest - * the pageRequest to enhance the query for paging and sorting - * @param targetFilterQuery - * {@link TargetFilterQuery} - * @return the found {@link TargetIdName}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + @Override public List findAllTargetIdsByTargetFilterQuery(final Pageable pageRequest, - @NotNull final TargetFilterQuery targetFilterQuery) { + final TargetFilterQuery targetFilterQuery) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery query = cb.createQuery(Object[].class); final Root targetRoot = query.from(Target.class); @@ -918,31 +525,12 @@ public class TargetManagement { eventBus.unregister(this); } - /** - * creating new {@link Target}s including poll status data. useful - * especially in plug and play scenarios. - * - * @param target - * to be created * - * @param status - * of the target - * @param lastTargetQuery - * if a plug and play case - * @param address - * if a plug and play case - * - * @throws EntityAlreadyExistsException - * - * @return - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) @CacheEvict(value = { "targetsCreatedOverPeriod" }, allEntries = true) - public Target createTarget(@NotNull final Target target, @NotNull final TargetUpdateStatus status, - final Long lastTargetQuery, final URI address) { + public Target createTarget(final Target target, final TargetUpdateStatus status, final Long lastTargetQuery, + final URI address) { if (targetRepository.findByControllerId(target.getControllerId()) != null) { throw new EntityAlreadyExistsException(target.getControllerId()); @@ -965,43 +553,18 @@ public class TargetManagement { } - /** - * creating a new {@link Target}. - * - * @param target - * to be created - * @return the created {@link Target} - * - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) @CacheEvict(value = { "targetsCreatedOverPeriod" }, allEntries = true) - public Target createTarget(@NotNull final Target target) { + public Target createTarget(final Target target) { return createTarget(target, TargetUpdateStatus.UNKNOWN, null, null); } - /** - * creates multiple {@link Target}s. If some of the given {@link Target}s - * already exists in the DB a {@link EntityAlreadyExistsException} is - * thrown. {@link Target}s contain all objects of the parameter targets, - * including duplicates. - * - * @param targets - * to be created. - * @return the created {@link Target}s - * - * @throws {@link - * EntityAlreadyExistsException} of one of the given targets - * already exist. - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) - public List createTargets(@NotNull final List targets) { + public List createTargets(final Collection targets) { if (!targets.isEmpty() && targetRepository.countByControllerIdIn( targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList())) > 0) { throw new EntityAlreadyExistsException(); @@ -1014,27 +577,11 @@ public class TargetManagement { return savedTargets; } - /** - * creating a new {@link Target} including poll status data. useful - * especially in plug and play scenarios. - * - * @param targets - * to be created * - * @param status - * of the target - * @param lastTargetQuery - * if a plug and play case - * @param address - * if a plug and play case - * - * @return newly created target - */ + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) - public List createTargets(@NotNull final Collection targets, - @NotNull final TargetUpdateStatus status, final long lastTargetQuery, final URI address) { + public List createTargets(final Collection targets, final TargetUpdateStatus status, + final Long lastTargetQuery, final URI address) { if (targetRepository.countByControllerIdIn( targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList())) > 0) { throw new EntityAlreadyExistsException(); @@ -1047,42 +594,20 @@ public class TargetManagement { return savedTargets; } - /** - * Find targets by tag name. - * - * @param tagName - * tag name - * @return list of matching targets - */ - @NotNull - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findTargetsByTag(@NotNull final String tagName) { + @Override + public List findTargetsByTag(final String tagName) { final TargetTag tag = targetTagRepository.findByNameEquals(tagName); return targetRepository.findByTag(tag); } - /** - * Count {@link TargetFilterQuery}s for given filter parameter. - * - * @param targetFilterQuery - * {link TargetFilterQuery} - * @return the found number {@link TargetFilterQuery}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Long countTargetByTargetFilterQuery(@NotNull final TargetFilterQuery targetFilterQuery) { + @Override + public Long countTargetByTargetFilterQuery(final TargetFilterQuery targetFilterQuery) { final Specification specs = RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class); return targetRepository.count(specs); } - /** - * Count {@link TargetFilterQuery}s for given target filter query. - * - * @param targetFilterQuery - * {link TargetFilterQuery} - * @return the found number {@link TargetFilterQuery}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public Long countTargetByTargetFilterQuery(@NotNull final String targetFilterQuery) { + @Override + public Long countTargetByTargetFilterQuery(final String targetFilterQuery) { final Specification specs = RSQLUtility.parse(targetFilterQuery, TargetFields.class); return targetRepository.count(specs); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantStatsManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java similarity index 73% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantStatsManagement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java index 451a6e401..5c9cb7223 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantStatsManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java @@ -10,10 +10,9 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.Optional; -import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.report.model.TenantUsage; +import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; @@ -21,12 +20,12 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; /** - * Management service for stats of a single tenant. + * Management service for statistics of a single tenant. * */ @Validated @Service -public class TenantStatsManagement { +public class JpaTenantStatsManagement implements TenantStatsManagement { @Autowired private TargetRepository targetRepository; @@ -37,17 +36,8 @@ public class TenantStatsManagement { @Autowired private ActionRepository actionRepository; - /** - * Service for stats of a single tenant. Opens a new transaction and as a - * result can an be used for multiple tenants, i.e. to allow in one session - * to collect data of all tenants in the system. - * - * @param tenant - * to collect for - * @return collected statistics - */ + @Override @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED) - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) public TenantUsage getStatsOfTenant(final String tenant) { final TenantUsage result = new TenantUsage(tenant); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java index fd1d81280..d1327c690 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.repository.model.helper; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; +import org.eclipse.hawkbit.repository.SystemManagement; import org.springframework.beans.factory.annotation.Autowired; /** diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java index dafc21eef..b134a3315 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java @@ -23,6 +23,10 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.SystemManagement; +import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.jpa.ActionRepository; import org.eclipse.hawkbit.repository.jpa.ActionStatusRepository; @@ -36,11 +40,7 @@ import org.eclipse.hawkbit.repository.jpa.RolloutRepository; import org.eclipse.hawkbit.repository.jpa.SoftwareModuleMetadataRepository; import org.eclipse.hawkbit.repository.jpa.SoftwareModuleRepository; import org.eclipse.hawkbit.repository.jpa.SoftwareModuleTypeRepository; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; -import org.eclipse.hawkbit.repository.jpa.TagManagement; -import org.eclipse.hawkbit.repository.jpa.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.jpa.TargetInfoRepository; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.jpa.TargetRepository; import org.eclipse.hawkbit.repository.jpa.TargetTagRepository; import org.eclipse.hawkbit.repository.jpa.TenantMetaDataRepository; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java index 03a9b230f..1787d29e4 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java @@ -19,7 +19,7 @@ import org.apache.commons.io.IOUtils; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java index 3deba1a56..4c6af0d83 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java @@ -21,7 +21,6 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.jpa.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java index 37d4ea683..99e08f331 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java @@ -13,7 +13,6 @@ import static org.junit.Assert.fail; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.jpa.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.junit.Test; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java index f27c7b707..73958e6fa 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java @@ -31,8 +31,8 @@ import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.jpa.TagManagement; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java index a30927ebf..1a766c8c4 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java @@ -19,10 +19,10 @@ import org.eclipse.hawkbit.repository.DistributionSetFields; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.jpa.TargetWithActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java index e630003c5..eaa0fec28 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTagResource.java @@ -13,8 +13,8 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.TagFields; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java index c5663f9f5..27cfdb924 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SystemManagementResource.java @@ -16,8 +16,8 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.report.model.SystemUsageReport; import org.eclipse.hawkbit.report.model.TenantUsage; +import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.rest.resource.model.systemmanagement.CacheRest; import org.eclipse.hawkbit.rest.resource.model.systemmanagement.SystemStatisticsRest; import org.eclipse.hawkbit.rest.resource.model.systemmanagement.TenantSystemUsageRest; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java index df779c688..4b068a41e 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetResource.java @@ -19,8 +19,8 @@ import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.ActionStatus; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java index b6946145d..1a9155828 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetTagResource.java @@ -12,9 +12,9 @@ import java.util.List; import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.TagFields; +import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.TagManagement; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java index ac1c95374..3705e8da3 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java @@ -33,9 +33,9 @@ import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.jpa.ActionRepository; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java index 1e3ab9b03..ce9f101f3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.common.tagdetails; import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; -import org.eclipse.hawkbit.repository.jpa.TagManagement; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.eclipse.hawkbit.repository.model.TargetTag; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java index bc46f50fd..178610c23 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.TagManagement; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java index e607c99d2..6f03c5860 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java @@ -16,7 +16,7 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.eventbus.event.TargetTagAssigmentResultEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index e92e4e735..c1ee96146 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -20,7 +20,7 @@ import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java index c22e63241..1fd306816 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java @@ -15,8 +15,8 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.DistributionSetFilter; -import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; +import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java index 940323b53..5bc1627a9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java @@ -15,7 +15,7 @@ import java.util.List; import java.util.Map.Entry; import java.util.Set; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; +import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleIdName; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index 2abfcb731..b41f3dfe9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -14,7 +14,7 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.jpa.TargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.components.SPUIButton; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java index fe0ecf489..35f88f5a1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CustomTargetBeanQuery.java @@ -12,7 +12,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyTarget; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java index 591a2f457..4f528c74a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.TargetFields; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.rsql.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.rsql.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java index 37e25f152..4a2d6da6c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterBeanQuery.java @@ -12,7 +12,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.eclipse.hawkbit.repository.jpa.TargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyTargetFilter; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java index b2b6d5913..17bfefe56 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java @@ -17,7 +17,7 @@ import java.util.Map; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import org.eclipse.hawkbit.repository.jpa.TargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.ui.common.ConfirmationDialog; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 1910aafdf..d13dc94cf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -16,8 +16,8 @@ import java.util.Map; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; import org.eclipse.hawkbit.repository.jpa.TenantMetaDataRepository; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java index 5d154dced..353ef3e95 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java @@ -14,8 +14,8 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.DistributionSetFilter; -import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; +import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java index a9cccc8c1..0df1b0ea5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java @@ -19,7 +19,7 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java index 0021f7bd1..9b66f2836 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.jpa.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.ui.management.tag.ProxyTag; import org.eclipse.hawkbit.ui.management.tag.TagIdName; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java index 65b5dcdbd..ed002defb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java @@ -13,7 +13,7 @@ import java.util.List; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java index 4a6f8d824..ad537e626 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.management.footer; import java.util.Set; -import org.eclipse.hawkbit.repository.jpa.TagManagement; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java index 4e34ef606..56e11a6fe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java @@ -22,7 +22,7 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java index ff88d2004..6bed7dd4f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java @@ -14,7 +14,7 @@ import java.util.Set; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.jpa.TagManagement; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.ui.common.CoordinatesToColor; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java index 1d720da22..2369893c7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java @@ -26,8 +26,8 @@ import java.util.concurrent.Executor; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.TagManagement; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.Target; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index d5eb6be5c..e54911d86 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.ui.management.targettable; import java.util.HashSet; import java.util.Set; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java index 3645e82d1..f3e0078f3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java @@ -13,8 +13,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java index 95e1da7b7..657cd97af 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java @@ -16,7 +16,7 @@ import java.util.Map; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.DeploymentManagement; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 47e896a79..4ed2580f6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -22,8 +22,8 @@ import org.eclipse.hawkbit.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java index 26d36c254..ac85b928b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CustomTargetTagFilterButtonClick.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.management.targettag; import java.io.Serializable; -import org.eclipse.hawkbit.repository.jpa.TargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterSingleButtonClick; import org.eclipse.hawkbit.ui.management.event.TargetFilterEvent; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java index b57d4d1c9..066383d8a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.jpa.TagManagement; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.ui.management.tag.ProxyTag; import org.eclipse.hawkbit.ui.management.tag.TagIdName; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java index 8d76f45b7..48447f112 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java @@ -16,7 +16,7 @@ import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 92b24e301..7e8d45e1b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -14,7 +14,7 @@ import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.RolloutManagement; -import org.eclipse.hawkbit.repository.jpa.TargetManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java index 9422e431f..75d2741af 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java @@ -15,8 +15,8 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.DistributionSetFilter; -import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; +import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyDistribution; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java index c03b9e5d0..8a9675564 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.RolloutManagement; -import org.eclipse.hawkbit.repository.jpa.TargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java index 4660937cd..0162f6ed8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.ui.tenantconfiguration; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.SystemManagement; +import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; From f345d5068fd96a9b4d9c38ab0167c0b1b430220e Mon Sep 17 00:00:00 2001 From: venu1278 Date: Thu, 19 May 2016 15:56:19 +0530 Subject: [PATCH 125/371] fix_flashing_whitepage_on_login_application Signed-off-by: venu1278 --- .../main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss index 550a0479b..128c66e55 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss @@ -132,14 +132,12 @@ $v-included-components: remove($v-included-components, form); left: 50%; margin-left: -20px; } - .v-generated-body &.v-app , .v-generated-body .v-app { - background-color: rgba(0, 0, 0, 0); + .v-generated-body &.v-app { background-image: $app-background-image, linear-gradient(to bottom, $app-background-image-gradient) !important; background-image: $app-background-image, -webkit-linear-gradient(top, $app-background-image-gradient) !important; background-image: $app-background-image, -moz-linear-gradient(top, $app-background-image-gradient) !important; background-position: bottom; background-repeat: no-repeat; - height:100%; - width:100%; } + } From 5f8a2bebef54cdf8d88873cbc7bc2d89facfbc33 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 19 May 2016 12:57:32 +0200 Subject: [PATCH 126/371] add license header to logback.xml Signed-off-by: Michael Hirsch --- .../src/main/resources/logback.xml | 10 ++++++++++ .../hawkbit-example-app/src/main/resources/logback.xml | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/examples/hawkbit-device-simulator/src/main/resources/logback.xml b/examples/hawkbit-device-simulator/src/main/resources/logback.xml index 0cdbf8ff6..da64e62d1 100644 --- a/examples/hawkbit-device-simulator/src/main/resources/logback.xml +++ b/examples/hawkbit-device-simulator/src/main/resources/logback.xml @@ -1,4 +1,14 @@ + diff --git a/examples/hawkbit-example-app/src/main/resources/logback.xml b/examples/hawkbit-example-app/src/main/resources/logback.xml index 7470bb201..a76e39683 100644 --- a/examples/hawkbit-example-app/src/main/resources/logback.xml +++ b/examples/hawkbit-example-app/src/main/resources/logback.xml @@ -1,4 +1,14 @@ + From 088da91fde624c615b60ab916ed1afe6a64e9908 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 19 May 2016 17:21:10 +0200 Subject: [PATCH 127/371] fix typo in readme.md Signed-off-by: Michael Hirsch --- examples/hawkbit-example-mgmt-simulator/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/hawkbit-example-mgmt-simulator/README.md b/examples/hawkbit-example-mgmt-simulator/README.md index 772084629..925df8041 100644 --- a/examples/hawkbit-example-mgmt-simulator/README.md +++ b/examples/hawkbit-example-mgmt-simulator/README.md @@ -1,6 +1,6 @@ # Eclipse.IoT hawkBit - Example Management Feign Client -Example Spring Boot client that shows how to efficiently use the hawkBit Example Management Fiegn Client and the hawkBit Management API. +Example Spring Boot client that shows how to efficiently use the hawkBit Example Management Feign Client and the hawkBit Management API. Powered by [Feign](https://github.com/Netflix/feign). @@ -28,7 +28,7 @@ In getting started example: * creating software modules * assigning software modules to distribution sets -In rollout mode: +In create rollout example: * creating software modules type * creating distribution set type * creating distribution sets From f9ed3b305d81d56023082141eecabb49a30607fb Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 19 May 2016 18:28:09 +0200 Subject: [PATCH 128/371] Move annotation Signed-off-by: SirWayne --- .../src/main/java/org/eclipse/hawkbit/app/Start.java | 2 +- .../autoconfigure/web/ResourceControllerAutoConfiguration.java | 2 +- .../eclipse/hawkbit/mgmt/{annotation => }/EnableMgmtApi.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/{annotation => }/EnableMgmtApi.java (96%) diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java index 197fc3218..4a3e6028a 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.app; import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; import org.eclipse.hawkbit.ddi.EnableDdiApi; -import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; +import org.eclipse.hawkbit.mgmt.EnableMgmtApi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Import; diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java index 6684b700d..ee54995c8 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/web/ResourceControllerAutoConfiguration.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.autoconfigure.web; import org.eclipse.hawkbit.ddi.EnableDdiApi; -import org.eclipse.hawkbit.mgmt.annotation.EnableMgmtApi; +import org.eclipse.hawkbit.mgmt.EnableMgmtApi; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/EnableMgmtApi.java similarity index 96% rename from hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java rename to hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/EnableMgmtApi.java index 18cff40f3..6d4252e55 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/annotation/EnableMgmtApi.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/EnableMgmtApi.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.mgmt.annotation; +package org.eclipse.hawkbit.mgmt; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; From 61a53d874a3b54905fd01408390d59483af3855d Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 20 May 2016 11:01:09 +0200 Subject: [PATCH 129/371] Optimize Signed-off-by: Melanie Retter --- .../CreateUpdateSoftwareTypeLayout.java | 372 ++--------------- .../hawkbit/ui/common/CommonDialogWindow.java | 6 +- .../CreateUpdateDistSetTypeLayout.java | 387 ++++-------------- .../CreateUpdateTagLayout.java | 78 ++-- ...eateUpdateDistributionTagLayoutWindow.java | 4 +- .../CreateUpdateTargetTagLayoutWindow.java | 4 +- .../hawkbit/customstyles/popup-window.scss | 4 + 7 files changed, 171 insertions(+), 684 deletions(-) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/{management/tag => layouts}/CreateUpdateTagLayout.java (93%) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 4fbe61303..f8615714c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -18,12 +18,9 @@ import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; -import org.eclipse.hawkbit.ui.common.CoordinatesToColor; -import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; -import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; +import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -35,22 +32,14 @@ import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.data.Property.ValueChangeListener; -import com.vaadin.server.Page; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; -import com.vaadin.ui.TextArea; -import com.vaadin.ui.TextField; -import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.components.colorpicker.ColorChangeEvent; import com.vaadin.ui.components.colorpicker.ColorChangeListener; import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; @@ -61,7 +50,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout +public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout implements ColorChangeListener, ColorSelector { private static final long serialVersionUID = -5169398523815919367L; @@ -73,34 +62,19 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout @Autowired private transient UiProperties uiProperties; - private VerticalLayout sliderLayout; - private HorizontalLayout colorLayout; - private String createTypeStr; - private String updateTypeStr; private String singleAssignStr; private String multiAssignStr; - private Label createType; - private Label updateType; private Label singleAssign; private Label multiAssign; - private Label comboLabel; - private TextField typeKey; - private OptionGroup createOptiongroup; private OptionGroup assignOptiongroup; - private static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; - private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; - private static final String TAG_DYNAMIC_STYLE = "tag-color-preview"; - /** RGB color converter. */ - private final Coordinates2Color rgbConverter = new CoordinatesToColor(); + @Override + protected void createRequiredComponents() { - private void createComponents() { createTypeStr = i18n.get("label.create.type"); updateTypeStr = i18n.get("label.update.type"); singleAssignStr = i18n.get("label.singleAssign.type"); multiAssignStr = i18n.get("label.multiAssign.type"); - createType = SPUIComponentProvider.getLabel(createTypeStr, null); - updateType = SPUIComponentProvider.getLabel(updateTypeStr, null); singleAssign = SPUIComponentProvider.getLabel(singleAssignStr, null); multiAssign = SPUIComponentProvider.getLabel(multiAssignStr, null); comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); @@ -138,9 +112,8 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout ColorPickerHelper.setRgbSliderValues(colorPickerLayout); - createUpdateOptionGroup(); - singleMultiOptionGroup(); + createOptionGroup(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission()); } @Override @@ -148,25 +121,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout super.buildLayout(); getFormLayout().addComponent(typeKey, 4); - getFormLayout().addComponent(assignOptiongroup, 5); - - final HorizontalLayout mainLayout = new HorizontalLayout(); - - mainLayout.addComponent(getFormLayout()); - - colorLayout = new HorizontalLayout(); - sliderLayout = new VerticalLayout(); - final HorizontalLayout chooseColorLayout = new HorizontalLayout(); - chooseColorLayout.addComponents(colorLabel, tagColorPreviewBtn); - chooseColorLayout.setComponentAlignment(colorLabel, Alignment.TOP_CENTER); - chooseColorLayout.setComponentAlignment(tagColorPreviewBtn, Alignment.TOP_CENTER); - sliderLayout.addComponent(chooseColorLayout); - colorLayout.addComponent(sliderLayout); - - final VerticalLayout mainWindowLayout = new VerticalLayout(); - mainWindowLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); - mainWindowLayout.addComponent(mainLayout); - mainWindowLayout.addComponent(colorLayout); + getFormLayout().addComponent(assignOptiongroup); } @Override @@ -182,42 +137,16 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout * @param event * ValueChangeEvent */ - private void createOptionValueChanged(final ValueChangeEvent event) { + @Override + protected void createOptionValueChanged(final ValueChangeEvent event) { + + super.createOptionValueChanged(event); + if ("Update Type".equals(event.getProperty().getValue())) { - tagName.clear(); - tagDesc.clear(); - typeKey.clear(); - typeKey.setEnabled(false); - tagName.setEnabled(false); assignOptiongroup.setEnabled(false); - - populateTagNameCombo(); - // show target name combo - comboLayout.addComponent(comboLabel); - comboLayout.addComponent(tagNameComboBox); } else { - typeKey.setEnabled(true); - tagName.setEnabled(true); - tagName.clear(); - tagDesc.clear(); - typeKey.clear(); assignOptiongroup.setEnabled(true); - // hide target name combo - comboLayout.removeComponent(comboLabel); - comboLayout.removeComponent(tagNameComboBox); } - // close the color picker layout - tagPreviewBtnClicked = false; - // reset the selected color - Set defualt color - restoreComponentStyles(); - getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); - getColorPickerLayout().getSelPreview() - .setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - // remove the sliders and color picker layout - - // TODO MR - // fieldLayout.removeComponent(sliders); - // mainLayout.removeComponent(colorPickerLayout); } /** @@ -227,37 +156,16 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout protected void reset() { super.reset(); - typeKey.clear(); assignOptiongroup.select(singleAssignStr); } - private void typeNameChosen(final ValueChangeEvent event) { - final String tagSelected = (String) event.getProperty().getValue(); - if (null != tagSelected) { - setTypeTagCombo(tagSelected); - } else { - resetTagNameField(); - } - } - - private void resetTagNameField() { - tagName.setEnabled(false); - tagName.clear(); + @Override + protected void resetTagNameField() { + super.resetTagNameField(); typeKey.clear(); tagDesc.clear(); - restoreComponentStyles(); - - // fieldLayout.removeComponent(sliders); - // mainLayout.removeComponent(colorPickerLayout); - assignOptiongroup.select(singleAssignStr); - // Default green color - - // TODO extra method - colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); - colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); - tagPreviewBtnClicked = false; } /** @@ -267,7 +175,8 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout * @param targetTagSelected * as the selected tag from combo */ - private void setTypeTagCombo(final String targetTagSelected) { + @Override + protected void setTagDetails(final String targetTagSelected) { tagName.setValue(targetTagSelected); final SoftwareModuleType selectedTypeTag = swTypeManagementService .findSoftwareModuleTypeByName(targetTagSelected); @@ -280,36 +189,10 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout assignOptiongroup.setValue(singleAssignStr); } - // TODO extra method - if (null == selectedTypeTag.getColour()) { - getColorPickerLayout() - .setSelectedColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); - getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); - createDynamicStyleForComponents(tagName, typeKey, tagDesc, ColorPickerConstants.DEFAULT_COLOR); - getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); - } else { - getColorPickerLayout() - .setSelectedColor(ColorPickerHelper.rgbToColorConverter(selectedTypeTag.getColour())); - getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); - getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); - createDynamicStyleForComponents(tagName, typeKey, tagDesc, selectedTypeTag.getColour()); - getPreviewButtonColor(selectedTypeTag.getColour()); - } + setColorPickerComponentsColor(selectedTypeTag.getColour()); } } - private void createUpdateOptionGroup() { - final List optionValues = new ArrayList<>(); - if (permChecker.hasCreateDistributionPermission()) { - optionValues.add(createType.getValue()); - } - if (permChecker.hasUpdateDistributionPermission()) { - optionValues.add(updateType.getValue()); - } - createOptionGroupByValues(optionValues); - } - private void singleMultiOptionGroup() { final List optionValues = new ArrayList<>(); optionValues.add(singleAssign.getValue()); @@ -317,17 +200,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout assignOptionGroupByValues(optionValues); } - private void createOptionGroupByValues(final List tagOptions) { - createOptiongroup = new OptionGroup("", tagOptions); - createOptiongroup.setCaption(null); - createOptiongroup.setStyleName(ValoTheme.OPTIONGROUP_SMALL); - createOptiongroup.addStyleName("custom-option-group"); - createOptiongroup.setNullSelectionAllowed(false); - if (!tagOptions.isEmpty()) { - createOptiongroup.select(tagOptions.get(0)); - } - } - private void assignOptionGroupByValues(final List tagOptions) { assignOptiongroup = new OptionGroup("", tagOptions); assignOptiongroup.setStyleName(ValoTheme.OPTIONGROUP_SMALL); @@ -336,96 +208,35 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout assignOptiongroup.select(tagOptions.get(0)); } - /** - * Value change listeners implementations of sliders. - */ - private void slidersValueChangeListeners() { - redSlider.addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = -8336732888800920839L; - - @Override - public void valueChange(final ValueChangeEvent event) { - final double red = (Double) event.getProperty().getValue(); - final Color newColor = new Color((int) red, selectedColor.getGreen(), selectedColor.getBlue()); - setColorToComponents(newColor); - } - }); - greenSlider.addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = 1236358037766775663L; - - @Override - public void valueChange(final ValueChangeEvent event) { - final double green = (Double) event.getProperty().getValue(); - final Color newColor = new Color(selectedColor.getRed(), (int) green, selectedColor.getBlue()); - setColorToComponents(newColor); - } - }); - blueSlider.addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = 8466370763686043947L; - - @Override - public void valueChange(final ValueChangeEvent event) { - final double blue = (Double) event.getProperty().getValue(); - final Color newColor = new Color(selectedColor.getRed(), selectedColor.getGreen(), (int) blue); - setColorToComponents(newColor); - } - }); - } - - // TODO extra method - private void setColorToComponents(final Color newColor) { - setColor(newColor); - getColorPickerLayout().getColorSelect().setColor(newColor); - getPreviewButtonColor(newColor.getCSS()); - createDynamicStyleForComponents(tagName, typeKey, tagDesc, newColor.getCSS()); - } - - /** - * reset the tag name and tag description component border color. - */ - private void restoreComponentStyles() { - tagName.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); - tagDesc.removeStyleName(TYPE_DESC_DYNAMIC_STYLE); - typeKey.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); - getPreviewButtonColor(DEFAULT_COLOR); - } - - private void save() { + @Override + protected void save(final ClickEvent event) { if (mandatoryValuesPresent()) { - final SoftwareModuleType existingType = swTypeManagementService + final SoftwareModuleType existingSMTypeByKey = swTypeManagementService + .findSoftwareModuleTypeByKey(typeKey.getValue()); + final SoftwareModuleType existingSMTypeByName = swTypeManagementService .findSoftwareModuleTypeByName(tagName.getValue()); - if (createOptiongroup.getValue().equals(createTypeStr)) { - if (!checkIsKeyDuplicate(typeKey.getValue()) && !checkIsDuplicate(existingType)) { + if (optiongroup.getValue().equals(createTypeStr)) { + if (!checkIsDuplicateByKey(existingSMTypeByKey) && !checkIsDuplicate(existingSMTypeByName)) { createNewSWModuleType(); } } else { - updateSWModuleType(existingType); + updateSWModuleType(existingSMTypeByName); } } } - private boolean checkIsKeyDuplicate(final String key) { - final SoftwareModuleType existingKeyType = swTypeManagementService.findSoftwareModuleTypeByKey(key); - if (existingKeyType != null) { - uiNotification.displayValidationError( - i18n.get("message.type.key.swmodule.duplicate.check", new Object[] { existingKeyType.getKey() })); - return Boolean.TRUE; - } - return Boolean.FALSE; - } - @Override - private Boolean mandatoryValuesPresent() { - if (Strings.isNullOrEmpty(tagName.getValue()) && Strings.isNullOrEmpty(typeKey.getValue())) { - if (createOptiongroup.getValue().equals(createTypeStr)) { - uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TYPE_NAME_KEY); + protected Boolean mandatoryValuesPresent() { + if (Strings.isNullOrEmpty(tagName.getValue()) || Strings.isNullOrEmpty(typeKey.getValue())) { + if (optiongroup.getValue().equals(createTypeStr)) { + displayValidationError(SPUILabelDefinitions.MISSING_TYPE_NAME_KEY); } - if (createOptiongroup.getValue().equals(updateTypeStr)) { + if (optiongroup.getValue().equals(updateTypeStr)) { if (null == tagNameComboBox.getValue()) { - uiNotification.displayValidationError(i18n.get("message.error.missing.tagName")); + displayValidationError(i18n.get("message.error.missing.tagName")); } else { - uiNotification.displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); + displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); } } return Boolean.FALSE; @@ -433,21 +244,12 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout return Boolean.TRUE; } - private Boolean checkIsDuplicate(final SoftwareModuleType existingType) { - if (existingType != null) { - uiNotification.displayValidationError( - i18n.get("message.tag.duplicate.check", new Object[] { existingType.getName() })); - return Boolean.TRUE; - } - return Boolean.FALSE; - } - /** * Create new tag. */ private void createNewSWModuleType() { int assignNumber = 0; - final String colorPicked = getColorPickedString(); + final String colorPicked = ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview()); final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String typeKeyValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeKey.getValue()); final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); @@ -479,25 +281,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout } } - /** - * Get color picked value in string. - * - * @return String of color picked value. - */ - private String getColorPickedString() { - return "rgb(" + getSelPreview().getColor().getRed() + "," + getSelPreview().getColor().getGreen() + "," - + getSelPreview().getColor().getBlue() + ")"; - } - - /** - * Color view. - * - * @return ColorPickerPreview as UI - */ - public SpColorPickerPreview getSelPreview() { - return selPreview; - } - /** * update tag. */ @@ -510,7 +293,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout existingType.setDescription(null != typeDescValue ? typeDescValue : null); - existingType.setColour(getColorPickedString()); + existingType.setColour(ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview())); swTypeManagementService.updateSoftwareModuleType(existingType); uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { existingType.getName() })); closeWindow(); @@ -528,28 +311,27 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout * on target tag if already selected. */ @Override - private void previewButtonClicked() { + protected void previewButtonClicked() { if (!tagPreviewBtnClicked) { - final String selectedOption = (String) createOptiongroup.getValue(); + final String selectedOption = (String) optiongroup.getValue(); if (null != selectedOption && selectedOption.equalsIgnoreCase(updateTypeStr)) { if (null != tagNameComboBox.getValue()) { final SoftwareModuleType typeSelected = swTypeManagementService .findSoftwareModuleTypeByName(tagNameComboBox.getValue().toString()); if (null != typeSelected) { - selectedColor = typeSelected.getColour() != null ? rgbToColorConverter(typeSelected.getColour()) - : rgbToColorConverter(DEFAULT_COLOR); - + getColorPickerLayout().setSelectedColor(typeSelected.getColour() != null + ? ColorPickerHelper.rgbToColorConverter(typeSelected.getColour()) + : ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); } - } else { - selectedColor = rgbToColorConverter(DEFAULT_COLOR); + getColorPickerLayout().setSelectedColor( + ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); } } - selPreview.setColor(selectedColor); - fieldLayout.addComponent(sliders); - mainLayout.addComponent(colorPickerLayout); - mainLayout.setComponentAlignment(colorPickerLayout, Alignment.BOTTOM_CENTER); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + mainLayout.addComponent(colorPickerLayout, 1, 0); + mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); } tagPreviewBtnClicked = !tagPreviewBtnClicked; } @@ -588,71 +370,11 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout } - @Override - public void setColor(final Color color) { - if (color == null) { - return; - } - selectedColor = color; - selPreview.setColor(selectedColor); - final String colorPickedPreview = selPreview.getColor().getCSS(); - if (tagName.isEnabled() && null != colorSelect) { - createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); - colorSelect.setColor(selPreview.getColor()); - } - - } - @Override public Color getColor() { return null; } - @Override - public void colorChanged(final ColorChangeEvent event) { - setColor(event.getColor()); - for (final ColorSelector select : selectors) { - if (!event.getSource().equals(select) && select.equals(this) && !select.getColor().equals(selectedColor)) { - select.setColor(selectedColor); - } - } - setRgbSliderValues(selectedColor); - getPreviewButtonColor(event.getColor().getCSS()); - createDynamicStyleForComponents(tagName, typeKey, tagDesc, event.getColor().getCSS()); - } - - /** - * Set tag name and desc field border color based on chosen color. - * - * @param tagName - * @param tagDesc - * @param taregtTagColor - */ - private void createDynamicStyleForComponents(final TextField tagName, final TextField typeKey, - final TextArea tagDesc, final String typeTagColor) { - getTargetDynamicStyles(typeTagColor); - tagName.addStyleName(TYPE_NAME_DYNAMIC_STYLE); - typeKey.addStyleName(TYPE_NAME_DYNAMIC_STYLE); - tagDesc.addStyleName(TYPE_DESC_DYNAMIC_STYLE); - } - - /** - * Get target style - Dynamically as per the color picked, cannot be done - * from the static css. - * - * @param colorPickedPreview - */ - private void getTargetDynamicStyles(final String colorPickedPreview) { - Page.getCurrent().getJavaScript() - .execute(HawkbitCommonUtil.changeToNewSelectedPreviewColor(colorPickedPreview)); - } - - @Override - protected void save(final ClickEvent event) { - // TODO Auto-generated method stub - - } - @Override protected void populateTagNameCombo() { tagNameComboBox.setContainerDataSource(HawkbitCommonUtil.createLazyQueryContainer( @@ -660,10 +382,4 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTagLayout tagNameComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); } - @Override - protected void setTagDetails(final String tagSelected) { - // TODO Auto-generated method stub - - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index a3176d663..c99a5a84b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -75,10 +75,11 @@ public class CommonDialogWindow extends Window { mainLayout.addComponent(buttonLayout); mainLayout.setComponentAlignment(buttonLayout, Alignment.MIDDLE_CENTER); - setSizeUndefined(); + setHeight("60%"); + setWidth("50%"); setCaption(caption); setContent(mainLayout); - setResizable(false); + setResizable(true); center(); setModal(true); } @@ -108,6 +109,7 @@ public class CommonDialogWindow extends Window { } hlayout.addComponent(cancelButton); hlayout.setComponentAlignment(cancelButton, Alignment.MIDDLE_RIGHT); + hlayout.addStyleName("actionButtonsMargin"); return hlayout; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 54a142ef1..dbebc6183 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.distributions.disttype; -import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -21,12 +20,11 @@ import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; -import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent.DistributionSetTypeEnum; -import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; +import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -38,13 +36,11 @@ import org.springframework.data.domain.PageRequest; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; +import com.google.common.base.Strings; import com.vaadin.data.Item; import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.data.util.IndexedContainer; import com.vaadin.server.FontAwesome; -import com.vaadin.server.Page; -import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator; @@ -54,13 +50,8 @@ import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.CheckBox; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Label; -import com.vaadin.ui.OptionGroup; import com.vaadin.ui.Table; -import com.vaadin.ui.TextArea; -import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.components.colorpicker.ColorChangeEvent; import com.vaadin.ui.components.colorpicker.ColorChangeListener; import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; @@ -70,13 +61,12 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout implements ColorChangeListener, ColorSelector { +public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout + implements ColorChangeListener, ColorSelector { private static final long serialVersionUID = -5169398523815877767L; private static final Logger LOG = LoggerFactory.getLogger(CreateUpdateDistSetTypeLayout.class); - private static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; - private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; private static final String DIST_TYPE_NAME = "name"; private static final String DIST_TYPE_DESCRIPTION = "description"; private static final String DIST_TYPE_MANDATORY = "mandatory"; @@ -94,15 +84,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme @Autowired private transient UiProperties uiProperties; - private String createDistTypeStr; - private String updateDistTypeStr; - private Label createDistType; - private Label updateDistType; - private Label comboLabel; - private TextField typeKey; - - private VerticalLayout sliderLayout; - private HorizontalLayout colorLayout; private HorizontalLayout distTypeSelectLayout; private Table sourceTable; private Table selectedTable; @@ -112,10 +93,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme @Override protected void createRequiredComponents() { - createDistTypeStr = i18n.get("label.create.type"); - updateDistTypeStr = i18n.get("label.update.type"); - createDistType = SPUIComponentProvider.getLabel(createDistTypeStr, null); - updateDistType = SPUIComponentProvider.getLabel(updateDistTypeStr, null); + createTypeStr = i18n.get("label.create.type"); + updateTypeStr = i18n.get("label.update.type"); comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); madatoryLabel = getMandatoryLabel(); @@ -144,18 +123,16 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme tagNameComboBox.setImmediate(true); tagNameComboBox.setPageLength(SPUIDefinitions.DIST_TYPE_SIZE); - colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null); + colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag.color"), null); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); - tagColorPreviewBtn = new Button(); tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); - tagColorPreviewBtn.setStyleName("tag-color-preview"); + tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); - getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); - ColorPickerHelper.setRgbSliderValues(getColorPickerLayout()); + ColorPickerHelper.setRgbSliderValues(colorPickerLayout); - createUpdateOptionGroup(); + createOptionGroup(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission()); } @Override @@ -166,30 +143,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme distTypeSelectLayout = createTwinColumnLayout(); - final HorizontalLayout mainLayout = new HorizontalLayout(); final VerticalLayout twinTableLayout = new VerticalLayout(); twinTableLayout.setSizeFull(); twinTableLayout.addComponent(distTypeSelectLayout); - mainLayout.addComponent(getFormLayout()); - mainLayout.addComponent(twinTableLayout); - - colorLayout = new HorizontalLayout(); - sliderLayout = new VerticalLayout(); - final HorizontalLayout chooseColorLayout = new HorizontalLayout(); - chooseColorLayout.addComponents(colorLabel, tagColorPreviewBtn); - chooseColorLayout.setComponentAlignment(colorLabel, Alignment.TOP_CENTER); - chooseColorLayout.setComponentAlignment(tagColorPreviewBtn, Alignment.TOP_CENTER); - sliderLayout.addComponent(chooseColorLayout); - colorLayout.addComponent(sliderLayout); - - final VerticalLayout mainWindowLayout = new VerticalLayout(); - mainWindowLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); - mainWindowLayout.addComponent(mainLayout); - mainWindowLayout.addComponent(colorLayout); + mainLayout.addComponent(twinTableLayout, 2, 0); } private HorizontalLayout createTwinColumnLayout() { + final HorizontalLayout twinColumnLayout = new HorizontalLayout(); twinColumnLayout.setSizeFull(); twinColumnLayout.setWidth("400px"); @@ -220,13 +182,13 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme twinColumnLayout.setExpandRatio(selectedTable, 0.48f); sourceTable.setVisibleColumns(new Object[] { DIST_TYPE_NAME }); return twinColumnLayout; - } /** * */ private void buildSelectedTable() { + selectedTable = new Table(); selectedTable.setId(SPUIDefinitions.TWIN_TABLE_SELECTED_ID); selectedTable.setSelectable(true); @@ -249,6 +211,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } private void addTooltTipToSelectedTable() { + selectedTable.setItemDescriptionGenerator(new ItemDescriptionGenerator() { private static final long serialVersionUID = 99432397408575324L; @@ -270,6 +233,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme * */ private void buildSourceTable() { + sourceTable = new Table(); sourceTable.setId(SPUIDefinitions.TWIN_TABLE_SOURCE_ID); sourceTable.setSelectable(true); @@ -294,10 +258,10 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme getSourceTableData(); addTooltip(); sourceTable.select(sourceTable.firstItemId()); - } private void createSelectedTableContainer() { + selectedTablecontainer = new IndexedContainer(); selectedTablecontainer.addContainerProperty(DIST_TYPE_NAME, String.class, ""); selectedTablecontainer.addContainerProperty(DIST_TYPE_DESCRIPTION, String.class, ""); @@ -306,16 +270,17 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme @SuppressWarnings("unchecked") private void addSMType() { + final Set selectedIds = (Set) sourceTable.getValue(); if (null != selectedIds && !selectedIds.isEmpty()) { for (final Long id : selectedIds) { addTargetTableData(id); } } - } private void removeSMType() { + @SuppressWarnings("unchecked") final Set selectedIds = (Set) selectedTable.getValue(); if (null != selectedIds && !selectedIds.isEmpty()) { @@ -328,6 +293,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme @SuppressWarnings("unchecked") private void getSourceTableData() { + sourceTablecontainer.removeAllItems(); final Iterable moduleTypeBeans = softwareManagement .findSoftwareModuleTypesAll(new PageRequest(0, 1_000)); @@ -340,6 +306,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } private void addTooltip() { + sourceTable.setItemDescriptionGenerator(new ItemDescriptionGenerator() { private static final long serialVersionUID = 1L; @@ -356,12 +323,14 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } private void addTargetTableData(final Long selectedId) { + getSelectedTableItemData(selectedId); sourceTable.removeItem(selectedId); } @SuppressWarnings("unchecked") private void getSelectedTableItemData(final Long id) { + Item saveTblitem; if (null != selectedTablecontainer) { saveTblitem = selectedTablecontainer.addItem(id); @@ -375,6 +344,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme @SuppressWarnings("unchecked") private void addSourceTableData(final Long selectedId) { + if (null != sourceTablecontainer) { Item saveTblitem; saveTblitem = sourceTablecontainer.addItem(selectedId); @@ -386,48 +356,12 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } } - // private void save() { - // if (mandatoryValuesPresent()) { - // final DistributionSetType existingDistTypeByKey = - // distributionSetManagement - // .findDistributionSetTypeByKey(typeKey.getValue()); - // final DistributionSetType existingDistTypeByName = - // distributionSetManagement - // .findDistributionSetTypeByName(tagName.getValue()); - // if (createOptiongroup.getValue().equals(createDistTypeStr)) { - // if (!checkIsDuplicateByKey(existingDistTypeByKey) && - // !checkIsDuplicate(existingDistTypeByName)) { - // crateNewDistributionSetType(); - // } - // } else { - // updateDistributionSetType(existingDistTypeByKey); - // } - // } - // } - - private Boolean checkIsDuplicate(final DistributionSetType existingDistType) { - if (existingDistType != null) { - uiNotification.displayValidationError( - i18n.get("message.tag.duplicate.check", new Object[] { existingDistType.getName() })); - return Boolean.TRUE; - } - return Boolean.FALSE; - } - - private Boolean checkIsDuplicateByKey(final DistributionSetType existingDistType) { - if (existingDistType != null) { - uiNotification.displayValidationError( - i18n.get("message.type.key.duplicate.check", new Object[] { existingDistType.getKey() })); - return Boolean.TRUE; - } - return Boolean.FALSE; - } - /** * Create new DistSet Type tag. */ @SuppressWarnings("unchecked") private void crateNewDistributionSetType() { + final String colorPicked = ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview()); final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String typeKeyValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeKey.getValue()); @@ -447,14 +381,12 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } else { newDistType.addOptionalModuleType(swModuleType); } - } if (null != typeDescValue) { newDistType.setDescription(typeDescValue); } newDistType.setColour(colorPicked); - newDistType = distributionSetManagement.createDistributionSetType(newDistType); uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { newDistType.getName() })); closeWindow(); @@ -472,6 +404,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme */ @SuppressWarnings("unchecked") private void updateDistributionSetType(final DistributionSetType existingType) { + final List itemIds = (List) selectedTable.getItemIds(); final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String typeKeyValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeKey.getValue()); @@ -515,6 +448,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } private DistributionSetType removeSWModuleTypesFromDistSetType(final String selectedDistSetType) { + final DistributionSetType distSetType = fetchDistributionSetType(selectedDistSetType); if (!distSetType.getMandatoryModuleTypes().isEmpty()) { for (final SoftwareModuleType smType : distSetType.getMandatoryModuleTypes()) { @@ -525,117 +459,10 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme for (final SoftwareModuleType smType : distSetType.getOptionalModuleTypes()) { distSetType.removeModuleType(smType.getId()); } - } - return distSetType; } - /** - * Open color picker on click of preview button. Auto select the color based - * on target tag if already selected. - */ - // private void previewButtonClicked() { - // final String selectedOption = (String) createOptiongroup.getValue(); - // if (null != selectedOption && - // selectedOption.equalsIgnoreCase(updateDistTypeStr) - // && null != typeNameComboBox.getValue()) { - // - // final DistributionSetType existedDistType = distributionSetManagement - // .findDistributionSetTypeByKey(typeNameComboBox.getValue().toString()); - // if (null != existedDistType) { - // getColorPickerLayout().setSelectedColor(existedDistType.getColour() != - // null - // ? ColorPickerHelper.rgbToColorConverter(existedDistType.getColour()) - // : - // ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - // } else { - // getColorPickerLayout() - // .setSelectedColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - // } - // } - // getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); - // sliderLayout.addComponent(sliders); - // colorLayout.addComponent(getColorPickerLayout()); - // colorLayout.setComponentAlignment(getColorPickerLayout(), - // Alignment.MIDDLE_CENTER); - // } - - /** - * Value change listeners implementations of sliders. - */ - private void slidersValueChangeListeners() { - getColorPickerLayout().getRedSlider().addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = -8336732883300920839L; - - @Override - public void valueChange(final ValueChangeEvent event) { - final double red = (Double) event.getProperty().getValue(); - final Color newColor = new Color((int) red, getColorPickerLayout().getSelectedColor().getGreen(), - getColorPickerLayout().getSelectedColor().getBlue()); - setColorToComponents(newColor); - } - }); - getColorPickerLayout().getGreenSlider().addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = 1236358037711775663L; - - @Override - public void valueChange(final ValueChangeEvent event) { - final double green = (Double) event.getProperty().getValue(); - final Color newColor = new Color(getColorPickerLayout().getSelectedColor().getRed(), (int) green, - getColorPickerLayout().getSelectedColor().getBlue()); - setColorToComponents(newColor); - } - }); - getColorPickerLayout().getBlueSlider().addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = 8466370744686043947L; - - @Override - public void valueChange(final ValueChangeEvent event) { - final double blue = (Double) event.getProperty().getValue(); - final Color newColor = new Color(getColorPickerLayout().getSelectedColor().getRed(), - getColorPickerLayout().getSelectedColor().getGreen(), (int) blue); - setColorToComponents(newColor); - } - }); - } - - private void setColorToComponents(final Color newColor) { - setColor(newColor); - getColorPickerLayout().getColorSelect().setColor(newColor); - getPreviewButtonColor(newColor.getCSS()); - createDynamicStyleForComponents(tagName, typeKey, tagDesc, newColor.getCSS()); - } - - /** - * Set tag name and desc field border color based on chosen color. - * - * @param tagName - * @param tagDesc - * @param taregtTagColor - */ - private void createDynamicStyleForComponents(final TextField tagName, final TextField typeKey, - final TextArea typeDesc, final String typeTagColor) { - tagName.removeStyleName(SPUIDefinitions.TYPE_NAME); - typeKey.removeStyleName(SPUIDefinitions.TYPE_KEY); - typeDesc.removeStyleName(SPUIDefinitions.TYPE_DESC); - getDistributionDynamicStyles(typeTagColor); - tagName.addStyleName(TYPE_NAME_DYNAMIC_STYLE); - typeKey.addStyleName(TYPE_NAME_DYNAMIC_STYLE); - typeDesc.addStyleName(TYPE_DESC_DYNAMIC_STYLE); - } - - /** - * Get target style - Dynamically as per the color picked, cannot be done - * from the static css. - * - * @param colorPickedPreview - */ - private void getDistributionDynamicStyles(final String colorPickedPreview) { - Page.getCurrent().getJavaScript() - .execute(HawkbitCommonUtil.changeToNewSelectedPreviewColor(colorPickedPreview)); - } - /* * (non-Javadoc) * @@ -647,7 +474,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme public void addColorChangeListener(final ColorChangeListener listener) { LOG.info("in side addColorChangeListener() "); - } /* @@ -670,8 +496,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme protected void reset() { super.reset(); - typeKey.clear(); - restoreComponentStyles(); selectedTable.removeAllItems(); getSourceTableData(); } @@ -682,39 +506,22 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme * @param event * ValueChangeEvent */ - private void createOptionValueChanged(final ValueChangeEvent event) { + @Override + protected void createOptionValueChanged(final ValueChangeEvent event) { + + super.createOptionValueChanged(event); + if ("Update Type".equals(event.getProperty().getValue())) { - tagName.clear(); - tagDesc.clear(); - typeKey.clear(); selectedTable.getContainerDataSource().removeAllItems(); getSourceTableData(); - - typeKey.setEnabled(false); - tagName.setEnabled(false); distTypeSelectLayout.setEnabled(false); - populateTagNameCombo(); - comboLayout.addComponent(comboLabel); - comboLayout.addComponent(tagNameComboBox); } else { - typeKey.setEnabled(true); - tagName.setEnabled(true); - window.setSaveButtonEnabled(true); distTypeSelectLayout.setEnabled(true); - tagName.clear(); - tagDesc.clear(); - typeKey.clear(); selectedTable.setEnabled(true); selectedTable.getContainerDataSource().removeAllItems(); sourceTable.getContainerDataSource().removeAllItems(); getSourceTableData(); - comboLayout.removeComponent(comboLabel); - comboLayout.removeComponent(tagNameComboBox); } - restoreComponentStyles(); - getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); - getColorPickerLayout().getSelPreview() - .setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); } /** @@ -722,6 +529,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme */ @Override public void populateTagNameCombo() { + tagNameComboBox.setContainerDataSource(getDistSetTypeLazyQueryContainer()); tagNameComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); } @@ -732,6 +540,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme * @return */ private LazyQueryContainer getDistSetTypeLazyQueryContainer() { + final LazyQueryContainer disttypeContainer = HawkbitCommonUtil.createLazyQueryContainer( new BeanQueryFactory(DistributionSetTypeBeanQuery.class)); disttypeContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", true, true); @@ -741,6 +550,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme @Override protected void resetTagNameField() { + super.resetTagNameField(); typeKey.setEnabled(false); typeKey.clear(); @@ -757,6 +567,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme */ @Override protected void setTagDetails(final String distSetTypeSelected) { + tagName.setValue(distSetTypeSelected); getSourceTableData(); selectedTable.getContainerDataSource().removeAllItems(); @@ -783,22 +594,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme for (final SoftwareModuleType swModuleType : selectedTypeTag.getMandatoryModuleTypes()) { addTargetTableforUpdate(swModuleType, true); } - - if (null == selectedTypeTag.getColour()) { - getColorPickerLayout() - .setSelectedColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); - getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); - createDynamicStyleForComponents(tagName, typeKey, tagDesc, ColorPickerConstants.DEFAULT_COLOR); - getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); - } else { - getColorPickerLayout() - .setSelectedColor(ColorPickerHelper.rgbToColorConverter(selectedTypeTag.getColour())); - getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); - getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); - createDynamicStyleForComponents(tagName, typeKey, tagDesc, selectedTypeTag.getColour()); - getPreviewButtonColor(selectedTypeTag.getColour()); - } + setColorPickerComponentsColor(selectedTypeTag.getColour()); } } @@ -809,6 +605,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme @SuppressWarnings("unchecked") private void addTargetTableforUpdate(final SoftwareModuleType swModuleType, final boolean mandatory) { + Item saveTblitem; if (null != selectedTablecontainer) { saveTblitem = selectedTablecontainer.addItem(swModuleType.getId()); @@ -818,70 +615,26 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme } } - /* - * (non-Javadoc) - * - * @see - * com.vaadin.ui.components.colorpicker.ColorSelector#setColor(com.vaadin. - * shared.ui.colorpicker .Color) - */ - @Override - public void setColor(final Color color) { - if (color == null) { - return; - } - getColorPickerLayout().setSelectedColor(color); - getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); - final String colorPickedPreview = getColorPickerLayout().getSelPreview().getColor().getCSS(); - if (tagName.isEnabled() && null != getColorPickerLayout().getColorSelect()) { - createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); - getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor()); - } - } - - /* - * (non-Javadoc) - * - * @see - * com.vaadin.ui.components.colorpicker.ColorChangeListener#colorChanged(com - * .vaadin.ui.components .colorpicker.ColorChangeEvent) - */ - @Override - public void colorChanged(final ColorChangeEvent event) { - setColor(event.getColor()); - for (final ColorSelector select : getColorPickerLayout().getSelectors()) { - if (!event.getSource().equals(select) && select.equals(this) - && !select.getColor().equals(getColorPickerLayout().getSelectedColor())) { - select.setColor(getColorPickerLayout().getSelectedColor()); - } - } - ColorPickerHelper.setRgbSliderValues(getColorPickerLayout()); - getPreviewButtonColor(event.getColor().getCSS()); - createDynamicStyleForComponents(tagName, typeKey, tagDesc, event.getColor().getCSS()); - - } - /** * reset the tag name and tag description component border color. */ - private void restoreComponentStyles() { - tagName.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); - tagDesc.removeStyleName(TYPE_DESC_DYNAMIC_STYLE); + @Override + protected void restoreComponentStyles() { + + super.restoreComponentStyles(); typeKey.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); - tagName.addStyleName(SPUIDefinitions.DIST_SET_TYPE_NAME); - tagDesc.addStyleName(SPUIDefinitions.DIST_SET_TYPE_DESC); typeKey.addStyleName(SPUIDefinitions.DIST_SET_TYPE_KEY); - getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); } @Override protected void save(final ClickEvent event) { + if (mandatoryValuesPresent()) { final DistributionSetType existingDistTypeByKey = distributionSetManagement .findDistributionSetTypeByKey(typeKey.getValue()); final DistributionSetType existingDistTypeByName = distributionSetManagement .findDistributionSetTypeByName(tagName.getValue()); - if (optiongroup.getValue().equals(createDistTypeStr)) { + if (optiongroup.getValue().equals(createTypeStr)) { if (!checkIsDuplicateByKey(existingDistTypeByKey) && !checkIsDuplicate(existingDistTypeByName)) { crateNewDistributionSetType(); } @@ -898,27 +651,47 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTagLayout impleme SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event)); } - private void createUpdateOptionGroup() { - final List optionValues = new ArrayList<>(); - if (permChecker.hasCreateDistributionPermission()) { - optionValues.add(createDistType.getValue()); + @Override + protected Boolean mandatoryValuesPresent() { + if (Strings.isNullOrEmpty(tagName.getValue()) || Strings.isNullOrEmpty(typeKey.getValue())) { + if (optiongroup.getValue().equals(createTypeStr)) { + displayValidationError(SPUILabelDefinitions.MISSING_TYPE_NAME_KEY); + } + if (optiongroup.getValue().equals(updateTypeStr)) { + if (null == tagNameComboBox.getValue()) { + displayValidationError(i18n.get("message.error.missing.tagName")); + } else { + displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); + } + } + return Boolean.FALSE; } - if (permChecker.hasUpdateDistributionPermission()) { - optionValues.add(updateDistType.getValue()); - } - createOptionGroupByValues(optionValues); + return Boolean.TRUE; } - private void createOptionGroupByValues(final List typeOptions) { - optiongroup = new OptionGroup("", typeOptions); - optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); - optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); - optiongroup.addStyleName("custom-option-group"); - optiongroup.setNullSelectionAllowed(false); - optiongroup.setCaption(null); - if (!typeOptions.isEmpty()) { - optiongroup.select(typeOptions.get(0)); + @Override + protected void previewButtonClicked() { + if (!tagPreviewBtnClicked) { + final String selectedOption = (String) optiongroup.getValue(); + if (null != selectedOption && selectedOption.equalsIgnoreCase(updateTypeStr) + && null != tagNameComboBox.getValue()) { + + final DistributionSetType existedDistType = distributionSetManagement + .findDistributionSetTypeByKey(tagNameComboBox.getValue().toString()); + if (null != existedDistType) { + getColorPickerLayout().setSelectedColor(existedDistType.getColour() != null + ? ColorPickerHelper.rgbToColorConverter(existedDistType.getColour()) + : ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); + } else { + getColorPickerLayout().setSelectedColor( + ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); + } + } + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + mainLayout.addComponent(colorPickerLayout, 1, 0); + mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); } + tagPreviewBtnClicked = !tagPreviewBtnClicked; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java similarity index 93% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java index ba81d9016..6162eb321 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java @@ -6,10 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.management.tag; - -import java.util.ArrayList; -import java.util.List; +package org.eclipse.hawkbit.ui.layouts; import javax.annotation.PreDestroy; @@ -45,6 +42,7 @@ import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; +import com.vaadin.ui.GridLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; @@ -65,14 +63,9 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C private static final Logger LOG = LoggerFactory.getLogger(CreateUpdateTagLayout.class); private static final String TAG_NAME_DYNAMIC_STYLE = "new-tag-name"; private static final String TAG_DESC_DYNAMIC_STYLE = "new-tag-desc"; - private static final String TAG_DYNAMIC_STYLE = "tag-color-preview"; + protected static final String TAG_DYNAMIC_STYLE = "tag-color-preview"; protected static final String MESSAGE_ERROR_MISSING_TAGNAME = "message.error.missing.tagname"; - protected String createTagNw; - protected String updateTagNw; - - protected CommonDialogWindow window; - @Autowired protected I18N i18n; @@ -90,7 +83,11 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C private final FormLayout formLayout = new FormLayout(); - private Label comboLabel; + protected String createTagStr; + protected String updateTagStr; + protected Label comboLabel; + protected CommonDialogWindow window; + protected Label colorLabel; protected Label madatoryLabel; protected TextField tagName; @@ -101,8 +98,8 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C protected final VerticalLayout comboLayout = new VerticalLayout(); protected final ColorPickerLayout colorPickerLayout = new ColorPickerLayout(); - private final HorizontalLayout mainLayout = new HorizontalLayout(); - final VerticalLayout contentLayout = new VerticalLayout(); + protected final GridLayout mainLayout = new GridLayout(4, 4); + protected final VerticalLayout contentLayout = new VerticalLayout(); protected boolean tagPreviewBtnClicked = false; @@ -157,8 +154,9 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C } protected void createRequiredComponents() { - createTagNw = i18n.get("label.create.tag"); - updateTagNw = i18n.get("label.update.tag"); + + createTagStr = i18n.get("label.create.tag"); + updateTagStr = i18n.get("label.update.tag"); comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag"), null); madatoryLabel = getMandatoryLabel(); colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag.color"), null); @@ -208,10 +206,10 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C contentLayout.addComponent(colorLabelLayout); contentLayout.setComponentAlignment(formLayout, Alignment.MIDDLE_CENTER); contentLayout.setComponentAlignment(colorLabelLayout, Alignment.MIDDLE_LEFT); - contentLayout.setSizeFull(); + contentLayout.setSizeUndefined(); mainLayout.setSizeFull(); - mainLayout.addComponent(contentLayout); + mainLayout.addComponent(contentLayout, 0, 0); setCompositionRoot(mainLayout); tagName.focus(); @@ -233,16 +231,15 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C protected void previewButtonClicked() { if (!tagPreviewBtnClicked) { setColor(); - colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); - mainLayout.addComponent(colorPickerLayout); - mainLayout.setComponentAlignment(colorPickerLayout, Alignment.BOTTOM_CENTER); + mainLayout.addComponent(colorPickerLayout, 1, 0); + mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); } tagPreviewBtnClicked = !tagPreviewBtnClicked; } private void setColor() { final String selectedOption = (String) optiongroup.getValue(); - if (selectedOption == null || !selectedOption.equalsIgnoreCase(updateTagNw)) { + if (selectedOption == null || !selectedOption.equalsIgnoreCase(updateTagStr)) { return; } @@ -265,7 +262,6 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C ? ColorPickerHelper.rgbToColorConverter(targetTagSelected.getColour()) : ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); } - } protected Label getMandatoryLabel() { @@ -344,7 +340,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C comboLayout.removeComponent(tagNameComboBox); mainLayout.removeComponent(colorPickerLayout); - optiongroup.select(createTagNw); + optiongroup.select(createTagStr); // Default green color colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); @@ -401,7 +397,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C /** * reset the tag name and tag description component border color. */ - private void restoreComponentStyles() { + protected void restoreComponentStyles() { tagName.removeStyleName(TAG_NAME_DYNAMIC_STYLE); tagDesc.removeStyleName(TAG_DESC_DYNAMIC_STYLE); tagName.addStyleName(SPUIDefinitions.TAG_NAME); @@ -447,26 +443,22 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C /** * create option group with Create tag/Update tag based on permissions. */ - protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePersmission) { - final List optionValues = new ArrayList<>(); - if (hasCreatePermission) { - optionValues.add(createTagNw); - } - if (hasUpdatePersmission) { - optionValues.add(updateTagNw); - } - createOptionGroup(optionValues); - } + protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePermission) { - protected void createOptionGroup(final List tagOptions) { - optiongroup = new OptionGroup("", tagOptions); - optiongroup.setCaption("Select Action"); + optiongroup = new OptionGroup("Select Action"); optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); optiongroup.addStyleName("custom-option-group"); - optiongroup.setNullSelectionAllowed(false); - if (!tagOptions.isEmpty()) { - optiongroup.select(tagOptions.get(0)); + + if (hasCreatePermission) { + optiongroup.addItem(createTagStr); + optiongroup.select(createTagStr); + } + if (hasUpdatePermission) { + optiongroup.addItem(updateTagStr); + if (!hasCreatePermission) { + optiongroup.select(updateTagStr); + } } } @@ -530,7 +522,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C }); } - private void setColorToComponents(final Color newColor) { + protected void setColorToComponents(final Color newColor) { setColor(newColor); colorPickerLayout.getColorSelect().setColor(newColor); getPreviewButtonColor(newColor.getCSS()); @@ -591,10 +583,10 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C */ protected Boolean mandatoryValuesPresent() { if (Strings.isNullOrEmpty(tagName.getValue())) { - if (optiongroup.getValue().equals(createTagNw)) { + if (optiongroup.getValue().equals(createTagStr)) { displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); } - if (optiongroup.getValue().equals(updateTagNw)) { + if (optiongroup.getValue().equals(updateTagStr)) { if (null == tagNameComboBox.getValue()) { displayValidationError(i18n.get(MESSAGE_ERROR_MISSING_TAGNAME)); } else { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index ea9a08ef5..44d9bc6bb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; -import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; +import org.eclipse.hawkbit.ui.layouts.CreateUpdateTagLayout; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.vaadin.spring.events.EventScope; @@ -77,7 +77,7 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo public void save(final ClickEvent event) { if (mandatoryValuesPresent()) { final DistributionSetTag existingDistTag = tagManagement.findDistributionSetTag(tagName.getValue()); - if (optiongroup.getValue().equals(createTagNw)) { + if (optiongroup.getValue().equals(createTagStr)) { if (!checkIsDuplicate(existingDistTag)) { crateNewTag(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java index 1c664fe13..4bffe172f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; -import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; +import org.eclipse.hawkbit.ui.layouts.CreateUpdateTagLayout; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -93,7 +93,7 @@ public class CreateUpdateTargetTagLayoutWindow extends CreateUpdateTagLayout { public void save(final ClickEvent event) { if (mandatoryValuesPresent()) { final TargetTag existingTag = tagManagement.findTargetTag(tagName.getValue()); - if (optiongroup.getValue().equals(createTagNw)) { + if (optiongroup.getValue().equals(createTagStr)) { if (!checkIsDuplicate(existingTag)) { createNewTag(); } diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss index db9f8e31a..e71504a3c 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss @@ -161,4 +161,8 @@ .v-slot-bulk-upload-label{ line-height:0; } + + .actionButtonsMargin { + margin-top: 10px; + } } From 5213d7ce210f6c9378140307cd6f5db0fcfc3733 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 20 May 2016 11:01:54 +0200 Subject: [PATCH 130/371] New Parent class CreateUpdateTypeLayout for modal dialogs Create/Update type Signed-off-by: Melanie Retter --- .../ui/layouts/CreateUpdateTypeLayout.java | 285 ++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java new file mode 100644 index 000000000..c5d1c0387 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -0,0 +1,285 @@ +package org.eclipse.hawkbit.ui.layouts; + +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.NamedEntity; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; +import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; + +import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.server.Page; +import com.vaadin.shared.ui.colorpicker.Color; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.OptionGroup; +import com.vaadin.ui.TextArea; +import com.vaadin.ui.TextField; +import com.vaadin.ui.components.colorpicker.ColorChangeEvent; +import com.vaadin.ui.components.colorpicker.ColorSelector; +import com.vaadin.ui.themes.ValoTheme; + +public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { + + private static final long serialVersionUID = 5732904956185988397L; + + protected String createTypeStr; + protected String updateTypeStr; + protected TextField typeKey; + + public static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; + private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; + + /** + * Value change listeners implementations of sliders. + */ + protected void slidersValueChangeListeners() { + getColorPickerLayout().getRedSlider().addValueChangeListener(new ValueChangeListener() { + private static final long serialVersionUID = -8336732883300920839L; + + @Override + public void valueChange(final ValueChangeEvent event) { + final double red = (Double) event.getProperty().getValue(); + final Color newColor = new Color((int) red, getColorPickerLayout().getSelectedColor().getGreen(), + getColorPickerLayout().getSelectedColor().getBlue()); + setColorToComponents(newColor); + } + }); + getColorPickerLayout().getGreenSlider().addValueChangeListener(new ValueChangeListener() { + private static final long serialVersionUID = 1236358037711775663L; + + @Override + public void valueChange(final ValueChangeEvent event) { + final double green = (Double) event.getProperty().getValue(); + final Color newColor = new Color(getColorPickerLayout().getSelectedColor().getRed(), (int) green, + getColorPickerLayout().getSelectedColor().getBlue()); + setColorToComponents(newColor); + } + }); + getColorPickerLayout().getBlueSlider().addValueChangeListener(new ValueChangeListener() { + private static final long serialVersionUID = 8466370744686043947L; + + @Override + public void valueChange(final ValueChangeEvent event) { + final double blue = (Double) event.getProperty().getValue(); + final Color newColor = new Color(getColorPickerLayout().getSelectedColor().getRed(), + getColorPickerLayout().getSelectedColor().getGreen(), (int) blue); + setColorToComponents(newColor); + } + }); + } + + @Override + protected void setColorToComponents(final Color newColor) { + + super.setColorToComponents(newColor); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, newColor.getCSS()); + } + + /** + * Set tag name and desc field border color based on chosen color. + * + * @param tagName + * @param tagDesc + * @param taregtTagColor + */ + protected void createDynamicStyleForComponents(final TextField tagName, final TextField typeKey, + final TextArea typeDesc, final String typeTagColor) { + + tagName.removeStyleName(SPUIDefinitions.TYPE_NAME); + typeKey.removeStyleName(SPUIDefinitions.TYPE_KEY); + typeDesc.removeStyleName(SPUIDefinitions.TYPE_DESC); + getDynamicStyles(typeTagColor); + tagName.addStyleName(TYPE_NAME_DYNAMIC_STYLE); + typeKey.addStyleName(TYPE_NAME_DYNAMIC_STYLE); + typeDesc.addStyleName(TYPE_DESC_DYNAMIC_STYLE); + } + + /** + * Get target style - Dynamically as per the color picked, cannot be done + * from the static css. + * + * @param colorPickedPreview + */ + private void getDynamicStyles(final String colorPickedPreview) { + + Page.getCurrent().getJavaScript() + .execute(HawkbitCommonUtil.changeToNewSelectedPreviewColor(colorPickedPreview)); + } + + /** + * reset the components. + */ + @Override + protected void reset() { + + super.reset(); + typeKey.clear(); + restoreComponentStyles(); + } + + /** + * Listener for option group - Create tag/Update. + * + * @param event + * ValueChangeEvent + */ + protected void createOptionValueChanged(final ValueChangeEvent event) { + + if ("Update Type".equals(event.getProperty().getValue())) { + tagName.clear(); + tagDesc.clear(); + typeKey.clear(); + typeKey.setEnabled(false); + tagName.setEnabled(false); + populateTagNameCombo(); + comboLayout.addComponent(comboLabel); + comboLayout.addComponent(tagNameComboBox); + } else { + typeKey.setEnabled(true); + tagName.setEnabled(true); + window.setSaveButtonEnabled(true); + tagName.clear(); + tagDesc.clear(); + typeKey.clear(); + comboLayout.removeComponent(comboLabel); + comboLayout.removeComponent(tagNameComboBox); + } + restoreComponentStyles(); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + getColorPickerLayout().getSelPreview() + .setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); + } + + /* + * (non-Javadoc) + * + * @see + * com.vaadin.ui.components.colorpicker.ColorSelector#setColor(com.vaadin. + * shared.ui.colorpicker .Color) + */ + @Override + public void setColor(final Color color) { + + if (color == null) { + return; + } + getColorPickerLayout().setSelectedColor(color); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + final String colorPickedPreview = getColorPickerLayout().getSelPreview().getColor().getCSS(); + if (tagName.isEnabled() && null != getColorPickerLayout().getColorSelect()) { + createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); + getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor()); + } + } + + /** + * reset the tag name and tag description component border color. + */ + @Override + protected void restoreComponentStyles() { + super.restoreComponentStyles(); + typeKey.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); + } + + /** + * create option group with Create tag/Update tag based on permissions. + */ + @Override + protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePermission) { + + optiongroup = new OptionGroup("Select Action"); + optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); + optiongroup.addStyleName("custom-option-group"); + optiongroup.setNullSelectionAllowed(false); + + if (hasCreatePermission) { + optiongroup.addItem(createTypeStr); + optiongroup.select(createTypeStr); + } + if (hasUpdatePermission) { + optiongroup.addItem(updateTypeStr); + if (!hasCreatePermission) { + optiongroup.select(updateTypeStr); + } + } + } + + protected void setColorPickerComponentsColor(final String color) { + + if (null == color) { + getColorPickerLayout() + .setSelectedColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, ColorPickerConstants.DEFAULT_COLOR); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + } else { + getColorPickerLayout().setSelectedColor(ColorPickerHelper.rgbToColorConverter(color)); + getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); + getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, color); + getPreviewButtonColor(color); + } + } + + @Override + public void colorChanged(final ColorChangeEvent event) { + setColor(event.getColor()); + for (final ColorSelector select : getColorPickerLayout().getSelectors()) { + if (!event.getSource().equals(select) && select.equals(this) + && !select.getColor().equals(getColorPickerLayout().getSelectedColor())) { + select.setColor(getColorPickerLayout().getSelectedColor()); + } + } + ColorPickerHelper.setRgbSliderValues(getColorPickerLayout()); + getPreviewButtonColor(event.getColor().getCSS()); + createDynamicStyleForComponents(tagName, typeKey, tagDesc, event.getColor().getCSS()); + } + + protected Boolean checkIsDuplicate(final NamedEntity existingType) { + + if (existingType != null) { + uiNotification.displayValidationError( + i18n.get("message.tag.duplicate.check", new Object[] { existingType.getName() })); + return Boolean.TRUE; + } + return Boolean.FALSE; + } + + protected Boolean checkIsDuplicateByKey(final NamedEntity existingType) { + + if (existingType != null) { + if (existingType instanceof DistributionSetType) { + uiNotification.displayValidationError(i18n.get("message.type.key.duplicate.check", + new Object[] { ((DistributionSetType) existingType).getKey() })); + return Boolean.TRUE; + } else if (existingType instanceof SoftwareModuleType) { + uiNotification.displayValidationError(i18n.get("message.type.key.swmodule.duplicate.check", + new Object[] { ((SoftwareModuleType) existingType).getKey() })); + return Boolean.TRUE; + } + } + return Boolean.FALSE; + } + + @Override + protected void save(final ClickEvent event) { + // TODO Auto-generated method stub + + } + + @Override + protected void populateTagNameCombo() { + // TODO Auto-generated method stub + + } + + @Override + protected void setTagDetails(final String tagSelected) { + // TODO Auto-generated method stub + + } + +} From 037e66e197a24b4244a98f0847180f22ecb8a88e Mon Sep 17 00:00:00 2001 From: Asharani Date: Fri, 20 May 2016 15:48:38 +0530 Subject: [PATCH 131/371] Allowe parallel uploads of same file for different software module. Display software module details in status popup. Signed-off-by: Asharani --- .../ui/artifacts/upload/UploadHandler.java | 25 ++-- .../ui/artifacts/upload/UploadLayout.java | 12 +- .../upload/UploadStatusInfoWindow.java | 110 +++++++++++------- .../artifacts/upload/UploadStatusObject.java | 15 ++- 4 files changed, 101 insertions(+), 61 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index 45a55d138..dc56ff325 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -249,18 +249,18 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene // Update progress is called event after upload interrupted in // uploadStarted method if (!uploadInterrupted) { - if (readBytes > maxSize || contentLength > maxSize) { - LOG.error("User tried to upload more than was allowed ({}).", maxSize); - failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); - interruptFileUpload(); - return; - } if (aborted) { LOG.error("User aborted file upload"); failureReason = i18n.get("message.uploadedfile.aborted"); interruptFileUpload(); return; } + if (readBytes > maxSize || contentLength > maxSize) { + LOG.error("User tried to upload more than was allowed ({}).", maxSize); + failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); + interruptFileUpload(); + return; + } eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_IN_PROGRESS, new UploadFileStatus(fileName, readBytes, contentLength, selectedSwForUpload))); LOG.info("Update progress - {} : {}", fileName, (double) readBytes / (double) contentLength); @@ -274,18 +274,18 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public void onProgress(final StreamingProgressEvent event) { - if (event.getBytesReceived() > maxSize || event.getContentLength() > maxSize) { - LOG.error("User tried to upload more than was allowed ({}).", maxSize); - failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); - interruptFileStreaming(); - return; - } if (aborted) { LOG.error("User aborted the upload"); failureReason = i18n.get("message.uploadedfile.aborted"); interruptFileStreaming(); return; } + if (event.getBytesReceived() > maxSize || event.getContentLength() > maxSize) { + LOG.error("User tried to upload more than was allowed ({}).", maxSize); + failureReason = i18n.get("message.uploadedfile.size.exceeded", maxSize); + interruptFileStreaming(); + return; + } eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_IN_PROGRESS, new UploadFileStatus( fileName, event.getBytesReceived(), event.getContentLength(), selectedSw))); // Logging to solve sonar issue @@ -380,4 +380,5 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene upload.interruptUpload(); uploadInterrupted = true; } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index 4eaa61096..e19742e4f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -222,6 +222,11 @@ public class UploadLayout extends VerticalLayout { setUploadStatusButtonIconToFinished(); } } + if (artifactUploadState.isUploadCompleted()) { + artifactUploadState.getNumberOfFilesActuallyUpload().set(0); + artifactUploadState.getNumberOfFileUploadsExpected().set(0); + artifactUploadState.getNumberOfFileUploadsFailed().set(0); + } } public DragAndDropWrapper getDropAreaWrapper() { @@ -692,7 +697,7 @@ public class UploadLayout extends VerticalLayout { // failed reason to be updated only if there is error other than // duplicate file error uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() - .getFailureReason()); + .getFailureReason(), event.getUploadStatus().getSoftwareModule()); increaseNumberOfFileUploadsFailed(); } decreaseNumberOfFileUploadsExpected(); @@ -722,13 +727,12 @@ public class UploadLayout extends VerticalLayout { } updateUploadCounts(); enableProcessBtn(); - duplicateFileNamesList.clear(); } private boolean isUploadComplete() { int uploadedCount = artifactUploadState.getNumberOfFilesActuallyUpload().intValue(); int expectedUploadsCount = artifactUploadState.getNumberOfFileUploadsExpected().intValue(); - return uploadedCount == expectedUploadsCount; + return uploadedCount == expectedUploadsCount; } private void onUploadFailure(final UploadStatusEvent event) { @@ -746,7 +750,7 @@ public class UploadLayout extends VerticalLayout { // failed reason to be updated only if there is error other than // duplicate file error uploadInfoWindow.uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() - .getFailureReason()); + .getFailureReason(), event.getUploadStatus().getSoftwareModule()); increaseNumberOfFileUploadsFailed(); decreaseNumberOfFileUploadsExpected(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java index 351d625c9..e4ab8d474 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java @@ -14,6 +14,7 @@ import java.util.stream.Collectors; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadStatusEvent.UploadStatusEventType; @@ -21,8 +22,10 @@ import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.ConfirmationDialog; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; +import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -100,7 +103,7 @@ public class UploadStatusInfoWindow extends Window { private Button resizeButton; private UI ui; - + private ConfirmationDialog confirmDialog; /** @@ -126,7 +129,7 @@ public class UploadStatusInfoWindow extends Window { setContent(mainLayout); eventBus.subscribe(this); ui = UI.getCurrent(); - + createConfirmDialog(); } @@ -135,22 +138,25 @@ public class UploadStatusInfoWindow extends Window { if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_IN_PROGRESS) { UI.getCurrent().access( () -> updateProgress(event.getUploadStatus().getFileName(), event.getUploadStatus().getBytesRead(), - event.getUploadStatus().getContentLength())); + event.getUploadStatus().getContentLength(), event.getUploadStatus().getSoftwareModule())); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STARTED) { UI.getCurrent().access(() -> onStartOfUpload(event)); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FAILED) { ui.access(() -> uploadFailed(event.getUploadStatus().getFileName(), event.getUploadStatus() - .getFailureReason())); + .getFailureReason(), event.getUploadStatus().getSoftwareModule())); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_SUCCESSFUL) { - UI.getCurrent().access(() -> uploadSucceeded(event.getUploadStatus().getFileName())); + UI.getCurrent().access( + () -> uploadSucceeded(event.getUploadStatus().getFileName(), event.getUploadStatus() + .getSoftwareModule())); } else if (event.getUploadProgressEventType() == UploadStatusEventType.UPLOAD_STREAMING_FINISHED) { - ui.access(() -> uploadSucceeded(event.getUploadStatus().getFileName())); + ui.access(() -> uploadSucceeded(event.getUploadStatus().getFileName(), event.getUploadStatus() + .getSoftwareModule())); } } private void onStartOfUpload(UploadStatusEvent event) { uploadSessionStarted(); - uploadStarted(event.getUploadStatus().getFileName()); + uploadStarted(event.getUploadStatus().getFileName(), event.getUploadStatus().getSoftwareModule()); } @PreDestroy @@ -167,11 +173,15 @@ public class UploadStatusInfoWindow extends Window { if (container.getItemIds().isEmpty()) { container.removeAllItems(); for (UploadStatusObject statusObject : artifactUploadState.getUploadedFileStatusList()) { - Item item = container.addItem(statusObject.getFilename()); + Item item = container.addItem(getItemid(statusObject.getFilename(), + statusObject.getSelectedSoftwareModule())); item.getItemProperty(REASON).setValue(statusObject.getReason() != null ? statusObject.getReason() : ""); item.getItemProperty(STATUS).setValue(statusObject.getStatus()); item.getItemProperty(PROGRESS).setValue(statusObject.getProgress()); item.getItemProperty(FILE_NAME).setValue(statusObject.getFilename()); + SoftwareModule sw = statusObject.getSelectedSoftwareModule(); + item.getItemProperty(SPUILabelDefinitions.NAME_VERSION).setValue( + HawkbitCommonUtil.getFormattedNameVersion(sw.getName(), sw.getVersion())); } if (artifactUploadState.isUploadCompleted()) { minimizeButton.setEnabled(false); @@ -192,9 +202,10 @@ public class UploadStatusInfoWindow extends Window { private void setGridColumnProperties() { grid.getColumn(STATUS).setRenderer(new StatusRenderer()); grid.getColumn(PROGRESS).setRenderer(new ProgressBarRenderer()); - grid.setColumnOrder(STATUS, PROGRESS, FILE_NAME, REASON); + grid.setColumnOrder(STATUS, PROGRESS, FILE_NAME, SPUILabelDefinitions.NAME_VERSION, REASON); setColumnWidth(); - grid.setFrozenColumnCount(4); + grid.getColumn(SPUILabelDefinitions.NAME_VERSION).setHeaderCaption(i18n.get("upload.swModuleTable.header")); + grid.setFrozenColumnCount(5); } private Grid createGrid() { @@ -213,6 +224,7 @@ public class UploadStatusInfoWindow extends Window { uploadContainer.addContainerProperty(FILE_NAME, String.class, null); uploadContainer.addContainerProperty(PROGRESS, Double.class, 0D); uploadContainer.addContainerProperty(REASON, String.class, ""); + uploadContainer.addContainerProperty(SPUILabelDefinitions.NAME_VERSION, String.class, ""); return uploadContainer; } @@ -234,10 +246,11 @@ public class UploadStatusInfoWindow extends Window { } private void setColumnWidth() { - grid.getColumn(STATUS).setWidth(70); + grid.getColumn(STATUS).setWidth(60); grid.getColumn(PROGRESS).setWidth(150); - grid.getColumn(FILE_NAME).setWidth(280); - grid.getColumn(REASON).setWidth(300); + grid.getColumn(FILE_NAME).setWidth(200); + grid.getColumn(REASON).setWidth(290); + grid.getColumn(SPUILabelDefinitions.NAME_VERSION).setWidth(200); } private void resetColumnWidth() { @@ -245,6 +258,7 @@ public class UploadStatusInfoWindow extends Window { grid.getColumn(PROGRESS).setWidthUndefined(); grid.getColumn(FILE_NAME).setWidthUndefined(); grid.getColumn(REASON).setWidthUndefined(); + grid.getColumn(SPUILabelDefinitions.NAME_VERSION).setWidthUndefined(); } private static class StatusRenderer extends HtmlRenderer { @@ -307,29 +321,32 @@ public class UploadStatusInfoWindow extends Window { restoreState(); } - void uploadStarted(final String filename) { - final Item item = uploads.addItem(filename); + void uploadStarted(final String filename, final SoftwareModule softwareModule) { + final Item item = uploads.addItem(getItemid(filename, softwareModule)); if (item != null) { item.getItemProperty(FILE_NAME).setValue(filename); + item.getItemProperty(SPUILabelDefinitions.NAME_VERSION).setValue( + HawkbitCommonUtil.getFormattedNameVersion(softwareModule.getName(), softwareModule.getVersion())); } grid.scrollToEnd(); - UploadStatusObject uploadStatus = new UploadStatusObject(filename); + UploadStatusObject uploadStatus = new UploadStatusObject(filename, softwareModule); uploadStatus.setStatus("Active"); artifactUploadState.getUploadedFileStatusList().add(uploadStatus); } - void updateProgress(final String filename, final long readBytes, final long contentLength) { - final Item item = uploads.getItem(filename); + void updateProgress(final String filename, final long readBytes, final long contentLength, + final SoftwareModule softwareModule) { + final Item item = uploads.getItem(getItemid(filename, softwareModule)); + double progress = (double) readBytes / (double) contentLength; if (item != null) { - double progress = (double) readBytes / (double) contentLength; item.getItemProperty(PROGRESS).setValue(progress); - List uploadStatusObjectList = (List) artifactUploadState - .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) - .collect(Collectors.toList()); - if (!uploadStatusObjectList.isEmpty()) { - UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); - uploadStatusObject.setProgress(progress); - } + } + List uploadStatusObjectList = (List) artifactUploadState + .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) + .collect(Collectors.toList()); + if (!uploadStatusObjectList.isEmpty()) { + UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); + uploadStatusObject.setProgress(progress); } } @@ -338,26 +355,29 @@ public class UploadStatusInfoWindow extends Window { * * @param filename * of the uploaded file. + * @param softwareModule + * selected software module */ - public void uploadSucceeded(final String filename) { - final Item item = uploads.getItem(filename); + public void uploadSucceeded(final String filename, SoftwareModule softwareModule) { + final Item item = uploads.getItem(getItemid(filename, softwareModule)); + String status = "Finished"; if (item != null) { - String status = "Finished"; item.getItemProperty(STATUS).setValue(status); - List uploadStatusObjectList = (List) artifactUploadState - .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) - .collect(Collectors.toList()); - if (!uploadStatusObjectList.isEmpty()) { - UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); - uploadStatusObject.setStatus(status); - } + } + List uploadStatusObjectList = (List) artifactUploadState + .getUploadedFileStatusList().stream().filter(e -> e.getFilename().equals(filename)) + .collect(Collectors.toList()); + if (!uploadStatusObjectList.isEmpty()) { + UploadStatusObject uploadStatusObject = uploadStatusObjectList.get(0); + uploadStatusObject.setStatus(status); + uploadStatusObject.setProgress(1d); } } - void uploadFailed(final String filename, final String errorReason) { + void uploadFailed(final String filename, final String errorReason, SoftwareModule softwareModule) { errorOccured = true; String status = "Failed"; - final Item item = uploads.getItem(filename); + final Item item = uploads.getItem(getItemid(filename, softwareModule)); if (item != null) { item.getItemProperty(REASON).setValue(errorReason); item.getItemProperty(STATUS).setValue(status); @@ -385,7 +405,7 @@ public class UploadStatusInfoWindow extends Window { } private void setPopupSizeInMinMode() { - mainLayout.setWidth(800, Unit.PIXELS); + mainLayout.setWidth(900, Unit.PIXELS); mainLayout.setHeight(510, Unit.PIXELS); } @@ -417,6 +437,7 @@ public class UploadStatusInfoWindow extends Window { grid.getColumn(PROGRESS).setExpandRatio(1); grid.getColumn(FILE_NAME).setExpandRatio(2); grid.getColumn(REASON).setExpandRatio(3); + grid.getColumn(SPUILabelDefinitions.NAME_VERSION).setExpandRatio(4); mainLayout.setSizeFull(); } else { event.getButton().setIcon(FontAwesome.EXPAND); @@ -455,7 +476,7 @@ public class UploadStatusInfoWindow extends Window { } private void createConfirmDialog() { - confirmDialog = new ConfirmationDialog(i18n.get("caption.cancel.action.confirmbox"), + confirmDialog = new ConfirmationDialog(i18n.get("caption.confirm.abort.action"), i18n.get("message.abort.upload"), i18n.get("button.ok"), i18n.get("button.cancel"), ok -> { if (ok) { eventBus.publish(this, UploadStatusEventType.ABORT_UPLOAD); @@ -463,8 +484,13 @@ public class UploadStatusInfoWindow extends Window { errorOccured = true; minimizeButton.setEnabled(false); closeButton.setEnabled(false); - } - }); + } + }); } + private String getItemid(final String filename, final SoftwareModule softwareModule) { + return new StringBuilder(filename).append( + HawkbitCommonUtil.getFormattedNameVersion(softwareModule.getName(), softwareModule.getVersion())) + .toString(); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java index 13167b55a..4ea82d7dd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.artifacts.upload; +import org.eclipse.hawkbit.repository.model.SoftwareModule; + /** * * Holds uploaded file status.Used to display the details in upload status @@ -19,16 +21,23 @@ public class UploadStatusObject { private Double progress; private String filename; private String reason; + private SoftwareModule selectedSoftwareModule; - public UploadStatusObject(String status, Double progress, String fileName, String reason) { - this(fileName); + public UploadStatusObject(final String status, final Double progress, final String fileName, final String reason, + final SoftwareModule selectedSoftwareModule) { + this(fileName,selectedSoftwareModule); this.status = status; this.progress = progress; this.reason = reason; } - public UploadStatusObject(String fileName) { + public UploadStatusObject(String fileName, SoftwareModule selectedSoftwareModule) { this.filename = fileName; + this.selectedSoftwareModule = selectedSoftwareModule; + } + + public SoftwareModule getSelectedSoftwareModule() { + return selectedSoftwareModule; } public String getStatus() { From 47e254e14ee1c609353cdf46cb1a87d27adfb2e7 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 20 May 2016 13:56:36 +0200 Subject: [PATCH 132/371] move widgetset to src/main/resources and remove cleaning of widgeset Signed-off-by: Michael Hirsch --- hawkbit-ui/pom.xml | 89 +++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/hawkbit-ui/pom.xml b/hawkbit-ui/pom.xml index e0bde576a..11fc3c7c4 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -1,15 +1,6 @@ - - + + 4.0.0 org.eclipse.hawkbit @@ -28,8 +19,8 @@ -Xmx1g -Xss1024k - ${project.build.directory}/classes/VAADIN/widgetsets - ${project.build.directory}/classes/VAADIN/widgetsets + src/main/resources/VAADIN/widgetsets + src/main/resources/VAADIN/widgetsets src/main/resources true @@ -43,12 +34,12 @@ + process-classes - clean resources update-theme update-widgetset @@ -58,29 +49,47 @@ - - org.apache.maven.plugins - maven-jar-plugin - - - true - - true - true - - - CustomRenderers - 1 - org.eclipse.hawkbit.ui.customrenderers.CustomRendererWidgetSet - - - - + + org.apache.maven.plugins + maven-antrun-plugin + + + process-classes + + + + + + + + + run + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + true + + true + true + + + CustomRenderers + 1 + org.eclipse.hawkbit.ui.customrenderers.CustomRendererWidgetSet + + + + - + org.eclipse.m2e lifecycle-mapping @@ -171,11 +180,11 @@ com.vaadin vaadin-server - - com.vaadin - vaadin-client - - + + com.vaadin + vaadin-client + + com.vaadin vaadin-push From fe1e2f74e738e52886a106a1221ec63fae18e13a Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 20 May 2016 14:25:03 +0200 Subject: [PATCH 133/371] exclude compiled vaadin widgetset from license check Signed-off-by: Michael Hirsch --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index b6d09758e..3abb3cd8c 100644 --- a/pom.xml +++ b/pom.xml @@ -164,6 +164,7 @@ **/*.sql eclipse_codeformatter.xml **/addons.scss + **/VAADIN/widgetsets/** JAVADOC_STYLE From 1fa335dedd3e1c86da2d2187eaf492b4543bcd9e Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 20 May 2016 15:35:15 +0200 Subject: [PATCH 134/371] fix license header in pom file Signed-off-by: Michael Hirsch --- hawkbit-ui/pom.xml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hawkbit-ui/pom.xml b/hawkbit-ui/pom.xml index 11fc3c7c4..6a3f76df6 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -1,5 +1,13 @@ - + 4.0.0 From e3041aa9ae8b3fa71197807a7ecd2a954e952a1e Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 20 May 2016 17:25:38 +0200 Subject: [PATCH 135/371] Started to split the actual model. Signed-off-by: Kai Zimmermann --- .../eventbus/EntityChangeEventListener.java | 3 +- .../repository/ControllerManagement.java | 10 +- .../repository/DeploymentManagement.java | 13 +- .../DistributionSetAssignmentResult.java | 5 +- .../repository/DistributionSetManagement.java | 40 +- .../repository/RolloutGroupManagement.java | 14 +- .../hawkbit/repository/RolloutManagement.java | 17 +- .../repository/SoftwareManagement.java | 24 +- .../hawkbit/repository/TagManagement.java | 22 +- .../hawkbit/repository/TargetManagement.java | 35 +- .../TenantConfigurationManagement.java | 1 - .../repository/jpa/ActionRepository.java | 80 +-- .../jpa/ActionStatusRepository.java | 12 +- .../repository/jpa/BaseEntityRepository.java | 3 +- .../repository/jpa/DeploymentHelper.java | 13 +- .../DistributionSetMetadataRepository.java | 10 +- .../jpa/DistributionSetRepository.java | 33 +- .../jpa/DistributionSetTagRepository.java | 9 +- .../jpa/DistributionSetTypeRepository.java | 9 +- .../jpa/EclipseLinkTargetInfoRepository.java | 8 +- .../ExternalArtifactProviderRepository.java | 3 +- .../jpa/ExternalArtifactRepository.java | 5 +- .../repository/jpa/JpaArtifactManagement.java | 33 +- .../jpa/JpaControllerManagement.java | 88 +-- .../jpa/JpaDeploymentManagement.java | 172 +++--- .../jpa/JpaDistributionSetManagement.java | 228 +++++--- .../repository/jpa/JpaReportManagement.java | 63 +-- .../jpa/JpaRolloutGroupManagement.java | 80 ++- .../repository/jpa/JpaRolloutManagement.java | 112 ++-- .../repository/jpa/JpaSoftwareManagement.java | 223 +++++--- .../repository/jpa/JpaSystemManagement.java | 30 +- .../repository/jpa/JpaTagManagement.java | 89 ++- .../jpa/JpaTargetFilterQueryManagement.java | 26 +- .../repository/jpa/JpaTargetManagement.java | 190 ++++--- .../jpa/JpaTenantConfigurationManagement.java | 8 +- .../jpa/LocalArtifactRepository.java | 7 +- .../jpa/RolloutGroupRepository.java | 24 +- .../repository/jpa/RolloutRepository.java | 16 +- .../jpa/RolloutTargetGroupRepository.java | 4 +- .../jpa/SoftwareModuleMetadataRepository.java | 9 +- .../jpa/SoftwareModuleRepository.java | 27 +- .../jpa/SoftwareModuleTypeRepository.java | 7 +- .../jpa/TargetFilterQueryRepository.java | 7 +- .../repository/jpa/TargetInfoRepository.java | 5 +- .../repository/jpa/TargetRepository.java | 46 +- .../repository/jpa/TargetTagRepository.java | 9 +- .../jpa/TenantConfigurationRepository.java | 7 +- .../jpa/TenantMetaDataRepository.java | 5 +- .../model/DistributionSetTypeElement.java | 12 +- ...istributionSetTypeElementCompositeKey.java | 4 +- .../model/DsMetadataCompositeKey.java | 4 +- .../repository/jpa/model/JpaAction.java | 274 ++++++++++ .../repository/jpa/model/JpaActionStatus.java | 154 ++++++ .../repository/jpa/model/JpaArtifact.java | 63 +++ .../repository/jpa/model/JpaBaseEntity.java | 184 +++++++ .../jpa/model/JpaDistributionSet.java | 326 +++++++++++ .../jpa/model/JpaDistributionSetMetadata.java | 85 +++ .../jpa/model/JpaDistributionSetTag.java | 90 ++++ .../jpa/model/JpaDistributionSetType.java | 310 +++++++++++ .../jpa/model/JpaExternalArtifact.java | 142 +++++ .../model/JpaExternalArtifactProvider.java | 83 +++ .../jpa/model/JpaLocalArtifact.java | 118 ++++ .../repository/jpa/model/JpaMetaData.java | 102 ++++ .../repository/jpa/model/JpaNamedEntity.java | 70 +++ .../jpa/model/JpaNamedVersionedEntity.java | 55 ++ .../repository/jpa/model/JpaRollout.java | 260 +++++++++ .../repository/jpa/model/JpaRolloutGroup.java | 509 ++++++++++++++++++ .../jpa/model/JpaSoftwareModule.java | 266 +++++++++ .../jpa/model/JpaSoftwareModuleMetadata.java | 85 +++ .../jpa/model/JpaSoftwareModuleType.java | 125 +++++ .../hawkbit/repository/jpa/model/JpaTag.java | 61 +++ .../repository/jpa/model/JpaTarget.java | 237 ++++++++ .../jpa/model/JpaTargetFilterQuery.java | 64 +++ .../repository/jpa/model/JpaTargetInfo.java | 372 +++++++++++++ .../repository/jpa/model/JpaTargetTag.java | 91 ++++ .../jpa/model/JpaTenantAwareBaseEntity.java | 115 ++++ .../jpa/model/JpaTenantConfiguration.java | 75 +++ .../jpa/model/JpaTenantMetaData.java | 107 ++++ .../{ => jpa}/model/RolloutTargetGroup.java | 19 +- .../{ => jpa}/model/RolloutTargetGroupId.java | 5 +- .../model/SwMetadataCompositeKey.java | 4 +- .../specifications/ActionSpecifications.java | 31 +- .../DistributionSetSpecification.java | 93 ++-- .../DistributionSetTypeSpecification.java | 22 +- .../SoftwareModuleSpecification.java | 28 +- .../specifications/SpecificationsBuilder.java | 2 +- .../TargetFilterQuerySpecification.java | 9 +- .../specifications/TargetSpecifications.java | 84 +-- .../hawkbit/repository/model/Action.java | 199 +------ .../repository/model/ActionStatus.java | 124 +---- .../model/ActionWithStatusCount.java | 6 +- .../hawkbit/repository/model/Artifact.java | 47 +- .../hawkbit/repository/model/BaseEntity.java | 167 +----- .../repository/model/DistributionSet.java | 251 +-------- .../model/DistributionSetMetadata.java | 71 +-- .../repository/model/DistributionSetTag.java | 75 +-- .../repository/model/DistributionSetType.java | 189 +------ .../repository/model/ExternalArtifact.java | 119 +--- .../model/ExternalArtifactProvider.java | 67 +-- .../repository/model/LocalArtifact.java | 104 +--- .../hawkbit/repository/model/MetaData.java | 87 +-- .../hawkbit/repository/model/NamedEntity.java | 54 +- .../model/NamedVersionedEntity.java | 41 +- .../hawkbit/repository/model/Rollout.java | 222 +------- .../repository/model/RolloutGroup.java | 467 ++-------------- .../repository/model/SoftwareModule.java | 193 +------ .../model/SoftwareModuleMetadata.java | 71 +-- .../repository/model/SoftwareModuleType.java | 108 +--- .../eclipse/hawkbit/repository/model/Tag.java | 50 +- .../hawkbit/repository/model/Target.java | 192 +------ .../repository/model/TargetFilterQuery.java | 49 +- .../hawkbit/repository/model/TargetInfo.java | 338 +----------- .../hawkbit/repository/model/TargetTag.java | 76 +-- .../model/TargetWithActionStatus.java | 2 +- .../model/TenantAwareBaseEntity.java | 104 +--- .../repository/model/TenantConfiguration.java | 62 +-- .../repository/model/TenantMetaData.java | 91 +--- .../condition/PauseRolloutGroupAction.java | 18 +- ...artNextGroupRolloutGroupSuccessAction.java | 9 +- .../ThresholdRolloutGroupErrorCondition.java | 5 +- .../org/eclipse/hawkbit/TestDataUtil.java | 60 ++- .../hawkbit/repository/ActionTest.java | 3 +- .../ArtifactManagementNoMongoDbTest.java | 4 +- .../repository/ArtifactManagementTest.java | 103 ++-- .../repository/ControllerManagementTest.java | 16 +- .../repository/DeploymentManagementTest.java | 133 ++--- .../DistributionSetManagementTest.java | 108 ++-- .../repository/ReportManagementTest.java | 65 +-- .../repository/RolloutManagementTest.java | 63 +-- .../repository/SoftwareManagementTest.java | 236 ++++---- .../repository/SystemManagementTest.java | 4 +- .../hawkbit/repository/TagManagementTest.java | 109 ++-- .../TargetFilterQueryManagenmentTest.java | 11 +- .../TargetManagementSearchTest.java | 163 ++---- .../repository/TargetManagementTest.java | 76 +-- .../model/ModelEqualsHashcodeTest.java | 44 +- .../repository/rsql/RSQLActionFieldsTest.java | 16 +- .../rsql/RSQLDistributionSetFieldTest.java | 20 +- ...RSQLDistributionSetMetadataFieldsTest.java | 6 +- .../rsql/RSQLRolloutGroupFields.java | 11 +- .../rsql/RSQLSoftwareModuleFieldTest.java | 22 +- .../RSQLSoftwareModuleMetadataFieldsTest.java | 9 +- .../RSQLSoftwareModuleTypeFieldsTest.java | 4 +- .../repository/rsql/RSQLTagFieldsTest.java | 13 +- .../repository/rsql/RSQLTargetFieldTest.java | 28 +- .../utils/RepositoryDataGenerator.java | 33 +- .../tenancy/MultiTenancyEntityTest.java | 10 +- .../controller/ArtifactStoreController.java | 2 +- .../hawkbit/controller/RootController.java | 9 +- .../resource/DistributionSetResource.java | 2 +- .../resource/DistributionSetTypeResource.java | 2 +- .../rest/resource/RolloutResource.java | 2 +- .../resource/DistributionSetResourceTest.java | 4 +- .../rest/resource/TargetResourceTest.java | 7 +- 154 files changed, 6730 insertions(+), 4950 deletions(-) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/model/DistributionSetTypeElement.java (86%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/model/DistributionSetTypeElementCompositeKey.java (89%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/model/DsMetadataCompositeKey.java (95%) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaArtifact.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaBaseEntity.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaMetaData.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedEntity.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedVersionedEntity.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTag.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantAwareBaseEntity.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/model/RolloutTargetGroup.java (77%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/model/RolloutTargetGroupId.java (88%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/model/SwMetadataCompositeKey.java (96%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/specifications/ActionSpecifications.java (55%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/specifications/DistributionSetSpecification.java (58%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/specifications/DistributionSetTypeSpecification.java (75%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/specifications/SoftwareModuleSpecification.java (63%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/specifications/SpecificationsBuilder.java (95%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/specifications/TargetFilterQuerySpecification.java (67%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{ => jpa}/specifications/TargetSpecifications.java (59%) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java index 2f63a3122..0c33435d2 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java @@ -20,6 +20,7 @@ import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.jpa.TargetRepository; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; @@ -147,7 +148,7 @@ public class EntityChangeEventListener { } private static boolean isTargetInfoNew(final Object targetInfo) { - return ((TargetInfo) targetInfo).isNew(); + return ((JpaTargetInfo) targetInfo).isNew(); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index 4ee3b1275..47ff3c49f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -31,8 +31,6 @@ import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Transactional; /** * Service layer for all operations of the DDI API (with access permissions only @@ -248,7 +246,6 @@ public interface ControllerManagement { * */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - @Transactional(isolation = Isolation.READ_UNCOMMITTED) TargetInfo updateLastTargetQuery(@NotNull TargetInfo target, @NotNull URI address); /** @@ -271,4 +268,11 @@ public interface ControllerManagement { TargetInfo updateTargetStatus(@NotNull TargetInfo targetInfo, TargetUpdateStatus status, Long lastTargetQuery, URI address); + /** + * Generates an empty {@link ActionStatus} without persisting it. + * + * @return {@link ActionStatus} object + */ + ActionStatus generateActionStatus(); + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 754d66b65..070594d4e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -31,7 +31,6 @@ import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; /** @@ -179,7 +178,7 @@ public interface DeploymentManagement { * @return the count value of found actions associated to the target */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Long countActionsByTarget(@NotNull Specification spec, @NotNull Target target); + Long countActionsByTarget(@NotNull String rsqlParam, @NotNull Target target); /** * counts all actions associated to a specific target. @@ -281,9 +280,9 @@ public interface DeploymentManagement { * @return a slice of actions assigned to the specific target and the * specification */ + // TODO fix this @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Slice findActionsByTarget(@NotNull Specification specifiction, @NotNull Target target, - @NotNull Pageable pageable); + Slice findActionsByTarget(@NotNull String rsqlParam, @NotNull Target target, @NotNull Pageable pageable); /** * Retrieves all {@link Action}s of a specific target ordered by action ID. @@ -440,4 +439,10 @@ public interface DeploymentManagement { + SpringEvalExpressions.IS_SYSTEM_CODE) Action startScheduledAction(@NotNull Action action); + /** + * Generates an empty {@link Action} without persisting it. + * + * @return {@link Action} object + */ + Action generateAction(); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java index ad947879a..1393504ab 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java @@ -51,7 +51,7 @@ public class DistributionSetAssignmentResult extends AssignmentResult { this.actions = actions; this.targetManagement = targetManagement; } - + /** * @return the actionIds */ @@ -59,9 +59,10 @@ public class DistributionSetAssignmentResult extends AssignmentResult { return actions; } + @SuppressWarnings("unchecked") @Override public List getAssignedEntity() { - return targetManagement.findTargetByControllerID(assignedTargets); + return (List) targetManagement.findTargetByControllerID(assignedTargets); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index db737df4a..2574230b3 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -21,14 +21,14 @@ import org.eclipse.hawkbit.repository.exception.DistributionSetCreationFailedMis import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException; +import org.eclipse.hawkbit.repository.jpa.model.DistributionSetTypeElement; +import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.DistributionSetTypeElement; -import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Tag; @@ -36,7 +36,6 @@ import org.eclipse.hawkbit.repository.model.Target; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; @@ -274,18 +273,7 @@ public interface DistributionSetManagement { * @return the found {@link DistributionSet}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Iterable findDistributionSetList(Collection dist); - - /** - * Retrieves {@link DistributionSet} List including details information, - * i.e. @link BaseSoftwareModule}s and {@link DistributionSetTag}s. - * - * @param distributionIdSet - * List of {@link DistributionSet} IDs to be found - * @return the found {@link DistributionSet}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - List findDistributionSetListWithDetails(Collection distributionIdSet); + List findDistributionSetsAll(Collection dist); /** * finds all meta data by the given distribution set id. @@ -315,7 +303,7 @@ public interface DistributionSetManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Page findDistributionSetMetadataByDistributionSetId(@NotNull Long distributionSetId, - @NotNull Specification spec, @NotNull Pageable pageable); + @NotNull String rsqlParam, @NotNull Pageable pageable); // TODO discuss: use enum instead of the true,false,null switch ? /** @@ -357,8 +345,8 @@ public interface DistributionSetManagement { * @return all found {@link DistributionSet}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findDistributionSetsAll(@NotNull Specification spec, - @NotNull Pageable pageReq, Boolean deleted); + Page findDistributionSetsAll(@NotNull String rsqlParam, @NotNull Pageable pageReq, + Boolean deleted); /** * method retrieves all {@link DistributionSet}s from the repository in the @@ -442,8 +430,7 @@ public interface DistributionSetManagement { * @return the found {@link SoftwareModuleType}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findDistributionSetTypesAll(@NotNull Specification spec, - @NotNull Pageable pageable); + Page findDistributionSetTypesAll(@NotNull String rsqlParam, @NotNull Pageable pageable); /** * finds a single distribution set meta data by its id. @@ -580,4 +567,17 @@ public interface DistributionSetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) DistributionSetType updateDistributionSetType(@NotNull DistributionSetType dsType); + /** + * Generates an empty {@link DistributionSetType} without persisting it. + * + * @return {@link DistributionSetType} object + */ + DistributionSetType generateDistributionSetType(); + + /** + * Generates an empty {@link DistributionSet} without persisting it. + * + * @return {@link DistributionSet} object + */ + DistributionSet generateDistributionSet(); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index baff4586c..efad0100c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -84,8 +84,8 @@ public interface RolloutGroupManagement { * @return a page of found {@link RolloutGroup}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findRolloutGroupsAll(@NotNull Rollout rollout, - @NotNull Specification specification, @NotNull Pageable page); + Page findRolloutGroupsAll(@NotNull Rollout rollout, @NotNull String rsqlParam, + @NotNull Pageable page); /** * Retrieves a page of {@link RolloutGroup}s filtered by a given @@ -128,8 +128,8 @@ public interface RolloutGroupManagement { * @return Page list of targets of a rollout group */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, - @NotNull Specification specification, @NotNull Pageable page); + Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, @NotNull String rsqlParam, + @NotNull Pageable page); /** * Get count of targets in different status in rollout group. @@ -141,4 +141,10 @@ public interface RolloutGroupManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) RolloutGroup findRolloutGroupWithDetailedStatus(@NotNull Long rolloutGroupId); + /** + * Generates an empty {@link RolloutGroup} without persisting it. + * + * @return {@link RolloutGroup} object + */ + RolloutGroup generateRolloutGroup(); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index 118be12fa..140273439 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -13,16 +13,15 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.eventbus.event.RolloutGroupCreatedEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupConditions; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.Rollout; -import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; /** @@ -179,8 +178,7 @@ public interface RolloutManagement { * @return a page of found rollouts */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findAllWithDetailedStatusByPredicate(@NotNull Specification specification, - @NotNull Pageable page); + Page findAllWithDetailedStatusByPredicate(@NotNull String rsqlParam, @NotNull Pageable page); /** * Finds rollouts by given text in name or description. @@ -335,4 +333,11 @@ public interface RolloutManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) Rollout updateRollout(@NotNull Rollout rollout); + /** + * Generates an empty {@link Rollout} without persisting it. + * + * @return {@link Rollout} object + */ + Rollout generateRollout(); + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java index b3b9e7380..1802b1dcc 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java @@ -17,17 +17,16 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; /** @@ -290,7 +289,7 @@ public interface SoftwareManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Page findSoftwareModuleMetadataBySoftwareModuleId(@NotNull Long softwareModuleId, - @NotNull Specification spec, @NotNull Pageable pageable); + @NotNull String rsqlParam, @NotNull Pageable pageable); /** * Filter {@link SoftwareModule}s with given @@ -347,8 +346,7 @@ public interface SoftwareManagement { * @return the found {@link SoftwareModule}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findSoftwareModulesByPredicate(@NotNull Specification spec, - @NotNull Pageable pageable); + Page findSoftwareModulesByPredicate(@NotNull String rsqlParam, @NotNull Pageable pageable); /** * retrieves the {@link SoftwareModule}s by their {@link SoftwareModuleType} @@ -411,8 +409,7 @@ public interface SoftwareManagement { * @return the found {@link SoftwareModuleType}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findSoftwareModuleTypesByPredicate(@NotNull Specification spec, - @NotNull Pageable pageable); + Page findSoftwareModuleTypesByPredicate(@NotNull String rsqlParam, @NotNull Pageable pageable); /** * Retrieves software module including details ( @@ -468,4 +465,17 @@ public interface SoftwareManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) SoftwareModuleType updateSoftwareModuleType(@NotNull SoftwareModuleType sm); + /** + * Generates an empty {@link SoftwareModuleType} without persisting it. + * + * @return {@link SoftwareModuleType} object + */ + SoftwareModuleType generateSoftwareModuleType(); + + /** + * Generates an empty {@link SoftwareModule} without persisting it. + * + * @return {@link SoftwareModule} object + */ + SoftwareModule generateSoftwareModule(); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java index 929bd745c..fa38e318b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java @@ -23,7 +23,6 @@ import org.eclipse.hawkbit.repository.model.TargetTag; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; /** @@ -90,7 +89,7 @@ public interface TagManagement { * if given object has already an ID. */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) - List createTargetTags(@NotNull Iterable targetTags); + List createTargetTags(@NotNull Collection targetTags); /** * Deletes {@link DistributionSetTag} by given @@ -138,8 +137,7 @@ public interface TagManagement { * @return the found {@link DistributionSetTag}s, never {@code null} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findAllDistributionSetTags(@NotNull Specification spec, - @NotNull Pageable pageable); + Page findAllDistributionSetTags(@NotNull String rsqlParam, @NotNull Pageable pageable); /** * @return all {@link TargetTag}s @@ -168,7 +166,7 @@ public interface TagManagement { * @return the found {@link Target}s, never {@code null} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Page findAllTargetTags(@NotNull Specification spec, @NotNull Pageable pageable); + Page findAllTargetTags(@NotNull String rsqlParam, @NotNull Pageable pageable); /** * Find {@link DistributionSet} based on given name. @@ -233,4 +231,18 @@ public interface TagManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) TargetTag updateTargetTag(@NotNull TargetTag targetTag); + /** + * Generates an empty {@link TargetTag} without persisting it. + * + * @return {@link TargetTag} object + */ + TargetTag generateTargetTag(); + + /** + * Generates an empty {@link DistributionSetTag} without persisting it. + * + * @return {@link DistributionSetTag} object + */ + DistributionSetTag generateDistributionSetTag(); + } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index ae7724e31..f8e5e8a91 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -30,7 +30,6 @@ import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; /** @@ -290,8 +289,8 @@ public interface TargetManagement { * @return the found {@link Target}s, never {@code null} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) - Page findTargetByAssignedDistributionSet(@NotNull Long distributionSetID, - @NotNull Specification spec, @NotNull Pageable pageReq); + Page findTargetByAssignedDistributionSet(@NotNull Long distributionSetID, @NotNull String rsqlParam, + @NotNull Pageable pageReq); /** * Find {@link Target} based on given ID returns found Target without @@ -390,8 +389,8 @@ public interface TargetManagement { * @return the found {@link Target}s, never {@code null} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) - Page findTargetByInstalledDistributionSet(@NotNull Long distributionSetId, - @NotNull Specification spec, @NotNull Pageable pageable); + Page findTargetByInstalledDistributionSet(@NotNull Long distributionSetId, @NotNull String rsqlParam, + @NotNull Pageable pageable); /** * Retrieves the {@link Target} which have a certain @@ -418,18 +417,6 @@ public interface TargetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Slice findTargetsAll(@NotNull Pageable pageable); - /** - * Retrieves all targets based on the given specification. - * - * @param spec - * the specification for the query - * @param pageable - * pagination parameter - * @return the found {@link Target}s, never {@code null} - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Page findTargetsAll(@NotNull Specification spec, @NotNull Pageable pageable); - /** * Retrieves all targets without details, i.e. NO {@link Target#getTags()} * and {@link Target#getActions()} possible based on @@ -442,7 +429,7 @@ public interface TargetManagement { * @return the found {@link Target}s, never {@code null} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Slice findTargetsAll(@NotNull String targetFilterQuery, @NotNull Pageable pageable); + Page findTargetsAll(@NotNull String targetFilterQuery, @NotNull Pageable pageable); /** * Retrieves all targets without details, i.e. NO {@link Target#getTags()} @@ -599,6 +586,16 @@ public interface TargetManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_CONTROLLER) - List updateTargets(@NotNull Iterable targets); + List updateTargets(@NotNull Collection targets); + + /** + * Generates an empty {@link Target} without persisting it. + * + * @param controllerID + * of the {@link Target} + * + * @return {@link Target} object + */ + Target generateTarget(@NotEmpty String controllerID); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java index d9647e610..9937084eb 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java @@ -142,5 +142,4 @@ public interface TenantConfigurationManagement { @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) T getGlobalConfigurationValue(TenantConfigurationKey configurationKey, Class propertyType); - } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java index 56ade85ff..0eebbced1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java @@ -11,6 +11,12 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -37,7 +43,7 @@ import org.springframework.transaction.annotation.Transactional; * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface ActionRepository extends BaseEntityRepository, JpaSpecificationExecutor { +public interface ActionRepository extends BaseEntityRepository, JpaSpecificationExecutor { /** * Retrieves an Action with all lazy attributes. * @@ -46,7 +52,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * @return the found {@link Action} */ @EntityGraph(value = "Action.all", type = EntityGraphType.LOAD) - Action findById(Long actionId); + JpaAction findById(Long actionId); /** * Retrieves all {@link Action}s which are referring the given @@ -58,7 +64,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the {@link DistributionSet} on which will be filtered * @return the found {@link Action}s */ - Page findByDistributionSet(final Pageable pageable, final DistributionSet ds); + Page findByDistributionSet(final Pageable pageable, final JpaDistributionSet ds); /** * Retrieves all {@link Action}s which are referring the given @@ -70,7 +76,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the target to find assigned actions * @return the found {@link Action}s */ - Slice findByTarget(Pageable pageable, Target target); + Slice findByTarget(Pageable pageable, JpaTarget target); /** * Retrieves all {@link Action}s which are active and referring the given @@ -86,7 +92,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * @return the found {@link Action}s */ @EntityGraph(value = "Action.ds", type = EntityGraphType.LOAD) - List findByTargetAndActiveOrderByIdAsc(final Target target, boolean active); + List findByTargetAndActiveOrderByIdAsc(final JpaTarget target, boolean active); /** * Retrieves latest {@link UpdateAction} for given target and @@ -99,9 +105,9 @@ public interface ActionRepository extends BaseEntityRepository, Jp * @return action if there is one with assigned target and module is part of * assigned {@link DistributionSet}. */ - @Query("Select a from Action a join a.distributionSet ds join ds.modules modul where a.target.controllerId = :target and modul = :module order by a.id desc") + @Query("Select a from JpaAction a join a.distributionSet ds join ds.modules modul where a.target.controllerId = :target and modul = :module order by a.id desc") List findActionByTargetAndSoftwareModule(@Param("target") final String targetId, - @Param("module") SoftwareModule module); + @Param("module") JpaSoftwareModule module); /** * Retrieves all {@link UpdateAction}s which are referring the given @@ -115,9 +121,9 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the {@link DistributionSet} on which will be filtered * @return the found {@link UpdateAction}s */ - @Query("Select a from Action a where a.target = :target and a.distributionSet = :ds order by a.id") - Page findByTargetAndDistributionSet(final Pageable pageable, @Param("target") final Target target, - @Param("ds") DistributionSet ds); + @Query("Select a from JpaAction a where a.target = :target and a.distributionSet = :ds order by a.id") + Page findByTargetAndDistributionSet(final Pageable pageable, @Param("target") final JpaTarget target, + @Param("ds") JpaDistributionSet ds); /** * Retrieves all {@link Action}s of a specific target, without pagination @@ -127,8 +133,8 @@ public interface ActionRepository extends BaseEntityRepository, Jp * to search for * @return a list of actions according to the searched target */ - @Query("Select a from Action a where a.target = :target order by a.id") - List findByTarget(@Param("target") final Target target); + @Query("Select a from JpaAction a where a.target = :target order by a.id") + List findByTarget(@Param("target") final JpaTarget target); /** * Retrieves all {@link Action}s of a specific target and given active flag @@ -143,8 +149,8 @@ public interface ActionRepository extends BaseEntityRepository, Jp * {@code false} for inactive * @return a paged list of actions ordered by action ID */ - @Query("Select a from Action a where a.target = :target and a.active= :active order by a.id") - Page findByActiveAndTarget(Pageable pageable, @Param("target") Target target, + @Query("Select a from JpaAction a where a.target = :target and a.active= :active order by a.id") + Page findByActiveAndTarget(Pageable pageable, @Param("target") JpaTarget target, @Param("active") boolean active); /** @@ -160,8 +166,8 @@ public interface ActionRepository extends BaseEntityRepository, Jp * @return a list of actions ordered by action ID */ @EntityGraph(value = "Action.ds", type = EntityGraphType.LOAD) - @Query("Select a from Action a where a.target = :target and a.active= :active order by a.id") - List findByActiveAndTarget(@Param("target") Target target, @Param("active") boolean active); + @Query("Select a from JpaAction a where a.target = :target and a.active= :active order by a.id") + List findByActiveAndTarget(@Param("target") JpaTarget target, @Param("active") boolean active); /** * Updates all {@link Action} to inactive for all targets with given ID. @@ -174,8 +180,8 @@ public interface ActionRepository extends BaseEntityRepository, Jp */ @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Query("UPDATE Action a SET a.active = false WHERE a IN :keySet AND a.target IN :targetsIds") - void setToInactive(@Param("keySet") List keySet, @Param("targetsIds") List targetsIds); + @Query("UPDATE JpaAction a SET a.active = false WHERE a IN :keySet AND a.target IN :targetsIds") + void setToInactive(@Param("keySet") List keySet, @Param("targetsIds") List targetsIds); /** * Switches the status of actions from one specific status into another, @@ -193,7 +199,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp */ @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Query("UPDATE Action a SET a.status = :statusToSet WHERE a.target IN :targetsIds AND a.active = :active AND a.status = :currentStatus AND a.distributionSet.requiredMigrationStep = false") + @Query("UPDATE JpaAction a SET a.status = :statusToSet WHERE a.target IN :targetsIds AND a.active = :active AND a.status = :currentStatus AND a.distributionSet.requiredMigrationStep = false") void switchStatus(@Param("statusToSet") Action.Status statusToSet, @Param("targetsIds") List targetIds, @Param("active") boolean active, @Param("currentStatus") Action.Status currentStatus); @@ -213,8 +219,8 @@ public interface ActionRepository extends BaseEntityRepository, Jp */ @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Query("UPDATE Action a SET a.status = :statusToSet WHERE a.rollout = :rollout AND a.active = :active AND a.status = :currentStatus") - void switchStatus(@Param("statusToSet") Action.Status statusToSet, @Param("rollout") Rollout rollout, + @Query("UPDATE JpaAction a SET a.status = :statusToSet WHERE a.rollout = :rollout AND a.active = :active AND a.status = :currentStatus") + void switchStatus(@Param("statusToSet") Action.Status statusToSet, @Param("rollout") JpaRollout rollout, @Param("active") boolean active, @Param("currentStatus") Action.Status currentStatus); /** @@ -228,8 +234,8 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the status which the actions should not have * @return the found list of {@link Action}s */ - @Query("SELECT a FROM Action a WHERE a.active = true AND a.distributionSet.requiredMigrationStep = false AND a.target IN ?1 AND a.status != ?2") - List findByActiveAndTargetIdInAndActionStatusNotEqualToAndDistributionSetRequiredMigrationStep( + @Query("SELECT a FROM JpaAction a WHERE a.active = true AND a.distributionSet.requiredMigrationStep = false AND a.target IN ?1 AND a.status != ?2") + List findByActiveAndTargetIdInAndActionStatusNotEqualToAndDistributionSetRequiredMigrationStep( Collection targetIds, Action.Status notStatus); /** @@ -239,15 +245,15 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the target to count the {@link Action}s * @return the count of actions referring to the given target */ - Long countByTarget(Target target); + Long countByTarget(JpaTarget target); @Override @CacheEvict(value = "feedbackReceivedOverTime", allEntries = true) - List save(Iterable entities); + List save(Iterable entities); @Override @CacheEvict(value = "feedbackReceivedOverTime", allEntries = true) - S save(S entity); + S save(S entity); /** * Counts all {@link Action}s referring to the given DistributionSet. @@ -256,7 +262,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * DistributionSet to count the {@link Action}s from * @return the count of actions referring to the given distributionSet */ - Long countByDistributionSet(DistributionSet distributionSet); + Long countByDistributionSet(JpaDistributionSet distributionSet); /** * Counts all {@link Action}s referring to the given rollout. @@ -265,7 +271,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the rollout to count the {@link Action}s from * @return the count of actions referring to the given rollout */ - Long countByRollout(Rollout rollout); + Long countByRollout(JpaRollout rollout); /** * Counts all actions referring to a given rollout and rolloutgroup which @@ -286,8 +292,8 @@ public interface ActionRepository extends BaseEntityRepository, Jp * @return the count of actions referring the rollout and rolloutgroup and * are not in given states */ - Long countByRolloutAndRolloutGroupAndStatusNotAndStatusNotAndStatusNot(Rollout rollout, RolloutGroup rolloutGroup, - Status notStatus1, Status notStatus2, Status notStatus3); + Long countByRolloutAndRolloutGroupAndStatusNotAndStatusNotAndStatusNot(JpaRollout rollout, + JpaRolloutGroup rolloutGroup, Status notStatus1, Status notStatus2, Status notStatus3); /** * Counts all actions referring to a given rollout and rolloutgroup. @@ -298,7 +304,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the rolloutgroup the actions belong to * @return the count of actions referring to a rollout and rolloutgroup */ - Long countByRolloutAndRolloutGroup(Rollout rollout, RolloutGroup rolloutGroup); + Long countByRolloutAndRolloutGroup(JpaRollout rollout, JpaRolloutGroup rolloutGroup); /** * Counts all actions referring to a given rollout, rolloutgroup and status. @@ -329,7 +335,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * @return the actions referring a specific rollout and a specific parent * rolloutgroup in a specific status */ - List findByRolloutAndRolloutGroupParentAndStatus(Rollout rollout, RolloutGroup rolloutGroupParent, + List findByRolloutAndRolloutGroupParentAndStatus(JpaRollout rollout, JpaRolloutGroup rolloutGroupParent, Status actionStatus); /** @@ -341,7 +347,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the status of the actions * @return the actions referring a specific rollout an in a specific status */ - List findByRolloutAndStatus(Rollout rollout, Status actionStatus); + List findByRolloutAndStatus(JpaRollout rollout, Status actionStatus); /** * Get list of objects which has details of status and count of targets in @@ -351,7 +357,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * id of {@link Rollout} * @return list of objects with status and target count */ - @Query("SELECT NEW org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus( a.rollout.id, a.status , COUNT(a.target)) FROM Action a WHERE a.rollout.id IN ?1 GROUP BY a.rollout.id,a.status") + @Query("SELECT NEW org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus( a.rollout.id, a.status , COUNT(a.target)) FROM JpaAction a WHERE a.rollout.id IN ?1 GROUP BY a.rollout.id,a.status") List getStatusCountByRolloutId(List rolloutId); /** @@ -362,7 +368,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * id of {@link Rollout} * @return list of objects with status and target count */ - @Query("SELECT NEW org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus( a.rollout.id, a.status , COUNT(a.target)) FROM Action a WHERE a.rollout.id = ?1 GROUP BY a.rollout.id,a.status") + @Query("SELECT NEW org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus( a.rollout.id, a.status , COUNT(a.target)) FROM JpaAction a WHERE a.rollout.id = ?1 GROUP BY a.rollout.id,a.status") List getStatusCountByRolloutId(Long rolloutId); /** @@ -373,7 +379,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * id of {@link RolloutGroup} * @return list of objects with status and target count */ - @Query("SELECT NEW org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus(a.rolloutGroup.id, a.status , COUNT(a.target)) FROM Action a WHERE a.rolloutGroup.id = ?1 GROUP BY a.rolloutGroup.id, a.status") + @Query("SELECT NEW org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus(a.rolloutGroup.id, a.status , COUNT(a.target)) FROM JpaAction a WHERE a.rolloutGroup.id = ?1 GROUP BY a.rolloutGroup.id, a.status") List getStatusCountByRolloutGroupId(Long rolloutGroupId); /** @@ -384,7 +390,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * list of id of {@link RolloutGroup} * @return list of objects with status and target count */ - @Query("SELECT NEW org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus(a.rolloutGroup.id, a.status , COUNT(a.target)) FROM Action a WHERE a.rolloutGroup.id IN ?1 GROUP BY a.rolloutGroup.id, a.status") + @Query("SELECT NEW org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus(a.rolloutGroup.id, a.status , COUNT(a.target)) FROM JpaAction a WHERE a.rolloutGroup.id IN ?1 GROUP BY a.rolloutGroup.id, a.status") List getStatusCountByRolloutGroupId(List rolloutGroupId); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java index 61d95e15e..7a2c574df 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.repository.jpa; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -25,7 +27,7 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface ActionStatusRepository - extends BaseEntityRepository, JpaSpecificationExecutor { + extends BaseEntityRepository, JpaSpecificationExecutor { /** * Counts {@link ActionStatus} entries of given {@link Action} in @@ -35,7 +37,7 @@ public interface ActionStatusRepository * to count status entries * @return number of actions in repository */ - Long countByAction(Action action); + Long countByAction(JpaAction action); /** * Counts {@link ActionStatus} entries of given {@link Action} with given @@ -47,7 +49,7 @@ public interface ActionStatusRepository * to filter for * @return number of actions in repository */ - Long countByActionAndStatus(Action action, Status status); + Long countByActionAndStatus(JpaAction action, Status status); /** * Retrieves all {@link ActionStatus} entries from repository of given @@ -59,7 +61,7 @@ public interface ActionStatusRepository * of the status entries * @return pages list of {@link ActionStatus} entries */ - Page findByAction(Pageable pageReq, Action action); + Page findByAction(Pageable pageReq, JpaAction action); /** * Finds all status updates for the defined action and target including @@ -74,6 +76,6 @@ public interface ActionStatusRepository * @return Page with found targets */ @EntityGraph(value = "ActionStatus.withMessages", type = EntityGraphType.LOAD) - Page getByAction(Pageable pageReq, Action action); + Page getByAction(Pageable pageReq, JpaAction action); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java index 693827803..92bec68a2 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.io.Serializable; +import org.eclipse.hawkbit.repository.jpa.model.JpaTenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.repository.NoRepositoryBean; @@ -27,7 +28,7 @@ import org.springframework.transaction.annotation.Transactional; */ @NoRepositoryBean @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface BaseEntityRepository +public interface BaseEntityRepository extends PagingAndSortingRepository { /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java index f5123c792..f5d00862b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java @@ -15,10 +15,11 @@ import javax.persistence.EntityManager; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; /** @@ -48,10 +49,10 @@ public final class DeploymentHelper { * * @return updated target */ - static Target updateTargetInfo(@NotNull final Target target, @NotNull final TargetUpdateStatus status, + static JpaTarget updateTargetInfo(@NotNull final JpaTarget target, @NotNull final TargetUpdateStatus status, final boolean setInstalledDate, final TargetInfoRepository targetInfoRepository, final EntityManager entityManager) { - final TargetInfo ts = target.getTargetInfo(); + final JpaTargetInfo ts = (JpaTargetInfo) target.getTargetInfo(); ts.setUpdateStatus(status); if (setInstalledDate) { @@ -77,7 +78,7 @@ public final class DeploymentHelper { * @param targetInfoRepository * for the operation */ - static void successCancellation(final Action action, final ActionRepository actionRepository, + static void successCancellation(final JpaAction action, final ActionRepository actionRepository, final TargetManagement targetManagement, final TargetInfoRepository targetInfoRepository, final EntityManager entityManager) { @@ -85,7 +86,7 @@ public final class DeploymentHelper { action.setActive(false); action.setStatus(Status.CANCELED); - final Target target = action.getTarget(); + final JpaTarget target = (JpaTarget) action.getTarget(); final List nextActiveActions = actionRepository.findByTargetAndActiveOrderByIdAsc(target, true).stream() .filter(a -> !a.getId().equals(action.getId())).collect(Collectors.toList()); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java index 68cd380e5..7b8b1b20f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java @@ -8,8 +8,9 @@ */ package org.eclipse.hawkbit.repository.jpa; +import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; -import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.transaction.annotation.Isolation; @@ -17,13 +18,10 @@ import org.springframework.transaction.annotation.Transactional; /** * {@link DistributionSetMetadata} repository. - * - * - * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface DistributionSetMetadataRepository - extends PagingAndSortingRepository, - JpaSpecificationExecutor { + extends PagingAndSortingRepository, + JpaSpecificationExecutor { } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java index c7ab44145..1ab6cbe08 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java @@ -11,10 +11,12 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; import java.util.List; -import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Tag; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -30,7 +32,7 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface DistributionSetRepository - extends BaseEntityRepository, JpaSpecificationExecutor { + extends BaseEntityRepository, JpaSpecificationExecutor { /** * Finds {@link DistributionSet}s by assigned {@link Tag}. @@ -39,8 +41,8 @@ public interface DistributionSetRepository * to be found * @return list of found {@link DistributionSet}s */ - @Query(value = "Select Distinct ds from DistributionSet ds join ds.tags dst where dst = :tag") - List findByTag(@Param("tag") final DistributionSetTag tag); + @Query(value = "Select Distinct ds from JpaDistributionSet ds join ds.tags dst where dst = :tag") + List findByTag(@Param("tag") final JpaDistributionSetTag tag); /** * deletes the {@link DistributionSet}s with the given IDs. @@ -50,9 +52,12 @@ public interface DistributionSetRepository */ @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Query("update DistributionSet d set d.deleted = 1 where d.id in :ids") + @Query("update JpaDistributionSet d set d.deleted = 1 where d.id in :ids") void deleteDistributionSet(@Param("ids") Long... ids); + @Override + List findAll(Iterable ids); + /** * deletes {@link DistributionSet}s by the given IDs. * @@ -63,7 +68,7 @@ public interface DistributionSetRepository @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477 - @Query("DELETE FROM DistributionSet d WHERE d.id IN ?1") + @Query("DELETE FROM JpaDistributionSet d WHERE d.id IN ?1") int deleteByIdIn(Collection ids); /** @@ -74,7 +79,7 @@ public interface DistributionSetRepository * to search for * @return {@link List} of found {@link DistributionSet}s */ - List findByModules(SoftwareModule module); + List findByModules(JpaSoftwareModule module); /** * Finds {@link DistributionSet}s based on given ID if they are not assigned @@ -84,7 +89,7 @@ public interface DistributionSetRepository * to search for * @return */ - @Query("select ac.distributionSet.id from Action ac where ac.distributionSet.id in :ids") + @Query("select ac.distributionSet.id from JpaAction ac where ac.distributionSet.id in :ids") List findAssignedDistributionSetsById(@Param("ids") Long... ids); /** @@ -98,7 +103,7 @@ public interface DistributionSetRepository * @see org.springframework.data.repository.CrudRepository#save(java.lang.Iterable) */ @Override - List save(Iterable entities); + List save(Iterable entities); /** * Finds the distribution set for a specific action. @@ -107,8 +112,8 @@ public interface DistributionSetRepository * the action associated with the distribution set to find * @return the distribution set associated with the given action */ - @Query("select DISTINCT d from DistributionSet d join fetch d.modules m join d.actions a where a = :action") - DistributionSet findByAction(@Param("action") Action action); + @Query("select DISTINCT d from JpaDistributionSet d join fetch d.modules m join d.actions a where a = :action") + JpaDistributionSet findByAction(@Param("action") JpaAction action); /** * Counts {@link DistributionSet} instances of given type in the repository. @@ -117,7 +122,7 @@ public interface DistributionSetRepository * to search for * @return number of found {@link DistributionSet}s */ - long countByType(DistributionSetType type); + long countByType(JpaDistributionSetType type); /** * Counts {@link DistributionSet} with given diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java index 9e55a305b..d13316b91 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.TargetTag; @@ -24,7 +25,7 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface DistributionSetTagRepository - extends BaseEntityRepository, JpaSpecificationExecutor { + extends BaseEntityRepository, JpaSpecificationExecutor { /** * deletes the {@link DistributionSet} with the given name. * @@ -43,7 +44,7 @@ public interface DistributionSetTagRepository * to filter on * @return the {@link DistributionSetTag} if found, otherwise null */ - DistributionSetTag findByNameEquals(final String tagName); + JpaDistributionSetTag findByNameEquals(final String tagName); /** * Returns all instances of the type. @@ -51,8 +52,8 @@ public interface DistributionSetTagRepository * @return all entities */ @Override - List findAll(); + List findAll(); @Override - List save(Iterable entities); + List save(Iterable entities); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java index 7c0d39b58..82754d7f8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java @@ -8,8 +8,9 @@ */ package org.eclipse.hawkbit.repository.jpa; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -23,7 +24,7 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface DistributionSetTypeRepository - extends BaseEntityRepository, JpaSpecificationExecutor { + extends BaseEntityRepository, JpaSpecificationExecutor { /** * @@ -34,7 +35,7 @@ public interface DistributionSetTypeRepository * false if undeleted ones * @return list of found {@link DistributionSetType}s */ - Page findByDeleted(Pageable pageable, boolean isDeleted); + Page findByDeleted(Pageable pageable, boolean isDeleted); /** * @param isDeleted @@ -54,5 +55,5 @@ public interface DistributionSetTypeRepository * @return the number of {@link DistributionSetType}s in the repository * assigned to the given software module type */ - Long countByElementsSmType(SoftwareModuleType softwareModuleType); + Long countByElementsSmType(JpaSoftwareModuleType softwareModuleType); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java index ca124f81c..93b861092 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java @@ -14,7 +14,7 @@ import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; -import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; @@ -40,7 +40,7 @@ public class EclipseLinkTargetInfoRepository implements TargetInfoRepository { @Transactional(isolation = Isolation.READ_UNCOMMITTED) public void setTargetUpdateStatus(final TargetUpdateStatus status, final List targets) { final Query query = entityManager.createQuery( - "update TargetInfo ti set ti.updateStatus = :status where ti.targetId in :targets and ti.updateStatus != :status"); + "update JpaTargetInfo ti set ti.updateStatus = :status where ti.targetId in :targets and ti.updateStatus != :status"); query.setParameter("targets", targets); query.setParameter("status", status); @@ -50,7 +50,7 @@ public class EclipseLinkTargetInfoRepository implements TargetInfoRepository { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) - public S save(final S entity) { + public S save(final S entity) { if (entity.isNew()) { entityManager.persist(entity); @@ -66,7 +66,7 @@ public class EclipseLinkTargetInfoRepository implements TargetInfoRepository { @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) public void deleteByTargetIdIn(final Collection targetIDs) { final javax.persistence.Query query = entityManager - .createQuery("DELETE FROM TargetInfo ti where ti.targetId IN :target"); + .createQuery("DELETE FROM JpaTargetInfo ti where ti.targetId IN :target"); query.setParameter("target", targetIDs); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java index 4a29afc4b..039c4917e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa; +import org.eclipse.hawkbit.repository.jpa.model.JpaExternalArtifactProvider; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; @@ -17,6 +18,6 @@ import org.springframework.transaction.annotation.Transactional; * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface ExternalArtifactProviderRepository extends BaseEntityRepository { +public interface ExternalArtifactProviderRepository extends BaseEntityRepository { } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java index dfc8105dd..5845afbee 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa; +import org.eclipse.hawkbit.repository.jpa.model.JpaExternalArtifact; import org.eclipse.hawkbit.repository.model.ExternalArtifact; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -19,7 +20,7 @@ import org.springframework.transaction.annotation.Transactional; * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface ExternalArtifactRepository extends BaseEntityRepository { +public interface ExternalArtifactRepository extends BaseEntityRepository { /** * Searches for external artifact for a base software module. @@ -31,6 +32,6 @@ public interface ExternalArtifactRepository extends BaseEntityRepository */ - Page findBySoftwareModuleId(Pageable pageReq, final Long swId); + Page findBySoftwareModuleId(Pageable pageReq, final Long swId); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java index 7bae73a8b..93e0afc00 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java @@ -24,12 +24,16 @@ import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.GridFSDBFileNotFoundException; import org.eclipse.hawkbit.repository.exception.InvalidMD5HashException; import org.eclipse.hawkbit.repository.exception.InvalidSHA1HashException; +import org.eclipse.hawkbit.repository.jpa.model.JpaExternalArtifact; +import org.eclipse.hawkbit.repository.jpa.model.JpaExternalArtifactProvider; +import org.eclipse.hawkbit.repository.jpa.model.JpaLocalArtifact; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.specifications.SoftwareModuleSpecification; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.ExternalArtifact; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.specifications.SoftwareModuleSpecification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -88,7 +92,7 @@ public class JpaArtifactManagement implements ArtifactManagement { final String urlSuffix, final Long moduleId) { final SoftwareModule module = getModuleAndThrowExceptionIfThatFails(moduleId); - return externalArtifactRepository.save(new ExternalArtifact(externalRepository, urlSuffix, module)); + return externalArtifactRepository.save(new JpaExternalArtifact(externalRepository, urlSuffix, module)); } @Override @@ -97,7 +101,7 @@ public class JpaArtifactManagement implements ArtifactManagement { public ExternalArtifactProvider createExternalArtifactProvider(final String name, final String description, final String basePath, final String defaultUrlSuffix) { return externalArtifactProviderRepository - .save(new ExternalArtifactProvider(name, description, basePath, defaultUrlSuffix)); + .save(new JpaExternalArtifactProvider(name, description, basePath, defaultUrlSuffix)); } @Override @@ -142,7 +146,7 @@ public class JpaArtifactManagement implements ArtifactManagement { } existing.getSoftwareModule().removeArtifact(existing); - softwareModuleRepository.save(existing.getSoftwareModule()); + softwareModuleRepository.save((JpaSoftwareModule) existing.getSoftwareModule()); externalArtifactRepository.delete(id); } @@ -156,7 +160,7 @@ public class JpaArtifactManagement implements ArtifactManagement { boolean artifactIsOnlyUsedByOneSoftwareModule = true; for (final LocalArtifact lArtifact : localArtifactRepository - .findByGridFsFileName(existing.getGridFsFileName())) { + .findByGridFsFileName(((JpaLocalArtifact) existing).getGridFsFileName())) { if (!lArtifact.getSoftwareModule().isDeleted() && Long.compare(lArtifact.getSoftwareModule().getId(), existing.getSoftwareModule().getId()) != 0) { artifactIsOnlyUsedByOneSoftwareModule = false; @@ -166,8 +170,8 @@ public class JpaArtifactManagement implements ArtifactManagement { if (artifactIsOnlyUsedByOneSoftwareModule) { try { - LOG.debug("deleting artifact from repository {}", existing.getGridFsFileName()); - artifactRepository.deleteBySha1(existing.getGridFsFileName()); + LOG.debug("deleting artifact from repository {}", ((JpaLocalArtifact) existing).getGridFsFileName()); + artifactRepository.deleteBySha1(((JpaLocalArtifact) existing).getGridFsFileName()); } catch (final ArtifactStoreException e) { throw new ArtifactDeleteFailedException(e); } @@ -178,7 +182,7 @@ public class JpaArtifactManagement implements ArtifactManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public void deleteLocalArtifact(final Long id) { - final LocalArtifact existing = localArtifactRepository.findOne(id); + final JpaLocalArtifact existing = localArtifactRepository.findOne(id); if (null == existing) { return; @@ -187,7 +191,7 @@ public class JpaArtifactManagement implements ArtifactManagement { deleteLocalArtifact(existing); existing.getSoftwareModule().removeArtifact(existing); - softwareModuleRepository.save(existing.getSoftwareModule()); + softwareModuleRepository.save((JpaSoftwareModule) existing.getSoftwareModule()); localArtifactRepository.delete(id); } @@ -219,7 +223,7 @@ public class JpaArtifactManagement implements ArtifactManagement { @Override public SoftwareModule findSoftwareModuleById(final Long id) { - final Specification spec = SoftwareModuleSpecification.byId(id); + final Specification spec = SoftwareModuleSpecification.byId(id); return softwareModuleRepository.findOne(spec); } @@ -246,9 +250,10 @@ public class JpaArtifactManagement implements ArtifactManagement { @Override public DbArtifact loadLocalArtifactBinary(final LocalArtifact artifact) { - final DbArtifact result = artifactRepository.getArtifactBySha1(artifact.getGridFsFileName()); + final DbArtifact result = artifactRepository + .getArtifactBySha1(((JpaLocalArtifact) artifact).getGridFsFileName()); if (result == null) { - throw new GridFSDBFileNotFoundException(artifact.getGridFsFileName()); + throw new GridFSDBFileNotFoundException(((JpaLocalArtifact) artifact).getGridFsFileName()); } return result; @@ -256,9 +261,9 @@ public class JpaArtifactManagement implements ArtifactManagement { private LocalArtifact storeArtifactMetadata(final SoftwareModule softwareModule, final String providedFilename, final DbArtifact result, final LocalArtifact existing) { - LocalArtifact artifact = existing; + JpaLocalArtifact artifact = (JpaLocalArtifact) existing; if (existing == null) { - artifact = new LocalArtifact(result.getHashes().getSha1(), providedFilename, softwareModule); + artifact = new JpaLocalArtifact(result.getHashes().getSha1(), providedFilename, softwareModule); } artifact.setMd5Hash(result.getHashes().getMd5()); artifact.setSha1Hash(result.getHashes().getSha1()); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index a7706440d..c7a229bf0 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.net.URI; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -24,19 +25,25 @@ 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.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus_; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; +import org.eclipse.hawkbit.repository.jpa.specifications.ActionSpecifications; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.ActionStatus_; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.model.Target_; import org.eclipse.hawkbit.repository.model.TenantConfiguration; -import org.eclipse.hawkbit.repository.specifications.ActionSpecifications; import org.eclipse.hawkbit.security.HawkbitSecurityProperties; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.slf4j.Logger; @@ -46,6 +53,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -116,7 +124,8 @@ public class JpaControllerManagement implements ControllerManagement { @Override public Action getActionForDownloadByTargetAndSoftwareModule(final String controllerId, final SoftwareModule module) { - final List action = actionRepository.findActionByTargetAndSoftwareModule(controllerId, module); + final List action = actionRepository.findActionByTargetAndSoftwareModule(controllerId, + (JpaSoftwareModule) module); if (action.isEmpty() || action.get(0).isCancelingOrCanceled()) { throw new EntityNotFoundException( @@ -137,12 +146,12 @@ public class JpaControllerManagement implements ControllerManagement { @Override public List findActionByTargetAndActive(final Target target) { - return actionRepository.findByTargetAndActiveOrderByIdAsc(target, true); + return actionRepository.findByTargetAndActiveOrderByIdAsc((JpaTarget) target, true); } @Override public List findSoftwareModulesByDistributionSet(final DistributionSet distributionSet) { - return softwareModuleRepository.findByAssignedTo(distributionSet); + return new ArrayList<>(softwareModuleRepository.findByAssignedTo((JpaDistributionSet) distributionSet)); } @Override @@ -154,13 +163,13 @@ public class JpaControllerManagement implements ControllerManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public Target findOrRegisterTargetIfItDoesNotexist(final String controllerId, final URI address) { - final Specification spec = (targetRoot, query, cb) -> cb.equal(targetRoot.get(Target_.controllerId), - controllerId); + final Specification spec = (targetRoot, query, cb) -> cb + .equal(targetRoot.get(JpaTarget_.controllerId), controllerId); - Target target = targetRepository.findOne(spec); + JpaTarget target = targetRepository.findOne(spec); if (target == null) { - target = new Target(controllerId); + target = new JpaTarget(controllerId); target.setDescription("Plug and Play target: " + controllerId); target.setName(controllerId); return targetManagement.createTarget(target, TargetUpdateStatus.REGISTERED, System.currentTimeMillis(), @@ -175,7 +184,7 @@ public class JpaControllerManagement implements ControllerManagement { @Transactional(isolation = Isolation.READ_UNCOMMITTED) public TargetInfo updateTargetStatus(final TargetInfo targetInfo, final TargetUpdateStatus status, final Long lastTargetQuery, final URI address) { - final TargetInfo mtargetInfo = entityManager.merge(targetInfo); + final JpaTargetInfo mtargetInfo = (JpaTargetInfo) entityManager.merge(targetInfo); if (status != null) { mtargetInfo.setUpdateStatus(status); } @@ -192,7 +201,7 @@ public class JpaControllerManagement implements ControllerManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public Action addCancelActionStatus(final ActionStatus actionStatus) { - final Action action = actionStatus.getAction(); + final JpaAction action = (JpaAction) actionStatus.getAction(); checkForToManyStatusEntries(action); action.setStatus(actionStatus.getStatus()); @@ -217,7 +226,7 @@ public class JpaControllerManagement implements ControllerManagement { default: } actionRepository.save(action); - actionStatusRepository.save(actionStatus); + actionStatusRepository.save((JpaActionStatus) actionStatus); return action; } @@ -226,14 +235,14 @@ public class JpaControllerManagement implements ControllerManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public Action addUpdateActionStatus(@NotNull final ActionStatus actionStatus) { - final Action action = actionStatus.getAction(); + final JpaAction action = (JpaAction) actionStatus.getAction(); if (!action.isActive()) { LOG.debug("Update of actionStatus {} for action {} not possible since action not active anymore.", actionStatus.getId(), action.getId()); return action; } - return handleAddUpdateActionStatus(actionStatus, action); + return handleAddUpdateActionStatus((JpaActionStatus) actionStatus, action); } /** @@ -243,11 +252,11 @@ public class JpaControllerManagement implements ControllerManagement { * @param action * @return */ - private Action handleAddUpdateActionStatus(final ActionStatus actionStatus, final Action action) { + private Action handleAddUpdateActionStatus(final JpaActionStatus actionStatus, final JpaAction action) { LOG.debug("addUpdateActionStatus for action {}", action.getId()); - final Action mergedAction = entityManager.merge(action); - Target mergedTarget = mergedAction.getTarget(); + final JpaAction mergedAction = entityManager.merge(action); + JpaTarget mergedTarget = (JpaTarget) mergedAction.getTarget(); // check for a potential DOS attack checkForToManyStatusEntries(action); @@ -284,7 +293,7 @@ public class JpaControllerManagement implements ControllerManagement { targetManagement.updateTarget(mergedTarget); } - private void checkForToManyStatusEntries(final Action action) { + private void checkForToManyStatusEntries(final JpaAction action) { if (securityProperties.getDos().getMaxStatusEntriesPerAction() > 0) { final Long statusCount = actionStatusRepository.countByAction(action); @@ -299,11 +308,11 @@ public class JpaControllerManagement implements ControllerManagement { } } - private void handleFinishedAndStoreInTargetStatus(final Target target, final Action action) { + private void handleFinishedAndStoreInTargetStatus(final JpaTarget target, final JpaAction action) { action.setActive(false); action.setStatus(Status.FINISHED); - final TargetInfo targetInfo = target.getTargetInfo(); - final DistributionSet ds = entityManager.merge(action.getDistributionSet()); + final JpaTargetInfo targetInfo = (JpaTargetInfo) target.getTargetInfo(); + final JpaDistributionSet ds = (JpaDistributionSet) entityManager.merge(action.getDistributionSet()); targetInfo.setInstalledDistributionSet(ds); if (target.getAssignedDistributionSet() != null && targetInfo.getInstalledDistributionSet() != null && target .getAssignedDistributionSet().getId().equals(targetInfo.getInstalledDistributionSet().getId())) { @@ -321,15 +330,16 @@ public class JpaControllerManagement implements ControllerManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public Target updateControllerAttributes(final String controllerId, final Map data) { - final Target target = targetRepository.findByControllerId(controllerId); + final JpaTarget target = targetRepository.findByControllerId(controllerId); if (target == null) { throw new EntityNotFoundException(controllerId); } - target.getTargetInfo().getControllerAttributes().putAll(data); + final JpaTargetInfo targetInfo = (JpaTargetInfo) target.getTargetInfo(); + targetInfo.getControllerAttributes().putAll(data); - if (target.getTargetInfo().getControllerAttributes().size() > securityProperties.getDos() + if (targetInfo.getControllerAttributes().size() > securityProperties.getDos() .getMaxAttributeEntriesPerTarget()) { LOG_DOS.info("Target tries to insert more than the allowed number of entries ({}). DOS attack anticipated!", securityProperties.getDos().getMaxAttributeEntriesPerTarget()); @@ -337,8 +347,8 @@ public class JpaControllerManagement implements ControllerManagement { String.valueOf(securityProperties.getDos().getMaxAttributeEntriesPerTarget())); } - target.getTargetInfo().setLastTargetQuery(System.currentTimeMillis()); - target.getTargetInfo().setRequestControllerAttributes(false); + targetInfo.setLastTargetQuery(System.currentTimeMillis()); + targetInfo.setRequestControllerAttributes(false); return targetRepository.save(target); } @@ -346,7 +356,7 @@ public class JpaControllerManagement implements ControllerManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public Action registerRetrieved(final Action action, final String message) { - return handleRegisterRetrieved(action, message); + return handleRegisterRetrieved((JpaAction) action, message); } /** @@ -360,7 +370,7 @@ public class JpaControllerManagement implements ControllerManagement { * @return the updated action in case the status has been changed to * {@link Status#RETRIEVED} */ - private Action handleRegisterRetrieved(final Action action, final String message) { + private Action handleRegisterRetrieved(final JpaAction action, final String message) { // do a manual query with CriteriaBuilder to avoid unnecessary field // queries and an extra // count query made by spring-data when using pageable requests, we @@ -369,11 +379,11 @@ public class JpaControllerManagement implements ControllerManagement { // or not. final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery queryActionStatus = cb.createQuery(Object[].class); - final Root actionStatusRoot = queryActionStatus.from(ActionStatus.class); + final Root actionStatusRoot = queryActionStatus.from(JpaActionStatus.class); final CriteriaQuery query = queryActionStatus - .multiselect(actionStatusRoot.get(ActionStatus_.id), actionStatusRoot.get(ActionStatus_.status)) - .where(cb.equal(actionStatusRoot.get(ActionStatus_.action), action)) - .orderBy(cb.desc(actionStatusRoot.get(ActionStatus_.id))); + .multiselect(actionStatusRoot.get(JpaActionStatus_.id), actionStatusRoot.get(JpaActionStatus_.status)) + .where(cb.equal(actionStatusRoot.get(JpaActionStatus_.action), action)) + .orderBy(cb.desc(actionStatusRoot.get(JpaActionStatus_.id))); final List resultList = entityManager.createQuery(query).setFirstResult(0).setMaxResults(1) .getResultList(); @@ -387,14 +397,14 @@ public class JpaControllerManagement implements ControllerManagement { if (resultList.isEmpty() || resultList.get(0)[1] != Status.RETRIEVED) { // document that the status has been retrieved actionStatusRepository - .save(new ActionStatus(action, Status.RETRIEVED, System.currentTimeMillis(), message)); + .save(new JpaActionStatus(action, Status.RETRIEVED, System.currentTimeMillis(), message)); // don't change the action status itself in case the action is in // canceling state otherwise // we modify the action status and the controller won't get the // cancel job anymore. if (!action.isCancelingOrCanceled()) { - final Action actionMerge = entityManager.merge(action); + final JpaAction actionMerge = entityManager.merge(action); actionMerge.setStatus(Status.RETRIEVED); return actionRepository.save(actionMerge); } @@ -406,7 +416,7 @@ public class JpaControllerManagement implements ControllerManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public void addInformationalActionStatus(final ActionStatus statusMessage) { - actionStatusRepository.save(statusMessage); + actionStatusRepository.save((JpaActionStatus) statusMessage); } @Override @@ -421,4 +431,10 @@ public class JpaControllerManagement implements ControllerManagement { public TargetInfo updateLastTargetQuery(final TargetInfo target, final URI address) { return updateTargetStatus(target, null, System.currentTimeMillis(), address); } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public ActionStatus generateActionStatus() { + return new JpaActionStatus(); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index 0c5df3b3f..3dea0e549 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -32,6 +33,7 @@ import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.TargetManagement; @@ -39,24 +41,32 @@ import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.ForceQuitActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetException; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction_; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout_; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; +import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.ActionWithStatusCount; -import org.eclipse.hawkbit.repository.model.Action_; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.DistributionSet_; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.Rollout_; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.specifications.TargetSpecifications; +import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.hibernate.validator.constraints.NotEmpty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,12 +74,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.data.domain.AuditorAware; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -126,7 +138,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { public DistributionSetAssignmentResult assignDistributionSet(final DistributionSet pset, final List targets) { - return assignDistributionSetByTargetId(pset, + return assignDistributionSetByTargetId((JpaDistributionSet) pset, targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), ActionType.FORCED, Action.NO_FORCE_TIME); @@ -159,7 +171,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, final Collection targets) { - final DistributionSet set = distributoinSetRepository.findOne(dsID); + final JpaDistributionSet set = distributoinSetRepository.findOne(dsID); if (set == null) { throw new EntityNotFoundException( String.format("no %s with id %d found", DistributionSet.class.getSimpleName(), dsID)); @@ -174,13 +186,13 @@ public class JpaDeploymentManagement implements DeploymentManagement { @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, final Collection targets, final Rollout rollout, final RolloutGroup rolloutGroup) { - final DistributionSet set = distributoinSetRepository.findOne(dsID); + final JpaDistributionSet set = distributoinSetRepository.findOne(dsID); if (set == null) { throw new EntityNotFoundException( String.format("no %s with id %d found", DistributionSet.class.getSimpleName(), dsID)); } - return assignDistributionSetToTargets(set, targets, rollout, rolloutGroup); + return assignDistributionSetToTargets(set, targets, (JpaRollout) rollout, (JpaRolloutGroup) rolloutGroup); } /** @@ -201,9 +213,9 @@ public class JpaDeploymentManagement implements DeploymentManagement { * {@link SoftwareModuleType} are not assigned as define by the * {@link DistributionSetType}. */ - private DistributionSetAssignmentResult assignDistributionSetToTargets(@NotNull final DistributionSet set, - final Collection targetsWithActionType, final Rollout rollout, - final RolloutGroup rolloutGroup) { + private DistributionSetAssignmentResult assignDistributionSetToTargets(@NotNull final JpaDistributionSet set, + final Collection targetsWithActionType, final JpaRollout rollout, + final JpaRolloutGroup rolloutGroup) { if (!set.isComplete()) { throw new IncompleteDistributionSetException( @@ -223,7 +235,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { // maximum 1000 elements, so we need to split the entries here and // execute multiple statements we take the target only into account if // the requested operation is no duplicate of a previous one - final List targets = Lists.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream() + final List targets = Lists.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream() .map(ids -> targetRepository .findAll(TargetSpecifications.hasControllerIdAndAssignedDistributionSetIdNot(ids, set.getId()))) .flatMap(t -> t.stream()).collect(Collectors.toList()); @@ -262,7 +274,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { targetIds.forEach(tIds -> targetRepository.setAssignedDistributionSet(set, System.currentTimeMillis(), currentUser, tIds)); targetIds.forEach(tIds -> targetInfoRepository.setTargetUpdateStatus(TargetUpdateStatus.PENDING, tIds)); - final Map targetIdsToActions = actionRepository + final Map targetIdsToActions = actionRepository .save(targets.stream().map(t -> createTargetAction(targetsWithActionMap, t, set, rollout, rolloutGroup)) .collect(Collectors.toList())) .stream().collect(Collectors.toMap(a -> a.getTarget().getControllerId(), Function.identity())); @@ -272,7 +284,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { // of the action itself and with this action status we have a nicer // action history. targetIdsToActions.values().forEach(action -> { - final ActionStatus actionStatus = new ActionStatus(); + final JpaActionStatus actionStatus = new JpaActionStatus(); actionStatus.setAction(action); actionStatus.setOccurredAt(action.getCreatedAt()); actionStatus.setStatus(Status.RUNNING); @@ -289,7 +301,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { LOG.debug("assignDistribution({}) finished {}", set, result); - final List softwareModules = softwareModuleRepository.findByAssignedTo(set); + final List softwareModules = softwareModuleRepository.findByAssignedTo(set); // detaching as it is not necessary to persist the set itself entityManager.detach(set); @@ -299,16 +311,17 @@ public class JpaDeploymentManagement implements DeploymentManagement { return result; } - private void sendDistributionSetAssignmentEvent(final List targets, final Set targetIdsCancellList, - final Map targetIdsToActions, final List softwareModules) { + private void sendDistributionSetAssignmentEvent(final List targets, final Set targetIdsCancellList, + final Map targetIdsToActions, final List softwareModules) { targets.stream().filter(t -> !!!targetIdsCancellList.contains(t.getId())) .forEach(t -> assignDistributionSetEvent(t, targetIdsToActions.get(t.getControllerId()).getId(), softwareModules)); } - private static Action createTargetAction(final Map targetsWithActionMap, - final Target target, final DistributionSet set, final Rollout rollout, final RolloutGroup rolloutGroup) { - final Action actionForTarget = new Action(); + private static JpaAction createTargetAction(final Map targetsWithActionMap, + final JpaTarget target, final JpaDistributionSet set, final JpaRollout rollout, + final JpaRolloutGroup rolloutGroup) { + final JpaAction actionForTarget = new JpaAction(); final TargetWithActionType targetWithActionType = targetsWithActionMap.get(target.getControllerId()); actionForTarget.setActionType(targetWithActionType.getActionType()); actionForTarget.setForcedTime(targetWithActionType.getForceTime()); @@ -332,9 +345,12 @@ public class JpaDeploymentManagement implements DeploymentManagement { * @param softwareModules * the software modules which have been assigned */ - private void assignDistributionSetEvent(final Target target, final Long actionId, - final List softwareModules) { - target.getTargetInfo().setUpdateStatus(TargetUpdateStatus.PENDING); + private void assignDistributionSetEvent(final JpaTarget target, final Long actionId, + final List modules) { + ((JpaTargetInfo) target.getTargetInfo()).setUpdateStatus(TargetUpdateStatus.PENDING); + + @SuppressWarnings({ "unchecked", "rawtypes" }) + final Collection softwareModules = (Collection) modules; afterCommit.afterCommit(() -> { eventBus.post(new TargetInfoUpdateEvent(target.getTargetInfo())); eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(), @@ -357,14 +373,14 @@ public class JpaDeploymentManagement implements DeploymentManagement { // Figure out if there are potential target/action combinations that // need to be considered // for cancelation - final List activeActions = actionRepository + final List activeActions = actionRepository .findByActiveAndTargetIdInAndActionStatusNotEqualToAndDistributionSetRequiredMigrationStep(targetsIds, Action.Status.CANCELING); activeActions.forEach(action -> { action.setStatus(Status.CANCELING); // document that the status has been retrieved - actionStatusRepository.save(new ActionStatus(action, Status.CANCELING, System.currentTimeMillis(), + actionStatusRepository.save(new JpaActionStatus(action, Status.CANCELING, System.currentTimeMillis(), "manual cancelation requested")); cancelAssignDistributionSetEvent(action.getTarget(), action.getId()); @@ -378,7 +394,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { } - private DistributionSetAssignmentResult assignDistributionSetByTargetId(@NotNull final DistributionSet set, + private DistributionSetAssignmentResult assignDistributionSetByTargetId(@NotNull final JpaDistributionSet set, @NotEmpty final List tIDs, final ActionType actionType, final long forcedTime) { return assignDistributionSetToTargets(set, tIDs.stream() @@ -394,14 +410,14 @@ public class JpaDeploymentManagement implements DeploymentManagement { if (action.isCancelingOrCanceled()) { throw new CancelActionNotAllowedException("Actions in canceling or canceled state cannot be canceled"); } - final Action myAction = entityManager.merge(action); + final JpaAction myAction = (JpaAction) entityManager.merge(action); if (myAction.isActive()) { LOG.debug("action ({}) was still active. Change to {}.", action, Status.CANCELING); myAction.setStatus(Status.CANCELING); // document that the status has been retrieved - actionStatusRepository.save(new ActionStatus(myAction, Status.CANCELING, System.currentTimeMillis(), + actionStatusRepository.save(new JpaActionStatus(myAction, Status.CANCELING, System.currentTimeMillis(), "manual cancelation requested")); final Action saveAction = actionRepository.save(myAction); cancelAssignDistributionSetEvent(target, myAction.getId()); @@ -431,7 +447,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Modifying @Transactional(isolation = Isolation.READ_COMMITTED) public Action forceQuitAction(final Action action) { - final Action mergedAction = entityManager.merge(action); + final JpaAction mergedAction = (JpaAction) entityManager.merge(action); if (!mergedAction.isCancelingOrCanceled()) { throw new ForceQuitActionNotAllowedException( @@ -446,7 +462,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { LOG.warn("action ({}) was still activ and has been force quite.", action); // document that the status has been retrieved - actionStatusRepository.save(new ActionStatus(mergedAction, Status.CANCELED, System.currentTimeMillis(), + actionStatusRepository.save(new JpaActionStatus(mergedAction, Status.CANCELED, System.currentTimeMillis(), "A force quit has been performed.")); DeploymentHelper.successCancellation(mergedAction, actionRepository, targetManagement, targetInfoRepository, @@ -468,7 +484,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { final List targetIds = targets.stream().map(t -> t.getId()).collect(Collectors.toList()); actionRepository.switchStatus(Action.Status.CANCELED, targetIds, false, Action.Status.SCHEDULED); targets.forEach(target -> { - final Action action = new Action(); + final JpaAction action = new JpaAction(); action.setTarget(target); action.setActive(false); action.setDistributionSet(distributionSet); @@ -486,8 +502,8 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Transactional(isolation = Isolation.READ_COMMITTED) public Action startScheduledAction(final Action action) { - final Action mergedAction = entityManager.merge(action); - final Target mergedTarget = entityManager.merge(action.getTarget()); + final JpaAction mergedAction = (JpaAction) entityManager.merge(action); + final JpaTarget mergedTarget = (JpaTarget) entityManager.merge(action.getTarget()); // check if we need to override running update actions final Set overrideObsoleteUpdateActions = overrideObsoleteUpdateActions( @@ -509,14 +525,14 @@ public class JpaDeploymentManagement implements DeploymentManagement { mergedAction.setStatus(Status.RUNNING); final Action savedAction = actionRepository.save(mergedAction); - final ActionStatus actionStatus = new ActionStatus(); + final JpaActionStatus actionStatus = new JpaActionStatus(); actionStatus.setAction(action); actionStatus.setOccurredAt(action.getCreatedAt()); actionStatus.setStatus(Status.RUNNING); actionStatusRepository.save(actionStatus); mergedTarget.setAssignedDistributionSet(action.getDistributionSet()); - final TargetInfo targetInfo = mergedTarget.getTargetInfo(); + final JpaTargetInfo targetInfo = (JpaTargetInfo) mergedTarget.getTargetInfo(); targetInfo.setUpdateStatus(TargetUpdateStatus.PENDING); targetRepository.save(mergedTarget); targetInfoRepository.save(targetInfo); @@ -524,11 +540,11 @@ public class JpaDeploymentManagement implements DeploymentManagement { // in case we canceled an action before for this target, then don't fire // assignment event if (!overrideObsoleteUpdateActions.contains(savedAction.getId())) { - final List softwareModules = softwareModuleRepository - .findByAssignedTo(action.getDistributionSet()); + final List softwareModules = softwareModuleRepository + .findByAssignedTo((JpaDistributionSet) action.getDistributionSet()); // send distribution set assignment event - assignDistributionSetEvent(mergedAction.getTarget(), mergedAction.getId(), softwareModules); + assignDistributionSetEvent((JpaTarget) mergedAction.getTarget(), mergedAction.getId(), softwareModules); } return savedAction; } @@ -545,84 +561,93 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Override public Slice findActionsByTarget(final Pageable pageable, final Target target) { - return actionRepository.findByTarget(pageable, target); + return actionRepository.findByTarget(pageable, (JpaTarget) target); } @Override public List findActionsByTarget(final Target target) { - return actionRepository.findByTarget(target); + return actionRepository.findByTarget((JpaTarget) target); } @Override public List findActionsWithStatusCountByTargetOrderByIdDesc(final Target target) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery query = cb.createQuery(ActionWithStatusCount.class); - final Root actionRoot = query.from(Action.class); - final ListJoin actionStatusJoin = actionRoot.join(Action_.actionStatus, JoinType.LEFT); - final Join actionDsJoin = actionRoot.join(Action_.distributionSet); - final Join actionRolloutJoin = actionRoot.join(Action_.rollout, JoinType.LEFT); + final Root actionRoot = query.from(JpaAction.class); + final ListJoin actionStatusJoin = actionRoot.join(JpaAction_.actionStatus, + JoinType.LEFT); + final Join actionDsJoin = actionRoot.join(JpaAction_.distributionSet); + final Join actionRolloutJoin = actionRoot.join(JpaAction_.rollout, JoinType.LEFT); final CriteriaQuery multiselect = query.distinct(true).multiselect( - actionRoot.get(Action_.id), actionRoot.get(Action_.actionType), actionRoot.get(Action_.active), - actionRoot.get(Action_.forcedTime), actionRoot.get(Action_.status), actionRoot.get(Action_.createdAt), - actionRoot.get(Action_.lastModifiedAt), actionDsJoin.get(DistributionSet_.id), - actionDsJoin.get(DistributionSet_.name), actionDsJoin.get(DistributionSet_.version), - cb.count(actionStatusJoin), actionRolloutJoin.get(Rollout_.name)); - multiselect.where(cb.equal(actionRoot.get(Action_.target), target)); - multiselect.orderBy(cb.desc(actionRoot.get(Action_.id))); - multiselect.groupBy(actionRoot.get(Action_.id)); + actionRoot.get(JpaAction_.id), actionRoot.get(JpaAction_.actionType), actionRoot.get(JpaAction_.active), + actionRoot.get(JpaAction_.forcedTime), actionRoot.get(JpaAction_.status), + actionRoot.get(JpaAction_.createdAt), actionRoot.get(JpaAction_.lastModifiedAt), + actionDsJoin.get(JpaDistributionSet_.id), actionDsJoin.get(JpaDistributionSet_.name), + actionDsJoin.get(JpaDistributionSet_.version), cb.count(actionStatusJoin), + actionRolloutJoin.get(JpaRollout_.name)); + multiselect.where(cb.equal(actionRoot.get(JpaAction_.target), target)); + multiselect.orderBy(cb.desc(actionRoot.get(JpaAction_.id))); + multiselect.groupBy(actionRoot.get(JpaAction_.id)); return entityManager.createQuery(multiselect).getResultList(); } @Override - public Slice findActionsByTarget(final Specification specifiction, final Target target, - final Pageable pageable) { + public Page findActionsByTarget(final String rsqlParam, final Target target, final Pageable pageable) { + final Specification specification = RSQLUtility.parse(rsqlParam, ActionFields.class); - return actionRepository.findAll((Specification) (root, query, cb) -> cb - .and(specifiction.toPredicate(root, query, cb), cb.equal(root.get(Action_.target), target)), pageable); + return convertAcPage(actionRepository.findAll((Specification) (root, query, cb) -> cb + .and(specification.toPredicate(root, query, cb), cb.equal(root.get(JpaAction_.target), target)), + pageable)); + } + + private static Page convertAcPage(final Page findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override public Slice findActionsByTarget(final Target foundTarget, final Pageable pageable) { - return actionRepository.findByTarget(pageable, foundTarget); + return actionRepository.findByTarget(pageable, (JpaTarget) foundTarget); } @Override public Page findActiveActionsByTarget(final Pageable pageable, final Target target) { - return actionRepository.findByActiveAndTarget(pageable, target, true); + return actionRepository.findByActiveAndTarget(pageable, (JpaTarget) target, true); } @Override public List findActiveActionsByTarget(final Target target) { - return actionRepository.findByActiveAndTarget(target, true); + return actionRepository.findByActiveAndTarget((JpaTarget) target, true); } @Override public List findInActiveActionsByTarget(final Target target) { - return actionRepository.findByActiveAndTarget(target, false); + return actionRepository.findByActiveAndTarget((JpaTarget) target, false); } @Override public Page findInActiveActionsByTarget(final Pageable pageable, final Target target) { - return actionRepository.findByActiveAndTarget(pageable, target, false); + return actionRepository.findByActiveAndTarget(pageable, (JpaTarget) target, false); } @Override public Long countActionsByTarget(final Target target) { - return actionRepository.countByTarget(target); + return actionRepository.countByTarget((JpaTarget) target); } @Override - public Long countActionsByTarget(final Specification spec, final Target target) { + public Long countActionsByTarget(final String rsqlParam, final Target target) { + final Specification spec = RSQLUtility.parse(rsqlParam, ActionFields.class); + return actionRepository.count((root, query, cb) -> cb.and(spec.toPredicate(root, query, cb), - cb.equal(root.get(Action_.target), target))); + cb.equal(root.get(JpaAction_.target), target))); } @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public Action forceTargetAction(final Long actionId) { - final Action action = actionRepository.findOne(actionId); + final JpaAction action = actionRepository.findOne(actionId); if (action != null && !action.isForced()) { action.setActionType(ActionType.FORCED); return actionRepository.save(action); @@ -634,20 +659,27 @@ public class JpaDeploymentManagement implements DeploymentManagement { public Page findActionStatusByAction(final Pageable pageReq, final Action action, final boolean withMessages) { if (withMessages) { - return actionStatusRepository.getByAction(pageReq, action); + return actionStatusRepository.getByAction(pageReq, (JpaAction) action); } else { - return actionStatusRepository.findByAction(pageReq, action); + return actionStatusRepository.findByAction(pageReq, (JpaAction) action); } } @Override public List findActionsByRolloutGroupParentAndStatus(final Rollout rollout, final RolloutGroup rolloutGroupParent, final Action.Status actionStatus) { - return actionRepository.findByRolloutAndRolloutGroupParentAndStatus(rollout, rolloutGroupParent, actionStatus); + return actionRepository.findByRolloutAndRolloutGroupParentAndStatus((JpaRollout) rollout, + (JpaRolloutGroup) rolloutGroupParent, actionStatus); } @Override public List findActionsByRolloutAndStatus(final Rollout rollout, final Action.Status actionStatus) { - return actionRepository.findByRolloutAndStatus(rollout, actionStatus); + return actionRepository.findByRolloutAndStatus((JpaRollout) rollout, actionStatus); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public Action generateAction() { + return new JpaAction(); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index da999e7cb..4e33d4960 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -24,28 +24,36 @@ import javax.persistence.EntityManager; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagAssigmentResultEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.DistributionSetFields; import org.eclipse.hawkbit.repository.DistributionSetFilter; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; +import org.eclipse.hawkbit.repository.DistributionSetTypeFields; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityLockedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException; +import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata_; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; +import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetSpecification; +import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetTypeSpecification; +import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; -import org.eclipse.hawkbit.repository.model.DistributionSetMetadata_; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.DistributionSet_; -import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.specifications.DistributionSetSpecification; -import org.eclipse.hawkbit.repository.specifications.DistributionSetTypeSpecification; -import org.eclipse.hawkbit.repository.specifications.SpecificationsBuilder; +import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -54,6 +62,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -111,12 +120,12 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Transactional(isolation = Isolation.READ_UNCOMMITTED) public DistributionSetTagAssignmentResult toggleTagAssignment(final Collection dsIds, final String tagName) { - final Iterable sets = findDistributionSetListWithDetails(dsIds); + final List sets = findDistributionSetListWithDetails(dsIds); final DistributionSetTag myTag = tagManagement.findDistributionSetTag(tagName); DistributionSetTagAssignmentResult result; - final List toBeChangedDSs = new ArrayList<>(); - for (final DistributionSet set : sets) { + final List toBeChangedDSs = new ArrayList<>(); + for (final JpaDistributionSet set : sets) { if (set.getTags().add(myTag)) { toBeChangedDSs.add(set); } @@ -124,17 +133,17 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { // un-assignment case if (toBeChangedDSs.isEmpty()) { - for (final DistributionSet set : sets) { + for (final JpaDistributionSet set : sets) { if (set.getTags().remove(myTag)) { toBeChangedDSs.add(set); } } result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), 0, - toBeChangedDSs.size(), Collections.emptyList(), distributionSetRepository.save(toBeChangedDSs), - myTag); + toBeChangedDSs.size(), Collections.emptyList(), + new ArrayList<>(distributionSetRepository.save(toBeChangedDSs)), myTag); } else { result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), toBeChangedDSs.size(), - 0, distributionSetRepository.save(toBeChangedDSs), Collections.emptyList(), myTag); + 0, new ArrayList<>(distributionSetRepository.save(toBeChangedDSs)), Collections.emptyList(), myTag); } final DistributionSetTagAssignmentResult resultAssignment = result; @@ -145,8 +154,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { return result; } - @Override - public List findDistributionSetListWithDetails(final Collection distributionIdSet) { + private List findDistributionSetListWithDetails(final Collection distributionIdSet) { return distributionSetRepository.findAll(DistributionSetSpecification.byIds(distributionIdSet)); } @@ -156,8 +164,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { public DistributionSet updateDistributionSet(final DistributionSet ds) { checkNotNull(ds.getId()); final DistributionSet persisted = findDistributionSetByIdWithDetails(ds.getId()); - checkDistributionSetSoftwareModulesIsAllowedToModify(ds, persisted.getModules()); - return distributionSetRepository.save(ds); + checkDistributionSetSoftwareModulesIsAllowedToModify((JpaDistributionSet) ds, persisted.getModules()); + return distributionSetRepository.save((JpaDistributionSet) ds); } @Override @@ -196,7 +204,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { if (dSet.getType() == null) { dSet.setType(systemManagement.getTenantMetadata().getDefaultDsType()); } - return distributionSetRepository.save(dSet); + return distributionSetRepository.save((JpaDistributionSet) dSet); } private void prepareDsSave(final DistributionSet dSet) { @@ -220,18 +228,22 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { ds.setType(systemManagement.getTenantMetadata().getDefaultDsType()); } } - return distributionSetRepository.save(distributionSets); + + @SuppressWarnings({ "unchecked", "rawtypes" }) + final Collection toSave = (Collection) distributionSets; + + return new ArrayList<>(distributionSetRepository.save(toSave)); } @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public DistributionSet assignSoftwareModules(final DistributionSet ds, final Set softwareModules) { - checkDistributionSetSoftwareModulesIsAllowedToModify(ds, softwareModules); + checkDistributionSetSoftwareModulesIsAllowedToModify((JpaDistributionSet) ds, softwareModules); for (final SoftwareModule softwareModule : softwareModules) { ds.addModule(softwareModule); } - return distributionSetRepository.save(ds); + return distributionSetRepository.save((JpaDistributionSet) ds); } @Override @@ -241,8 +253,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { final Set softwareModules = new HashSet<>(); softwareModules.add(softwareModule); ds.removeModule(softwareModule); - checkDistributionSetSoftwareModulesIsAllowedToModify(ds, softwareModules); - return distributionSetRepository.save(ds); + checkDistributionSetSoftwareModulesIsAllowedToModify((JpaDistributionSet) ds, softwareModules); + return distributionSetRepository.save((JpaDistributionSet) ds); } @Override @@ -251,7 +263,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { public DistributionSetType updateDistributionSetType(final DistributionSetType dsType) { checkNotNull(dsType.getId()); - final DistributionSetType persisted = distributionSetTypeRepository.findOne(dsType.getId()); + final JpaDistributionSetType persisted = distributionSetTypeRepository.findOne(dsType.getId()); // throw exception if user tries to update a DS type that is already in // use @@ -261,25 +273,36 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { dsType.getName())); } - return distributionSetTypeRepository.save(dsType); + return distributionSetTypeRepository.save((JpaDistributionSetType) dsType); } @Override - public Page findDistributionSetTypesAll(final Specification spec, - final Pageable pageable) { - return distributionSetTypeRepository.findAll(spec, pageable); + public Page findDistributionSetTypesAll(final String rsqlParam, final Pageable pageable) { + final Specification spec = RSQLUtility.parse(rsqlParam, + DistributionSetTypeFields.class); + + return convertDsTPage(distributionSetTypeRepository.findAll(spec, pageable)); + } + + private static Page convertDsTPage(final Page findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override public Page findDistributionSetTypesAll(final Pageable pageable) { - return distributionSetTypeRepository.findByDeleted(pageable, false); + return convertDsTPage(distributionSetTypeRepository.findByDeleted(pageable, false)); } @Override public Page findDistributionSetsByFilters(final Pageable pageable, final DistributionSetFilter distributionSetFilter) { - final List> specList = buildDistributionSetSpecifications(distributionSetFilter); - return findByCriteriaAPI(pageable, specList); + final List> specList = buildDistributionSetSpecifications( + distributionSetFilter); + return convertDsPage(findByCriteriaAPI(pageable, specList)); + } + + private static Page convertDsPage(final Page findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } /** @@ -291,7 +314,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { */ private DistributionSet findDistributionSetsByFiltersAndInstalledOrAssignedTarget( final DistributionSetFilter distributionSetFilter) { - final List> specList = buildDistributionSetSpecifications(distributionSetFilter); + final List> specList = buildDistributionSetSpecifications( + distributionSetFilter); if (specList == null || specList.isEmpty()) { return null; } @@ -301,30 +325,33 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Override public Page findDistributionSetsAll(final Pageable pageReq, final Boolean deleted, final Boolean complete) { - final List> specList = new ArrayList<>(); + final List> specList = new ArrayList<>(); if (deleted != null) { - final Specification spec = DistributionSetSpecification.isDeleted(deleted); + final Specification spec = DistributionSetSpecification.isDeleted(deleted); specList.add(spec); } if (complete != null) { - final Specification spec = DistributionSetSpecification.isCompleted(complete); + final Specification spec = DistributionSetSpecification.isCompleted(complete); specList.add(spec); } - return findByCriteriaAPI(pageReq, specList); + return convertDsPage(findByCriteriaAPI(pageReq, specList)); } @Override - public Page findDistributionSetsAll(final Specification spec, - final Pageable pageReq, final Boolean deleted) { - final List> specList = new ArrayList<>(); + public Page findDistributionSetsAll(final String rsqlParam, final Pageable pageReq, + final Boolean deleted) { + + final Specification spec = RSQLUtility.parse(rsqlParam, DistributionSetFields.class); + + final List> specList = new ArrayList<>(); if (deleted != null) { specList.add(DistributionSetSpecification.isDeleted(deleted)); } specList.add(spec); - return findByCriteriaAPI(pageReq, specList); + return convertDsPage(findByCriteriaAPI(pageReq, specList)); } @Override @@ -371,23 +398,23 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Override public DistributionSet findDistributionSetByNameAndVersion(final String distributionName, final String version) { - final Specification spec = DistributionSetSpecification + final Specification spec = DistributionSetSpecification .equalsNameAndVersionIgnoreCase(distributionName, version); return distributionSetRepository.findOne(spec); } @Override - public Iterable findDistributionSetList(final Collection dist) { - return distributionSetRepository.findAll(dist); + public List findDistributionSetsAll(final Collection dist) { + return new ArrayList<>(distributionSetRepository.findAll(DistributionSetSpecification.byIds(dist))); } @Override public Long countDistributionSetsAll() { - final List> specList = new ArrayList<>(); + final List> specList = new LinkedList<>(); - final Specification spec = DistributionSetSpecification.isDeleted(Boolean.FALSE); + final Specification spec = DistributionSetSpecification.isDeleted(Boolean.FALSE); specList.add(spec); return distributionSetRepository.count(SpecificationsBuilder.combineWithAnd(specList)); @@ -421,16 +448,17 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { throw new EntityAlreadyExistsException("Given type contains an Id!"); } - return distributionSetTypeRepository.save(type); + return distributionSetTypeRepository.save((JpaDistributionSetType) type); } @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public void deleteDistributionSetType(final DistributionSetType type) { + public void deleteDistributionSetType(final DistributionSetType ty) { + final JpaDistributionSetType type = (JpaDistributionSetType) ty; if (distributionSetRepository.countByType(type) > 0) { - final DistributionSetType toDelete = entityManager.merge(type); + final JpaDistributionSetType toDelete = entityManager.merge(type); toDelete.setDeleted(true); distributionSetTypeRepository.save(toDelete); } else { @@ -441,7 +469,9 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - public DistributionSetMetadata createDistributionSetMetadata(final DistributionSetMetadata metadata) { + public DistributionSetMetadata createDistributionSetMetadata(final DistributionSetMetadata md) { + final JpaDistributionSetMetadata metadata = (JpaDistributionSetMetadata) md; + if (distributionSetMetadataRepository.exists(metadata.getId())) { throwMetadataKeyAlreadyExists(metadata.getId().getKey()); } @@ -449,31 +479,38 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { // log written because // modifying metadata is modifying the base distribution set itself for // auditing purposes. - entityManager.merge(metadata.getDistributionSet()).setLastModifiedAt(0L); + entityManager.merge((JpaDistributionSet) metadata.getDistributionSet()).setLastModifiedAt(0L); return distributionSetMetadataRepository.save(metadata); } @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - public List createDistributionSetMetadata( - final Collection metadata) { - for (final DistributionSetMetadata distributionSetMetadata : metadata) { + public List createDistributionSetMetadata(final Collection md) { + + @SuppressWarnings({ "rawtypes", "unchecked" }) + final Collection metadata = (Collection) md; + + for (final JpaDistributionSetMetadata distributionSetMetadata : metadata) { checkAndThrowAlreadyIfDistributionSetMetadataExists(distributionSetMetadata.getId()); } - metadata.forEach(m -> entityManager.merge(m.getDistributionSet()).setLastModifiedAt(-1L)); - return (List) distributionSetMetadataRepository.save(metadata); + metadata.forEach(m -> entityManager.merge((JpaDistributionSet) m.getDistributionSet()).setLastModifiedAt(0L)); + + return new ArrayList( + (Collection) distributionSetMetadataRepository.save(metadata)); } @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - public DistributionSetMetadata updateDistributionSetMetadata(final DistributionSetMetadata metadata) { + public DistributionSetMetadata updateDistributionSetMetadata(final DistributionSetMetadata md) { + final JpaDistributionSetMetadata metadata = (JpaDistributionSetMetadata) md; + // check if exists otherwise throw entity not found exception findOne(metadata.getId()); // touch it to update the lock revision because we are modifying the // DS indirectly - entityManager.merge(metadata.getDistributionSet()).setLastModifiedAt(0L); + entityManager.merge((JpaDistributionSet) metadata.getDistributionSet()).setLastModifiedAt(0L); return distributionSetMetadataRepository.save(metadata); } @@ -488,23 +525,29 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { public Page findDistributionSetMetadataByDistributionSetId(final Long distributionSetId, final Pageable pageable) { - return distributionSetMetadataRepository.findAll( - (Specification) (root, query, cb) -> cb.equal( - root.get(DistributionSetMetadata_.distributionSet).get(DistributionSet_.id), distributionSetId), - pageable); + return convertMdPage(distributionSetMetadataRepository + .findAll((Specification) (root, query, cb) -> cb.equal( + root.get(JpaDistributionSetMetadata_.distributionSet).get(JpaDistributionSet_.id), + distributionSetId), pageable)); } @Override public Page findDistributionSetMetadataByDistributionSetId(final Long distributionSetId, - final Specification spec, final Pageable pageable) { - return distributionSetMetadataRepository - .findAll( - (Specification) (root, query, - cb) -> cb.and( - cb.equal(root.get(DistributionSetMetadata_.distributionSet) - .get(DistributionSet_.id), distributionSetId), - spec.toPredicate(root, query, cb)), - pageable); + final String rsqlParam, final Pageable pageable) { + + final Specification spec = RSQLUtility.parse(rsqlParam, + DistributionSetMetadataFields.class); + + return convertMdPage( + distributionSetMetadataRepository + .findAll((Specification) (root, query, cb) -> cb.and( + cb.equal(root.get(JpaDistributionSetMetadata_.distributionSet) + .get(JpaDistributionSet_.id), distributionSetId), + spec.toPredicate(root, query, cb)), pageable)); + } + + private static Page convertMdPage(final Page findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override @@ -518,19 +561,19 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Override public DistributionSet findDistributionSetByAction(final Action action) { - return distributionSetRepository.findByAction(action); + return distributionSetRepository.findByAction((JpaAction) action); } @Override public boolean isDistributionSetInUse(final DistributionSet distributionSet) { - return actionRepository.countByDistributionSet(distributionSet) > 0; + return actionRepository.countByDistributionSet((JpaDistributionSet) distributionSet) > 0; } - private static List> buildDistributionSetSpecifications( + private static List> buildDistributionSetSpecifications( final DistributionSetFilter distributionSetFilter) { - final List> specList = new ArrayList<>(); + final List> specList = new ArrayList<>(); - Specification spec; + Specification spec; if (null != distributionSetFilter.getIsComplete()) { spec = DistributionSetSpecification.isCompleted(distributionSetFilter.getIsComplete()); @@ -568,7 +611,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { return specList; } - private void checkDistributionSetSoftwareModulesIsAllowedToModify(final DistributionSet distributionSet, + private void checkDistributionSetSoftwareModulesIsAllowedToModify(final JpaDistributionSet distributionSet, final Set softwareModules) { if (!new HashSet(distributionSet.getModules()).equals(softwareModules) && actionRepository.countByDistributionSet(distributionSet) > 0) { @@ -602,8 +645,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { * list of @link {@link Specification} * @return the page with the found {@link DistributionSet} */ - private Page findByCriteriaAPI(final Pageable pageable, - final List> specList) { + private Page findByCriteriaAPI(final Pageable pageable, + final List> specList) { if (specList == null || specList.isEmpty()) { return distributionSetRepository.findAll(pageable); @@ -627,10 +670,11 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public List assignTag(final Collection dsIds, final DistributionSetTag tag) { - final List allDs = findDistributionSetListWithDetails(dsIds); + final List allDs = findDistributionSetListWithDetails(dsIds); allDs.forEach(ds -> ds.getTags().add(tag)); - final List save = distributionSetRepository.save(allDs); + + final List save = new ArrayList<>(distributionSetRepository.save(allDs)); afterCommit.afterCommit(() -> { @@ -646,19 +690,23 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public List unAssignAllDistributionSetsByTag(final DistributionSetTag tag) { - return unAssignTag(tag.getAssignedToDistributionSet(), tag); + + @SuppressWarnings({ "unchecked", "rawtypes" }) + final Collection distributionSets = (Collection) tag.getAssignedToDistributionSet(); + + return new ArrayList<>(unAssignTag(distributionSets, tag)); } @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public DistributionSet unAssignTag(final Long dsId, final DistributionSetTag distributionSetTag) { - final List allDs = findDistributionSetListWithDetails(Arrays.asList(dsId)); - final List unAssignTag = unAssignTag(allDs, distributionSetTag); + final List allDs = findDistributionSetListWithDetails(Arrays.asList(dsId)); + final List unAssignTag = unAssignTag(allDs, distributionSetTag); return unAssignTag.isEmpty() ? null : unAssignTag.get(0); } - private List unAssignTag(final Collection distributionSets, + private List unAssignTag(final Collection distributionSets, final DistributionSetTag tag) { distributionSets.forEach(ds -> ds.getTags().remove(tag)); return distributionSetRepository.save(distributionSets); @@ -685,4 +733,16 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { final DistributionSetTag tag) { return toggleTagAssignment(sets.stream().map(ds -> ds.getId()).collect(Collectors.toList()), tag.getName()); } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public DistributionSetType generateDistributionSetType() { + return new JpaDistributionSetType(); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public DistributionSet generateDistributionSet() { + return new JpaDistributionSet(); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java index 523f91374..bada97a7b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java @@ -34,13 +34,13 @@ import org.eclipse.hawkbit.report.model.DataReportSeriesItem; import org.eclipse.hawkbit.report.model.InnerOuterDataReportSeries; import org.eclipse.hawkbit.report.model.SeriesTime; import org.eclipse.hawkbit.repository.ReportManagement; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSet_; -import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetInfo; -import org.eclipse.hawkbit.repository.model.TargetInfo_; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.model.Target_; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -88,13 +88,13 @@ public class JpaReportManagement implements ReportManagement { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery query = cb.createQuery(Object[].class); - final Root targetRoot = query.from(Target.class); - final Join targetInfo = targetRoot.join(Target_.targetInfo); - final Expression countColumn = cb.count(targetInfo.get(TargetInfo_.targetId)); + final Root targetRoot = query.from(JpaTarget.class); + final Join targetInfo = targetRoot.join(JpaTarget_.targetInfo); + final Expression countColumn = cb.count(targetInfo.get(JpaTargetInfo_.targetId)); final CriteriaQuery multiselect = query - .multiselect(targetInfo.get(TargetInfo_.updateStatus), countColumn) - .groupBy(targetInfo.get(TargetInfo_.updateStatus)) - .orderBy(cb.desc(targetInfo.get(TargetInfo_.updateStatus))); + .multiselect(targetInfo.get(JpaTargetInfo_.updateStatus), countColumn) + .groupBy(targetInfo.get(JpaTargetInfo_.updateStatus)) + .orderBy(cb.desc(targetInfo.get(JpaTargetInfo_.updateStatus))); // | col1 | col2 | // | U_STATUS | COUNT | @@ -114,16 +114,17 @@ public class JpaReportManagement implements ReportManagement { // top X entries distribution usage final CriteriaBuilder cbTopX = entityManager.getCriteriaBuilder(); final CriteriaQuery queryTopX = cbTopX.createQuery(Object[].class); - final Root rootTopX = queryTopX.from(DistributionSet.class); - final ListJoin joinTopX = rootTopX.join(DistributionSet_.assignedToTargets, + final Root rootTopX = queryTopX.from(JpaDistributionSet.class); + final ListJoin joinTopX = rootTopX.join(JpaDistributionSet_.assignedToTargets, JoinType.LEFT); final Expression countColumn = cbTopX.count(joinTopX); // top x usage query final CriteriaQuery groupBy = queryTopX - .multiselect(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version), countColumn) - .where(cbTopX.equal(rootTopX.get(DistributionSet_.deleted), false)) - .groupBy(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version)) - .orderBy(cbTopX.desc(countColumn), cbTopX.asc(rootTopX.get(DistributionSet_.name))); + .multiselect(rootTopX.get(JpaDistributionSet_.name), rootTopX.get(JpaDistributionSet_.version), + countColumn) + .where(cbTopX.equal(rootTopX.get(JpaDistributionSet_.deleted), false)) + .groupBy(rootTopX.get(JpaDistributionSet_.name), rootTopX.get(JpaDistributionSet_.version)) + .orderBy(cbTopX.desc(countColumn), cbTopX.asc(rootTopX.get(JpaDistributionSet_.name))); // | col1 | col2 | col3 | // | NAME | VER | COUNT | final List resultListTop = entityManager.createQuery(groupBy).getResultList(); @@ -138,16 +139,17 @@ public class JpaReportManagement implements ReportManagement { // top X entries distribution usage final CriteriaBuilder cbTopX = entityManager.getCriteriaBuilder(); final CriteriaQuery queryTopX = cbTopX.createQuery(Object[].class); - final Root rootTopX = queryTopX.from(DistributionSet.class); - final ListJoin joinTopX = rootTopX.join(DistributionSet_.installedAtTargets, - JoinType.LEFT); + final Root rootTopX = queryTopX.from(JpaDistributionSet.class); + final ListJoin joinTopX = rootTopX + .join(JpaDistributionSet_.installedAtTargets, JoinType.LEFT); final Expression countColumn = cbTopX.count(joinTopX); // top x usage query final CriteriaQuery groupBy = queryTopX - .multiselect(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version), countColumn) - .where(cbTopX.equal(rootTopX.get(DistributionSet_.deleted), false)) - .groupBy(rootTopX.get(DistributionSet_.name), rootTopX.get(DistributionSet_.version)) - .orderBy(cbTopX.desc(countColumn), cbTopX.asc(rootTopX.get(DistributionSet_.name))); + .multiselect(rootTopX.get(JpaDistributionSet_.name), rootTopX.get(JpaDistributionSet_.version), + countColumn) + .where(cbTopX.equal(rootTopX.get(JpaDistributionSet_.deleted), false)) + .groupBy(rootTopX.get(JpaDistributionSet_.name), rootTopX.get(JpaDistributionSet_.version)) + .orderBy(cbTopX.desc(countColumn), cbTopX.asc(rootTopX.get(JpaDistributionSet_.name))); // | col1 | col2 | col3 | // | NAME | VER | COUNT | final List resultListTop = entityManager.createQuery(groupBy).getResultList(); @@ -213,6 +215,7 @@ public class JpaReportManagement implements ReportManagement { final LocalDateTime from, final LocalDateTime to) { final Query createNativeQuery = entityManager .createNativeQuery(getFeedbackReceivedQueryTemplate(dateType, from, to)); + @SuppressWarnings("unchecked") final List resultList = createNativeQuery.getResultList(); final List> reportItems = resultList.stream() @@ -275,15 +278,15 @@ public class JpaReportManagement implements ReportManagement { // count select statement final CriteriaQuery countSelect = cb.createQuery(Long.class); - final Root countSelectRoot = countSelect.from(Target.class); - final Join targetInfoJoin = countSelectRoot.join(Target_.targetInfo); + final Root countSelectRoot = countSelect.from(JpaTarget.class); + final Join targetInfoJoin = countSelectRoot.join(JpaTarget_.targetInfo); countSelect.select(cb.count(countSelectRoot)); if (start != null && end != null) { - countSelect.where(cb.between(targetInfoJoin.get(TargetInfo_.lastTargetQuery), start, end)); + countSelect.where(cb.between(targetInfoJoin.get(JpaTargetInfo_.lastTargetQuery), start, end)); } else if (from == null && to != null) { - countSelect.where(cb.lessThanOrEqualTo(targetInfoJoin.get(TargetInfo_.lastTargetQuery), end)); + countSelect.where(cb.lessThanOrEqualTo(targetInfoJoin.get(JpaTargetInfo_.lastTargetQuery), end)); } else { - countSelect.where(cb.isNull(targetInfoJoin.get(TargetInfo_.lastTargetQuery))); + countSelect.where(cb.isNull(targetInfoJoin.get(JpaTargetInfo_.lastTargetQuery))); } return countSelect; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java index b7ced5511..b3ea8fb74 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -20,28 +21,36 @@ import javax.persistence.criteria.JoinType; import javax.persistence.criteria.ListJoin; import javax.persistence.criteria.Root; +import org.eclipse.hawkbit.repository.RolloutGroupFields; import org.eclipse.hawkbit.repository.RolloutGroupManagement; +import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction_; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; +import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; +import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup_; import org.eclipse.hawkbit.repository.model.Action; -import org.eclipse.hawkbit.repository.model.Action_; import org.eclipse.hawkbit.repository.model.Rollout; -import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup_; -import org.eclipse.hawkbit.repository.model.RolloutTargetGroup; -import org.eclipse.hawkbit.repository.model.RolloutTargetGroup_; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetWithActionStatus; -import org.eclipse.hawkbit.repository.model.Target_; import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -72,20 +81,34 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { @Override public Page findRolloutGroupsByRolloutId(final Long rolloutId, final Pageable page) { - return rolloutGroupRepository.findByRolloutId(rolloutId, page); + return convertPage(rolloutGroupRepository.findByRolloutId(rolloutId, page)); + } + + private static Page convertPage(final Slice findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); + } + + private static Page convertTPage(final Page findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override - public Page findRolloutGroupsAll(final Rollout rollout, - final Specification specification, final Pageable page) { - return rolloutGroupRepository.findAll((root, query, criteriaBuilder) -> criteriaBuilder.and( - criteriaBuilder.equal(root.get(RolloutGroup_.rollout), rollout), - specification.toPredicate(root, query, criteriaBuilder)), page); + public Page findRolloutGroupsAll(final Rollout rollout, final String rsqlParam, final Pageable page) { + + final Specification specification = RSQLUtility.parse(rsqlParam, RolloutGroupFields.class); + + return convertPage( + rolloutGroupRepository + .findAll( + (root, query, criteriaBuilder) -> criteriaBuilder.and( + criteriaBuilder.equal(root.get(JpaRolloutGroup_.rollout), rollout), + specification.toPredicate(root, query, criteriaBuilder)), + page)); } @Override public Page findAllRolloutGroupsWithDetailedStatus(final Long rolloutId, final Pageable page) { - final Page rolloutGroups = rolloutGroupRepository.findByRolloutId(rolloutId, page); + final Page rolloutGroups = rolloutGroupRepository.findByRolloutId(rolloutId, page); final List rolloutGroupIds = rolloutGroups.getContent().stream().map(rollout -> rollout.getId()) .collect(Collectors.toList()); final Map> allStatesForRollout = getStatusCountItemForRolloutGroup( @@ -97,7 +120,7 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { rolloutGroup.setTotalTargetCountStatus(totalTargetCountStatus); } - return rolloutGroups; + return convertPage(rolloutGroups); } @Override @@ -121,13 +144,16 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { } @Override - public Page findRolloutGroupTargets(final RolloutGroup rolloutGroup, - final Specification specification, final Pageable page) { - return targetRepository.findAll((root, query, criteriaBuilder) -> { - final ListJoin rolloutTargetJoin = root.join(Target_.rolloutTargetGroup); - return criteriaBuilder.and(specification.toPredicate(root, query, criteriaBuilder), + public Page findRolloutGroupTargets(final RolloutGroup rolloutGroup, final String rsqlParam, + final Pageable page) { + + final Specification rsqlSpecification = RSQLUtility.parse(rsqlParam, TargetFields.class); + + return convertTPage(targetRepository.findAll((root, query, criteriaBuilder) -> { + final ListJoin rolloutTargetJoin = root.join(JpaTarget_.rolloutTargetGroup); + return criteriaBuilder.and(rsqlSpecification.toPredicate(root, query, criteriaBuilder), criteriaBuilder.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); - }, page); + }, page)); } @Override @@ -138,7 +164,7 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { // stored in the #TargetRolloutGroup. return targetRepository.findByRolloutTargetGroupRolloutGroupId(rolloutGroup.getId(), page); } - return targetRepository.findByActionsRolloutGroup(rolloutGroup, page); + return targetRepository.findByActionsRolloutGroup((JpaRolloutGroup) rolloutGroup, page); } private static boolean isRolloutStatusReady(final RolloutGroup rolloutGroup) { @@ -154,8 +180,8 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { final CriteriaQuery countQuery = cb.createQuery(Long.class); final Root targetRoot = query.distinct(true).from(RolloutTargetGroup.class); - final Join targetJoin = targetRoot.join(RolloutTargetGroup_.target); - final ListJoin actionJoin = targetRoot.join(RolloutTargetGroup_.actions, + final Join targetJoin = targetRoot.join(RolloutTargetGroup_.target); + final ListJoin actionJoin = targetRoot.join(RolloutTargetGroup_.actions, JoinType.LEFT); final Root countQueryFrom = countQuery.distinct(true).from(RolloutTargetGroup.class); @@ -165,7 +191,7 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { .where(cb.equal(countQueryFrom.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); final Long totalCount = entityManager.createQuery(countQuery).getSingleResult(); - final CriteriaQuery multiselect = query.multiselect(targetJoin, actionJoin.get(Action_.status)) + final CriteriaQuery multiselect = query.multiselect(targetJoin, actionJoin.get(JpaAction_.status)) .where(cb.equal(targetRoot.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); final List targetWithActionStatus = entityManager.createQuery(multiselect) .setFirstResult(pageRequest.getOffset()).setMaxResults(pageRequest.getPageSize()).getResultList() @@ -173,4 +199,10 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { .collect(Collectors.toList()); return new PageImpl<>(targetWithActionStatus, pageRequest, totalCount); } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public RolloutGroup generateRolloutGroup() { + return new JpaRolloutGroup(); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index e4636f890..ec13c4f29 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -19,24 +20,28 @@ import javax.persistence.EntityManager; import org.eclipse.hawkbit.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.DeploymentManagement; +import org.eclipse.hawkbit.repository.RolloutFields; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupConditions; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout_; +import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; -import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; -import org.eclipse.hawkbit.repository.model.RolloutTargetGroup; -import org.eclipse.hawkbit.repository.model.Rollout_; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.rollout.condition.RolloutGroupActionEvaluator; import org.eclipse.hawkbit.rollout.condition.RolloutGroupConditionEvaluator; import org.slf4j.Logger; @@ -46,6 +51,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationContext; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; @@ -132,15 +138,21 @@ public class JpaRolloutManagement implements RolloutManagement { @Override public Page findAll(final Pageable page) { - return rolloutRepository.findAll(page); + return convertPage(rolloutRepository.findAll(page)); + } + + private static Page convertPage(final Slice findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override - public Page findAllWithDetailedStatusByPredicate(final Specification specification, - final Pageable page) { - final Page findAll = rolloutRepository.findAll(specification, page); + public Page findAllWithDetailedStatusByPredicate(final String rsqlParam, final Pageable page) { + + final Specification specification = RSQLUtility.parse(rsqlParam, RolloutFields.class); + + final Page findAll = rolloutRepository.findAll(specification, page); setRolloutStatusDetails(findAll); - return findAll; + return convertPage(findAll); } @Override @@ -153,7 +165,7 @@ public class JpaRolloutManagement implements RolloutManagement { @Modifying public Rollout createRollout(final Rollout rollout, final int amountGroup, final RolloutGroupConditions conditions) { - final Rollout savedRollout = createRollout(rollout, amountGroup); + final JpaRollout savedRollout = createRollout((JpaRollout) rollout, amountGroup); return createRolloutGroups(amountGroup, conditions, savedRollout); } @@ -162,7 +174,7 @@ public class JpaRolloutManagement implements RolloutManagement { @Modifying public Rollout createRolloutAsync(final Rollout rollout, final int amountGroup, final RolloutGroupConditions conditions) { - final Rollout savedRollout = createRollout(rollout, amountGroup); + final JpaRollout savedRollout = createRollout((JpaRollout) rollout, amountGroup); creatingRollouts.add(savedRollout.getName()); // need to flush the entity manager here to get the ID of the rollout, // because entity manager is set to FlushMode#Auto, entitymanager will @@ -182,7 +194,7 @@ public class JpaRolloutManagement implements RolloutManagement { return savedRollout; } - private Rollout createRollout(final Rollout rollout, final int amountGroup) { + private JpaRollout createRollout(final JpaRollout rollout, final int amountGroup) { verifyRolloutGroupParameter(amountGroup); final Long totalTargets = targetManagement.countTargetByTargetFilterQuery(rollout.getTargetFilterQuery()); rollout.setTotalTargets(totalTargets.longValue()); @@ -198,7 +210,7 @@ public class JpaRolloutManagement implements RolloutManagement { } private Rollout createRolloutGroupsInNewTransaction(final int amountOfGroups, - final RolloutGroupConditions conditions, final Rollout savedRollout) { + final RolloutGroupConditions conditions, final JpaRollout savedRollout) { final DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setName("creatingRollout"); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); @@ -221,7 +233,7 @@ public class JpaRolloutManagement implements RolloutManagement { * @return the rollout with created groups */ private Rollout createRolloutGroups(final int amountOfGroups, final RolloutGroupConditions conditions, - final Rollout savedRollout) { + final JpaRollout savedRollout) { int pageIndex = 0; int groupIndex = 0; final Long totalCount = savedRollout.getTotalTargets(); @@ -237,7 +249,7 @@ public class JpaRolloutManagement implements RolloutManagement { while (pageIndex < totalCount) { groupIndex++; final String nameAndDesc = "group-" + groupIndex; - final RolloutGroup group = new RolloutGroup(); + final JpaRolloutGroup group = new JpaRolloutGroup(); group.setName(nameAndDesc); group.setDescription(nameAndDesc); group.setRollout(savedRollout); @@ -272,7 +284,7 @@ public class JpaRolloutManagement implements RolloutManagement { @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying public Rollout startRollout(final Rollout rollout) { - final Rollout mergedRollout = entityManager.merge(rollout); + final JpaRollout mergedRollout = entityManager.merge((JpaRollout) rollout); checkIfRolloutCanStarted(rollout, mergedRollout); return doStartRollout(mergedRollout); } @@ -281,10 +293,10 @@ public class JpaRolloutManagement implements RolloutManagement { @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying public Rollout startRolloutAsync(final Rollout rollout) { - final Rollout mergedRollout = entityManager.merge(rollout); + final JpaRollout mergedRollout = entityManager.merge((JpaRollout) rollout); checkIfRolloutCanStarted(rollout, mergedRollout); mergedRollout.setStatus(RolloutStatus.STARTING); - final Rollout updatedRollout = rolloutRepository.save(mergedRollout); + final JpaRollout updatedRollout = rolloutRepository.save(mergedRollout); startingRollouts.add(updatedRollout.getName()); executor.execute(() -> { try { @@ -303,13 +315,13 @@ public class JpaRolloutManagement implements RolloutManagement { } - private Rollout doStartRollout(final Rollout rollout) { + private Rollout doStartRollout(final JpaRollout rollout) { final DistributionSet distributionSet = rollout.getDistributionSet(); final ActionType actionType = rollout.getActionType(); final long forceTime = rollout.getForcedTime(); - final List rolloutGroups = rolloutGroupRepository.findByRolloutOrderByIdAsc(rollout); + final List rolloutGroups = rolloutGroupRepository.findByRolloutOrderByIdAsc(rollout); for (int iGroup = 0; iGroup < rolloutGroups.size(); iGroup++) { - final RolloutGroup rolloutGroup = rolloutGroups.get(iGroup); + final JpaRolloutGroup rolloutGroup = rolloutGroups.get(iGroup); final List targetGroup = targetRepository.findByRolloutTargetGroupRolloutGroup(rolloutGroup); // firstgroup can already be started if (iGroup == 0) { @@ -336,7 +348,7 @@ public class JpaRolloutManagement implements RolloutManagement { @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying public void pauseRollout(final Rollout rollout) { - final Rollout mergedRollout = entityManager.merge(rollout); + final JpaRollout mergedRollout = entityManager.merge((JpaRollout) rollout); if (mergedRollout.getStatus() != RolloutStatus.RUNNING) { throw new RolloutIllegalStateException("Rollout can only be paused in state running but current state is " + rollout.getStatus().name().toLowerCase()); @@ -354,7 +366,7 @@ public class JpaRolloutManagement implements RolloutManagement { @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying public void resumeRollout(final Rollout rollout) { - final Rollout mergedRollout = entityManager.merge(rollout); + final JpaRollout mergedRollout = entityManager.merge((JpaRollout) rollout); if (!(RolloutStatus.PAUSED.equals(mergedRollout.getStatus()))) { throw new RolloutIllegalStateException("Rollout can only be resumed in state paused but current state is " + rollout.getStatus().name().toLowerCase()); @@ -379,13 +391,13 @@ public class JpaRolloutManagement implements RolloutManagement { return; } - final List rolloutsToCheck = rolloutRepository.findByLastCheckAndStatus(lastCheck, + final List rolloutsToCheck = rolloutRepository.findByLastCheckAndStatus(lastCheck, RolloutStatus.RUNNING); LOGGER.info("Found {} running rollouts to check", rolloutsToCheck.size()); - for (final Rollout rollout : rolloutsToCheck) { + for (final JpaRollout rollout : rolloutsToCheck) { LOGGER.debug("Checking rollout {}", rollout); - final List rolloutGroups = rolloutGroupRepository.findByRolloutAndStatus(rollout, + final List rolloutGroups = rolloutGroupRepository.findByRolloutAndStatus(rollout, RolloutGroupStatus.RUNNING); if (rolloutGroups.isEmpty()) { @@ -415,7 +427,7 @@ public class JpaRolloutManagement implements RolloutManagement { * In case this happens, set the rollout to error state. */ private void verifyStuckedRollouts() { - final List rolloutsInCreatingState = rolloutRepository.findByStatus(RolloutStatus.CREATING); + final List rolloutsInCreatingState = rolloutRepository.findByStatus(RolloutStatus.CREATING); rolloutsInCreatingState.stream().filter(rollout -> !creatingRollouts.contains(rollout.getName())) .forEach(rollout -> { LOGGER.warn( @@ -425,7 +437,7 @@ public class JpaRolloutManagement implements RolloutManagement { rolloutRepository.save(rollout); }); - final List rolloutsInStartingState = rolloutRepository.findByStatus(RolloutStatus.STARTING); + final List rolloutsInStartingState = rolloutRepository.findByStatus(RolloutStatus.STARTING); rolloutsInStartingState.stream().filter(rollout -> !startingRollouts.contains(rollout.getName())) .forEach(rollout -> { LOGGER.warn( @@ -437,8 +449,8 @@ public class JpaRolloutManagement implements RolloutManagement { } - private void executeRolloutGroups(final Rollout rollout, final List rolloutGroups) { - for (final RolloutGroup rolloutGroup : rolloutGroups) { + private void executeRolloutGroups(final JpaRollout rollout, final List rolloutGroups) { + for (final JpaRolloutGroup rolloutGroup : rolloutGroups) { // error state check, do we need to stop the whole // rollout because of error? final RolloutGroupErrorCondition errorCondition = rolloutGroup.getErrorCondition(); @@ -459,8 +471,8 @@ public class JpaRolloutManagement implements RolloutManagement { } } - private void executeLatestRolloutGroup(final Rollout rollout) { - final List latestRolloutGroup = rolloutGroupRepository + private void executeLatestRolloutGroup(final JpaRollout rollout) { + final List latestRolloutGroup = rolloutGroupRepository .findByRolloutAndStatusNotOrderByIdDesc(rollout, RolloutGroupStatus.SCHEDULED); if (latestRolloutGroup.isEmpty()) { return; @@ -478,13 +490,13 @@ public class JpaRolloutManagement implements RolloutManagement { } } - private boolean isRolloutComplete(final Rollout rollout) { + private boolean isRolloutComplete(final JpaRollout rollout) { final Long groupsActiveLeft = rolloutGroupRepository.countByRolloutAndStatusOrStatus(rollout, RolloutGroupStatus.RUNNING, RolloutGroupStatus.SCHEDULED); return groupsActiveLeft == 0; } - private boolean isRolloutGroupComplete(final Rollout rollout, final RolloutGroup rolloutGroup) { + private boolean isRolloutGroupComplete(final JpaRollout rollout, final JpaRolloutGroup rolloutGroup) { final Long actionsLeftForRollout = actionRepository .countByRolloutAndRolloutGroupAndStatusNotAndStatusNotAndStatusNot(rollout, rolloutGroup, Action.Status.ERROR, Action.Status.FINISHED, Action.Status.CANCELED); @@ -543,22 +555,22 @@ public class JpaRolloutManagement implements RolloutManagement { return rolloutRepository.count(likeNameOrDescription(searchText)); } - private static Specification likeNameOrDescription(final String searchText) { + private static Specification likeNameOrDescription(final String searchText) { return (rolloutRoot, query, criteriaBuilder) -> { final String searchTextToLower = searchText.toLowerCase(); return criteriaBuilder.or( - criteriaBuilder.like(criteriaBuilder.lower(rolloutRoot.get(Rollout_.name)), searchTextToLower), - criteriaBuilder.like(criteriaBuilder.lower(rolloutRoot.get(Rollout_.description)), + criteriaBuilder.like(criteriaBuilder.lower(rolloutRoot.get(JpaRollout_.name)), searchTextToLower), + criteriaBuilder.like(criteriaBuilder.lower(rolloutRoot.get(JpaRollout_.description)), searchTextToLower)); }; } @Override public Slice findRolloutByFilters(final Pageable pageable, final String searchText) { - final Specification specs = likeNameOrDescription(searchText); - final Slice findAll = criteriaNoCountDao.findAll(specs, pageable, Rollout.class); + final Specification specs = likeNameOrDescription(searchText); + final Slice findAll = criteriaNoCountDao.findAll(specs, pageable, JpaRollout.class); setRolloutStatusDetails(findAll); - return findAll; + return convertPage(findAll); } @Override @@ -579,7 +591,7 @@ public class JpaRolloutManagement implements RolloutManagement { @Modifying public Rollout updateRollout(final Rollout rollout) { Assert.notNull(rollout.getId()); - return rolloutRepository.save(rollout); + return rolloutRepository.save((JpaRollout) rollout); } /** @@ -593,9 +605,9 @@ public class JpaRolloutManagement implements RolloutManagement { */ @Override public Page findAllRolloutsWithDetailedStatus(final Pageable page) { - final Page rollouts = findAll(page); + final Page rollouts = rolloutRepository.findAll(page); setRolloutStatusDetails(rollouts); - return rollouts; + return convertPage(rollouts); } @@ -615,7 +627,7 @@ public class JpaRolloutManagement implements RolloutManagement { return resultList.stream().collect(Collectors.groupingBy(TotalTargetCountActionStatus::getId)); } - private void setRolloutStatusDetails(final Slice rollouts) { + private void setRolloutStatusDetails(final Slice rollouts) { final List rolloutIds = rollouts.getContent().stream().map(rollout -> rollout.getId()) .collect(Collectors.toList()); final Map> allStatesForRollout = getStatusCountItemForRollout( @@ -648,4 +660,10 @@ public class JpaRolloutManagement implements RolloutManagement { // calculate threshold return ((float) finished / (float) totalGroup) * 100; } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public Rollout generateRollout() { + return new JpaRollout(); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index 3f25dff29..7ea7e46be 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -13,6 +13,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -27,23 +28,32 @@ import javax.persistence.criteria.Root; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.SoftwareModuleFields; +import org.eclipse.hawkbit.repository.SoftwareModuleMetadataFields; +import org.eclipse.hawkbit.repository.SoftwareModuleTypeFields; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata_; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule_; +import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; +import org.eclipse.hawkbit.repository.jpa.specifications.SoftwareModuleSpecification; +import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSet_; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; -import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata_; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.model.SoftwareModule_; -import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; -import org.eclipse.hawkbit.repository.specifications.SoftwareModuleSpecification; -import org.eclipse.hawkbit.repository.specifications.SpecificationsBuilder; +import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.AuditorAware; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; @@ -52,6 +62,7 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -100,7 +111,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { public SoftwareModule updateSoftwareModule(final SoftwareModule sm) { checkNotNull(sm.getId()); - final SoftwareModule module = softwareModuleRepository.findOne(sm.getId()); + final JpaSoftwareModule module = softwareModuleRepository.findOne(sm.getId()); boolean updated = false; if (null == sm.getDescription() || !sm.getDescription().equals(module.getDescription())) { @@ -121,7 +132,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { public SoftwareModuleType updateSoftwareModuleType(final SoftwareModuleType sm) { checkNotNull(sm.getId()); - final SoftwareModuleType type = softwareModuleTypeRepository.findOne(sm.getId()); + final JpaSoftwareModuleType type = softwareModuleTypeRepository.findOne(sm.getId()); boolean updated = false; if (sm.getDescription() != null && !sm.getDescription().equals(type.getDescription())) { @@ -142,7 +153,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { if (null != swModule.getId()) { throw new EntityAlreadyExistsException(); } - return softwareModuleRepository.save(swModule); + return softwareModuleRepository.save((JpaSoftwareModule) swModule); } @Override @@ -155,30 +166,40 @@ public class JpaSoftwareManagement implements SoftwareManagement { } }); - return softwareModuleRepository.save(swModules); + @SuppressWarnings({ "unchecked", "rawtypes" }) + final Collection jpaCast = (Collection) swModules; + return new ArrayList<>(softwareModuleRepository.save(jpaCast)); } @Override public Slice findSoftwareModulesByType(final Pageable pageable, final SoftwareModuleType type) { - final List> specList = new ArrayList<>(); + final List> specList = new LinkedList<>(); - Specification spec = SoftwareModuleSpecification.equalType(type); + Specification spec = SoftwareModuleSpecification.equalType((JpaSoftwareModuleType) type); specList.add(spec); spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); - return findSwModuleByCriteriaAPI(pageable, specList); + return convertSmPage(findSwModuleByCriteriaAPI(pageable, specList)); + } + + private static Page convertSmPage(final Slice findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); + } + + private static Page convertSmMdPage(final Slice findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override public Long countSoftwareModulesByType(final SoftwareModuleType type) { - final List> specList = new ArrayList<>(); + final List> specList = new ArrayList<>(); - Specification spec = SoftwareModuleSpecification.equalType(type); + Specification spec = SoftwareModuleSpecification.equalType((JpaSoftwareModuleType) type); specList.add(spec); spec = SoftwareModuleSpecification.isDeletedFalse(); @@ -196,24 +217,24 @@ public class JpaSoftwareManagement implements SoftwareManagement { public SoftwareModule findSoftwareModuleByNameAndVersion(final String name, final String version, final SoftwareModuleType type) { - return softwareModuleRepository.findOneByNameAndVersionAndType(name, version, type); + return softwareModuleRepository.findOneByNameAndVersionAndType(name, version, (JpaSoftwareModuleType) type); } - private boolean isUnassigned(final SoftwareModule bsmMerged) { + private boolean isUnassigned(final JpaSoftwareModule bsmMerged) { return distributionSetRepository.findByModules(bsmMerged).isEmpty(); } - private Slice findSwModuleByCriteriaAPI(final Pageable pageable, - final List> specList) { + private Slice findSwModuleByCriteriaAPI(final Pageable pageable, + final List> specList) { return criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable, - SoftwareModule.class); + JpaSoftwareModule.class); } - private Long countSwModuleByCriteriaAPI(final List> specList) { + private Long countSwModuleByCriteriaAPI(final List> specList) { return softwareModuleRepository.count(SpecificationsBuilder.combineWithAnd(specList)); } - private void deleteGridFsArtifacts(final SoftwareModule swModule) { + private void deleteGridFsArtifacts(final JpaSoftwareModule swModule) { for (final LocalArtifact localArtifact : swModule.getLocalArtifacts()) { artifactManagement.deleteLocalArtifact(localArtifact); } @@ -223,7 +244,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public void deleteSoftwareModules(final Collection ids) { - final List swModulesToDelete = softwareModuleRepository.findByIdIn(ids); + final List swModulesToDelete = softwareModuleRepository.findByIdIn(ids); final Set assignedModuleIds = new HashSet<>(); swModulesToDelete.forEach(swModule -> { @@ -253,29 +274,29 @@ public class JpaSoftwareManagement implements SoftwareManagement { @Override public Slice findSoftwareModulesAll(final Pageable pageable) { - final List> specList = new ArrayList<>(); + final List> specList = new ArrayList<>(); - Specification spec = SoftwareModuleSpecification.isDeletedFalse(); + Specification spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); spec = (root, query, cb) -> { if (!query.getResultType().isAssignableFrom(Long.class)) { - root.fetch(SoftwareModule_.type); + root.fetch(JpaSoftwareModule_.type); } return cb.conjunction(); }; specList.add(spec); - return findSwModuleByCriteriaAPI(pageable, specList); + return convertSmPage(findSwModuleByCriteriaAPI(pageable, specList)); } @Override public Long countSoftwareModulesAll() { - final List> specList = new ArrayList<>(); + final List> specList = new ArrayList<>(); - final Specification spec = SoftwareModuleSpecification.isDeletedFalse(); + final Specification spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); return countSwModuleByCriteriaAPI(specList); @@ -287,30 +308,38 @@ public class JpaSoftwareManagement implements SoftwareManagement { } @Override - public Page findSoftwareModulesByPredicate(final Specification spec, - final Pageable pageable) { - return softwareModuleRepository.findAll(spec, pageable); + public Page findSoftwareModulesByPredicate(final String rsqlParam, final Pageable pageable) { + final Specification spec = RSQLUtility.parse(rsqlParam, SoftwareModuleFields.class); + + return convertSmPage(softwareModuleRepository.findAll(spec, pageable)); } @Override - public Page findSoftwareModuleTypesByPredicate(final Specification spec, + public Page findSoftwareModuleTypesByPredicate(final String rsqlParam, final Pageable pageable) { - return softwareModuleTypeRepository.findAll(spec, pageable); + + final Specification spec = RSQLUtility.parse(rsqlParam, SoftwareModuleTypeFields.class); + + return convertSmTPage(softwareModuleTypeRepository.findAll(spec, pageable)); + } + + private static Page convertSmTPage(final Slice findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) public List findSoftwareModulesById(final Collection ids) { - return softwareModuleRepository.findByIdIn(ids); + return new ArrayList<>(softwareModuleRepository.findByIdIn(ids)); } @Override public Slice findSoftwareModuleByFilters(final Pageable pageable, final String searchText, final SoftwareModuleType type) { - final List> specList = new ArrayList<>(); + final List> specList = new ArrayList<>(); - Specification spec = SoftwareModuleSpecification.isDeletedFalse(); + Specification spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); if (!Strings.isNullOrEmpty(searchText)) { @@ -319,50 +348,53 @@ public class JpaSoftwareManagement implements SoftwareManagement { } if (null != type) { - spec = SoftwareModuleSpecification.equalType(type); + spec = SoftwareModuleSpecification.equalType((JpaSoftwareModuleType) type); specList.add(spec); } spec = (root, query, cb) -> { if (!query.getResultType().isAssignableFrom(Long.class)) { - root.fetch(SoftwareModule_.type); + root.fetch(JpaSoftwareModule_.type); } return cb.conjunction(); }; specList.add(spec); - return findSwModuleByCriteriaAPI(pageable, specList); + return convertSmPage(findSwModuleByCriteriaAPI(pageable, specList)); } @Override public Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( final Pageable pageable, final Long orderByDistributionId, final String searchText, - final SoftwareModuleType type) { + final SoftwareModuleType ty) { + final JpaSoftwareModuleType type = (JpaSoftwareModuleType) ty; final List resultList = new ArrayList<>(); final int pageSize = pageable.getPageSize(); final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); // get the assigned software modules - final CriteriaQuery assignedQuery = cb.createQuery(SoftwareModule.class); - final Root assignedRoot = assignedQuery.from(SoftwareModule.class); + final CriteriaQuery assignedQuery = cb.createQuery(JpaSoftwareModule.class); + final Root assignedRoot = assignedQuery.from(JpaSoftwareModule.class); assignedQuery.distinct(true); - final ListJoin assignedDsJoin = assignedRoot.join(SoftwareModule_.assignedTo); + final ListJoin assignedDsJoin = assignedRoot + .join(JpaSoftwareModule_.assignedTo); // build the specifications and then to predicates necessary by the // given filters final Predicate[] specPredicate = specificationsToPredicate(buildSpecificationList(searchText, type), assignedRoot, assignedQuery, cb, - cb.equal(assignedDsJoin.get(DistributionSet_.id), orderByDistributionId)); + cb.equal(assignedDsJoin.get(JpaDistributionSet_.id), orderByDistributionId)); // if we have some predicates then add it to the where clause of the // multi select assignedQuery.where(specPredicate); - assignedQuery.orderBy(cb.asc(assignedRoot.get(SoftwareModule_.name)), - cb.asc(assignedRoot.get(SoftwareModule_.version))); + assignedQuery.orderBy(cb.asc(assignedRoot.get(JpaSoftwareModule_.name)), + cb.asc(assignedRoot.get(JpaSoftwareModule_.version))); // don't page the assigned query on database, we need all assigned // software modules to filter // them out in the unassigned query - final List assignedSoftwareModules = entityManager.createQuery(assignedQuery).getResultList(); + final List assignedSoftwareModules = entityManager.createQuery(assignedQuery) + .getResultList(); // map result if (pageable.getOffset() < assignedSoftwareModules.size()) { assignedSoftwareModules @@ -375,14 +407,14 @@ public class JpaSoftwareManagement implements SoftwareManagement { } // get the unassigned software modules - final CriteriaQuery unassignedQuery = cb.createQuery(SoftwareModule.class); + final CriteriaQuery unassignedQuery = cb.createQuery(JpaSoftwareModule.class); unassignedQuery.distinct(true); - final Root unassignedRoot = unassignedQuery.from(SoftwareModule.class); + final Root unassignedRoot = unassignedQuery.from(JpaSoftwareModule.class); Predicate[] unassignedSpec; if (!assignedSoftwareModules.isEmpty()) { unassignedSpec = specificationsToPredicate(buildSpecificationList(searchText, type), unassignedRoot, - unassignedQuery, cb, cb.not(unassignedRoot.get(SoftwareModule_.id) + unassignedQuery, cb, cb.not(unassignedRoot.get(JpaSoftwareModule_.id) .in(assignedSoftwareModules.stream().map(sw -> sw.getId()).collect(Collectors.toList())))); } else { unassignedSpec = specificationsToPredicate(buildSpecificationList(searchText, type), unassignedRoot, @@ -390,9 +422,9 @@ public class JpaSoftwareManagement implements SoftwareManagement { } unassignedQuery.where(unassignedSpec); - unassignedQuery.orderBy(cb.asc(unassignedRoot.get(SoftwareModule_.name)), - cb.asc(unassignedRoot.get(SoftwareModule_.version))); - final List unassignedSoftwareModules = entityManager.createQuery(unassignedQuery) + unassignedQuery.orderBy(cb.asc(unassignedRoot.get(JpaSoftwareModule_.name)), + cb.asc(unassignedRoot.get(JpaSoftwareModule_.version))); + final List unassignedSoftwareModules = entityManager.createQuery(unassignedQuery) .setFirstResult(Math.max(0, pageable.getOffset() - assignedSoftwareModules.size())) .setMaxResults(pageSize).getResultList(); // map result @@ -401,9 +433,9 @@ public class JpaSoftwareManagement implements SoftwareManagement { return new SliceImpl<>(resultList); } - private static List> buildSpecificationList(final String searchText, - final SoftwareModuleType type) { - final List> specList = new ArrayList<>(); + private static List> buildSpecificationList(final String searchText, + final JpaSoftwareModuleType type) { + final List> specList = new ArrayList<>(); if (!Strings.isNullOrEmpty(searchText)) { specList.add(SoftwareModuleSpecification.likeNameOrVersion(searchText)); } @@ -414,8 +446,8 @@ public class JpaSoftwareManagement implements SoftwareManagement { return specList; } - private Predicate[] specificationsToPredicate(final List> specifications, - final Root root, final CriteriaQuery query, final CriteriaBuilder cb, + private Predicate[] specificationsToPredicate(final List> specifications, + final Root root, final CriteriaQuery query, final CriteriaBuilder cb, final Predicate... additionalPredicates) { final List predicates = new ArrayList<>(); specifications.forEach(spec -> predicates.add(spec.toPredicate(root, query, cb))); @@ -428,9 +460,9 @@ public class JpaSoftwareManagement implements SoftwareManagement { @Override public Long countSoftwareModuleByFilters(final String searchText, final SoftwareModuleType type) { - final List> specList = new ArrayList<>(); + final List> specList = new ArrayList<>(); - Specification spec = SoftwareModuleSpecification.isDeletedFalse(); + Specification spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); if (!Strings.isNullOrEmpty(searchText)) { @@ -439,7 +471,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { } if (null != type) { - spec = SoftwareModuleSpecification.equalType(type); + spec = SoftwareModuleSpecification.equalType((JpaSoftwareModuleType) type); specList.add(spec); } @@ -479,17 +511,18 @@ public class JpaSoftwareManagement implements SoftwareManagement { throw new EntityAlreadyExistsException("Given type contains an Id!"); } - return softwareModuleTypeRepository.save(type); + return softwareModuleTypeRepository.save((JpaSoftwareModuleType) type); } @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public void deleteSoftwareModuleType(final SoftwareModuleType type) { + public void deleteSoftwareModuleType(final SoftwareModuleType ty) { + final JpaSoftwareModuleType type = (JpaSoftwareModuleType) ty; if (softwareModuleRepository.countByType(type) > 0 || distributionSetTypeRepository.countByElementsSmType(type) > 0) { - final SoftwareModuleType toDelete = entityManager.merge(type); + final JpaSoftwareModuleType toDelete = entityManager.merge(type); toDelete.setDeleted(true); softwareModuleTypeRepository.save(toDelete); } else { @@ -499,19 +532,22 @@ public class JpaSoftwareManagement implements SoftwareManagement { @Override public Page findSoftwareModuleByAssignedTo(final Pageable pageable, final DistributionSet set) { - return softwareModuleRepository.findByAssignedTo(pageable, set); + return softwareModuleRepository.findByAssignedTo(pageable, (JpaDistributionSet) set); } @Override public Page findSoftwareModuleByAssignedToAndType(final Pageable pageable, final DistributionSet set, final SoftwareModuleType type) { - return softwareModuleRepository.findByAssignedToAndType(pageable, set, type); + return softwareModuleRepository.findByAssignedToAndType(pageable, (JpaDistributionSet) set, + (JpaSoftwareModuleType) type); } @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - public SoftwareModuleMetadata createSoftwareModuleMetadata(final SoftwareModuleMetadata metadata) { + public SoftwareModuleMetadata createSoftwareModuleMetadata(final SoftwareModuleMetadata md) { + final JpaSoftwareModuleMetadata metadata = (JpaSoftwareModuleMetadata) md; + if (softwareModuleMetadataRepository.exists(metadata.getId())) { throwMetadataKeyAlreadyExists(metadata.getId().getKey()); } @@ -519,32 +555,36 @@ public class JpaSoftwareManagement implements SoftwareManagement { // log written because // modifying metadata is modifying the base software module itself for // auditing purposes. - entityManager.merge(metadata.getSoftwareModule()).setLastModifiedAt(-1L); + entityManager.merge((JpaSoftwareModule) metadata.getSoftwareModule()).setLastModifiedAt(-1L); return softwareModuleMetadataRepository.save(metadata); } @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - public List createSoftwareModuleMetadata( - final Collection metadata) { - for (final SoftwareModuleMetadata softwareModuleMetadata : metadata) { + public List createSoftwareModuleMetadata(final Collection md) { + @SuppressWarnings({ "unchecked", "rawtypes" }) + final Collection metadata = (Collection) md; + + for (final JpaSoftwareModuleMetadata softwareModuleMetadata : metadata) { checkAndThrowAlreadyExistsIfSoftwareModuleMetadataExists(softwareModuleMetadata.getId()); } - metadata.forEach(m -> entityManager.merge(m.getSoftwareModule()).setLastModifiedAt(-1L)); - return softwareModuleMetadataRepository.save(metadata); + metadata.forEach(m -> entityManager.merge((JpaSoftwareModule) m.getSoftwareModule()).setLastModifiedAt(-1L)); + return new ArrayList<>(softwareModuleMetadataRepository.save(metadata)); } @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - public SoftwareModuleMetadata updateSoftwareModuleMetadata(final SoftwareModuleMetadata metadata) { + public SoftwareModuleMetadata updateSoftwareModuleMetadata(final SoftwareModuleMetadata md) { + final JpaSoftwareModuleMetadata metadata = (JpaSoftwareModuleMetadata) md; + // check if exists otherwise throw entity not found exception findSoftwareModuleMetadata(metadata.getId()); // touch it to update the lock revision because we are modifying the // software module // indirectly - entityManager.merge(metadata.getSoftwareModule()).setLastModifiedAt(-1L); + entityManager.merge((JpaSoftwareModule) metadata.getSoftwareModule()).setLastModifiedAt(-1L); return softwareModuleMetadataRepository.save(metadata); } @@ -563,15 +603,18 @@ public class JpaSoftwareManagement implements SoftwareManagement { @Override public Page findSoftwareModuleMetadataBySoftwareModuleId(final Long softwareModuleId, - final Specification spec, final Pageable pageable) { - return softwareModuleMetadataRepository - .findAll( - (Specification) (root, query, - cb) -> cb.and( - cb.equal(root.get(SoftwareModuleMetadata_.softwareModule) - .get(SoftwareModule_.id), softwareModuleId), + final String rsqlParam, final Pageable pageable) { + + final Specification spec = RSQLUtility.parse(rsqlParam, + SoftwareModuleMetadataFields.class); + return convertSmMdPage( + softwareModuleMetadataRepository + .findAll( + (Specification) (root, query, cb) -> cb.and( + cb.equal(root.get(JpaSoftwareModuleMetadata_.softwareModule) + .get(JpaSoftwareModule_.id), softwareModuleId), spec.toPredicate(root, query, cb)), - pageable); + pageable)); } @Override @@ -609,4 +652,16 @@ public class JpaSoftwareManagement implements SoftwareManagement { return types.stream().map(this::createSoftwareModuleType).collect(Collectors.toList()); } + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public SoftwareModuleType generateSoftwareModuleType() { + return new JpaSoftwareModuleType(); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public SoftwareModule generateSoftwareModule() { + return new JpaSoftwareModule(); + } + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index b7a08fc2e..1acbd0f1b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -20,6 +20,9 @@ import org.eclipse.hawkbit.report.model.SystemUsageReport; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; +import org.eclipse.hawkbit.repository.jpa.model.JpaTenantMetaData; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.TenantMetaData; @@ -167,7 +170,7 @@ public class JpaSystemManagement implements SystemManagement { try { createInitialTenant.set(tenant); cacheManager.getCache("currentTenant").evict(currentTenantKeyGenerator().generate(null, null)); - return tenantMetaDataRepository.save(new TenantMetaData(createStandardSoftwareDataSetup(), tenant)); + return tenantMetaDataRepository.save(new JpaTenantMetaData(createStandardSoftwareDataSetup(), tenant)); } finally { createInitialTenant.remove(); } @@ -253,27 +256,26 @@ public class JpaSystemManagement implements SystemManagement { throw new EntityNotFoundException("Metadata does not exist: " + metaData.getId()); } - return tenantMetaDataRepository.save(metaData); + return tenantMetaDataRepository.save((JpaTenantMetaData) metaData); } private DistributionSetType createStandardSoftwareDataSetup() { - final SoftwareModuleType eclApp = softwareModuleTypeRepository.save(new SoftwareModuleType("application", + final SoftwareModuleType eclApp = softwareModuleTypeRepository.save(new JpaSoftwareModuleType("application", "ECL Application", "Edge Controller Linux base application type", 1)); - final SoftwareModuleType eclOs = softwareModuleTypeRepository - .save(new SoftwareModuleType("os", "ECL OS", "Edge Controller Linux operation system image type", 1)); + final SoftwareModuleType eclOs = softwareModuleTypeRepository.save( + new JpaSoftwareModuleType("os", "ECL OS", "Edge Controller Linux operation system image type", 1)); final SoftwareModuleType eclJvm = softwareModuleTypeRepository.save( - new SoftwareModuleType("runtime", "ECL JVM", "Edge Controller Linux java virtual machine type.", 1)); + new JpaSoftwareModuleType("runtime", "ECL JVM", "Edge Controller Linux java virtual machine type.", 1)); - distributionSetTypeRepository.save( - new DistributionSetType("ecl_os", "OS only", "Standard Edge Controller Linux distribution set type.") - .addMandatoryModuleType(eclOs)); + distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("ecl_os", "OS only", + "Standard Edge Controller Linux distribution set type.").addMandatoryModuleType(eclOs)); - distributionSetTypeRepository.save(new DistributionSetType("ecl_os_app", "OS with optional app", - "Standard Edge Controller Linux distribution set type. OS only.").addMandatoryModuleType(eclOs) - .addOptionalModuleType(eclApp)); + distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("ecl_os_app", + "OS with optional app", "Standard Edge Controller Linux distribution set type. OS only.") + .addMandatoryModuleType(eclOs).addOptionalModuleType(eclApp)); - return distributionSetTypeRepository - .save(new DistributionSetType("ecl_os_app_jvm", "OS with optional app and jvm", + return distributionSetTypeRepository.save( + (JpaDistributionSetType) new JpaDistributionSetType("ecl_os_app_jvm", "OS with optional app and jvm", "Standard Edge Controller Linux distribution set type. OS with optional application.") .addMandatoryModuleType(eclOs).addOptionalModuleType(eclApp) .addOptionalModuleType(eclJvm)); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java index f1b885b13..4ff9c6e2b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import static com.google.common.base.Preconditions.checkNotNull; +import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -21,20 +22,26 @@ import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.TagFields; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; +import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -86,7 +93,7 @@ public class JpaTagManagement implements TagManagement { throw new EntityAlreadyExistsException(); } - final TargetTag save = targetTagRepository.save(targetTag); + final TargetTag save = targetTagRepository.save((JpaTargetTag) targetTag); afterCommit .afterCommit(() -> eventBus.post(new TargetTagCreatedBulkEvent(tenantAware.getCurrentTenant(), save))); @@ -97,13 +104,17 @@ public class JpaTagManagement implements TagManagement { @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public List createTargetTags(final Iterable targetTags) { + public List createTargetTags(final Collection tt) { + @SuppressWarnings({ "unchecked", "rawtypes" }) + final Collection targetTags = (Collection) tt; + targetTags.forEach(tag -> { if (tag.getId() != null) { throw new EntityAlreadyExistsException(); } }); - final List save = targetTagRepository.save(targetTags); + + final List save = new ArrayList<>(targetTagRepository.save(targetTags)); afterCommit .afterCommit(() -> eventBus.post(new TargetTagCreatedBulkEvent(tenantAware.getCurrentTenant(), save))); return save; @@ -113,10 +124,10 @@ public class JpaTagManagement implements TagManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public void deleteTargetTag(final String targetTagName) { - final TargetTag tag = targetTagRepository.findByNameEquals(targetTagName); + final JpaTargetTag tag = targetTagRepository.findByNameEquals(targetTagName); - final List changed = new LinkedList<>(); - for (final Target target : targetRepository.findByTag(tag)) { + final List changed = new LinkedList<>(); + for (final JpaTarget target : targetRepository.findByTag(tag)) { target.getTags().remove(tag); changed.add(target); } @@ -133,12 +144,22 @@ public class JpaTagManagement implements TagManagement { @Override public List findAllTargetTags() { - return targetTagRepository.findAll(); + return new ArrayList<>(targetTagRepository.findAll()); } @Override - public Page findAllTargetTags(final Specification spec, final Pageable pageable) { - return targetTagRepository.findAll(spec, pageable); + public Page findAllTargetTags(final String rsqlParam, final Pageable pageable) { + + final Specification spec = RSQLUtility.parse(rsqlParam, TagFields.class); + return convertTPage(targetTagRepository.findAll(spec, pageable)); + } + + private static Page convertTPage(final Page findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); + } + + private static Page convertDsPage(final Page findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override @@ -152,7 +173,7 @@ public class JpaTagManagement implements TagManagement { public TargetTag updateTargetTag(final TargetTag targetTag) { checkNotNull(targetTag.getName()); checkNotNull(targetTag.getId()); - final TargetTag save = targetTagRepository.save(targetTag); + final TargetTag save = targetTagRepository.save((JpaTargetTag) targetTag); afterCommit.afterCommit(() -> eventBus.post(new TargetTagUpdateEvent(save))); return save; } @@ -174,7 +195,7 @@ public class JpaTagManagement implements TagManagement { throw new EntityAlreadyExistsException(); } - final DistributionSetTag save = distributionSetTagRepository.save(distributionSetTag); + final DistributionSetTag save = distributionSetTagRepository.save((JpaDistributionSetTag) distributionSetTag); afterCommit.afterCommit( () -> eventBus.post(new DistributionSetTagCreatedBulkEvent(tenantAware.getCurrentTenant(), save))); @@ -184,14 +205,17 @@ public class JpaTagManagement implements TagManagement { @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public List createDistributionSetTags( - final Collection distributionSetTags) { + public List createDistributionSetTags(final Collection dst) { + + @SuppressWarnings({ "rawtypes", "unchecked" }) + final Collection distributionSetTags = (Collection) dst; + for (final DistributionSetTag dsTag : distributionSetTags) { if (dsTag.getId() != null) { throw new EntityAlreadyExistsException(); } } - final List save = distributionSetTagRepository.save(distributionSetTags); + final List save = new ArrayList<>(distributionSetTagRepository.save(distributionSetTags)); afterCommit.afterCommit( () -> eventBus.post(new DistributionSetTagCreatedBulkEvent(tenantAware.getCurrentTenant(), save))); @@ -202,10 +226,10 @@ public class JpaTagManagement implements TagManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public void deleteDistributionSetTag(final String tagName) { - final DistributionSetTag tag = distributionSetTagRepository.findByNameEquals(tagName); + final JpaDistributionSetTag tag = distributionSetTagRepository.findByNameEquals(tagName); - final List changed = new LinkedList<>(); - for (final DistributionSet set : distributionSetRepository.findByTag(tag)) { + final List changed = new LinkedList<>(); + for (final JpaDistributionSet set : distributionSetRepository.findByTag(tag)) { set.getTags().remove(tag); changed.add(set); } @@ -224,7 +248,7 @@ public class JpaTagManagement implements TagManagement { public DistributionSetTag updateDistributionSetTag(final DistributionSetTag distributionSetTag) { checkNotNull(distributionSetTag.getName()); checkNotNull(distributionSetTag.getId()); - final DistributionSetTag save = distributionSetTagRepository.save(distributionSetTag); + final DistributionSetTag save = distributionSetTagRepository.save((JpaDistributionSetTag) distributionSetTag); afterCommit.afterCommit(() -> eventBus.post(new DistributionSetTagUpdateEvent(save))); return save; @@ -232,7 +256,7 @@ public class JpaTagManagement implements TagManagement { @Override public List findAllDistributionSetTags() { - return distributionSetTagRepository.findAll(); + return new ArrayList<>(distributionSetTagRepository.findAll()); } @Override @@ -247,18 +271,31 @@ public class JpaTagManagement implements TagManagement { @Override public Page findAllTargetTags(final Pageable pageReq) { - return targetTagRepository.findAll(pageReq); + return convertTPage(targetTagRepository.findAll(pageReq)); } @Override public Page findAllDistributionSetTags(final Pageable pageReq) { - return distributionSetTagRepository.findAll(pageReq); + return convertDsPage(distributionSetTagRepository.findAll(pageReq)); } @Override - public Page findAllDistributionSetTags(final Specification spec, - final Pageable pageable) { - return distributionSetTagRepository.findAll(spec, pageable); + public Page findAllDistributionSetTags(final String rsqlParam, final Pageable pageable) { + final Specification spec = RSQLUtility.parse(rsqlParam, TagFields.class); + + return convertDsPage(distributionSetTagRepository.findAll(spec, pageable)); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public TargetTag generateTargetTag() { + return new JpaTargetTag(); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public DistributionSetTag generateDistributionSetTag() { + return new JpaDistributionSetTag(); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java index a8c6b014f..5dd33b762 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java @@ -13,11 +13,13 @@ import java.util.List; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; +import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; +import org.eclipse.hawkbit.repository.jpa.specifications.TargetFilterQuerySpecification; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; -import org.eclipse.hawkbit.repository.specifications.SpecificationsBuilder; -import org.eclipse.hawkbit.repository.specifications.TargetFilterQuerySpecification; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specifications; @@ -50,7 +52,7 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme if (targetFilterQueryRepository.findByName(customTargetFilter.getName()) != null) { throw new EntityAlreadyExistsException(customTargetFilter.getName()); } - return targetFilterQueryRepository.save(customTargetFilter); + return targetFilterQueryRepository.save((JpaTargetFilterQuery) customTargetFilter); } @Override @@ -62,25 +64,29 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme @Override public Page findAllTargetFilterQuery(final Pageable pageable) { - return targetFilterQueryRepository.findAll(pageable); + return convertPage(targetFilterQueryRepository.findAll(pageable)); + } + + private static Page convertPage(final Page findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override public Page findTargetFilterQueryByFilters(final Pageable pageable, final String name) { - final List> specList = new ArrayList<>(); + final List> specList = new ArrayList<>(); if (!Strings.isNullOrEmpty(name)) { specList.add(TargetFilterQuerySpecification.likeName(name)); } - return findTargetFilterQueryByCriteriaAPI(pageable, specList); + return convertPage(findTargetFilterQueryByCriteriaAPI(pageable, specList)); } - private Page findTargetFilterQueryByCriteriaAPI(final Pageable pageable, - final List> specList) { + private Page findTargetFilterQueryByCriteriaAPI(final Pageable pageable, + final List> specList) { if (specList == null || specList.isEmpty()) { return targetFilterQueryRepository.findAll(pageable); } - final Specifications specs = SpecificationsBuilder.combineWithAnd(specList); + final Specifications specs = SpecificationsBuilder.combineWithAnd(specList); return targetFilterQueryRepository.findAll(specs, pageable); } @@ -99,7 +105,7 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme @Transactional(isolation = Isolation.READ_UNCOMMITTED) public TargetFilterQuery updateTargetFilterQuery(final TargetFilterQuery targetFilterQuery) { Assert.notNull(targetFilterQuery.getId()); - return targetFilterQueryRepository.save(targetFilterQuery); + return targetFilterQueryRepository.save((JpaTargetFilterQuery) targetFilterQuery); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java index 513d5b52c..0e900e655 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java @@ -33,22 +33,25 @@ import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.model.DistributionSet_; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; +import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; +import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetIdName; -import org.eclipse.hawkbit.repository.model.TargetInfo; -import org.eclipse.hawkbit.repository.model.TargetInfo_; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.model.Target_; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.repository.specifications.SpecificationsBuilder; -import org.eclipse.hawkbit.repository.specifications.TargetSpecifications; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; @@ -58,6 +61,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.validation.annotation.Validated; @@ -121,7 +125,8 @@ public class JpaTargetManagement implements TargetManagement { @Override public List findTargetByControllerID(final Collection controllerIDs) { - return targetRepository.findAll(TargetSpecifications.byControllerIdWithStatusAndAssignedInJoin(controllerIDs)); + return new ArrayList<>(targetRepository + .findAll(TargetSpecifications.byControllerIdWithStatusAndAssignedInJoin(controllerIDs))); } @Override @@ -134,28 +139,27 @@ public class JpaTargetManagement implements TargetManagement { // workarround - no join fetch allowed that is why we need specification // instead of query for // count() of Pageable - final Specification spec = (root, query, cb) -> { + final Specification spec = (root, query, cb) -> { if (!query.getResultType().isAssignableFrom(Long.class)) { - root.fetch(Target_.targetInfo); + root.fetch(JpaTarget_.targetInfo); } return cb.conjunction(); }; - return criteriaNoCountDao.findAll(spec, pageable, Target.class); + return convertPage(criteriaNoCountDao.findAll(spec, pageable, JpaTarget.class)); } @Override public Slice findTargetsAll(final TargetFilterQuery targetFilterQuery, final Pageable pageable) { - return findTargetsAll(RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class), pageable); + return findTargetsBySpec(RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class), pageable); } @Override - public Slice findTargetsAll(final String targetFilterQuery, final Pageable pageable) { - return findTargetsAll(RSQLUtility.parse(targetFilterQuery, TargetFields.class), pageable); + public Page findTargetsAll(final String targetFilterQuery, final Pageable pageable) { + return findTargetsBySpec(RSQLUtility.parse(targetFilterQuery, TargetFields.class), pageable); } - @Override - public Page findTargetsAll(final Specification spec, final Pageable pageable) { - return targetRepository.findAll(spec, pageable); + private Page findTargetsBySpec(final Specification spec, final Pageable pageable) { + return convertPage(targetRepository.findAll(spec, pageable)); } @Override @@ -171,16 +175,23 @@ public class JpaTargetManagement implements TargetManagement { @Transactional(isolation = Isolation.READ_UNCOMMITTED) public Target updateTarget(final Target target) { Assert.notNull(target.getId()); - target.setNew(false); - return targetRepository.save(target); + + final JpaTarget toUpdate = (JpaTarget) target; + toUpdate.setNew(false); + return targetRepository.save(toUpdate); } @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public List updateTargets(final Iterable targets) { - targets.forEach(target -> target.setNew(false)); - return targetRepository.save(targets); + public List updateTargets(final Collection targets) { + + @SuppressWarnings({ "unchecked", "rawtypes" }) + final Collection toUpdate = (Collection) targets; + + toUpdate.forEach(target -> target.setNew(false)); + + return new ArrayList<>(targetRepository.save(toUpdate)); } @Override @@ -206,11 +217,22 @@ public class JpaTargetManagement implements TargetManagement { } @Override - public Page findTargetByAssignedDistributionSet(final Long distributionSetID, - final Specification spec, final Pageable pageReq) { - return targetRepository.findAll((Specification) (root, query, cb) -> cb.and( + public Page findTargetByAssignedDistributionSet(final Long distributionSetID, final String rsqlParam, + final Pageable pageReq) { + + final Specification spec = RSQLUtility.parse(rsqlParam, TargetFields.class); + + return convertPage(targetRepository.findAll((Specification) (root, query, cb) -> cb.and( TargetSpecifications.hasAssignedDistributionSet(distributionSetID).toPredicate(root, query, cb), - spec.toPredicate(root, query, cb)), pageReq); + spec.toPredicate(root, query, cb)), pageReq)); + } + + private static Page convertPage(final Page findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); + } + + private static Slice convertPage(final Slice findAll) { + return new PageImpl<>(new ArrayList<>(findAll.getContent())); } @Override @@ -219,11 +241,14 @@ public class JpaTargetManagement implements TargetManagement { } @Override - public Page findTargetByInstalledDistributionSet(final Long distributionSetId, - final Specification spec, final Pageable pageable) { - return targetRepository.findAll((Specification) (root, query, cb) -> cb.and( + public Page findTargetByInstalledDistributionSet(final Long distributionSetId, final String rsqlParam, + final Pageable pageable) { + + final Specification spec = RSQLUtility.parse(rsqlParam, TargetFields.class); + + return convertPage(targetRepository.findAll((Specification) (root, query, cb) -> cb.and( TargetSpecifications.hasInstalledDistributionSet(distributionSetId).toPredicate(root, query, cb), - spec.toPredicate(root, query, cb)), pageable); + spec.toPredicate(root, query, cb)), pageable)); } @Override @@ -235,7 +260,7 @@ public class JpaTargetManagement implements TargetManagement { public Slice findTargetByFilters(final Pageable pageable, final Collection status, final String searchText, final Long installedOrAssignedDistributionSetId, final Boolean selectTargetWithNoTag, final String... tagNames) { - final List> specList = buildSpecificationList(status, searchText, + final List> specList = buildSpecificationList(status, searchText, installedOrAssignedDistributionSetId, selectTargetWithNoTag, true, tagNames); return findByCriteriaAPI(pageable, specList); } @@ -244,15 +269,15 @@ public class JpaTargetManagement implements TargetManagement { public Long countTargetByFilters(final Collection status, final String searchText, final Long installedOrAssignedDistributionSetId, final Boolean selectTargetWithNoTag, final String... tagNames) { - final List> specList = buildSpecificationList(status, searchText, + final List> specList = buildSpecificationList(status, searchText, installedOrAssignedDistributionSetId, selectTargetWithNoTag, true, tagNames); return countByCriteriaAPI(specList); } - private static List> buildSpecificationList(final Collection status, + private static List> buildSpecificationList(final Collection status, final String searchText, final Long installedOrAssignedDistributionSetId, final Boolean selectTargetWithNoTag, final boolean fetch, final String... tagNames) { - final List> specList = new ArrayList<>(); + final List> specList = new ArrayList<>(); if (status != null && !status.isEmpty()) { specList.add(TargetSpecifications.hasTargetUpdateStatus(status, fetch)); } @@ -269,14 +294,15 @@ public class JpaTargetManagement implements TargetManagement { return specList; } - private Slice findByCriteriaAPI(final Pageable pageable, final List> specList) { + private Slice findByCriteriaAPI(final Pageable pageable, final List> specList) { if (specList == null || specList.isEmpty()) { - return criteriaNoCountDao.findAll(pageable, Target.class); + return convertPage(criteriaNoCountDao.findAll(pageable, JpaTarget.class)); } - return criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable, Target.class); + return convertPage( + criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable, JpaTarget.class)); } - private Long countByCriteriaAPI(final List> specList) { + private Long countByCriteriaAPI(final List> specList) { if (specList == null || specList.isEmpty()) { return targetRepository.count(); } @@ -298,7 +324,7 @@ public class JpaTargetManagement implements TargetManagement { public TargetTagAssignmentResult toggleTagAssignment(final Collection targetIds, final String tagName) { final TargetTag tag = targetTagRepository.findByNameEquals(tagName); final List alreadyAssignedTargets = targetRepository.findByTagNameAndControllerIdIn(tagName, targetIds); - final List allTargets = targetRepository + final List allTargets = targetRepository .findAll(TargetSpecifications.byControllerIdWithStatusAndTagsInJoin(targetIds)); // all are already assigned -> unassign @@ -315,7 +341,7 @@ public class JpaTargetManagement implements TargetManagement { // some or none are assigned -> assign allTargets.forEach(target -> target.getTags().add(tag)); final TargetTagAssignmentResult result = new TargetTagAssignmentResult(alreadyAssignedTargets.size(), - allTargets.size(), 0, targetRepository.save(allTargets), Collections.emptyList(), tag); + allTargets.size(), 0, new ArrayList<>(targetRepository.save(allTargets)), Collections.emptyList(), tag); afterCommit.afterCommit(() -> eventBus.post(new TargetTagAssigmentResultEvent(result))); @@ -328,11 +354,11 @@ public class JpaTargetManagement implements TargetManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public List assignTag(final Collection targetIds, final TargetTag tag) { - final List allTargets = targetRepository + final List allTargets = targetRepository .findAll(TargetSpecifications.byControllerIdWithStatusAndTagsInJoin(targetIds)); allTargets.forEach(target -> target.getTags().add(tag)); - final List save = targetRepository.save(allTargets); + final List save = new ArrayList<>(targetRepository.save(allTargets)); afterCommit.afterCommit(() -> { final TargetTagAssignmentResult assigmentResult = new TargetTagAssignmentResult(0, save.size(), 0, save, @@ -344,9 +370,11 @@ public class JpaTargetManagement implements TargetManagement { } private List unAssignTag(final Collection targets, final TargetTag tag) { - targets.forEach(target -> target.getTags().remove(tag)); + final Collection toUnassign = (Collection) targets; - final List save = targetRepository.save(targets); + toUnassign.forEach(target -> target.getTags().remove(tag)); + + final List save = new ArrayList<>(targetRepository.save(toUnassign)); afterCommit.afterCommit(() -> { final TargetTagAssignmentResult assigmentResult = new TargetTagAssignmentResult(0, 0, save.size(), Collections.emptyList(), save, tag); @@ -366,8 +394,9 @@ public class JpaTargetManagement implements TargetManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public Target unAssignTag(final String controllerID, final TargetTag targetTag) { - final List allTargets = targetRepository - .findAll(TargetSpecifications.byControllerIdWithStatusAndTagsInJoin(Arrays.asList(controllerID))); + // TODO : optimize this, findone? + final List allTargets = new ArrayList<>(targetRepository + .findAll(TargetSpecifications.byControllerIdWithStatusAndTagsInJoin(Arrays.asList(controllerID)))); final List unAssignTag = unAssignTag(allTargets, targetTag); return unAssignTag.isEmpty() ? null : unAssignTag.get(0); } @@ -378,20 +407,20 @@ public class JpaTargetManagement implements TargetManagement { final Collection filterByStatus, final String filterBySearchText, final Boolean selectTargetWithNoTag, final String... filterByTagNames) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - final CriteriaQuery query = cb.createQuery(Target.class); - final Root targetRoot = query.from(Target.class); + final CriteriaQuery query = cb.createQuery(JpaTarget.class); + final Root targetRoot = query.from(JpaTarget.class); // necessary joins for the select - final Join targetInfo = (Join) targetRoot.fetch(Target_.targetInfo, - JoinType.LEFT); + final Join targetInfo = (Join) targetRoot + .fetch(JpaTarget_.targetInfo, JoinType.LEFT); // select case expression to retrieve the case value as a column to be // able to order based on // this column, installed first,... final Expression selectCase = cb.selectCase() - .when(cb.equal(targetInfo.get(TargetInfo_.installedDistributionSet).get(DistributionSet_.id), + .when(cb.equal(targetInfo.get(JpaTargetInfo_.installedDistributionSet).get(JpaDistributionSet_.id), orderByDistributionId), 1) - .when(cb.equal(targetRoot.get(Target_.assignedDistributionSet).get(DistributionSet_.id), + .when(cb.equal(targetRoot.get(JpaTarget_.assignedDistributionSet).get(JpaDistributionSet_.id), orderByDistributionId), 2) .otherwise(100); // multiselect statement order by the select case and controllerId @@ -409,7 +438,7 @@ public class JpaTargetManagement implements TargetManagement { query.where(specificationsForMultiSelect); } // add the order to the multi select first based on the selectCase - query.orderBy(cb.asc(selectCase), cb.desc(targetRoot.get(Target_.id))); + query.orderBy(cb.asc(selectCase), cb.desc(targetRoot.get(JpaTarget_.id))); // the result is a Object[] due the fact that the selectCase is an extra // column, so it cannot // be mapped directly to a Target entity because the selectCase is not a @@ -419,14 +448,14 @@ public class JpaTargetManagement implements TargetManagement { // multiselect order) of the array and // the 2nd contains the selectCase int value. final int pageSize = pageable.getPageSize(); - final List resultList = entityManager.createQuery(query).setFirstResult(pageable.getOffset()) + final List resultList = entityManager.createQuery(query).setFirstResult(pageable.getOffset()) .setMaxResults(pageSize + 1).getResultList(); final boolean hasNext = resultList.size() > pageSize; - return new SliceImpl<>(resultList, pageable, hasNext); + return new SliceImpl<>(new ArrayList<>(resultList), pageable, hasNext); } - private static Predicate[] specificationsToPredicate(final List> specifications, - final Root root, final CriteriaQuery query, final CriteriaBuilder cb) { + private static Predicate[] specificationsToPredicate(final List> specifications, + final Root root, final CriteriaQuery query, final CriteriaBuilder cb) { final Predicate[] predicates = new Predicate[specifications.size()]; for (int index = 0; index < predicates.length; index++) { predicates[index] = specifications.get(index).toPredicate(root, query, cb); @@ -448,9 +477,9 @@ public class JpaTargetManagement implements TargetManagement { public List findAllTargetIds() { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery query = cb.createQuery(TargetIdName.class); - final Root targetRoot = query.from(Target.class); - return entityManager.createQuery(query.multiselect(targetRoot.get(Target_.id), - targetRoot.get(Target_.controllerId), targetRoot.get(Target_.name))).getResultList(); + final Root targetRoot = query.from(JpaTarget.class); + return entityManager.createQuery(query.multiselect(targetRoot.get(JpaTarget_.id), + targetRoot.get(JpaTarget_.controllerId), targetRoot.get(JpaTarget_.name))).getResultList(); } @@ -461,16 +490,16 @@ public class JpaTargetManagement implements TargetManagement { final String... filterByTagNames) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery query = cb.createQuery(Object[].class); - final Root targetRoot = query.from(Target.class); + final Root targetRoot = query.from(JpaTarget.class); List resultList; - String sortProperty = Target_.id.getName(); + String sortProperty = JpaTarget_.id.getName(); if (pageRequest.getSort() != null && pageRequest.getSort().iterator().hasNext()) { sortProperty = pageRequest.getSort().iterator().next().getProperty(); } - final CriteriaQuery multiselect = query.multiselect(targetRoot.get(Target_.id), - targetRoot.get(Target_.controllerId), targetRoot.get(Target_.name), targetRoot.get(sortProperty)); + final CriteriaQuery multiselect = query.multiselect(targetRoot.get(JpaTarget_.id), + targetRoot.get(JpaTarget_.controllerId), targetRoot.get(JpaTarget_.name), targetRoot.get(sortProperty)); final Predicate[] specificationsForMultiSelect = specificationsToPredicate( buildSpecificationList(filterByStatus, filterBySearchText, installedOrAssignedDistributionSetId, @@ -493,18 +522,18 @@ public class JpaTargetManagement implements TargetManagement { final TargetFilterQuery targetFilterQuery) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery query = cb.createQuery(Object[].class); - final Root targetRoot = query.from(Target.class); + final Root targetRoot = query.from(JpaTarget.class); - String sortProperty = Target_.id.getName(); + String sortProperty = JpaTarget_.id.getName(); if (pageRequest.getSort() != null && pageRequest.getSort().iterator().hasNext()) { sortProperty = pageRequest.getSort().iterator().next().getProperty(); } - final CriteriaQuery multiselect = query.multiselect(targetRoot.get(Target_.id), - targetRoot.get(Target_.controllerId), targetRoot.get(Target_.name), targetRoot.get(sortProperty)); + final CriteriaQuery multiselect = query.multiselect(targetRoot.get(JpaTarget_.id), + targetRoot.get(JpaTarget_.controllerId), targetRoot.get(JpaTarget_.name), targetRoot.get(sortProperty)); - final Specification spec = RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class); - final List> specList = new ArrayList<>(); + final Specification spec = RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class); + final List> specList = new ArrayList<>(); specList.add(spec); final Predicate[] specificationsForMultiSelect = specificationsToPredicate(specList, targetRoot, multiselect, @@ -529,16 +558,17 @@ public class JpaTargetManagement implements TargetManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) @CacheEvict(value = { "targetsCreatedOverPeriod" }, allEntries = true) - public Target createTarget(final Target target, final TargetUpdateStatus status, final Long lastTargetQuery, + public Target createTarget(final Target t, final TargetUpdateStatus status, final Long lastTargetQuery, final URI address) { + final JpaTarget target = (JpaTarget) t; if (targetRepository.findByControllerId(target.getControllerId()) != null) { throw new EntityAlreadyExistsException(target.getControllerId()); } target.setNew(true); - final Target savedTarget = targetRepository.save(target); - final TargetInfo targetInfo = savedTarget.getTargetInfo(); + final JpaTarget savedTarget = targetRepository.save(target); + final JpaTargetInfo targetInfo = (JpaTargetInfo) savedTarget.getTargetInfo(); targetInfo.setUpdateStatus(status); if (lastTargetQuery != null) { targetInfo.setLastTargetQuery(lastTargetQuery); @@ -596,24 +626,24 @@ public class JpaTargetManagement implements TargetManagement { @Override public List findTargetsByTag(final String tagName) { - final TargetTag tag = targetTagRepository.findByNameEquals(tagName); - return targetRepository.findByTag(tag); + final JpaTargetTag tag = targetTagRepository.findByNameEquals(tagName); + return new ArrayList<>(targetRepository.findByTag(tag)); } @Override public Long countTargetByTargetFilterQuery(final TargetFilterQuery targetFilterQuery) { - final Specification specs = RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class); + final Specification specs = RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class); return targetRepository.count(specs); } @Override public Long countTargetByTargetFilterQuery(final String targetFilterQuery) { - final Specification specs = RSQLUtility.parse(targetFilterQuery, TargetFields.class); + final Specification specs = RSQLUtility.parse(targetFilterQuery, TargetFields.class); return targetRepository.count(specs); } private List getTargetIdNameResultSet(final Pageable pageRequest, final CriteriaBuilder cb, - final Root targetRoot, final CriteriaQuery multiselect) { + final Root targetRoot, final CriteriaQuery multiselect) { List resultList; if (pageRequest.getSort() != null) { final List orders = new ArrayList<>(); @@ -633,4 +663,10 @@ public class JpaTargetManagement implements TargetManagement { } return resultList; } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public Target generateTarget(final String controllerId) { + return new JpaTarget(controllerId); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java index 5cc27d75c..c9781a2a4 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.repository.jpa.model.JpaTenantConfiguration; import org.eclipse.hawkbit.repository.model.TenantConfiguration; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; @@ -134,16 +135,17 @@ public class JpaTenantConfigurationManagement implements EnvironmentAware, Tenan configurationKey.validate(applicationContext, value); - TenantConfiguration tenantConfiguration = tenantConfigurationRepository + JpaTenantConfiguration tenantConfiguration = tenantConfigurationRepository .findByKey(configurationKey.getKeyName()); if (tenantConfiguration == null) { - tenantConfiguration = new TenantConfiguration(configurationKey.getKeyName(), value.toString()); + tenantConfiguration = new JpaTenantConfiguration(configurationKey.getKeyName(), value.toString()); } else { tenantConfiguration.setValue(value.toString()); } - final TenantConfiguration updatedTenantConfiguration = tenantConfigurationRepository.save(tenantConfiguration); + final JpaTenantConfiguration updatedTenantConfiguration = tenantConfigurationRepository + .save(tenantConfiguration); final Class clazzT = (Class) value.getClass(); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java index fcad668d2..e6eb62a27 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; import java.util.Optional; +import org.eclipse.hawkbit.repository.jpa.model.JpaLocalArtifact; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -23,7 +24,7 @@ import org.springframework.transaction.annotation.Transactional; * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface LocalArtifactRepository extends BaseEntityRepository { +public interface LocalArtifactRepository extends BaseEntityRepository { /** * Counts artifacts size where the related software module is not @@ -31,7 +32,7 @@ public interface LocalArtifactRepository extends BaseEntityRepository getSumOfUndeletedArtifactSize(); /** @@ -60,7 +61,7 @@ public interface LocalArtifactRepository extends BaseEntityRepository, JpaSpecificationExecutor { + extends BaseEntityRepository, JpaSpecificationExecutor { /** * Retrieves all {@link RolloutGroup} referring a specific rollout in the @@ -36,7 +38,7 @@ public interface RolloutGroupRepository * the rollout the rolloutgroups belong to * @return the rollout groups belonging to a rollout ordered by ID ASC. */ - List findByRolloutOrderByIdAsc(final Rollout rollout); + List findByRolloutOrderByIdAsc(final JpaRollout rollout); /** * Retrieves all {@link RolloutGroup} referring a specific rollout in a @@ -48,7 +50,7 @@ public interface RolloutGroupRepository * the status of the rollout groups * @return the rollout groups belonging to a rollout in a specific status */ - List findByRolloutAndStatus(final Rollout rollout, final RolloutGroupStatus status); + List findByRolloutAndStatus(final Rollout rollout, final RolloutGroupStatus status); /** * Counts all {@link RolloutGroup} referring a specific rollout. @@ -57,7 +59,7 @@ public interface RolloutGroupRepository * the rollout the rolloutgroup belong to * @return the count of the rollout groups for a specific rollout */ - Long countByRollout(final Rollout rollout); + Long countByRollout(final JpaRollout rollout); /** * Counts all {@link RolloutGroup} referring a specific rollout in a @@ -70,7 +72,7 @@ public interface RolloutGroupRepository * @return the count of rollout groups belonging to a rollout in a specific * status */ - Long countByRolloutAndStatus(Rollout rollout, RolloutGroupStatus rolloutGroupStatus); + Long countByRolloutAndStatus(JpaRollout rollout, RolloutGroupStatus rolloutGroupStatus); /** * Counts all {@link RolloutGroup} referring a specific rollout in specific @@ -88,8 +90,8 @@ public interface RolloutGroupRepository * @return the count of rollout groups belonging to a rollout in specific * status */ - @Query("SELECT COUNT(r.id) FROM RolloutGroup r WHERE r.rollout = :rollout and (r.status = :status1 or r.status = :status2)") - Long countByRolloutAndStatusOrStatus(@Param("rollout") Rollout rollout, + @Query("SELECT COUNT(r.id) FROM JpaRolloutGroup r WHERE r.rollout = :rollout and (r.status = :status1 or r.status = :status2)") + Long countByRolloutAndStatusOrStatus(@Param("rollout") JpaRollout rollout, @Param("status1") RolloutGroupStatus rolloutGroupStatus1, @Param("status2") RolloutGroupStatus rolloutGroupStatus2); @@ -103,7 +105,7 @@ public interface RolloutGroupRepository * the status of the rolloutgroups * @return The child {@link RolloutGroup}s in a specific status */ - List findByParentAndStatus(RolloutGroup rolloutGroup, RolloutGroupStatus status); + List findByParentAndStatus(JpaRolloutGroup rolloutGroup, RolloutGroupStatus status); /** * Retrieves all {@link RolloutGroup} for a specific rollout and status not @@ -116,7 +118,7 @@ public interface RolloutGroupRepository * @return rolloutgroup referring to a rollout and not having a specific * status ordered by ID DESC. */ - List findByRolloutAndStatusNotOrderByIdDesc(Rollout rollout, RolloutGroupStatus notStatus); + List findByRolloutAndStatusNotOrderByIdDesc(JpaRollout rollout, RolloutGroupStatus notStatus); /** * Retrieves all {@link RolloutGroup} for a specific rollout. @@ -127,6 +129,6 @@ public interface RolloutGroupRepository * the page request to sort, limit the result * @return a page of found {@link RolloutGroup} or {@code empty}. */ - Page findByRolloutId(final Long rolloutId, Pageable page); + Page findByRolloutId(final Long rolloutId, Pageable page); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java index 212672419..e73c12952 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java @@ -10,8 +10,9 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.Rollout; -import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -25,7 +26,8 @@ import org.springframework.transaction.annotation.Transactional; * The repository interface for the {@link Rollout} model. */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface RolloutRepository extends BaseEntityRepository, JpaSpecificationExecutor { +public interface RolloutRepository + extends BaseEntityRepository, JpaSpecificationExecutor { /** * Updates the {@code lastCheck} field of the {@link Rollout} for rollouts @@ -42,7 +44,7 @@ public interface RolloutRepository extends BaseEntityRepository, */ @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Query("UPDATE Rollout r SET r.lastCheck = :lastCheck WHERE r.lastCheck < (:lastCheck - :delay) AND r.status=:status") + @Query("UPDATE JpaRollout r SET r.lastCheck = :lastCheck WHERE r.lastCheck < (:lastCheck - :delay) AND r.status=:status") int updateLastCheck(@Param("lastCheck") final long lastCheck, @Param("delay") final long delay, @Param("status") final RolloutStatus status); @@ -57,7 +59,7 @@ public interface RolloutRepository extends BaseEntityRepository, * @return the list of {@link Rollout} for specific lastCheck time and * status */ - List findByLastCheckAndStatus(long lastCheck, RolloutStatus status); + List findByLastCheckAndStatus(long lastCheck, RolloutStatus status); /** * Retrieves all {@link Rollout} for a specific {@code name} @@ -66,7 +68,7 @@ public interface RolloutRepository extends BaseEntityRepository, * the rollout name * @return {@link Rollout} for specific name */ - Page findByName(final Pageable pageable, String name); + Page findByName(final Pageable pageable, String name); /** * Retrieves all {@link Rollout} for a specific {@code name} @@ -75,7 +77,7 @@ public interface RolloutRepository extends BaseEntityRepository, * the rollout name * @return {@link Rollout} for specific name */ - Rollout findByName(String name); + JpaRollout findByName(String name); /** * Retrieves all {@link Rollout} for a specific status. @@ -84,5 +86,5 @@ public interface RolloutRepository extends BaseEntityRepository, * the status of the rollouts to retrieve * @return a list of {@link Rollout} having the given status */ - List findByStatus(final RolloutStatus status); + List findByStatus(final RolloutStatus status); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java index 2e7eac55d..8cb267c69 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java @@ -8,8 +8,8 @@ */ package org.eclipse.hawkbit.repository.jpa; -import org.eclipse.hawkbit.repository.model.RolloutTargetGroup; -import org.eclipse.hawkbit.repository.model.RolloutTargetGroupId; +import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; +import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroupId; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.repository.CrudRepository; import org.springframework.transaction.annotation.Isolation; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java index 8023a9361..c962b31ec 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java @@ -10,8 +10,9 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; -import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -25,8 +26,8 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface SoftwareModuleMetadataRepository - extends PagingAndSortingRepository, - JpaSpecificationExecutor { + extends PagingAndSortingRepository, + JpaSpecificationExecutor { /** * Saves all given entities. @@ -37,7 +38,7 @@ public interface SoftwareModuleMetadataRepository * in case the given entity is (@literal null}. */ @Override - List save(Iterable entities); + List save(Iterable entities); /** * finds all software module meta data of the given software module id. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java index e03b3e084..08c84b349 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java @@ -10,6 +10,9 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @@ -30,7 +33,7 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface SoftwareModuleRepository - extends BaseEntityRepository, JpaSpecificationExecutor { + extends BaseEntityRepository, JpaSpecificationExecutor { /** * Counts all {@link SoftwareModule}s based on the given {@link Type}. @@ -39,7 +42,7 @@ public interface SoftwareModuleRepository * to count for * @return number of {@link SoftwareModule}s */ - Long countByType(SoftwareModuleType type); + Long countByType(JpaSoftwareModuleType type); /** * Retrieves {@link SoftwareModule} by filtering on name AND version AND @@ -54,7 +57,7 @@ public interface SoftwareModuleRepository * @return the found {@link SoftwareModule} with the given name AND version * AND type */ - SoftwareModule findOneByNameAndVersionAndType(String name, String version, SoftwareModuleType type); + JpaSoftwareModule findOneByNameAndVersionAndType(String name, String version, JpaSoftwareModuleType type); /** * deletes the {@link SoftwareModule}s with the given IDs. @@ -69,7 +72,7 @@ public interface SoftwareModuleRepository */ @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Query("UPDATE SoftwareModule b SET b.deleted = 1, b.lastModifiedAt = :lastModifiedAt, b.lastModifiedBy = :lastModifiedBy WHERE b.id IN :ids") + @Query("UPDATE JpaSoftwareModule b SET b.deleted = 1, b.lastModifiedAt = :lastModifiedAt, b.lastModifiedBy = :lastModifiedBy WHERE b.id IN :ids") void deleteSoftwareModule(@Param("lastModifiedAt") Long modifiedAt, @Param("lastModifiedBy") String modifiedBy, @Param("ids") final Long... ids); @@ -81,7 +84,7 @@ public interface SoftwareModuleRepository * @return all {@link SoftwareModule}s that are assigned to given * {@link DistributionSet}. */ - Page findByAssignedTo(Pageable pageable, DistributionSet set); + Page findByAssignedTo(Pageable pageable, JpaDistributionSet set); /** * @@ -92,7 +95,7 @@ public interface SoftwareModuleRepository * {@link DistributionSet} */ @EntityGraph(value = "SoftwareModule.artifacts", type = EntityGraphType.LOAD) - List findByAssignedTo(DistributionSet set); + List findByAssignedTo(JpaDistributionSet set); /** * @param pageable @@ -104,7 +107,7 @@ public interface SoftwareModuleRepository * @return all {@link SoftwareModule}s that are assigned to given * {@link DistributionSet} filtered by {@link SoftwareModuleType}. */ - Page findByAssignedToAndType(Pageable pageable, DistributionSet set, SoftwareModuleType type); + Page findByAssignedToAndType(Pageable pageable, JpaDistributionSet set, JpaSoftwareModuleType type); /** * retrieves all software modules with a given {@link SoftwareModuleType} @@ -117,11 +120,11 @@ public interface SoftwareModuleRepository * @return {@link List} of found {@link SoftwareModule}s */ // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477 - @Query("SELECT sm FROM SoftwareModule sm WHERE sm.id IN ?1 and sm.type = ?2") - List findByIdInAndType(Iterable ids, SoftwareModuleType type); + @Query("SELECT sm FROM JpaSoftwareModule sm WHERE sm.id IN ?1 and sm.type = ?2") + List findByIdInAndType(Iterable ids, JpaSoftwareModuleType type); @Override - List save(Iterable entities); + List save(Iterable entities); /** * retrieves all software modules with a given @@ -132,6 +135,6 @@ public interface SoftwareModuleRepository * @return {@link List} of found {@link SoftwareModule}s */ // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477 - @Query("SELECT sm FROM SoftwareModule sm WHERE sm.id IN ?1") - List findByIdIn(Iterable ids); + @Query("SELECT sm FROM JpaSoftwareModule sm WHERE sm.id IN ?1") + List findByIdIn(Iterable ids); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java index fe2cfadf4..c4ecfbd74 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -21,7 +22,7 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface SoftwareModuleTypeRepository - extends BaseEntityRepository, JpaSpecificationExecutor { + extends BaseEntityRepository, JpaSpecificationExecutor { /** * @param pageable @@ -47,7 +48,7 @@ public interface SoftwareModuleTypeRepository * @return all {@link SoftwareModuleType}s in the repository with given * {@link SoftwareModuleType#getKey()} */ - SoftwareModuleType findByKey(String key); + JpaSoftwareModuleType findByKey(String key); /** * @@ -56,5 +57,5 @@ public interface SoftwareModuleTypeRepository * @return all {@link SoftwareModuleType}s in the repository with given * {@link SoftwareModuleType#getName()} */ - SoftwareModuleType findByName(String name); + JpaSoftwareModuleType findByName(String name); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java index 346fe2ec2..1f2fec8d8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.springframework.data.domain.Page; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -21,7 +22,7 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface TargetFilterQueryRepository - extends BaseEntityRepository, JpaSpecificationExecutor { + extends BaseEntityRepository, JpaSpecificationExecutor { /** * Find customer target filter by name @@ -35,11 +36,11 @@ public interface TargetFilterQueryRepository * Find list of all custom target filters. */ @Override - Page findAll(); + Page findAll(); @Override @Modifying @Transactional - S save(S entity); + S save(S entity); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java index 1c3378bba..815fa3961 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java @@ -13,6 +13,7 @@ import java.util.List; import javax.persistence.Entity; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.springframework.cache.annotation.CacheEvict; @@ -42,7 +43,7 @@ public interface TargetInfoRepository { */ @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Query("update TargetInfo ti set ti.updateStatus = :status where ti.targetId in :targets and ti.updateStatus != :status") + @Query("update JpaTargetInfo ti set ti.updateStatus = :status where ti.targetId in :targets and ti.updateStatus != :status") void setTargetUpdateStatus(@Param("status") TargetUpdateStatus status, @Param("targets") List targets); /** @@ -54,7 +55,7 @@ public interface TargetInfoRepository { * @return persisted or updated {@link Entity} */ @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) - S save(S entity); + S save(S entity); /** * Deletes info entries by ID. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java index b3d390016..0d84a3cad 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java @@ -11,11 +11,13 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TargetWithActionStatus; import org.springframework.cache.annotation.CacheEvict; @@ -35,7 +37,7 @@ import org.springframework.transaction.annotation.Transactional; * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface TargetRepository extends BaseEntityRepository, JpaSpecificationExecutor { +public interface TargetRepository extends BaseEntityRepository, JpaSpecificationExecutor { /** * Loads {@link Target} including details {@link EntityGraph} by given ID. @@ -45,7 +47,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * @return found {@link Target} or null if not found. */ @EntityGraph(value = "Target.detail", type = EntityGraphType.LOAD) - Target findByControllerId(String controllerID); + JpaTarget findByControllerId(String controllerID); /** * Finds targets by given list of {@link Target#getControllerId()}s. @@ -65,7 +67,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477 - @Query("DELETE FROM Target t WHERE t.id IN ?1") + @Query("DELETE FROM JpaTarget t WHERE t.id IN ?1") void deleteByIdIn(final Collection targetIDs); /** @@ -75,8 +77,8 @@ public interface TargetRepository extends BaseEntityRepository, Jp * to be found * @return list of found targets */ - @Query(value = "SELECT DISTINCT t FROM Target t JOIN t.tags tt WHERE tt = :tag") - List findByTag(@Param("tag") final TargetTag tag); + @Query(value = "SELECT DISTINCT t FROM JpaTarget t JOIN t.tags tt WHERE tt = :tag") + List findByTag(@Param("tag") final JpaTargetTag tag); /** * Finds all {@link Target}s based on given {@link Target#getControllerId()} @@ -88,7 +90,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * to search for * @return {@link List} of found {@link Target}s. */ - @Query(value = "SELECT DISTINCT t from Target t JOIN t.tags tt WHERE tt.name = :tagname AND t.controllerId IN :targets") + @Query(value = "SELECT DISTINCT t from JpaTarget t JOIN t.tags tt WHERE tt.name = :tagname AND t.controllerId IN :targets") List findByTagNameAndControllerIdIn(@Param("tagname") final String tag, @Param("targets") final Collection controllerIds); @@ -114,7 +116,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * * @return found targets */ - Page findByTargetInfoInstalledDistributionSet(final Pageable pageable, final DistributionSet set); + Page findByTargetInfoInstalledDistributionSet(final Pageable pageable, final JpaDistributionSet set); /** * retrieves the {@link Target}s which has the {@link DistributionSet} @@ -138,7 +140,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * * @return found targets */ - Page findByAssignedDistributionSet(final Pageable pageable, final DistributionSet set); + Page findByAssignedDistributionSet(final Pageable pageable, final JpaDistributionSet set); /** * Saves all given {@link Target}s. @@ -154,7 +156,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) - List save(Iterable entities); + List save(Iterable entities); /** * Saves a given entity. Use the returned instance for further operations as @@ -168,7 +170,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) - S save(S entity); + S save(S entity); /** * Finds all targets that have defined {@link DistributionSet} assigned. @@ -199,7 +201,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * @return number of found {@link Target}s with given * {@link Target#getControllerId()}s */ - @Query("SELECT COUNT(t) FROM Target t WHERE t.controllerId IN ?1") + @Query("SELECT COUNT(t) FROM JpaTarget t WHERE t.controllerId IN ?1") Long countByControllerIdIn(final Collection ids); /** @@ -228,7 +230,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * @return found targets */ Page findByAssignedDistributionSetOrTargetInfoInstalledDistributionSet(final Pageable pageable, - final DistributionSet assigned, final DistributionSet installed); + final JpaDistributionSet assigned, final JpaDistributionSet installed); /** * Finds all targets that have defined {@link DistributionSet} assigned or @@ -255,12 +257,12 @@ public interface TargetRepository extends BaseEntityRepository, Jp * @see org.springframework.data.repository.CrudRepository#findAll() */ @Override - List findAll(); + List findAll(); @Override // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477 - @Query("SELECT t FROM Target t WHERE t.id IN ?1") - List findAll(Iterable ids); + @Query("SELECT t FROM JpaTarget t WHERE t.id IN ?1") + List findAll(Iterable ids); /** * Sets {@link Target#getAssignedDistributionSet()}. @@ -276,11 +278,11 @@ public interface TargetRepository extends BaseEntityRepository, Jp */ @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - @Query("UPDATE Target t SET t.assignedDistributionSet = :set, t.lastModifiedAt = :lastModifiedAt, t.lastModifiedBy = :lastModifiedBy WHERE t.id IN :targets") - void setAssignedDistributionSet(@Param("set") DistributionSet set, @Param("lastModifiedAt") Long modifiedAt, + @Query("UPDATE JpaTarget t SET t.assignedDistributionSet = :set, t.lastModifiedAt = :lastModifiedAt, t.lastModifiedBy = :lastModifiedBy WHERE t.id IN :targets") + void setAssignedDistributionSet(@Param("set") JpaDistributionSet set, @Param("lastModifiedAt") Long modifiedAt, @Param("lastModifiedBy") String modifiedBy, @Param("targets") Collection targets); - List findByRolloutTargetGroupRolloutGroup(final RolloutGroup rolloutGroup); + List findByRolloutTargetGroupRolloutGroup(final JpaRolloutGroup rolloutGroup); /** * @@ -304,7 +306,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * the page request parameter * @return a page of all targets related to a rollout group */ - Page findByActionsRolloutGroup(RolloutGroup rolloutGroup, Pageable page); + Page findByActionsRolloutGroup(JpaRolloutGroup rolloutGroup, Pageable page); /** * Find all targets with action status for a specific group. @@ -315,7 +317,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * the ID of the rollout group * @return targets with action status */ - @Query("select DISTINCT NEW org.eclipse.hawkbit.repository.model.TargetWithActionStatus(a.target,a.status) from Action a inner join fetch a.target t where a.rolloutGroup.id = :rolloutGroupId") + @Query("select DISTINCT NEW org.eclipse.hawkbit.repository.model.TargetWithActionStatus(a.target,a.status) from JpaAction a inner join fetch a.target t where a.rolloutGroup.id = :rolloutGroupId") Page findTargetsWithActionStatusByRolloutGroupId(final Pageable pageable, @Param("rolloutGroupId") Long rolloutGroupId); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java index 92f48d699..6b9e021b1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.TargetTag; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; @@ -22,7 +23,7 @@ import org.springframework.transaction.annotation.Transactional; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface TargetTagRepository - extends BaseEntityRepository, JpaSpecificationExecutor { + extends BaseEntityRepository, JpaSpecificationExecutor { /** * deletes the {@link TargetTag}s with the given tag names. @@ -42,7 +43,7 @@ public interface TargetTagRepository * to filter on * @return the {@link TargetTag} if found, otherwise null */ - TargetTag findByNameEquals(final String tagName); + JpaTargetTag findByNameEquals(final String tagName); /** * Returns all instances of the type. @@ -50,8 +51,8 @@ public interface TargetTagRepository * @return all entities */ @Override - List findAll(); + List findAll(); @Override - List save(Iterable entities); + List save(Iterable entities); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java index 6494aafea..bd99cb918 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaTenantConfiguration; import org.eclipse.hawkbit.repository.model.TenantConfiguration; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; @@ -19,7 +20,7 @@ import org.springframework.transaction.annotation.Transactional; * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface TenantConfigurationRepository extends BaseEntityRepository { +public interface TenantConfigurationRepository extends BaseEntityRepository { /** * Finds a specific {@link TenantConfiguration} by the configuration key. @@ -28,10 +29,10 @@ public interface TenantConfigurationRepository extends BaseEntityRepository findAll(); + List findAll(); /** * Deletes a tenant configuration by tenant and key. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java index 63c213d2c..353f6500b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaTenantMetaData; import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.transaction.annotation.Isolation; @@ -20,7 +21,7 @@ import org.springframework.transaction.annotation.Transactional; * */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface TenantMetaDataRepository extends PagingAndSortingRepository { +public interface TenantMetaDataRepository extends PagingAndSortingRepository { /** * Search {@link TenantMetaData} by tenant name. @@ -42,7 +43,7 @@ public interface TenantMetaDataRepository extends PagingAndSortingRepository findAll(); + List findAll(); /** * @param tenant diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java similarity index 86% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElement.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java index 8414a6f1a..26a603078 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model; +package org.eclipse.hawkbit.repository.jpa.model; import java.io.Serializable; @@ -21,6 +21,10 @@ import javax.persistence.ManyToOne; import javax.persistence.MapsId; import javax.persistence.Table; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; + /** * Relation element between a {@link DistributionSetType} and its * {@link SoftwareModuleType} elements. @@ -40,12 +44,12 @@ public class DistributionSetTypeElement implements Serializable { @MapsId("dsType") @ManyToOne(optional = false, fetch = FetchType.LAZY) @JoinColumn(name = "distribution_set_type", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_type_element_dstype")) - private DistributionSetType dsType; + private JpaDistributionSetType dsType; @MapsId("smType") @ManyToOne(optional = false, fetch = FetchType.LAZY) @JoinColumn(name = "software_module_type", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_type_element_smtype")) - private SoftwareModuleType smType; + private JpaSoftwareModuleType smType; public DistributionSetTypeElement() { // Default constructor for JPA @@ -62,7 +66,7 @@ public class DistributionSetTypeElement implements Serializable { * to true if the {@link SoftwareModuleType} if * mandatory element in the {@link DistributionSet}. */ - public DistributionSetTypeElement(final DistributionSetType dsType, final SoftwareModuleType smType, + public DistributionSetTypeElement(final JpaDistributionSetType dsType, final JpaSoftwareModuleType smType, final boolean mandatory) { super(); key = new DistributionSetTypeElementCompositeKey(dsType, smType); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElementCompositeKey.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElementCompositeKey.java similarity index 89% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElementCompositeKey.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElementCompositeKey.java index 2ee1aba0d..f94a3784a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElementCompositeKey.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElementCompositeKey.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model; +package org.eclipse.hawkbit.repository.jpa.model; import java.io.Serializable; @@ -40,7 +40,7 @@ public class DistributionSetTypeElementCompositeKey implements Serializable { * @param smType * in the key */ - DistributionSetTypeElementCompositeKey(final DistributionSetType dsType, final SoftwareModuleType smType) { + DistributionSetTypeElementCompositeKey(final JpaDistributionSetType dsType, final JpaSoftwareModuleType smType) { super(); this.dsType = dsType.getId(); this.smType = smType.getId(); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DsMetadataCompositeKey.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DsMetadataCompositeKey.java similarity index 95% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DsMetadataCompositeKey.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DsMetadataCompositeKey.java index adc37d65a..52ad217c0 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DsMetadataCompositeKey.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DsMetadataCompositeKey.java @@ -6,10 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model; +package org.eclipse.hawkbit.repository.jpa.model; import java.io.Serializable; +import org.eclipse.hawkbit.repository.model.DistributionSet; + /** * The DistributionSet Metadata composite key which contains the meta data key * and the ID of the DistributionSet itself. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java new file mode 100644 index 000000000..1080b35fd --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java @@ -0,0 +1,274 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.List; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedAttributeNode; +import javax.persistence.NamedEntityGraph; +import javax.persistence.NamedEntityGraphs; +import javax.persistence.NamedSubgraph; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.Transient; + +import org.eclipse.hawkbit.cache.CacheField; +import org.eclipse.hawkbit.cache.CacheKeys; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.persistence.annotations.CascadeOnDelete; + +/** + *

+ * Applicable transition changes of the {@link SoftwareModule}s state of a + * {@link Target}, e.g. install, uninstall, update and preparations for the + * transition change, i.e. download. + *

+ * + *

+ * Actions are managed by the SP server and applied to the targets by the + * client. + *

+ */ +@Table(name = "sp_action", indexes = { @Index(name = "sp_idx_action_01", columnList = "tenant,distribution_set"), + @Index(name = "sp_idx_action_02", columnList = "tenant,target,active"), + @Index(name = "sp_idx_action_prim", columnList = "tenant,id") }) +@NamedEntityGraphs({ @NamedEntityGraph(name = "Action.ds", attributeNodes = { @NamedAttributeNode("distributionSet") }), + @NamedEntityGraph(name = "Action.all", attributeNodes = { @NamedAttributeNode("distributionSet"), + @NamedAttributeNode(value = "target", subgraph = "target.ds") }, subgraphs = @NamedSubgraph(name = "target.ds", attributeNodes = @NamedAttributeNode("assignedDistributionSet"))) }) +@Entity +public class JpaAction extends JpaTenantAwareBaseEntity implements Action { + private static final long serialVersionUID = 1L; + + /** + * the {@link DistributionSet} which should be installed by this action. + */ + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "distribution_set", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_ds")) + private JpaDistributionSet distributionSet; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "target", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_target")) + private JpaTarget target; + + @Column(name = "active") + private boolean active; + + @Column(name = "action_type", nullable = false) + @Enumerated(EnumType.STRING) + private ActionType actionType; + + @Column(name = "forced_time") + private long forcedTime; + + @Column(name = "status") + private Status status; + + @CascadeOnDelete + @OneToMany(mappedBy = "action", targetEntity = JpaActionStatus.class, fetch = FetchType.LAZY, cascade = { + CascadeType.REMOVE }) + private List actionStatus; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "rolloutgroup", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_rolloutgroup")) + private JpaRolloutGroup rolloutGroup; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "rollout", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_rollout")) + private JpaRollout rollout; + + /** + * Note: filled only in {@link Status#DOWNLOAD}. + */ + @Transient + @CacheField(key = CacheKeys.DOWNLOAD_PROGRESS_PERCENT) + private int downloadProgressPercent; + + /** + * @return the distributionSet + */ + @Override + public DistributionSet getDistributionSet() { + return distributionSet; + } + + /** + * @param distributionSet + * the distributionSet to set + */ + @Override + public void setDistributionSet(final DistributionSet distributionSet) { + this.distributionSet = (JpaDistributionSet) distributionSet; + } + + /** + * @return true when action is in state {@link Status#CANCELING} or + * {@link Status#CANCELED}, false otherwise + */ + @Override + public boolean isCancelingOrCanceled() { + return status == Status.CANCELING || status == Status.CANCELED; + } + + @Override + public void setActive(final boolean active) { + this.active = active; + } + + @Override + public Status getStatus() { + return status; + } + + @Override + public void setStatus(final Status status) { + this.status = status; + } + + @Override + public int getDownloadProgressPercent() { + return downloadProgressPercent; + } + + @Override + public void setDownloadProgressPercent(final int downloadProgressPercent) { + this.downloadProgressPercent = downloadProgressPercent; + } + + @Override + public boolean isActive() { + return active; + } + + @Override + public void setActionType(final ActionType actionType) { + this.actionType = actionType; + } + + /** + * @return the actionType + */ + @Override + public ActionType getActionType() { + return actionType; + } + + @Override + public List getActionStatus() { + return actionStatus; + } + + @Override + public void setTarget(final Target target) { + this.target = (JpaTarget) target; + } + + @Override + public Target getTarget() { + return target; + } + + @Override + public long getForcedTime() { + return forcedTime; + } + + @Override + public void setForcedTime(final long forcedTime) { + this.forcedTime = forcedTime; + } + + @Override + public RolloutGroup getRolloutGroup() { + return rolloutGroup; + } + + @Override + public void setRolloutGroup(final RolloutGroup rolloutGroup) { + this.rolloutGroup = (JpaRolloutGroup) rolloutGroup; + } + + @Override + public Rollout getRollout() { + return rollout; + } + + @Override + public void setRollout(final Rollout rollout) { + this.rollout = (JpaRollout) rollout; + } + + /** + * checks if the {@link #forcedTime} is hit by the given + * {@code hitTimeMillis}, by means if the given milliseconds are greater + * than the forcedTime. + * + * @param hitTimeMillis + * the milliseconds, mostly the + * {@link System#currentTimeMillis()} + * @return {@code true} if this {@link #type} is in + * {@link ActionType#TIMEFORCED} and the given {@code hitTimeMillis} + * is greater than the {@link #forcedTime} otherwise {@code false} + */ + @Override + public boolean isHitAutoForceTime(final long hitTimeMillis) { + if (actionType == ActionType.TIMEFORCED) { + return hitTimeMillis >= forcedTime; + } + return false; + } + + /** + * @return {@code true} if either the {@link #type} is + * {@link ActionType#FORCED} or {@link ActionType#TIMEFORCED} but + * then if the {@link #forcedTime} has been exceeded otherwise + * always {@code false} + */ + @Override + public boolean isForce() { + switch (actionType) { + case FORCED: + return true; + case TIMEFORCED: + return isHitAutoForceTime(System.currentTimeMillis()); + default: + return false; + } + } + + /** + * @return true when action is forced, false otherwise + */ + @Override + public boolean isForced() { + return actionType == ActionType.FORCED; + } + + @Override + public String toString() { + return "Action [distributionSet=" + distributionSet + ", getId()=" + getId() + "]"; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java new file mode 100644 index 000000000..94f76cae7 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java @@ -0,0 +1,154 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.CollectionTable; +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedAttributeNode; +import javax.persistence.NamedEntityGraph; +import javax.persistence.Table; + +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.persistence.annotations.CascadeOnDelete; + +import com.google.common.base.Splitter; + +/** + * Entity to store the status for a specific action. + */ +@Table(name = "sp_action_status", indexes = { @Index(name = "sp_idx_action_status_01", columnList = "tenant,action"), + @Index(name = "sp_idx_action_status_02", columnList = "tenant,action,status"), + @Index(name = "sp_idx_action_status_prim", columnList = "tenant,id") }) +@NamedEntityGraph(name = "ActionStatus.withMessages", attributeNodes = { @NamedAttributeNode("messages") }) +@Entity +public class JpaActionStatus extends JpaTenantAwareBaseEntity implements ActionStatus { + private static final long serialVersionUID = 1L; + + @Column(name = "target_occurred_at") + private Long occurredAt; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "action", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_act_stat_action")) + private JpaAction action; + + @Column(name = "status") + private Status status; + + @CascadeOnDelete + @ElementCollection(fetch = FetchType.LAZY, targetClass = String.class) + @CollectionTable(name = "sp_action_status_messages", joinColumns = @JoinColumn(name = "action_status_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_stat_msg_act_stat")), indexes = { + @Index(name = "sp_idx_action_status_msgs_01", columnList = "action_status_id") }) + @Column(name = "detail_message", length = 512) + private final List messages = new ArrayList<>(); + + /** + * Creates a new {@link ActionStatus} object. + * + * @param action + * the action for this action status + * @param status + * the status for this action status + * @param occurredAt + * the occurred timestamp + */ + public JpaActionStatus(final Action action, final Status status, final Long occurredAt) { + this.action = (JpaAction) action; + this.status = status; + this.occurredAt = occurredAt; + } + + /** + * Creates a new {@link ActionStatus} object. + * + * @param action + * the action for this action status + * @param status + * the status for this action status + * @param occurredAt + * the occurred timestamp + * @param messages + * the messages which should be added to this action status + */ + public JpaActionStatus(final JpaAction action, final Status status, final Long occurredAt, + final String... messages) { + this.action = action; + this.status = status; + this.occurredAt = occurredAt; + for (final String msg : messages) { + addMessage(msg); + } + } + + /** + * JPA default constructor. + */ + public JpaActionStatus() { + // JPA default constructor. + } + + @Override + public Long getOccurredAt() { + return occurredAt; + } + + @Override + public void setOccurredAt(final Long occurredAt) { + this.occurredAt = occurredAt; + } + + /** + * Adds message including splitting in case it exceeds 512 length. + * + * @param message + * to add + */ + @Override + public final void addMessage(final String message) { + Splitter.fixedLength(512).split(message).forEach(messages::add); + } + + @Override + public List getMessages() { + return messages; + } + + @Override + public Action getAction() { + return action; + } + + @Override + public void setAction(final Action action) { + this.action = (JpaAction) action; + } + + @Override + public Status getStatus() { + return status; + } + + @Override + public void setStatus(final Status status) { + this.status = status; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaArtifact.java new file mode 100644 index 000000000..be0b5e1ac --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaArtifact.java @@ -0,0 +1,63 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Column; +import javax.persistence.MappedSuperclass; + +import org.eclipse.hawkbit.repository.model.Artifact; +import org.eclipse.hawkbit.repository.model.SoftwareModule; + +/** + * Tenant specific locally stored artifact representation that is used by + * {@link SoftwareModule}. + */ +@MappedSuperclass +public abstract class JpaArtifact extends JpaTenantAwareBaseEntity implements Artifact { + private static final long serialVersionUID = 1L; + + @Column(name = "sha1_hash", length = 40, nullable = true) + private String sha1Hash; + + @Column(name = "md5_hash", length = 32, nullable = true) + private String md5Hash; + + @Column(name = "file_size") + private Long size; + + @Override + public abstract SoftwareModule getSoftwareModule(); + + @Override + public String getMd5Hash() { + return md5Hash; + } + + @Override + public String getSha1Hash() { + return sha1Hash; + } + + public void setMd5Hash(final String md5Hash) { + this.md5Hash = md5Hash; + } + + public void setSha1Hash(final String sha1Hash) { + this.sha1Hash = sha1Hash; + } + + @Override + public Long getSize() { + return size; + } + + public void setSize(final Long size) { + this.size = size; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaBaseEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaBaseEntity.java new file mode 100644 index 000000000..cfe4ada52 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaBaseEntity.java @@ -0,0 +1,184 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Access; +import javax.persistence.AccessType; +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.Version; + +import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.eventbus.EntityPropertyChangeListener; +import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +/** + * Holder of the base attributes common to all entities. + * + */ +@MappedSuperclass +@Access(AccessType.FIELD) +@EntityListeners({ AuditingEntityListener.class, CacheFieldEntityListener.class, EntityPropertyChangeListener.class }) +public abstract class JpaBaseEntity implements BaseEntity { + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + private String createdBy; + private String lastModifiedBy; + private Long createdAt; + private Long lastModifiedAt; + + @Version + @Column(name = "optlock_revision") + private long optLockRevision; + + /** + * Default constructor needed for JPA entities. + */ + public JpaBaseEntity() { + // Default constructor needed for JPA entities. + } + + @Override + @Access(AccessType.PROPERTY) + @Column(name = "created_at", insertable = true, updatable = false) + public Long getCreatedAt() { + return createdAt; + } + + @Override + @Access(AccessType.PROPERTY) + @Column(name = "created_by", insertable = true, updatable = false, length = 40) + public String getCreatedBy() { + return createdBy; + } + + @Override + @Access(AccessType.PROPERTY) + @Column(name = "last_modified_at", insertable = false, updatable = true) + public Long getLastModifiedAt() { + return lastModifiedAt; + } + + @Override + @Access(AccessType.PROPERTY) + @Column(name = "last_modified_by", insertable = false, updatable = true, length = 40) + public String getLastModifiedBy() { + return lastModifiedBy; + } + + @CreatedBy + public void setCreatedBy(final String createdBy) { + this.createdBy = createdBy; + } + + @LastModifiedBy + public void setLastModifiedBy(final String lastModifiedBy) { + this.lastModifiedBy = lastModifiedBy; + } + + @CreatedDate + public void setCreatedAt(final Long createdAt) { + this.createdAt = createdAt; + } + + @LastModifiedDate + public void setLastModifiedAt(final Long lastModifiedAt) { + this.lastModifiedAt = lastModifiedAt; + } + + @Override + public long getOptLockRevision() { + return optLockRevision; + } + + public void setOptLockRevision(final long optLockRevision) { + this.optLockRevision = optLockRevision; + } + + @Override + public Long getId() { + return id; + } + + @Override + public String toString() { + return "BaseEntity [id=" + id + "]"; + } + + public void setId(final Long id) { + this.id = id; + } + + /** + * Defined equals/hashcode strategy for the repository in general is that an + * entity is equal if it has the same {@link #getId()} and + * {@link #getOptLockRevision()} and class. + * + * @see java.lang.Object#hashCode() + */ + @Override + // Exception squid:S864 - generated code + @SuppressWarnings({ "squid:S864" }) + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (id == null ? 0 : id.hashCode()); + result = prime * result + (int) (optLockRevision ^ optLockRevision >>> 32); + result = prime * result + this.getClass().getName().hashCode(); + return result; + } + + /** + * Defined equals/hashcode strategy for the repository in general is that an + * entity is equal if it has the same {@link #getId()} and + * {@link #getOptLockRevision()} and class. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(final Object obj) { // NOSONAR - as this is generated + // code + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(this.getClass().isInstance(obj))) { + return false; + } + final JpaBaseEntity other = (JpaBaseEntity) obj; + if (id == null) { + if (other.id != null) { + return false; + } + } else if (!id.equals(other.id)) { + return false; + } + if (optLockRevision != other.optLockRevision) { + return false; + } + return true; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java new file mode 100644 index 000000000..201d4d657 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java @@ -0,0 +1,326 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.NamedAttributeNode; +import javax.persistence.NamedEntityGraph; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.exception.DistributionSetTypeUndefinedException; +import org.eclipse.hawkbit.repository.exception.UnsupportedSoftwareModuleForThisDistributionSetException; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetIdName; +import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; +import org.eclipse.hawkbit.repository.model.DistributionSetTag; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.persistence.annotations.CascadeOnDelete; + +/** + *

+ * The {@link DistributionSet} is defined in the SP repository and contains at + * least an OS and an Agent Hub. + *

+ * + *

+ * A {@link Target} has exactly one target {@link DistributionSet} assigned. + *

+ * + */ +@Entity +@Table(name = "sp_distribution_set", uniqueConstraints = { + @UniqueConstraint(columnNames = { "name", "version", "tenant" }, name = "uk_distrib_set") }, indexes = { + @Index(name = "sp_idx_distribution_set_01", columnList = "tenant,deleted,name,complete"), + @Index(name = "sp_idx_distribution_set_02", columnList = "tenant,required_migration_step"), + @Index(name = "sp_idx_distribution_set_prim", columnList = "tenant,id") }) +@NamedEntityGraph(name = "DistributionSet.detail", attributeNodes = { @NamedAttributeNode("modules"), + @NamedAttributeNode("tags"), @NamedAttributeNode("type") }) +public class JpaDistributionSet extends JpaNamedVersionedEntity implements DistributionSet { + private static final long serialVersionUID = 1L; + + @Column(name = "required_migration_step") + private boolean requiredMigrationStep = false; + + @ManyToMany(targetEntity = JpaSoftwareModule.class, fetch = FetchType.LAZY) + @JoinTable(name = "sp_ds_module", joinColumns = { + @JoinColumn(name = "ds_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_module_ds")) }, inverseJoinColumns = { + @JoinColumn(name = "module_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_module_module")) }) + private final Set modules = new HashSet<>(); + + @ManyToMany(targetEntity = JpaDistributionSetTag.class) + @JoinTable(name = "sp_ds_dstag", joinColumns = { + @JoinColumn(name = "ds", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_dstag_ds")) }, inverseJoinColumns = { + @JoinColumn(name = "TAG", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_dstag_tag")) }) + private Set tags = new HashSet<>(); + + @Column(name = "deleted") + private boolean deleted = false; + + @OneToMany(mappedBy = "assignedDistributionSet", targetEntity = JpaTarget.class, fetch = FetchType.LAZY) + private List assignedToTargets; + + @OneToMany(mappedBy = "installedDistributionSet", targetEntity = JpaTargetInfo.class, fetch = FetchType.LAZY) + private List installedAtTargets; + + @OneToMany(mappedBy = "distributionSet", targetEntity = JpaAction.class, fetch = FetchType.LAZY) + private List actions; + + @CascadeOnDelete + @OneToMany(fetch = FetchType.LAZY, targetEntity = JpaDistributionSetMetadata.class, cascade = { + CascadeType.REMOVE }) + @JoinColumn(name = "ds_id", insertable = false, updatable = false) + private final List metadata = new ArrayList<>(); + + @ManyToOne(fetch = FetchType.LAZY, targetEntity = JpaDistributionSetType.class) + @JoinColumn(name = "ds_id", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_dstype_ds")) + private DistributionSetType type; + + @Column(name = "complete") + private boolean complete = false; + + /** + * Default constructor. + */ + public JpaDistributionSet() { + super(); + } + + /** + * Parameterized constructor. + * + * @param name + * of the {@link DistributionSet} + * @param version + * of the {@link DistributionSet} + * @param description + * of the {@link DistributionSet} + * @param type + * of the {@link DistributionSet} + * @param moduleList + * {@link SoftwareModule}s of the {@link DistributionSet} + */ + public JpaDistributionSet(final String name, final String version, final String description, + final DistributionSetType type, final Iterable moduleList) { + super(name, version, description); + + this.type = type; + if (moduleList != null) { + moduleList.forEach(this::addModule); + } + if (this.type != null) { + complete = this.type.checkComplete(this); + } + } + + @Override + public Set getTags() { + return tags; + } + + @Override + public boolean isDeleted() { + return deleted; + } + + /** + * @return immutable list of meta data elements. + */ + @Override + public List getMetadata() { + return Collections.unmodifiableList(metadata); + } + + @Override + public List getActions() { + return actions; + } + + @Override + public boolean isRequiredMigrationStep() { + return requiredMigrationStep; + } + + @Override + public DistributionSet setDeleted(final boolean deleted) { + this.deleted = deleted; + return this; + } + + @Override + public DistributionSet setRequiredMigrationStep(final boolean isRequiredMigrationStep) { + requiredMigrationStep = isRequiredMigrationStep; + return this; + } + + @Override + public DistributionSet setTags(final Set tags) { + this.tags = tags; + return this; + } + + /** + * @return the assignedTargets + */ + @Override + public List getAssignedTargets() { + return assignedToTargets; + } + + /** + * @return the installedTargets + */ + @Override + public List getInstalledTargets() { + return installedAtTargets; + } + + @Override + public String toString() { + return "DistributionSet [getName()=" + getName() + ", getOptLockRevision()=" + getOptLockRevision() + + ", getId()=" + getId() + "]"; + } + + /** + * + * @return unmodifiableSet of {@link SoftwareModule}. + */ + @Override + public Set getModules() { + return Collections.unmodifiableSet(modules); + } + + @Override + public DistributionSetIdName getDistributionSetIdName() { + return new DistributionSetIdName(getId(), getName(), getVersion()); + } + + /** + * @param softwareModule + * @return true if the module was added and false + * if it already existed in the set + * + */ + @Override + public boolean addModule(final SoftwareModule softwareModule) { + + // we cannot allow that modules are added without a type defined + if (type == null) { + throw new DistributionSetTypeUndefinedException(); + } + + // check if it is allowed to such a module to this DS type + if (!type.containsModuleType(softwareModule.getType())) { + throw new UnsupportedSoftwareModuleForThisDistributionSetException(); + } + + final Optional found = modules.stream() + .filter(module -> module.getId().equals(softwareModule.getId())).findFirst(); + + if (found.isPresent()) { + return false; + } + + final long allready = modules.stream() + .filter(module -> module.getType().getKey().equals(softwareModule.getType().getKey())).count(); + + if (allready >= softwareModule.getType().getMaxAssignments()) { + final Optional sameKey = modules.stream() + .filter(module -> module.getType().getKey().equals(softwareModule.getType().getKey())).findFirst(); + modules.remove(sameKey.get()); + } + + if (modules.add(softwareModule)) { + complete = type.checkComplete(this); + return true; + } + + return false; + } + + /** + * Removed given {@link SoftwareModule} from this DS instance. + * + * @param softwareModule + * to remove + * @return true if element was found and removed + */ + @Override + public boolean removeModule(final SoftwareModule softwareModule) { + final Optional found = modules.stream() + .filter(module -> module.getId().equals(softwareModule.getId())).findFirst(); + + if (found.isPresent()) { + modules.remove(found.get()); + complete = type.checkComplete(this); + return true; + } + + return false; + + } + + /** + * Searches through modules for the given type. + * + * @param type + * to search for + * @return SoftwareModule of given type or null if not in the + * list. + */ + @Override + public SoftwareModule findFirstModuleByType(final SoftwareModuleType type) { + final Optional result = modules.stream().filter(module -> module.getType().equals(type)) + .findFirst(); + + if (result.isPresent()) { + return result.get(); + } + + return null; + } + + @Override + public DistributionSetType getType() { + return type; + } + + @Override + public void setType(final DistributionSetType type) { + this.type = type; + } + + @Override + public boolean isComplete() { + return complete; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java new file mode 100644 index 000000000..b73e3c72e --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java @@ -0,0 +1,85 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; + +/** + * Meta data for {@link DistributionSet}. + * + */ +@IdClass(DsMetadataCompositeKey.class) +@Entity +@Table(name = "sp_ds_metadata") +public class JpaDistributionSetMetadata extends JpaMetaData implements DistributionSetMetadata { + private static final long serialVersionUID = 1L; + + @Id + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "ds_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_ds")) + private JpaDistributionSet distributionSet; + + public JpaDistributionSetMetadata() { + // default public constructor for JPA + } + + public JpaDistributionSetMetadata(final String key, final DistributionSet distributionSet, final String value) { + super(key, value); + this.distributionSet = (JpaDistributionSet) distributionSet; + } + + public DsMetadataCompositeKey getId() { + return new DsMetadataCompositeKey(distributionSet, getKey()); + } + + @Override + public void setDistributionSet(final DistributionSet distributionSet) { + this.distributionSet = (JpaDistributionSet) distributionSet; + } + + @Override + public DistributionSet getDistributionSet() { + return distributionSet; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((distributionSet == null) ? 0 : distributionSet.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (!super.equals(obj)) { + return false; + } + final JpaDistributionSetMetadata other = (JpaDistributionSetMetadata) obj; + if (distributionSet == null) { + if (other.distributionSet != null) { + return false; + } + } else if (!distributionSet.equals(other.distributionSet)) { + return false; + } + return true; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java new file mode 100644 index 000000000..4b6e67135 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Index; +import javax.persistence.ManyToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetTag; + +/** + * A {@link DistributionSetTag} is used to describe DistributionSet attributes + * and use them also for filtering the DistributionSet list. + * + */ +@Entity +@Table(name = "sp_distributionset_tag", indexes = { + @Index(name = "sp_idx_distribution_set_tag_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = { + "name", "tenant" }, name = "uk_ds_tag")) +public class JpaDistributionSetTag extends JpaTag implements DistributionSetTag { + private static final long serialVersionUID = 1L; + + @ManyToMany(mappedBy = "tags", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY) + private List assignedToDistributionSet; + + /** + * Public constructor. + * + * @param name + * of the {@link DistributionSetTag} + **/ + public JpaDistributionSetTag(final String name) { + super(name, null, null); + } + + /** + * Public constructor. + * + * @param name + * of the {@link DistributionSetTag} + * @param description + * of the {@link DistributionSetTag} + * @param colour + * of tag in UI + */ + public JpaDistributionSetTag(final String name, final String description, final String colour) { + super(name, description, colour); + } + + public JpaDistributionSetTag() { + super(); + } + + @Override + public List getAssignedToDistributionSet() { + return assignedToDistributionSet; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + this.getClass().getName().hashCode(); + return result; + } + + @Override + public boolean equals(final Object obj) { // NOSONAR - as this is generated + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof DistributionSetTag)) { + return false; + } + + return true; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java new file mode 100644 index 000000000..d8edd4dcc --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java @@ -0,0 +1,310 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; + +/** + * A distribution set type defines which software module types can or have to be + * {@link DistributionSet}. + * + */ +@Entity +@Table(name = "sp_distribution_set_type", indexes = { + @Index(name = "sp_idx_distribution_set_type_01", columnList = "tenant,deleted"), + @Index(name = "sp_idx_distribution_set_type_prim", columnList = "tenant,id") }, uniqueConstraints = { + @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_dst_name"), + @UniqueConstraint(columnNames = { "type_key", "tenant" }, name = "uk_dst_key") }) +public class JpaDistributionSetType extends JpaNamedEntity implements DistributionSetType { + private static final long serialVersionUID = 1L; + + @OneToMany(targetEntity = DistributionSetTypeElement.class, cascade = { + CascadeType.ALL }, fetch = FetchType.EAGER, orphanRemoval = true) + @JoinColumn(name = "distribution_set_type", insertable = false, updatable = false) + private final Set elements = new HashSet<>(); + + @Column(name = "type_key", nullable = false, length = 64) + private String key; + + @Column(name = "colour", nullable = true, length = 16) + private String colour; + + @Column(name = "deleted") + private boolean deleted = false; + + public JpaDistributionSetType() { + // default public constructor for JPA + } + + /** + * Standard constructor. + * + * @param key + * of the type (unique) + * @param name + * of the type (unique) + * @param description + * of the type + */ + public JpaDistributionSetType(final String key, final String name, final String description) { + this(key, name, description, null); + } + + /** + * Constructor. + * + * @param key + * of the type + * @param name + * of the type + * @param description + * of the type + * @param color + * of the type. It will be null by default + */ + public JpaDistributionSetType(final String key, final String name, final String description, final String color) { + super(name, description); + this.key = key; + colour = color; + } + + /** + * @return the deleted + */ + @Override + public boolean isDeleted() { + return deleted; + } + + /** + * @param deleted + * the deleted to set + */ + @Override + public void setDeleted(final boolean deleted) { + this.deleted = deleted; + } + + @Override + public Set getMandatoryModuleTypes() { + return elements.stream().filter(element -> element.isMandatory()).map(element -> element.getSmType()) + .collect(Collectors.toSet()); + } + + @Override + public Set getOptionalModuleTypes() { + return elements.stream().filter(element -> !element.isMandatory()).map(element -> element.getSmType()) + .collect(Collectors.toSet()); + } + + /** + * Checks if the given {@link SoftwareModuleType} is in this + * {@link DistributionSetType}. + * + * @param softwareModuleType + * search for + * @return true if found + */ + @Override + public boolean containsModuleType(final SoftwareModuleType softwareModuleType) { + for (final DistributionSetTypeElement distributionSetTypeElement : elements) { + if (distributionSetTypeElement.getSmType().equals(softwareModuleType)) { + return true; + } + + } + return false; + } + + /** + * Checks if the given {@link SoftwareModuleType} is in this + * {@link DistributionSetType} and defined as + * {@link DistributionSetTypeElement#isMandatory()}. + * + * @param softwareModuleType + * search for + * @return true if found + */ + @Override + public boolean containsMandatoryModuleType(final SoftwareModuleType softwareModuleType) { + return elements.stream().filter(element -> element.isMandatory()) + .filter(element -> element.getSmType().equals(softwareModuleType)).findFirst().isPresent(); + + } + + /** + * Checks if the given {@link SoftwareModuleType} is in this + * {@link DistributionSetType} and defined as + * {@link DistributionSetTypeElement#isMandatory()}. + * + * @param softwareModuleType + * search for by {@link SoftwareModuleType#getId()} + * @return true if found + */ + @Override + public boolean containsMandatoryModuleType(final Long softwareModuleTypeId) { + return elements.stream().filter(element -> element.isMandatory()) + .filter(element -> element.getSmType().getId().equals(softwareModuleTypeId)).findFirst().isPresent(); + + } + + /** + * Checks if the given {@link SoftwareModuleType} is in this + * {@link DistributionSetType} and NOT defined as + * {@link DistributionSetTypeElement#isMandatory()}. + * + * @param softwareModuleType + * search for + * @return true if found + */ + @Override + public boolean containsOptionalModuleType(final SoftwareModuleType softwareModuleType) { + return elements.stream().filter(element -> !element.isMandatory()) + .filter(element -> element.getSmType().equals(softwareModuleType)).findFirst().isPresent(); + + } + + /** + * Checks if the given {@link SoftwareModuleType} is in this + * {@link DistributionSetType} and NOT defined as + * {@link DistributionSetTypeElement#isMandatory()}. + * + * @param softwareModuleTypeId + * search by {@link SoftwareModuleType#getId()} + * @return true if found + */ + @Override + public boolean containsOptionalModuleType(final Long softwareModuleTypeId) { + return elements.stream().filter(element -> !element.isMandatory()) + .filter(element -> element.getSmType().getId().equals(softwareModuleTypeId)).findFirst().isPresent(); + + } + + /** + * Compares the modules of this {@link DistributionSetType} and the given + * one. + * + * @param dsType + * to compare with + * @return true if the lists are identical. + */ + @Override + public boolean areModuleEntriesIdentical(final DistributionSetType dsType) { + return new HashSet(((JpaDistributionSetType) dsType).elements).equals(elements); + } + + /** + * Adds {@link SoftwareModuleType} that is optional for the + * {@link DistributionSet}. + * + * @param smType + * to add + * @return updated instance + */ + @Override + public DistributionSetType addOptionalModuleType(final SoftwareModuleType smType) { + elements.add(new DistributionSetTypeElement(this, (JpaSoftwareModuleType) smType, false)); + + return this; + } + + /** + * Adds {@link SoftwareModuleType} that is mandatory for the + * {@link DistributionSet}. + * + * @param smType + * to add + * @return updated instance + */ + @Override + public DistributionSetType addMandatoryModuleType(final SoftwareModuleType smType) { + elements.add(new DistributionSetTypeElement(this, (JpaSoftwareModuleType) smType, true)); + + return this; + } + + /** + * Removes {@link SoftwareModuleType} from the list. + * + * @param smTypeId + * to remove + * @return updated instance + */ + @Override + public DistributionSetType removeModuleType(final Long smTypeId) { + // we search by id (standard equals compares also revison) + final Optional found = elements.stream() + .filter(element -> element.getSmType().getId().equals(smTypeId)).findFirst(); + + if (found.isPresent()) { + elements.remove(found.get()); + } + + return this; + } + + @Override + public String getKey() { + return key; + } + + @Override + public void setKey(final String key) { + this.key = key; + } + + /** + * @param distributionSet + * to check for completeness + * @return true if the all mandatory software module types are + * in the system. + */ + @Override + public boolean checkComplete(final DistributionSet distributionSet) { + return distributionSet.getModules().stream().map(module -> module.getType()).collect(Collectors.toList()) + .containsAll(getMandatoryModuleTypes()); + } + + @Override + public String getColour() { + return colour; + } + + @Override + public void setColour(final String colour) { + this.colour = colour; + } + + public Set getElements() { + return elements; + } + + @Override + public String toString() { + return "DistributionSetType [key=" + key + ", isDeleted()=" + isDeleted() + ", getId()=" + getId() + "]"; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java new file mode 100644 index 000000000..ab55bf307 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java @@ -0,0 +1,142 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.net.URL; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.repository.model.ExternalArtifact; +import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; +import org.eclipse.hawkbit.repository.model.SoftwareModule; + +/** + * External artifact representation with all the necessary information to + * generate an artifact {@link URL} at runtime. + * + */ +@Table(name = "sp_external_artifact", indexes = { + @Index(name = "sp_idx_external_artifact_prim", columnList = "id,tenant") }) +@Entity +public class JpaExternalArtifact extends JpaArtifact implements ExternalArtifact { + private static final long serialVersionUID = 1L; + + @ManyToOne + @JoinColumn(name = "provider", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_art_to_ext_provider")) + private JpaExternalArtifactProvider externalArtifactProvider; + + @Column(name = "url_suffix", length = 512) + private String urlSuffix; + + // CascadeType.PERSIST as we register ourself at the BSM + @ManyToOne(optional = false, cascade = { CascadeType.PERSIST }) + @JoinColumn(name = "software_module", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_external_assigned_sm")) + private JpaSoftwareModule softwareModule; + + /** + * Default constructor. + */ + public JpaExternalArtifact() { + super(); + } + + /** + * Constructs {@link ExternalArtifact}. + * + * @param externalArtifactProvider + * of the artifact + * @param urlSuffix + * of the artifact + * @param softwareModule + * of the artifact + */ + public JpaExternalArtifact(@NotNull final ExternalArtifactProvider externalArtifactProvider, final String urlSuffix, + final SoftwareModule softwareModule) { + setSoftwareModule(softwareModule); + this.externalArtifactProvider = (JpaExternalArtifactProvider) externalArtifactProvider; + + if (urlSuffix != null) { + this.urlSuffix = urlSuffix; + } else { + this.urlSuffix = externalArtifactProvider.getDefaultSuffix(); + } + } + + /** + * @return the softwareModule + */ + @Override + public SoftwareModule getSoftwareModule() { + return softwareModule; + } + + @Override + public final void setSoftwareModule(final SoftwareModule softwareModule) { + this.softwareModule = (JpaSoftwareModule) softwareModule; + this.softwareModule.addArtifact(this); + } + + @Override + public ExternalArtifactProvider getExternalArtifactProvider() { + return externalArtifactProvider; + } + + @Override + public String getUrl() { + return new StringBuilder().append(externalArtifactProvider.getBasePath()).append(urlSuffix).toString(); + } + + @Override + public String getUrlSuffix() { + return urlSuffix; + } + + @Override + public void setExternalArtifactProvider(final ExternalArtifactProvider externalArtifactProvider) { + this.externalArtifactProvider = (JpaExternalArtifactProvider) externalArtifactProvider; + } + + /** + * @param urlSuffix + * the urlSuffix to set + */ + @Override + public void setUrlSuffix(final String urlSuffix) { + this.urlSuffix = urlSuffix; + } + + @Override + public int hashCode() { // NOSONAR - as this is generated + final int prime = 31; + int result = super.hashCode(); + result = prime * result + this.getClass().getName().hashCode(); + return result; + } + + @Override + public boolean equals(final Object obj) { // NOSONAR - as this is generated + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof JpaExternalArtifact)) { + return false; + } + + return true; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java new file mode 100644 index 000000000..527a90510 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java @@ -0,0 +1,83 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Index; +import javax.persistence.Table; + +import org.eclipse.hawkbit.repository.model.ExternalArtifact; +import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; + +/** + * External repositories for artifact storage. The SP server provides URLs for + * the targets to download from these external resources but does not access + * them itself. + * + */ +@Table(name = "sp_external_provider", indexes = { + @Index(name = "sp_idx_external_provider_prim", columnList = "tenant,id") }) +@Entity +public class JpaExternalArtifactProvider extends JpaNamedEntity implements ExternalArtifactProvider { + private static final long serialVersionUID = 1L; + + @Column(name = "base_url", length = 512, nullable = false) + private String basePath; + + @Column(name = "default_url_suffix", length = 512, nullable = true) + private String defaultSuffix; + + /** + * Constructs {@link ExternalArtifactProvider} based on given properties. + * + * @param name + * of the provided + * @param description + * which is optional + * @param baseURL + * of all {@link ExternalArtifact}s of the provider + * @param defaultUrlSuffix + * that is used if {@link ExternalArtifact#getUrlSuffix()} is + * empty. + */ + public JpaExternalArtifactProvider(final String name, final String description, final String baseURL, + final String defaultUrlSuffix) { + super(name, description); + basePath = baseURL; + defaultSuffix = defaultUrlSuffix; + } + + JpaExternalArtifactProvider() { + super(); + defaultSuffix = ""; + basePath = ""; + } + + @Override + public String getBasePath() { + return basePath; + } + + @Override + public String getDefaultSuffix() { + return defaultSuffix; + } + + @Override + public void setBasePath(final String basePath) { + this.basePath = basePath; + } + + @Override + public void setDefaultSuffix(final String defaultSuffix) { + this.defaultSuffix = defaultSuffix; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java new file mode 100644 index 000000000..7c6de6c0d --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java @@ -0,0 +1,118 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; + +import org.eclipse.hawkbit.repository.model.LocalArtifact; +import org.eclipse.hawkbit.repository.model.SoftwareModule; + +import com.mongodb.gridfs.GridFS; +import com.mongodb.gridfs.GridFSFile; + +/** + * Tenant specific locally stored artifact representation that is used by + * {@link SoftwareModule} . It contains all information that is provided by the + * user while all SP server generated information related to the artifact (hash, + * length) is stored directly with the binary itself. + * + * + * + */ +@Table(name = "sp_artifact", indexes = { @Index(name = "sp_idx_artifact_01", columnList = "tenant,software_module"), + @Index(name = "sp_idx_artifact_prim", columnList = "tenant,id") }) +@Entity +public class JpaLocalArtifact extends JpaArtifact implements LocalArtifact { + private static final long serialVersionUID = 1L; + + @NotNull + @Column(name = "gridfs_file_name", length = 40) + private String gridFsFileName; + + @NotNull + @Column(name = "provided_file_name", length = 256) + private String filename; + + @ManyToOne(optional = false, cascade = { CascadeType.PERSIST }) + @JoinColumn(name = "software_module", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_assigned_sm")) + private JpaSoftwareModule softwareModule; + + /** + * Default constructor. + */ + public JpaLocalArtifact() { + super(); + } + + /** + * Constructs artifact. + * + * @param gridFsFileName + * that is the link to the {@link GridFS} entity. + * @param filename + * that is used by {@link GridFSFile} store. + * @param softwareModule + * of this artifact + */ + public JpaLocalArtifact(@NotNull final String gridFsFileName, @NotNull final String filename, + final SoftwareModule softwareModule) { + setSoftwareModule(softwareModule); + this.gridFsFileName = gridFsFileName; + this.filename = filename; + } + + @Override + public int hashCode() { // NOSONAR - as this is generated + final int prime = 31; + int result = super.hashCode(); + result = prime * result + this.getClass().getName().hashCode(); + return result; + } + + @Override + public boolean equals(final Object obj) { // NOSONAR - as this is generated + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof LocalArtifact)) { + return false; + } + + return true; + } + + @Override + public SoftwareModule getSoftwareModule() { + return softwareModule; + } + + @Override + public final void setSoftwareModule(final SoftwareModule softwareModule) { + this.softwareModule = (JpaSoftwareModule) softwareModule; + this.softwareModule.addArtifact(this); + } + + public String getGridFsFileName() { + return gridFsFileName; + } + + @Override + public String getFilename() { + return filename; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaMetaData.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaMetaData.java new file mode 100644 index 000000000..f2d905d89 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaMetaData.java @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; + +import org.eclipse.hawkbit.repository.model.MetaData; + +/** + * Meta data for entities. + * + */ +@MappedSuperclass +public abstract class JpaMetaData implements MetaData { + private static final long serialVersionUID = 1L; + + @Id + @Column(name = "meta_key", length = 128) + private String key; + + @Column(name = "meta_value", length = 4000) + @Basic + private String value; + + public JpaMetaData(final String key, final String value) { + super(); + this.key = key; + this.value = value; + } + + public JpaMetaData() { + // Default constructor needed for JPA entities + } + + @Override + public String getKey() { + return key; + } + + @Override + public void setKey(final String key) { + this.key = key; + } + + @Override + public String getValue() { + return value; + } + + @Override + public void setValue(final String value) { + this.value = value; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((key == null) ? 0 : key.hashCode()); + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(this.getClass().isInstance(obj))) { + return false; + } + final JpaMetaData other = (JpaMetaData) obj; + if (key == null) { + if (other.key != null) { + return false; + } + } else if (!key.equals(other.key)) { + return false; + } + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + return true; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedEntity.java new file mode 100644 index 000000000..e4e48ac36 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedEntity.java @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Column; +import javax.persistence.MappedSuperclass; + +import org.eclipse.hawkbit.repository.model.NamedEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; + +/** + * {@link TenantAwareBaseEntity} extension for all entities that are named in + * addition to their technical ID. + */ +@MappedSuperclass +public abstract class JpaNamedEntity extends JpaTenantAwareBaseEntity implements NamedEntity { + private static final long serialVersionUID = 1L; + + @Column(name = "name", nullable = false, length = 64) + private String name; + + @Column(name = "description", nullable = true, length = 512) + private String description; + + /** + * Default constructor. + */ + public JpaNamedEntity() { + super(); + } + + /** + * Parameterized constructor. + * + * @param name + * of the {@link NamedEntity} + * @param description + * of the {@link NamedEntity} + */ + public JpaNamedEntity(final String name, final String description) { + this.name = name; + this.description = description; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public String getName() { + return name; + } + + @Override + public void setDescription(final String description) { + this.description = description; + } + + @Override + public void setName(final String name) { + this.name = name; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedVersionedEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedVersionedEntity.java new file mode 100644 index 000000000..33a7036d5 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedVersionedEntity.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Column; +import javax.persistence.MappedSuperclass; + +import org.eclipse.hawkbit.repository.model.NamedEntity; +import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; + +/** + * Extension for {@link NamedEntity} that are versioned. + * + */ +@MappedSuperclass +public abstract class JpaNamedVersionedEntity extends JpaNamedEntity implements NamedVersionedEntity { + private static final long serialVersionUID = 1L; + + @Column(name = "version", nullable = false, length = 64) + private String version; + + /** + * parameterized constructor. + * + * @param name + * of the entity + * @param version + * of the entity + * @param description + */ + public JpaNamedVersionedEntity(final String name, final String version, final String description) { + super(name, description); + this.version = version; + } + + JpaNamedVersionedEntity() { + super(); + } + + @Override + public String getVersion() { + return version; + } + + @Override + public void setVersion(final String version) { + this.version = version; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java new file mode 100644 index 000000000..25e1a3a93 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java @@ -0,0 +1,260 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.Transient; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.cache.CacheField; +import org.eclipse.hawkbit.cache.CacheKeys; +import org.eclipse.hawkbit.repository.model.Action.ActionType; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; + +/** + * @author Michael Hirsch + * + */ +@Entity +@Table(name = "sp_rollout", indexes = { + @Index(name = "sp_idx_rollout_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { + "name", "tenant" }, name = "uk_rollout")) +public class JpaRollout extends JpaNamedEntity implements Rollout { + + private static final long serialVersionUID = 1L; + + @OneToMany(targetEntity = JpaRolloutGroup.class) + @JoinColumn(name = "rollout", insertable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rollout_rolloutgroup")) + private List rolloutGroups; + + @Column(name = "target_filter", length = 1024, nullable = false) + private String targetFilterQuery; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "distribution_set", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rolltout_ds")) + private JpaDistributionSet distributionSet; + + @Column(name = "status") + private RolloutStatus status = RolloutStatus.CREATING; + + @Column(name = "last_check") + private long lastCheck = 0L; + + @Column(name = "action_type", nullable = false) + @Enumerated(EnumType.STRING) + private ActionType actionType = ActionType.FORCED; + + @Column(name = "forced_time") + private long forcedTime; + + @Column(name = "total_targets") + private long totalTargets; + + @Transient + @CacheField(key = CacheKeys.ROLLOUT_GROUP_TOTAL) + private int rolloutGroupsTotal = 0; + + @Transient + @CacheField(key = CacheKeys.ROLLOUT_GROUP_CREATED) + private int rolloutGroupsCreated = 0; + + @Transient + private transient TotalTargetCountStatus totalTargetCountStatus; + + @Override + public DistributionSet getDistributionSet() { + return distributionSet; + } + + @Override + public void setDistributionSet(final DistributionSet distributionSet) { + this.distributionSet = (JpaDistributionSet) distributionSet; + } + + @Override + public List getRolloutGroups() { + return rolloutGroups; + } + + @Override + public void setRolloutGroups(final List rolloutGroups) { + this.rolloutGroups = rolloutGroups; + } + + @Override + public String getTargetFilterQuery() { + return targetFilterQuery; + } + + @Override + public void setTargetFilterQuery(final String targetFilterQuery) { + this.targetFilterQuery = targetFilterQuery; + } + + @Override + public RolloutStatus getStatus() { + return status; + } + + @Override + public void setStatus(final RolloutStatus status) { + this.status = status; + } + + @Override + public long getLastCheck() { + return lastCheck; + } + + @Override + public void setLastCheck(final long lastCheck) { + this.lastCheck = lastCheck; + } + + @Override + public ActionType getActionType() { + return actionType; + } + + @Override + public void setActionType(final ActionType actionType) { + this.actionType = actionType; + } + + @Override + public long getForcedTime() { + return forcedTime; + } + + @Override + public void setForcedTime(final long forcedTime) { + this.forcedTime = forcedTime; + } + + @Override + public long getTotalTargets() { + return totalTargets; + } + + @Override + public void setTotalTargets(final long totalTargets) { + this.totalTargets = totalTargets; + } + + @Override + public int getRolloutGroupsTotal() { + return rolloutGroupsTotal; + } + + @Override + public void setRolloutGroupsTotal(final int rolloutGroupsTotal) { + this.rolloutGroupsTotal = rolloutGroupsTotal; + } + + @Override + public int getRolloutGroupsCreated() { + return rolloutGroupsCreated; + } + + @Override + public void setRolloutGroupsCreated(final int rolloutGroupsCreated) { + this.rolloutGroupsCreated = rolloutGroupsCreated; + } + + @Override + public TotalTargetCountStatus getTotalTargetCountStatus() { + if (totalTargetCountStatus == null) { + totalTargetCountStatus = new TotalTargetCountStatus(totalTargets); + } + return totalTargetCountStatus; + } + + @Override + public void setTotalTargetCountStatus(final TotalTargetCountStatus totalTargetCountStatus) { + this.totalTargetCountStatus = totalTargetCountStatus; + } + + @Override + public String toString() { + return "Rollout [rolloutGroups=" + rolloutGroups + ", targetFilterQuery=" + targetFilterQuery + + ", distributionSet=" + distributionSet + ", status=" + status + ", lastCheck=" + lastCheck + + ", getName()=" + getName() + ", getId()=" + getId() + "]"; + } + + /** + * + * State machine for rollout. + * + */ + public enum RolloutStatus { + + /** + * Rollouts is beeing created. + */ + CREATING, + + /** + * Rollout is ready to start. + */ + READY, + + /** + * Rollout is paused. + */ + PAUSED, + + /** + * Rollout is starting. + */ + STARTING, + + /** + * Rollout is stopped. + */ + STOPPED, + + /** + * Rollout is running. + */ + RUNNING, + + /** + * Rollout is finished. + */ + FINISHED, + + /** + * Rollout could not created due errors, might be database problem due + * asynchronous creating. + */ + ERROR_CREATING, + + /** + * Rollout could not started due errors, might be database problem due + * asynchronous starting. + */ + ERROR_STARTING; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java new file mode 100644 index 000000000..f167d89fd --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java @@ -0,0 +1,509 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.Transient; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; + +/** + * JPA entity definition of persisting a group of an rollout. + * + * @author Michael Hirsch + * + */ +@Entity +@Table(name = "sp_rolloutgroup", indexes = { + @Index(name = "sp_idx_rolloutgroup_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { + "name", "rollout", "tenant" }, name = "uk_rolloutgroup")) +public class JpaRolloutGroup extends JpaNamedEntity implements RolloutGroup { + + private static final long serialVersionUID = 1L; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "rollout", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rolloutgroup_rollout")) + private JpaRollout rollout; + + @Column(name = "status") + private RolloutGroupStatus status = RolloutGroupStatus.READY; + + @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }, targetEntity = RolloutTargetGroup.class) + @JoinColumn(name = "rolloutGroup_Id", insertable = false, updatable = false) + private final List rolloutTargetGroup = new ArrayList<>(); + + @ManyToOne(fetch = FetchType.LAZY) + private JpaRolloutGroup parent; + + @Column(name = "success_condition", nullable = false) + private RolloutGroupSuccessCondition successCondition = RolloutGroupSuccessCondition.THRESHOLD; + + @Column(name = "success_condition_exp", length = 512, nullable = false) + private String successConditionExp = null; + + @Column(name = "success_action", nullable = false) + private RolloutGroupSuccessAction successAction = RolloutGroupSuccessAction.NEXTGROUP; + + @Column(name = "success_action_exp", length = 512, nullable = false) + private String successActionExp = null; + + @Column(name = "error_condition") + private RolloutGroupErrorCondition errorCondition = null; + + @Column(name = "error_condition_exp", length = 512) + private String errorConditionExp = null; + + @Column(name = "error_action") + private RolloutGroupErrorAction errorAction = null; + + @Column(name = "error_action_exp", length = 512) + private String errorActionExp = null; + + @Column(name = "total_targets") + private long totalTargets; + + @Transient + private transient TotalTargetCountStatus totalTargetCountStatus; + + @Override + public Rollout getRollout() { + return rollout; + } + + @Override + public void setRollout(final Rollout rollout) { + this.rollout = (JpaRollout) rollout; + } + + @Override + public RolloutGroupStatus getStatus() { + return status; + } + + @Override + public void setStatus(final RolloutGroupStatus status) { + this.status = status; + } + + public List getRolloutTargetGroup() { + return rolloutTargetGroup; + } + + @Override + public RolloutGroup getParent() { + return parent; + } + + @Override + public void setParent(final RolloutGroup parent) { + this.parent = (JpaRolloutGroup) parent; + } + + @Override + public RolloutGroupSuccessCondition getSuccessCondition() { + return successCondition; + } + + @Override + public void setSuccessCondition(final RolloutGroupSuccessCondition finishCondition) { + successCondition = finishCondition; + } + + @Override + public String getSuccessConditionExp() { + return successConditionExp; + } + + @Override + public void setSuccessConditionExp(final String finishExp) { + successConditionExp = finishExp; + } + + @Override + public RolloutGroupErrorCondition getErrorCondition() { + return errorCondition; + } + + @Override + public void setErrorCondition(final RolloutGroupErrorCondition errorCondition) { + this.errorCondition = errorCondition; + } + + @Override + public String getErrorConditionExp() { + return errorConditionExp; + } + + @Override + public void setErrorConditionExp(final String errorExp) { + errorConditionExp = errorExp; + } + + @Override + public RolloutGroupErrorAction getErrorAction() { + return errorAction; + } + + @Override + public void setErrorAction(final RolloutGroupErrorAction errorAction) { + this.errorAction = errorAction; + } + + @Override + public String getErrorActionExp() { + return errorActionExp; + } + + @Override + public void setErrorActionExp(final String errorActionExp) { + this.errorActionExp = errorActionExp; + } + + @Override + public RolloutGroupSuccessAction getSuccessAction() { + return successAction; + } + + @Override + public String getSuccessActionExp() { + return successActionExp; + } + + @Override + public long getTotalTargets() { + return totalTargets; + } + + @Override + public void setTotalTargets(final long totalTargets) { + this.totalTargets = totalTargets; + } + + @Override + public void setSuccessAction(final RolloutGroupSuccessAction successAction) { + this.successAction = successAction; + } + + @Override + public void setSuccessActionExp(final String successActionExp) { + this.successActionExp = successActionExp; + } + + /** + * @return the totalTargetCountStatus + */ + @Override + public TotalTargetCountStatus getTotalTargetCountStatus() { + if (totalTargetCountStatus == null) { + totalTargetCountStatus = new TotalTargetCountStatus(totalTargets); + } + return totalTargetCountStatus; + } + + /** + * @param totalTargetCountStatus + * the totalTargetCountStatus to set + */ + @Override + public void setTotalTargetCountStatus(final TotalTargetCountStatus totalTargetCountStatus) { + this.totalTargetCountStatus = totalTargetCountStatus; + } + + @Override + public String toString() { + return "RolloutGroup [rollout=" + rollout + ", status=" + status + ", rolloutTargetGroup=" + rolloutTargetGroup + + ", parent=" + parent + ", finishCondition=" + successCondition + ", finishExp=" + successConditionExp + + ", errorCondition=" + errorCondition + ", errorExp=" + errorConditionExp + ", getName()=" + getName() + + ", getId()=" + getId() + "]"; + } + + /** + * Rollout goup state machine. + * + */ + public enum RolloutGroupStatus { + + /** + * Ready to start the group. + */ + READY, + + /** + * Group is scheduled and started sometime, e.g. trigger of group + * before. + */ + SCHEDULED, + + /** + * Group is finished. + */ + FINISHED, + + /** + * Group is finished and has errors. + */ + ERROR, + + /** + * Group is running. + */ + RUNNING; + } + + /** + * The condition to evaluate if an group is success state. + */ + public enum RolloutGroupSuccessCondition { + THRESHOLD("thresholdRolloutGroupSuccessCondition"); + + private final String beanName; + + private RolloutGroupSuccessCondition(final String beanName) { + this.beanName = beanName; + } + + /** + * @return the beanName + */ + public String getBeanName() { + return beanName; + } + } + + /** + * The condition to evaluate if an group is in error state. + */ + public enum RolloutGroupErrorCondition { + THRESHOLD("thresholdRolloutGroupErrorCondition"); + + private final String beanName; + + private RolloutGroupErrorCondition(final String beanName) { + this.beanName = beanName; + } + + /** + * @return the beanName + */ + public String getBeanName() { + return beanName; + } + } + + /** + * The actions executed when the {@link RolloutGroup#errorCondition} is hit. + */ + public enum RolloutGroupErrorAction { + PAUSE("pauseRolloutGroupAction"); + + private final String beanName; + + private RolloutGroupErrorAction(final String beanName) { + this.beanName = beanName; + } + + /** + * @return the beanName + */ + public String getBeanName() { + return beanName; + } + } + + /** + * The actions executed when the {@link RolloutGroup#successCondition} is + * hit. + */ + public enum RolloutGroupSuccessAction { + NEXTGROUP("startNextRolloutGroupAction"); + + private final String beanName; + + private RolloutGroupSuccessAction(final String beanName) { + this.beanName = beanName; + } + + /** + * @return the beanName + */ + public String getBeanName() { + return beanName; + } + } + + /** + * Object which holds all {@link RolloutGroup} conditions together which can + * easily built. + */ + public static class RolloutGroupConditions { + private RolloutGroupSuccessCondition successCondition = null; + private String successConditionExp = null; + private RolloutGroupSuccessAction successAction = null; + private String successActionExp = null; + private RolloutGroupErrorCondition errorCondition = null; + private String errorConditionExp = null; + private RolloutGroupErrorAction errorAction = null; + private String errorActionExp = null; + + public RolloutGroupSuccessCondition getSuccessCondition() { + return successCondition; + } + + public void setSuccessCondition(final RolloutGroupSuccessCondition finishCondition) { + successCondition = finishCondition; + } + + public String getSuccessConditionExp() { + return successConditionExp; + } + + public void setSuccessConditionExp(final String finishConditionExp) { + successConditionExp = finishConditionExp; + } + + public RolloutGroupSuccessAction getSuccessAction() { + return successAction; + } + + public void setSuccessAction(final RolloutGroupSuccessAction successAction) { + this.successAction = successAction; + } + + public String getSuccessActionExp() { + return successActionExp; + } + + public void setSuccessActionExp(final String successActionExp) { + this.successActionExp = successActionExp; + } + + public RolloutGroupErrorCondition getErrorCondition() { + return errorCondition; + } + + public void setErrorCondition(final RolloutGroupErrorCondition errorCondition) { + this.errorCondition = errorCondition; + } + + public String getErrorConditionExp() { + return errorConditionExp; + } + + public void setErrorConditionExp(final String errorConditionExp) { + this.errorConditionExp = errorConditionExp; + } + + public RolloutGroupErrorAction getErrorAction() { + return errorAction; + } + + public void setErrorAction(final RolloutGroupErrorAction errorAction) { + this.errorAction = errorAction; + } + + public String getErrorActionExp() { + return errorActionExp; + } + + public void setErrorActionExp(final String errorActionExp) { + this.errorActionExp = errorActionExp; + } + } + + /** + * Builder to build easily the {@link RolloutGroupConditions}. + * + */ + public static class RolloutGroupConditionBuilder { + private final RolloutGroupConditions conditions = new RolloutGroupConditions(); + + public RolloutGroupConditions build() { + return conditions; + } + + /** + * Sets the finish condition and expression on the builder. + * + * @param condition + * the finish condition + * @param expression + * the finish expression + * @return the builder itself + */ + public RolloutGroupConditionBuilder successCondition(final RolloutGroupSuccessCondition condition, + final String expression) { + conditions.setSuccessCondition(condition); + conditions.setSuccessConditionExp(expression); + return this; + } + + /** + * Sets the success action and expression on the builder. + * + * @param action + * the success action + * @param expression + * the error expression + * @return the builder itself + */ + public RolloutGroupConditionBuilder successAction(final RolloutGroupSuccessAction action, + final String expression) { + conditions.setSuccessAction(action); + conditions.setSuccessActionExp(expression); + return this; + } + + /** + * Sets the error condition and expression on the builder. + * + * @param condition + * the error condition + * @param expression + * the error expression + * @return the builder itself + */ + public RolloutGroupConditionBuilder errorCondition(final RolloutGroupErrorCondition condition, + final String expression) { + conditions.setErrorCondition(condition); + conditions.setErrorConditionExp(expression); + return this; + } + + /** + * Sets the error action and expression on the builder. + * + * @param action + * the error action + * @param expression + * the error expression + * @return the builder itself + */ + public RolloutGroupConditionBuilder errorAction(final RolloutGroupErrorAction action, final String expression) { + conditions.setErrorAction(action); + conditions.setErrorActionExp(expression); + return this; + } + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java new file mode 100644 index 000000000..306b6980b --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java @@ -0,0 +1,266 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.NamedAttributeNode; +import javax.persistence.NamedEntityGraph; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.model.Artifact; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.ExternalArtifact; +import org.eclipse.hawkbit.repository.model.LocalArtifact; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.persistence.annotations.CascadeOnDelete; + +/** + * Base Software Module that is supported by OS level provisioning mechanism on + * the edge controller, e.g. OS, JVM, AgentHub. + * + */ +@Entity +@Table(name = "sp_base_software_module", uniqueConstraints = @UniqueConstraint(columnNames = { "module_type", "name", + "version", "tenant" }, name = "uk_base_sw_mod"), indexes = { + @Index(name = "sp_idx_base_sw_module_01", columnList = "tenant,deleted,name,version"), + @Index(name = "sp_idx_base_sw_module_02", columnList = "tenant,deleted,module_type"), + @Index(name = "sp_idx_base_sw_module_prim", columnList = "tenant,id") }) +@NamedEntityGraph(name = "SoftwareModule.artifacts", attributeNodes = { @NamedAttributeNode("artifacts") }) +public class JpaSoftwareModule extends JpaNamedVersionedEntity implements SoftwareModule { + private static final long serialVersionUID = 1L; + + @ManyToOne + @JoinColumn(name = "module_type", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_module_type")) + private JpaSoftwareModuleType type; + + @ManyToMany(mappedBy = "modules", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY) + private final List assignedTo = new ArrayList<>(); + + @Column(name = "deleted") + private boolean deleted = false; + + @Column(name = "vendor", nullable = true, length = 256) + private String vendor; + + @OneToMany(mappedBy = "softwareModule", cascade = { CascadeType.ALL }, targetEntity = JpaLocalArtifact.class) + private List artifacts; + + @OneToMany(mappedBy = "softwareModule", cascade = { CascadeType.ALL }, targetEntity = JpaExternalArtifact.class) + private List externalArtifacts; + + @CascadeOnDelete + @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, targetEntity = JpaSoftwareModuleMetadata.class) + @JoinColumn(name = "sw_id", insertable = false, updatable = false) + private final List metadata = new ArrayList<>(); + + /** + * Default constructor. + */ + public JpaSoftwareModule() { + super(); + } + + /** + * parameterized constructor. + * + * @param type + * of the {@link SoftwareModule} + * @param name + * abstract name of the {@link SoftwareModule} + * @param version + * of the {@link SoftwareModule} + * @param description + * of the {@link SoftwareModule} + * @param vendor + * of the {@link SoftwareModule} + */ + public JpaSoftwareModule(final SoftwareModuleType type, final String name, final String version, + final String description, final String vendor) { + super(name, version, description); + this.vendor = vendor; + this.type = (JpaSoftwareModuleType) type; + } + + /** + * @param artifact + * is added to the assigned {@link Artifact}s. + */ + @Override + public void addArtifact(final LocalArtifact artifact) { + if (null == artifacts) { + artifacts = new ArrayList<>(4); + } + + if (!artifacts.contains(artifact)) { + artifacts.add(artifact); + } + } + + /** + * @param artifact + * is added to the assigned {@link Artifact}s. + */ + @Override + public void addArtifact(final ExternalArtifact artifact) { + if (null == externalArtifacts) { + externalArtifacts = new ArrayList<>(4); + } + + if (!externalArtifacts.contains(artifact)) { + externalArtifacts.add(artifact); + } + + } + + /** + * @param artifactId + * to look for + * @return found {@link Artifact} + */ + @Override + public Optional getLocalArtifact(final Long artifactId) { + if (null == artifacts) { + return Optional.empty(); + } + + return artifacts.stream().filter(artifact -> artifact.getId().equals(artifactId)).findFirst(); + } + + /** + * @param fileName + * to look for + * @return found {@link Artifact} + */ + @Override + public Optional getLocalArtifactByFilename(final String fileName) { + if (null == artifacts) { + return Optional.empty(); + } + + return artifacts.stream().filter(artifact -> artifact.getFilename().equalsIgnoreCase(fileName.trim())) + .findFirst(); + } + + /** + * @return the artifacts + */ + @Override + public List getArtifacts() { + final List result = new ArrayList<>(); + result.addAll(artifacts); + result.addAll(externalArtifacts); + + return result; + } + + /** + * @return local artifacts only + */ + @Override + public List getLocalArtifacts() { + if (artifacts == null) { + return Collections.emptyList(); + } + + return artifacts; + } + + @Override + public String getVendor() { + return vendor; + } + + /** + * @param artifact + * is removed from the assigned {@link LocalArtifact}s. + */ + @Override + public void removeArtifact(final LocalArtifact artifact) { + if (null != artifacts) { + artifacts.remove(artifact); + } + } + + /** + * @param artifact + * is removed from the assigned {@link ExternalArtifact}s. + */ + @Override + public void removeArtifact(final ExternalArtifact artifact) { + if (null != externalArtifacts) { + externalArtifacts.remove(artifact); + } + } + + @Override + public void setVendor(final String vendor) { + this.vendor = vendor; + } + + @Override + public SoftwareModuleType getType() { + return type; + } + + @Override + public boolean isDeleted() { + return deleted; + } + + @Override + public void setDeleted(final boolean deleted) { + this.deleted = deleted; + } + + @Override + public void setType(final SoftwareModuleType type) { + this.type = (JpaSoftwareModuleType) type; + } + + /** + * @return immutable list of meta data elements. + */ + @Override + public List getMetadata() { + return Collections.unmodifiableList(metadata); + } + + @Override + public String toString() { + return "SoftwareModule [deleted=" + deleted + ", name=" + getName() + ", version=" + getVersion() + + ", revision=" + getOptLockRevision() + ", Id=" + getId() + ", type=" + getType().getName() + "]"; + } + + /** + * @return the assignedTo + */ + @Override + public List getAssignedTo() { + return assignedTo; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java new file mode 100644 index 000000000..aba08f0ed --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java @@ -0,0 +1,85 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; + +/** + * Metadata for {@link SoftwareModule}. + * + */ +@IdClass(SwMetadataCompositeKey.class) +@Entity +@Table(name = "sp_sw_metadata") +public class JpaSoftwareModuleMetadata extends JpaMetaData implements SoftwareModuleMetadata { + private static final long serialVersionUID = 1L; + + @Id + @ManyToOne(targetEntity = JpaSoftwareModule.class, fetch = FetchType.LAZY) + @JoinColumn(name = "sw_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_sw")) + private SoftwareModule softwareModule; + + public JpaSoftwareModuleMetadata() { + // default public constructor for JPA + } + + public JpaSoftwareModuleMetadata(final String key, final SoftwareModule softwareModule, final String value) { + super(key, value); + this.softwareModule = softwareModule; + } + + public SwMetadataCompositeKey getId() { + return new SwMetadataCompositeKey(softwareModule, getKey()); + } + + @Override + public SoftwareModule getSoftwareModule() { + return softwareModule; + } + + @Override + public void setSoftwareModule(final SoftwareModule softwareModule) { + this.softwareModule = softwareModule; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((softwareModule == null) ? 0 : softwareModule.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (!super.equals(obj)) { + return false; + } + final JpaSoftwareModuleMetadata other = (JpaSoftwareModuleMetadata) obj; + if (softwareModule == null) { + if (other.softwareModule != null) { + return false; + } + } else if (!softwareModule.equals(other.softwareModule)) { + return false; + } + return true; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java new file mode 100644 index 000000000..9948a7cde --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java @@ -0,0 +1,125 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Index; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; + +/** + * Type of a software modules. + * + */ +@Entity +@Table(name = "sp_software_module_type", indexes = { + @Index(name = "sp_idx_software_module_type_01", columnList = "tenant,deleted"), + @Index(name = "sp_idx_software_module_type_prim", columnList = "tenant,id") }, uniqueConstraints = { + @UniqueConstraint(columnNames = { "type_key", "tenant" }, name = "uk_smt_type_key"), + @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_smt_name") }) +public class JpaSoftwareModuleType extends JpaNamedEntity implements SoftwareModuleType { + private static final long serialVersionUID = 1L; + + @Column(name = "type_key", nullable = false, length = 64) + private String key; + + @Column(name = "max_ds_assignments", nullable = false) + private int maxAssignments; + + @Column(name = "colour", nullable = true, length = 16) + private String colour; + + @Column(name = "deleted") + private boolean deleted = false; + + /** + * Constructor. + * + * @param key + * of the type + * @param name + * of the type + * @param description + * of the type + * @param maxAssignments + * assignments to a DS + */ + public JpaSoftwareModuleType(final String key, final String name, final String description, final int maxAssignments) { + this(key, name, description, maxAssignments, null); + } + + /** + * Constructor. + * + * @param key + * of the type + * @param name + * of the type + * @param description + * of the type + * @param maxAssignments + * assignments to a DS + * @param colour + * of the type. It will be null by default + */ + public JpaSoftwareModuleType(final String key, final String name, final String description, final int maxAssignments, + final String colour) { + super(); + this.key = key; + this.maxAssignments = maxAssignments; + setDescription(description); + setName(name); + this.colour = colour; + } + + /** + * Default Constructor. + */ + public JpaSoftwareModuleType() { + super(); + } + + @Override + public String getKey() { + return key; + } + + @Override + public int getMaxAssignments() { + return maxAssignments; + } + + @Override + public boolean isDeleted() { + return deleted; + } + + @Override + public void setDeleted(final boolean deleted) { + this.deleted = deleted; + } + + @Override + public String getColour() { + return colour; + } + + @Override + public void setColour(final String colour) { + this.colour = colour; + } + + @Override + public String toString() { + return "SoftwareModuleType [key=" + key + ", getName()=" + getName() + ", getId()=" + getId() + "]"; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTag.java new file mode 100644 index 000000000..ee4da0824 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTag.java @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Column; +import javax.persistence.MappedSuperclass; + +import org.eclipse.hawkbit.repository.model.Tag; + +/** + * A Tag can be used as describing and organizational meta information for any + * kind of entity. + * + */ +@MappedSuperclass +public abstract class JpaTag extends JpaNamedEntity implements Tag { + private static final long serialVersionUID = 1L; + + @Column(name = "colour", nullable = true, length = 16) + private String colour; + + protected JpaTag() { + super(); + } + + /** + * Public constructor. + * + * @param name + * of the {@link Tag} + * @param description + * of the {@link Tag} + * @param colour + * of tag in UI + */ + public JpaTag(final String name, final String description, final String colour) { + super(name, description); + this.colour = colour; + } + + @Override + public String getColour() { + return colour; + } + + @Override + public void setColour(final String colour) { + this.colour = colour; + } + + @Override + public String toString() { + return "Tag [getOptLockRevision()=" + getOptLockRevision() + ", getId()=" + getId() + "]"; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java new file mode 100644 index 000000000..08a66a9b3 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -0,0 +1,237 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.NamedAttributeNode; +import javax.persistence.NamedEntityGraph; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import javax.persistence.PrimaryKeyJoinColumn; +import javax.persistence.Table; +import javax.persistence.Transient; +import javax.persistence.UniqueConstraint; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +import org.eclipse.hawkbit.im.authentication.SpPermission; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetIdName; +import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.repository.model.TargetTag; +import org.eclipse.hawkbit.repository.model.helper.SecurityChecker; +import org.eclipse.hawkbit.repository.model.helper.SecurityTokenGeneratorHolder; +import org.eclipse.persistence.annotations.CascadeOnDelete; +import org.springframework.data.domain.Persistable; + +/** + *

+ * The {@link Target} is the target of all provisioning operations. It contains + * the currently installed {@link DistributionSet} (i.e. current state). In + * addition it holds the target {@link DistributionSet} that has to be + * provisioned next (i.e. target state). + *

+ * + *

+ * {@link #getStatus()}s() shows if the {@link Target} is + * {@link TargetStatus#IN_SYNC} or a provisioning is + * {@link TargetStatus#PENDING} or the target is only + * {@link TargetStatus#REGISTERED}, i.e. a target {@link DistributionSet} . + *

+ * + */ +@Entity +@Table(name = "sp_target", indexes = { + @Index(name = "sp_idx_target_01", columnList = "tenant,name,assigned_distribution_set"), + @Index(name = "sp_idx_target_02", columnList = "tenant,name"), + @Index(name = "sp_idx_target_03", columnList = "tenant,controller_id,assigned_distribution_set"), + @Index(name = "sp_idx_target_04", columnList = "tenant,created_at"), + @Index(name = "sp_idx_target_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = { + "controller_id", "tenant" }, name = "uk_tenant_controller_id")) +@NamedEntityGraph(name = "Target.detail", attributeNodes = { @NamedAttributeNode("tags"), + @NamedAttributeNode(value = "assignedDistributionSet"), @NamedAttributeNode(value = "targetInfo") }) +public class JpaTarget extends JpaNamedEntity implements Persistable, Target { + private static final long serialVersionUID = 1L; + + @Column(name = "controller_id", length = 64) + @Size(min = 1) + @NotNull + private String controllerId; + + @Transient + private boolean entityNew = false; + + @ManyToMany(targetEntity = JpaTargetTag.class) + @JoinTable(name = "sp_target_target_tag", joinColumns = { + @JoinColumn(name = "target", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_targtag_target")) }, inverseJoinColumns = { + @JoinColumn(name = "tag", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_targtag_tag")) }) + private Set tags = new HashSet<>(); + + @CascadeOnDelete + @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, cascade = { + CascadeType.REMOVE }, targetEntity = JpaAction.class) + @JoinColumn(name = "target", insertable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_act_hist_targ")) + private final List actions = new ArrayList<>(); + + @ManyToOne(optional = true, fetch = FetchType.LAZY, targetEntity = JpaDistributionSet.class) + @JoinColumn(name = "assigned_distribution_set", nullable = true, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_target_assign_ds")) + private JpaDistributionSet assignedDistributionSet; + + @CascadeOnDelete + @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, targetEntity = JpaTargetInfo.class) + @PrimaryKeyJoinColumn + private JpaTargetInfo targetInfo = null; + + /** + * the security token of the target which allows if enabled to authenticate + * with this security token. + */ + @Column(name = "sec_token", insertable = true, updatable = true, nullable = false, length = 128) + private String securityToken = null; + + @CascadeOnDelete + @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE, CascadeType.PERSIST }) + @JoinColumn(name = "target_Id", insertable = false, updatable = false) + private final List rolloutTargetGroup = new ArrayList<>(); + + /** + * Constructor. + * + * @param controllerId + * controller ID of the {@link Target} + */ + public JpaTarget(final String controllerId) { + this.controllerId = controllerId; + setName(controllerId); + securityToken = SecurityTokenGeneratorHolder.getInstance().generateToken(); + targetInfo = new JpaTargetInfo(this); + } + + /** + * empty constructor for JPA. + */ + JpaTarget() { + controllerId = null; + securityToken = null; + } + + @Override + public DistributionSet getAssignedDistributionSet() { + return assignedDistributionSet; + } + + @Override + public String getControllerId() { + return controllerId; + } + + @Override + public Set getTags() { + return tags; + } + + @Override + public void setAssignedDistributionSet(final DistributionSet assignedDistributionSet) { + this.assignedDistributionSet = (JpaDistributionSet) assignedDistributionSet; + } + + @Override + public void setControllerId(final String controllerId) { + this.controllerId = controllerId; + } + + @Override + public void setTags(final Set tags) { + this.tags = tags; + } + + @Override + public List getActions() { + return actions; + } + + @Override + public TargetIdName getTargetIdName() { + return new TargetIdName(getId(), getControllerId(), getName()); + } + + @Override + @Transient + public boolean isNew() { + return entityNew; + } + + /** + * @param isNew + * the isNew to set + */ + public void setNew(final boolean entityNew) { + this.entityNew = entityNew; + } + + /** + * @return the targetInfo + */ + @Override + public TargetInfo getTargetInfo() { + return targetInfo; + } + + /** + * @param targetInfo + * the targetInfo to set + */ + @Override + public void setTargetInfo(final TargetInfo targetInfo) { + this.targetInfo = (JpaTargetInfo) targetInfo; + } + + /** + * @return the securityToken + */ + @Override + public String getSecurityToken() { + if (SecurityChecker.hasPermission(SpPermission.READ_TARGET_SEC_TOKEN)) { + return securityToken; + } + return null; + } + + /** + * @param securityToken + * the securityToken to set + */ + @Override + public void setSecurityToken(final String securityToken) { + this.securityToken = securityToken; + } + + @Override + public String toString() { + return "Target [controllerId=" + controllerId + ", getId()=" + getId() + "]"; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java new file mode 100644 index 000000000..1ad1b69b8 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Index; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.model.TargetFilterQuery; + +/** + * Stored target filter. + * + */ +@Entity +@Table(name = "sp_target_filter_query", indexes = { + @Index(name = "sp_idx_target_filter_query_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { + "name", "tenant" }, name = "uk_tenant_custom_filter_name")) +public class JpaTargetFilterQuery extends JpaTenantAwareBaseEntity implements TargetFilterQuery { + private static final long serialVersionUID = 7493966984413479089L; + + @Column(name = "name", length = 64) + private String name; + + @Column(name = "query", length = 1024) + private String query; + + public JpaTargetFilterQuery() { + // Default constructor for JPA. + } + + public JpaTargetFilterQuery(final String name, final String query) { + this.name = name; + this.query = query; + } + + @Override + public String getName() { + return name; + } + + @Override + public void setName(final String name) { + this.name = name; + } + + @Override + public String getQuery() { + return query; + } + + @Override + public void setQuery(final String query) { + this.query = query; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java new file mode 100644 index 000000000..7b7b3e2e4 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java @@ -0,0 +1,372 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.net.URI; +import java.time.Duration; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import javax.persistence.CascadeType; +import javax.persistence.CollectionTable; +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MapKeyColumn; +import javax.persistence.MapsId; +import javax.persistence.OneToOne; +import javax.persistence.Table; +import javax.persistence.Transient; + +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.model.helper.SystemSecurityContextHolder; +import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder; +import org.eclipse.hawkbit.tenancy.configuration.DurationHelper; +import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; +import org.eclipse.persistence.annotations.CascadeOnDelete; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Persistable; + +/** + * A table which contains all the information inserted, updated by the + * controller itself. So this entity does not provide audit information because + * changes on this entity are mostly only done by controller requests. That's + * the reason that we store these information in a separated table so we don't + * modifying the {@link Target} itself when a controller reports it's + * {@link #lastTargetQuery} for example. + * + */ +@Table(name = "sp_target_info", indexes = { + @Index(name = "sp_idx_target_info_02", columnList = "target_id,update_status") }) +@Entity +public class JpaTargetInfo implements Persistable, TargetInfo { + private static final long serialVersionUID = 1L; + + private static final Logger LOG = LoggerFactory.getLogger(TargetInfo.class); + + @Id + private Long targetId; + + @Transient + private boolean entityNew = false; + + @CascadeOnDelete + @OneToOne(cascade = { CascadeType.MERGE, + CascadeType.REMOVE }, fetch = FetchType.LAZY, targetEntity = JpaTarget.class) + @JoinColumn(name = "target_id", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_stat_targ")) + @MapsId + private JpaTarget target; + + @Column(name = "address", length = 512) + private String address = null; + + @Column(name = "last_target_query") + private Long lastTargetQuery = null; + + @Column(name = "install_date") + private Long installationDate; + + @Column(name = "update_status", nullable = false, length = 255) + @Enumerated(EnumType.STRING) + private TargetUpdateStatus updateStatus = TargetUpdateStatus.UNKNOWN; + + @ManyToOne(optional = true, fetch = FetchType.LAZY) + @JoinColumn(name = "installed_distribution_set", nullable = true, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_target_inst_ds")) + private JpaDistributionSet installedDistributionSet; + + /** + * Read only on management API. Are commited by controller. + */ + @ElementCollection + @Column(name = "attribute_value", length = 128) + @MapKeyColumn(name = "attribute_key", nullable = false, length = 32) + @CollectionTable(name = "sp_target_attributes", joinColumns = { + @JoinColumn(name = "target_id") }, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_attrib_target")) + + private final Map controllerAttributes = Collections.synchronizedMap(new HashMap()); + + // set default request controller attributes to true, because we want to + // request them the first + // time + @Column(name = "request_controller_attributes", nullable = false) + private boolean requestControllerAttributes = true; + + /** + * Constructor for {@link TargetStatus}. + * + * @param target + * related to this status. + */ + public JpaTargetInfo(final JpaTarget target) { + this.target = target; + targetId = target.getId(); + } + + JpaTargetInfo() { + target = null; + targetId = null; + } + + @Override + public Long getId() { + return targetId; + } + + @Override + @Transient + public boolean isNew() { + return entityNew; + } + + /** + * @param isNew + * the isNew to set + */ + public void setNew(final boolean entityNew) { + this.entityNew = entityNew; + } + + /** + * @return the ipAddress + */ + @Override + public URI getAddress() { + if (address == null) { + return null; + } + try { + return URI.create(address); + } catch (final IllegalArgumentException e) { + LOG.warn("Invalid address provided. Cloud not be configured to URI", e); + return null; + } + } + + /** + * @param address + * the ipAddress to set + * + * @throws IllegalArgumentException + * If the given string violates RFC 2396 + */ + public void setAddress(final String address) { + // check if this is a real URI + if (address != null) { + URI.create(address); + } + + this.address = address; + } + + public Long getTargetId() { + return targetId; + } + + public void setTargetId(final Long targetId) { + this.targetId = targetId; + } + + @Override + public Target getTarget() { + return target; + } + + public void setTarget(final JpaTarget target) { + this.target = target; + } + + @Override + public Long getLastTargetQuery() { + return lastTargetQuery; + } + + public void setLastTargetQuery(final Long lastTargetQuery) { + this.lastTargetQuery = lastTargetQuery; + } + + public void setRequestControllerAttributes(final boolean requestControllerAttributes) { + this.requestControllerAttributes = requestControllerAttributes; + } + + @Override + public Map getControllerAttributes() { + return controllerAttributes; + } + + public boolean isRequestControllerAttributes() { + return requestControllerAttributes; + } + + @Override + public Long getInstallationDate() { + return installationDate; + } + + public void setInstallationDate(final Long installationDate) { + this.installationDate = installationDate; + } + + @Override + public TargetUpdateStatus getUpdateStatus() { + return updateStatus; + } + + public void setUpdateStatus(final TargetUpdateStatus updateStatus) { + this.updateStatus = updateStatus; + } + + @Override + public DistributionSet getInstalledDistributionSet() { + return installedDistributionSet; + } + + public void setInstalledDistributionSet(final JpaDistributionSet installedDistributionSet) { + this.installedDistributionSet = installedDistributionSet; + } + + /** + * @return the poll time which holds the last poll time of the target, the + * next poll time and the overdue time. In case the + * {@link #lastTargetQuery} is not set e.g. the target never polled + * before this method returns {@code null} + */ + @Override + public PollStatus getPollStatus() { + if (lastTargetQuery == null) { + return null; + } + return SystemSecurityContextHolder.getInstance().getSystemSecurityContext().runAsSystem(() -> { + final Duration pollTime = DurationHelper.formattedStringToDuration(TenantConfigurationManagementHolder + .getInstance().getTenantConfigurationManagement() + .getConfigurationValue(TenantConfigurationKey.POLLING_TIME_INTERVAL, String.class).getValue()); + final Duration overdueTime = DurationHelper.formattedStringToDuration( + TenantConfigurationManagementHolder.getInstance().getTenantConfigurationManagement() + .getConfigurationValue(TenantConfigurationKey.POLLING_OVERDUE_TIME_INTERVAL, String.class) + .getValue()); + final LocalDateTime currentDate = LocalDateTime.now(); + final LocalDateTime lastPollDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(lastTargetQuery), + ZoneId.systemDefault()); + final LocalDateTime nextPollDate = lastPollDate.plus(pollTime); + final LocalDateTime overdueDate = nextPollDate.plus(overdueTime); + return new PollStatus(lastPollDate, nextPollDate, overdueDate, currentDate); + }); + } + + /** + * The poll time object which holds all the necessary information around the + * target poll time, e.g. the last poll time, the next poll time and the + * overdue poll time. + * + */ + public static final class PollStatus { + private final LocalDateTime lastPollDate; + private final LocalDateTime nextPollDate; + private final LocalDateTime overdueDate; + private final LocalDateTime currentDate; + + private PollStatus(final LocalDateTime lastPollDate, final LocalDateTime nextPollDate, + final LocalDateTime overdueDate, final LocalDateTime currentDate) { + this.lastPollDate = lastPollDate; + this.nextPollDate = nextPollDate; + this.overdueDate = overdueDate; + this.currentDate = currentDate; + } + + /** + * calculates if the target poll time is overdue and the target has not + * been polled in the configured poll time interval. + * + * @return {@code true} if the current time is after the poll time + * overdue date otherwise {@code false}. + */ + public boolean isOverdue() { + return currentDate.isAfter(overdueDate); + } + + /** + * @return the lastPollDate + */ + public LocalDateTime getLastPollDate() { + return lastPollDate; + } + + public LocalDateTime getNextPollDate() { + return nextPollDate; + } + + public LocalDateTime getOverdueDate() { + return overdueDate; + } + + public LocalDateTime getCurrentDate() { + return currentDate; + } + + @Override + public String toString() { + return "PollTime [lastPollDate=" + lastPollDate + ", nextPollDate=" + nextPollDate + ", overdueDate=" + + overdueDate + ", currentDate=" + currentDate + "]"; + } + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((target == null) ? 0 : target.hashCode()); + result = prime * result + ((targetId == null) ? 0 : targetId.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof TargetInfo)) { + return false; + } + final JpaTargetInfo other = (JpaTargetInfo) obj; + if (target == null) { + if (other.target != null) { + return false; + } + } else if (!target.equals(other.target)) { + return false; + } + if (targetId == null) { + if (other.targetId != null) { + return false; + } + } else if (!targetId.equals(other.targetId)) { + return false; + } + return true; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java new file mode 100644 index 000000000..0d8f3a5d1 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Index; +import javax.persistence.ManyToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetTag; + +/** + * A {@link TargetTag} is used to describe Target attributes and use them also + * for filtering the target list. + * + */ +@Entity +@Table(name = "sp_target_tag", indexes = { + @Index(name = "sp_idx_target_tag_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = { + "name", "tenant" }, name = "uk_targ_tag")) +public class JpaTargetTag extends JpaTag implements TargetTag { + private static final long serialVersionUID = 1L; + + @ManyToMany(mappedBy = "tags", targetEntity = JpaTarget.class, fetch = FetchType.LAZY) + private List assignedToTargets; + + /** + * Constructor. + * + * @param name + * of {@link TargetTag} + * @param description + * of {@link TargetTag} + * @param colour + * of {@link TargetTag} + */ + public JpaTargetTag(final String name, final String description, final String colour) { + super(name, description, colour); + } + + /** + * Public constructor. + * + * @param name + * of the {@link TargetTag} + **/ + public JpaTargetTag(final String name) { + super(name, null, null); + } + + public JpaTargetTag() { + super(); + } + + @Override + public List getAssignedToTargets() { + return assignedToTargets; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + this.getClass().getName().hashCode(); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof TargetTag)) { + return false; + } + + return true; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantAwareBaseEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantAwareBaseEntity.java new file mode 100644 index 000000000..e921e6915 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantAwareBaseEntity.java @@ -0,0 +1,115 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Column; +import javax.persistence.MappedSuperclass; +import javax.persistence.PrePersist; + +import org.eclipse.hawkbit.repository.exception.TenantNotExistException; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; +import org.eclipse.hawkbit.repository.model.helper.SystemManagementHolder; +import org.eclipse.hawkbit.repository.model.helper.TenantAwareHolder; +import org.eclipse.persistence.annotations.Multitenant; +import org.eclipse.persistence.annotations.MultitenantType; +import org.eclipse.persistence.annotations.TenantDiscriminatorColumn; + +/** + * Holder of the base attributes common to all tenant aware entities. + * + */ +@MappedSuperclass +@TenantDiscriminatorColumn(name = "tenant", length = 40) +@Multitenant(MultitenantType.SINGLE_TABLE) +public abstract class JpaTenantAwareBaseEntity extends JpaBaseEntity implements TenantAwareBaseEntity { + private static final long serialVersionUID = 1L; + + @Column(name = "tenant", nullable = false, insertable = false, updatable = false, length = 40) + private String tenant; + + /** + * Default constructor needed for JPA entities. + */ + public JpaTenantAwareBaseEntity() { + // Default constructor needed for JPA entities. + } + + /** + * PrePersist listener method for all {@link TenantAwareBaseEntity} + * entities. + */ + @PrePersist + public void prePersist() { + // before persisting the entity check the current ID of the tenant by + // using the TenantAware + // service + final String currentTenant = SystemManagementHolder.getInstance().currentTenant(); + if (currentTenant == null) { + throw new TenantNotExistException("Tenant " + + TenantAwareHolder.getInstance().getTenantAware().getCurrentTenant() + + " does not exists, cannot create entity " + this.getClass() + " with id " + super.getId()); + } + setTenant(currentTenant.toUpperCase()); + } + + @Override + public String getTenant() { + return tenant; + } + + public void setTenant(final String tenant) { + this.tenant = tenant; + } + + @Override + public String toString() { + return "BaseEntity [id=" + super.getId() + "]"; + } + + /** + * Tenant aware entities extend the equals/hashcode strategy with the tenant + * name. That would allow for instance in a multi-schema based data + * separation setup to have the same primary key for different entities of + * different tenants. + * + * @see org.eclipse.hawkbit.repository.model.BaseEntity#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + (tenant == null ? 0 : tenant.hashCode()); + return result; + } + + /** + * Tenant aware entities extend the equals/hashcode strategy with the tenant + * name. That would allow for instance in a multi-schema based data + * separation setup to have the same primary key for different entities of + * different tenants. + * + * @see org.eclipse.hawkbit.repository.model.BaseEntity#equals(java.lang.Object) + */ + @Override + public boolean equals(final Object obj) { + if (!super.equals(obj)) { + return false; + } + final JpaTenantAwareBaseEntity other = (JpaTenantAwareBaseEntity) obj; + if (tenant == null) { + if (other.tenant != null) { + return false; + } + } else if (!tenant.equals(other.tenant)) { + return false; + } + return true; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java new file mode 100644 index 000000000..2d1342b74 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java @@ -0,0 +1,75 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.model.TenantConfiguration; + +/** + * A JPA entity which stores the tenant specific configuration. + * + */ +@Entity +@Table(name = "sp_tenant_configuration", uniqueConstraints = @UniqueConstraint(columnNames = { "conf_key", + "tenant" }, name = "uk_tenant_key")) +public class JpaTenantConfiguration extends JpaTenantAwareBaseEntity implements TenantConfiguration { + private static final long serialVersionUID = 1L; + + @Column(name = "conf_key", length = 128) + private String key; + + @Column(name = "conf_value", length = 512) + @Basic + private String value; + + /** + * JPA default constructor. + */ + public JpaTenantConfiguration() { + // JPA default constructor. + } + + /** + * @param key + * the key of this configuration + * @param value + * the value of this configuration + */ + public JpaTenantConfiguration(final String key, final String value) { + this.key = key; + this.value = value; + + } + + @Override + public String getKey() { + return key; + } + + @Override + public void setKey(final String key) { + this.key = key; + } + + @Override + public String getValue() { + return value; + } + + @Override + public void setValue(final String value) { + this.value = value; + } + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java new file mode 100644 index 000000000..7cb31b3c4 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java @@ -0,0 +1,107 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa.model; + +import javax.persistence.Column; +import javax.persistence.ConstraintMode; +import javax.persistence.Entity; +import javax.persistence.EntityManager; +import javax.persistence.FetchType; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.OneToOne; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; +import org.eclipse.hawkbit.repository.model.TenantMetaData; + +/** + * Tenant entity with meta data that is configured globally for the entire + * tenant. This entity is not tenant aware to allow the system to access it + * through the {@link EntityManager} even before the actual tenant exists. + * + * Entities owned by the tenant are based on {@link TenantAwareBaseEntity}. + * + */ +@Table(name = "sp_tenant", indexes = { + @Index(name = "sp_idx_tenant_prim", columnList = "tenant,id") }, uniqueConstraints = { + @UniqueConstraint(columnNames = { "tenant" }, name = "uk_tenantmd_tenant") }) +@Entity +public class JpaTenantMetaData extends JpaBaseEntity implements TenantMetaData { + private static final long serialVersionUID = 1L; + + @Column(name = "tenant", nullable = false, length = 40) + private String tenant; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "default_ds_type", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_tenant_md_default_ds_type")) + private JpaDistributionSetType defaultDsType; + + /** + * Default constructor needed for JPA entities. + */ + public JpaTenantMetaData() { + // Default constructor needed for JPA entities. + } + + /** + * Standard constructor. + * + * @param defaultDsType + * of this tenant + * @param tenant + */ + public JpaTenantMetaData(final DistributionSetType defaultDsType, final String tenant) { + super(); + this.defaultDsType = (JpaDistributionSetType) defaultDsType; + this.tenant = tenant; + } + + @Override + public DistributionSetType getDefaultDsType() { + return defaultDsType; + } + + @Override + public void setDefaultDsType(final DistributionSetType defaultDsType) { + this.defaultDsType = (JpaDistributionSetType) defaultDsType; + } + + @Override + public String getTenant() { + return tenant; + } + + public void setTenant(final String tenant) { + this.tenant = tenant; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + this.getClass().getName().hashCode(); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof TenantMetaData)) { + return false; + } + + return true; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroup.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroup.java similarity index 77% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroup.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroup.java index 7a46b15b1..0bb969c7f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroup.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroup.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model; +package org.eclipse.hawkbit.repository.jpa.model; import java.io.Serializable; import java.util.List; @@ -24,6 +24,9 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.persistence.annotations.ExistenceChecking; import org.eclipse.persistence.annotations.ExistenceType; @@ -41,16 +44,16 @@ public class RolloutTargetGroup implements Serializable { private static final long serialVersionUID = 1L; @Id - @ManyToOne(targetEntity = RolloutGroup.class, fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }) - @JoinColumn(name = "rolloutGroup_Id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rollouttargetgroup_group") ) + @ManyToOne(targetEntity = JpaRolloutGroup.class, fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }) + @JoinColumn(name = "rolloutGroup_Id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rollouttargetgroup_group")) private RolloutGroup rolloutGroup; @Id - @ManyToOne(targetEntity = Target.class, fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }) - @JoinColumn(name = "target_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rollouttargetgroup_target") ) - private Target target; + @ManyToOne(targetEntity = JpaTarget.class, fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }) + @JoinColumn(name = "target_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rollouttargetgroup_target")) + private JpaTarget target; - @OneToMany(targetEntity = Action.class, fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }) + @OneToMany(targetEntity = JpaAction.class, fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }) @JoinColumns(value = { @JoinColumn(name = "rolloutgroup", referencedColumnName = "rolloutGroup_Id"), @JoinColumn(name = "target", referencedColumnName = "target_id") }) private List actions; @@ -64,7 +67,7 @@ public class RolloutTargetGroup implements Serializable { public RolloutTargetGroup(final RolloutGroup rolloutGroup, final Target target) { this.rolloutGroup = rolloutGroup; - this.target = target; + this.target = (JpaTarget) target; } public RolloutTargetGroupId getId() { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroupId.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroupId.java similarity index 88% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroupId.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroupId.java index 88226142a..cc1c9cbe7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroupId.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroupId.java @@ -6,10 +6,13 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model; +package org.eclipse.hawkbit.repository.jpa.model; import java.io.Serializable; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.Target; + /** * Combined unique key of the table {@link RolloutTargetGroup}. * diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SwMetadataCompositeKey.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/SwMetadataCompositeKey.java similarity index 96% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SwMetadataCompositeKey.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/SwMetadataCompositeKey.java index 90b3779a1..e9c63b511 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SwMetadataCompositeKey.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/SwMetadataCompositeKey.java @@ -6,10 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model; +package org.eclipse.hawkbit.repository.jpa.model; import java.io.Serializable; +import org.eclipse.hawkbit.repository.model.SoftwareModule; + /** * The Software Module meta data composite key which contains the meta data key * and the ID of the software module itself. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/ActionSpecifications.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/ActionSpecifications.java similarity index 55% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/ActionSpecifications.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/ActionSpecifications.java index 62e7167f1..54d529d6c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/ActionSpecifications.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/ActionSpecifications.java @@ -6,20 +6,22 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.specifications; +package org.eclipse.hawkbit.repository.jpa.specifications; import javax.persistence.criteria.Join; import javax.persistence.criteria.ListJoin; import javax.persistence.criteria.SetJoin; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction_; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; +import org.eclipse.hawkbit.repository.jpa.model.JpaLocalArtifact; +import org.eclipse.hawkbit.repository.jpa.model.JpaLocalArtifact_; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule_; import org.eclipse.hawkbit.repository.model.Action; -import org.eclipse.hawkbit.repository.model.Action_; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSet_; import org.eclipse.hawkbit.repository.model.LocalArtifact; -import org.eclipse.hawkbit.repository.model.LocalArtifact_; -import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.model.SoftwareModule_; import org.eclipse.hawkbit.repository.model.Target; import org.springframework.data.jpa.domain.Specification; @@ -28,7 +30,7 @@ import org.springframework.data.jpa.domain.Specification; * Spring Data JPQL Specifications. * */ -public class ActionSpecifications { +public final class ActionSpecifications { private ActionSpecifications() { // utility class @@ -47,15 +49,16 @@ public class ActionSpecifications { * assigned * @return a specification to use with spring JPA */ - public static Specification hasTargetAssignedArtifact(final Target target, + public static Specification hasTargetAssignedArtifact(final Target target, final LocalArtifact localArtifact) { return (actionRoot, query, criteriaBuilder) -> { - final Join dsJoin = actionRoot.join(Action_.distributionSet); - final SetJoin modulesJoin = dsJoin.join(DistributionSet_.modules); - final ListJoin artifactsJoin = modulesJoin.join(SoftwareModule_.artifacts); + final Join dsJoin = actionRoot.join(JpaAction_.distributionSet); + final SetJoin modulesJoin = dsJoin.join(JpaDistributionSet_.modules); + final ListJoin artifactsJoin = modulesJoin + .join(JpaSoftwareModule_.artifacts); return criteriaBuilder.and( - criteriaBuilder.equal(artifactsJoin.get(LocalArtifact_.filename), localArtifact.getFilename()), - criteriaBuilder.equal(actionRoot.get(Action_.target), target)); + criteriaBuilder.equal(artifactsJoin.get(JpaLocalArtifact_.filename), localArtifact.getFilename()), + criteriaBuilder.equal(actionRoot.get(JpaAction_.target), target)); }; } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetSpecification.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetSpecification.java similarity index 58% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetSpecification.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetSpecification.java index b95f0b8e7..4ee849bcc 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetSpecification.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetSpecification.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.specifications; +package org.eclipse.hawkbit.repository.jpa.specifications; import java.util.Collection; @@ -18,15 +18,17 @@ import javax.persistence.criteria.Path; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.SetJoin; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag_; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.repository.model.DistributionSetTag_; import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.DistributionSet_; -import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetInfo; -import org.eclipse.hawkbit.repository.model.TargetInfo_; -import org.eclipse.hawkbit.repository.model.Target_; import org.springframework.data.jpa.domain.Specification; /** @@ -48,8 +50,8 @@ public final class DistributionSetSpecification { * attribute is ignored * @return the {@link DistributionSet} {@link Specification} */ - public static Specification isDeleted(final Boolean isDeleted) { - return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSet_.deleted), isDeleted); + public static Specification isDeleted(final Boolean isDeleted) { + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(JpaDistributionSet_.deleted), isDeleted); } @@ -62,8 +64,8 @@ public final class DistributionSetSpecification { * the attribute is ignored * @return the {@link DistributionSet} {@link Specification} */ - public static Specification isCompleted(final Boolean isCompleted) { - return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSet_.complete), isCompleted); + public static Specification isCompleted(final Boolean isCompleted) { + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(JpaDistributionSet_.complete), isCompleted); } @@ -75,12 +77,12 @@ public final class DistributionSetSpecification { * to search * @return the {@link DistributionSet} {@link Specification} */ - public static Specification byId(final Long distid) { + public static Specification byId(final Long distid) { return (targetRoot, query, cb) -> { - final Predicate predicate = cb.equal(targetRoot. get(DistributionSet_.id), distid); - targetRoot.fetch(DistributionSet_.modules, JoinType.LEFT); - targetRoot.fetch(DistributionSet_.tags, JoinType.LEFT); - targetRoot.fetch(DistributionSet_.type, JoinType.LEFT); + final Predicate predicate = cb.equal(targetRoot. get(JpaDistributionSet_.id), distid); + targetRoot.fetch(JpaDistributionSet_.modules, JoinType.LEFT); + targetRoot.fetch(JpaDistributionSet_.tags, JoinType.LEFT); + targetRoot.fetch(JpaDistributionSet_.type, JoinType.LEFT); query.distinct(true); return predicate; @@ -95,12 +97,12 @@ public final class DistributionSetSpecification { * to search * @return the {@link DistributionSet} {@link Specification} */ - public static Specification byIds(final Collection distids) { + public static Specification byIds(final Collection distids) { return (targetRoot, query, cb) -> { - final Predicate predicate = targetRoot. get(DistributionSet_.id).in(distids); - targetRoot.fetch(DistributionSet_.modules, JoinType.LEFT); - targetRoot.fetch(DistributionSet_.tags, JoinType.LEFT); - targetRoot.fetch(DistributionSet_.type, JoinType.LEFT); + final Predicate predicate = targetRoot. get(JpaDistributionSet_.id).in(distids); + targetRoot.fetch(JpaDistributionSet_.modules, JoinType.LEFT); + targetRoot.fetch(JpaDistributionSet_.tags, JoinType.LEFT); + targetRoot.fetch(JpaDistributionSet_.type, JoinType.LEFT); query.distinct(true); return predicate; }; @@ -114,11 +116,11 @@ public final class DistributionSetSpecification { * to be filtered on * @return the {@link DistributionSet} {@link Specification} */ - public static Specification likeNameOrDescriptionOrVersion(final String subString) { + public static Specification likeNameOrDescriptionOrVersion(final String subString) { return (targetRoot, query, cb) -> cb.or( - cb.like(cb.lower(targetRoot. get(DistributionSet_.name)), subString.toLowerCase()), - cb.like(cb.lower(targetRoot. get(DistributionSet_.version)), subString.toLowerCase()), - cb.like(cb.lower(targetRoot. get(DistributionSet_.description)), subString.toLowerCase())); + cb.like(cb.lower(targetRoot. get(JpaDistributionSet_.name)), subString.toLowerCase()), + cb.like(cb.lower(targetRoot. get(JpaDistributionSet_.version)), subString.toLowerCase()), + cb.like(cb.lower(targetRoot. get(JpaDistributionSet_.description)), subString.toLowerCase())); } /** @@ -131,10 +133,10 @@ public final class DistributionSetSpecification { * flag to select distribution sets with no tag * @return the {@link DistributionSet} {@link Specification} */ - public static Specification hasTags(final Collection tagNames, + public static Specification hasTags(final Collection tagNames, final Boolean selectDSWithNoTag) { return (targetRoot, query, cb) -> { - final SetJoin tags = targetRoot.join(DistributionSet_.tags, + final SetJoin tags = targetRoot.join(JpaDistributionSet_.tags, JoinType.LEFT); final Predicate predicate = getPredicate(tags, tagNames, selectDSWithNoTag, cb); query.distinct(true); @@ -142,10 +144,10 @@ public final class DistributionSetSpecification { }; } - private static Predicate getPredicate(final SetJoin tags, + private static Predicate getPredicate(final SetJoin tags, final Collection tagNames, final Boolean selectDSWithNoTag, final CriteriaBuilder cb) { - tags.get(DistributionSetTag_.name); - final Path exp = tags.get(DistributionSetTag_.name); + tags.get(JpaDistributionSetTag_.name); + final Path exp = tags.get(JpaDistributionSetTag_.name); if (selectDSWithNoTag != null && selectDSWithNoTag) { if (tagNames != null) { return cb.or(exp.isNull(), exp.in(tagNames)); @@ -167,11 +169,11 @@ public final class DistributionSetSpecification { * to be filtered on * @return the {@link Specification} */ - public static Specification equalsNameAndVersionIgnoreCase(final String name, + public static Specification equalsNameAndVersionIgnoreCase(final String name, final String version) { return (targetRoot, query, cb) -> cb.and( - cb.equal(cb.lower(targetRoot. get(DistributionSet_.name)), name.toLowerCase()), - cb.equal(cb.lower(targetRoot. get(DistributionSet_.version)), version.toLowerCase())); + cb.equal(cb.lower(targetRoot. get(JpaDistributionSet_.name)), name.toLowerCase()), + cb.equal(cb.lower(targetRoot. get(JpaDistributionSet_.version)), version.toLowerCase())); } @@ -183,8 +185,9 @@ public final class DistributionSetSpecification { * to search * @return the {@link DistributionSet} {@link Specification} */ - public static Specification byType(final DistributionSetType type) { - return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSet_.type), type); + public static Specification byType(final DistributionSetType type) { + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(JpaDistributionSet_.type), + type); } @@ -195,12 +198,12 @@ public final class DistributionSetSpecification { * @return the specification to search for a distribution set which is * installed to the given targetId */ - public static Specification installedTarget(final String installedTargetId) { + public static Specification installedTarget(final String installedTargetId) { return (dsRoot, query, cb) -> { - final ListJoin installedTargetJoin = dsRoot - .join(DistributionSet_.installedAtTargets, JoinType.INNER); - final Join targetJoin = installedTargetJoin.join(TargetInfo_.target); - return cb.equal(targetJoin.get(Target_.controllerId), installedTargetId); + final ListJoin installedTargetJoin = dsRoot + .join(JpaDistributionSet_.installedAtTargets, JoinType.INNER); + final Join targetJoin = installedTargetJoin.join(JpaTargetInfo_.target); + return cb.equal(targetJoin.get(JpaTarget_.controllerId), installedTargetId); }; } @@ -211,11 +214,11 @@ public final class DistributionSetSpecification { * @return the specification to search for a distribution set which is * assigned to the given targetId */ - public static Specification assignedTarget(final String assignedTargetId) { + public static Specification assignedTarget(final String assignedTargetId) { return (dsRoot, query, cb) -> { - final ListJoin assignedTargetJoin = dsRoot.join(DistributionSet_.assignedToTargets, - JoinType.INNER); - return cb.equal(assignedTargetJoin.get(Target_.controllerId), assignedTargetId); + final ListJoin assignedTargetJoin = dsRoot + .join(JpaDistributionSet_.assignedToTargets, JoinType.INNER); + return cb.equal(assignedTargetJoin.get(JpaTarget_.controllerId), assignedTargetId); }; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetTypeSpecification.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetTypeSpecification.java similarity index 75% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetTypeSpecification.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetTypeSpecification.java index 13776deb0..0a8306faa 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetTypeSpecification.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetTypeSpecification.java @@ -6,11 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.specifications; +package org.eclipse.hawkbit.repository.jpa.specifications; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType_; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.DistributionSetType_; import org.springframework.data.jpa.domain.Specification; /** @@ -31,8 +32,9 @@ public final class DistributionSetTypeSpecification { * attribute is ignored * @return the {@link DistributionSetType} {@link Specification} */ - public static Specification isDeleted(final Boolean isDeleted) { - return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSetType_.deleted), isDeleted); + public static Specification isDeleted(final Boolean isDeleted) { + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(JpaDistributionSetType_.deleted), + isDeleted); } /** @@ -44,8 +46,8 @@ public final class DistributionSetTypeSpecification { * to search * @return the {@link DistributionSet} {@link Specification} */ - public static Specification byId(final Long distid) { - return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSetType_.id), distid); + public static Specification byId(final Long distid) { + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(JpaDistributionSetType_.id), distid); } /** @@ -57,8 +59,8 @@ public final class DistributionSetTypeSpecification { * to search * @return the {@link DistributionSet} {@link Specification} */ - public static Specification byName(final String name) { - return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSetType_.name), name); + public static Specification byName(final String name) { + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(JpaDistributionSetType_.name), name); } /** @@ -70,8 +72,8 @@ public final class DistributionSetTypeSpecification { * to search * @return the {@link DistributionSet} {@link Specification} */ - public static Specification byKey(final String key) { - return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSetType_.key), key); + public static Specification byKey(final String key) { + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(JpaDistributionSetType_.key), key); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/SoftwareModuleSpecification.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SoftwareModuleSpecification.java similarity index 63% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/SoftwareModuleSpecification.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SoftwareModuleSpecification.java index 680f97778..feba50ac8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/SoftwareModuleSpecification.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SoftwareModuleSpecification.java @@ -6,13 +6,14 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.specifications; +package org.eclipse.hawkbit.repository.jpa.specifications; import javax.persistence.criteria.Predicate; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule_; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.model.SoftwareModule_; import org.springframework.data.jpa.domain.Specification; /** @@ -33,10 +34,10 @@ public final class SoftwareModuleSpecification { * to search for * @return the {@link SoftwareModule} {@link Specification} */ - public static Specification byId(final Long moduleId) { + public static Specification byId(final Long moduleId) { return (targetRoot, query, cb) -> { - final Predicate predicate = cb.equal(targetRoot. get(SoftwareModule_.id), moduleId); - targetRoot.fetch(SoftwareModule_.type); + final Predicate predicate = cb.equal(targetRoot. get(JpaSoftwareModule_.id), moduleId); + targetRoot.fetch(JpaSoftwareModule_.type); return predicate; }; } @@ -47,8 +48,8 @@ public final class SoftwareModuleSpecification { * * @return the {@link SoftwareModule} {@link Specification} */ - public static Specification isDeletedFalse() { - return (swRoot, query, cb) -> cb.equal(swRoot. get(SoftwareModule_.deleted), Boolean.FALSE); + public static Specification isDeletedFalse() { + return (swRoot, query, cb) -> cb.equal(swRoot. get(JpaSoftwareModule_.deleted), Boolean.FALSE); } /** @@ -59,10 +60,10 @@ public final class SoftwareModuleSpecification { * to be filtered on * @return the {@link SoftwareModule} {@link Specification} */ - public static Specification likeNameOrVersion(final String subString) { + public static Specification likeNameOrVersion(final String subString) { return (targetRoot, query, cb) -> cb.or( - cb.like(cb.lower(targetRoot. get(SoftwareModule_.name)), subString.toLowerCase()), - cb.like(cb.lower(targetRoot. get(SoftwareModule_.version)), subString.toLowerCase())); + cb.like(cb.lower(targetRoot. get(JpaSoftwareModule_.name)), subString.toLowerCase()), + cb.like(cb.lower(targetRoot. get(JpaSoftwareModule_.version)), subString.toLowerCase())); } /** @@ -73,8 +74,9 @@ public final class SoftwareModuleSpecification { * to be filtered on * @return the {@link SoftwareModule} {@link Specification} */ - public static Specification equalType(final SoftwareModuleType type) { - return (targetRoot, query, cb) -> cb.equal(targetRoot. get(SoftwareModule_.type), type); + public static Specification equalType(final JpaSoftwareModuleType type) { + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(JpaSoftwareModule_.type), + type); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/SpecificationsBuilder.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SpecificationsBuilder.java similarity index 95% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/SpecificationsBuilder.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SpecificationsBuilder.java index 83a4c6f8b..005942719 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/SpecificationsBuilder.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SpecificationsBuilder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.specifications; +package org.eclipse.hawkbit.repository.jpa.specifications; import java.util.List; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetFilterQuerySpecification.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetFilterQuerySpecification.java similarity index 67% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetFilterQuerySpecification.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetFilterQuerySpecification.java index 0b600c849..cb3b775ac 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetFilterQuerySpecification.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetFilterQuerySpecification.java @@ -6,10 +6,11 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.specifications; +package org.eclipse.hawkbit.repository.jpa.specifications; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery_; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; -import org.eclipse.hawkbit.repository.model.TargetFilterQuery_; import org.springframework.data.jpa.domain.Specification; /** @@ -22,10 +23,10 @@ public class TargetFilterQuerySpecification { // utility class } - public static Specification likeName(final String searchText) { + public static Specification likeName(final String searchText) { return (targetFilterQueryRoot, query, cb) -> { final String searchTextToLower = searchText.toLowerCase(); - return cb.like(cb.lower(targetFilterQueryRoot.get(TargetFilterQuery_.name)), searchTextToLower); + return cb.like(cb.lower(targetFilterQueryRoot.get(JpaTargetFilterQuery_.name)), searchTextToLower); }; } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetSpecifications.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetSpecifications.java similarity index 59% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetSpecifications.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetSpecifications.java index de894d3a3..6571f8668 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetSpecifications.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetSpecifications.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.specifications; +package org.eclipse.hawkbit.repository.jpa.specifications; import java.util.Collection; import java.util.List; @@ -20,15 +20,19 @@ import javax.persistence.criteria.Root; import javax.persistence.criteria.SetJoin; import javax.validation.constraints.NotNull; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag_; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSet_; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; -import org.eclipse.hawkbit.repository.model.TargetInfo_; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.repository.model.TargetTag_; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.model.Target_; import org.springframework.data.jpa.domain.Specification; /** @@ -50,10 +54,11 @@ public final class TargetSpecifications { * * @return the {@link Target} {@link Specification} */ - public static Specification byControllerIdWithStatusAndTagsInJoin(final Collection controllerIDs) { + public static Specification byControllerIdWithStatusAndTagsInJoin( + final Collection controllerIDs) { return (targetRoot, query, cb) -> { - final Predicate predicate = targetRoot.get(Target_.controllerId).in(controllerIDs); - targetRoot.fetch(Target_.tags, JoinType.LEFT); + final Predicate predicate = targetRoot.get(JpaTarget_.controllerId).in(controllerIDs); + targetRoot.fetch(JpaTarget_.tags, JoinType.LEFT); query.distinct(true); return predicate; }; @@ -68,12 +73,12 @@ public final class TargetSpecifications { * * @return the {@link Target} {@link Specification} */ - public static Specification byControllerIdWithStatusAndAssignedInJoin( + public static Specification byControllerIdWithStatusAndAssignedInJoin( final Collection controllerIDs) { return (targetRoot, query, cb) -> { - final Predicate predicate = targetRoot.get(Target_.controllerId).in(controllerIDs); - targetRoot.fetch(Target_.assignedDistributionSet); + final Predicate predicate = targetRoot.get(JpaTarget_.controllerId).in(controllerIDs); + targetRoot.fetch(JpaTarget_.assignedDistributionSet); return predicate; }; } @@ -89,19 +94,19 @@ public final class TargetSpecifications { * join it. * @return the {@link Target} {@link Specification} */ - public static Specification hasTargetUpdateStatus(final Collection updateStatus, + public static Specification hasTargetUpdateStatus(final Collection updateStatus, final boolean fetch) { return (targetRoot, query, cb) -> { if (!query.getResultType().isAssignableFrom(Long.class)) { if (fetch) { - targetRoot.fetch(Target_.targetInfo); + targetRoot.fetch(JpaTarget_.targetInfo); } else { - targetRoot.join(Target_.targetInfo); + targetRoot.join(JpaTarget_.targetInfo); } - return targetRoot.get(Target_.targetInfo).get(TargetInfo_.updateStatus).in(updateStatus); + return targetRoot.get(JpaTarget_.targetInfo).get(JpaTargetInfo_.updateStatus).in(updateStatus); } - final Join targetInfoJoin = targetRoot.join(Target_.targetInfo); - return targetInfoJoin.get(TargetInfo_.updateStatus).in(updateStatus); + final Join targetInfoJoin = targetRoot.join(JpaTarget_.targetInfo); + return targetInfoJoin.get(JpaTargetInfo_.updateStatus).in(updateStatus); }; } @@ -113,11 +118,11 @@ public final class TargetSpecifications { * to be filtered on * @return the {@link Target} {@link Specification} */ - public static Specification likeNameOrDescriptionOrIp(final String searchText) { + public static Specification likeNameOrDescriptionOrIp(final String searchText) { return (targetRoot, query, cb) -> { final String searchTextToLower = searchText.toLowerCase(); - return cb.or(cb.like(cb.lower(targetRoot.get(Target_.name)), searchTextToLower), - cb.like(cb.lower(targetRoot.get(Target_.description)), searchTextToLower)); + return cb.or(cb.like(cb.lower(targetRoot.get(JpaTarget_.name)), searchTextToLower), + cb.like(cb.lower(targetRoot.get(JpaTarget_.description)), searchTextToLower)); }; } @@ -129,14 +134,14 @@ public final class TargetSpecifications { * to be filtered on * @return the {@link Target} {@link Specification} */ - public static Specification hasInstalledOrAssignedDistributionSet(@NotNull final Long distributionId) { + public static Specification hasInstalledOrAssignedDistributionSet(@NotNull final Long distributionId) { return (targetRoot, query, cb) -> { - final Join targetInfoJoin = targetRoot.join(Target_.targetInfo); + final Join targetInfoJoin = targetRoot.join(JpaTarget_.targetInfo); return cb.or( - cb.equal(targetInfoJoin.get(TargetInfo_.installedDistributionSet).get(DistributionSet_.id), + cb.equal(targetInfoJoin.get(JpaTargetInfo_.installedDistributionSet).get(JpaDistributionSet_.id), distributionId), - cb.equal(targetRoot. get(Target_.assignedDistributionSet).get(DistributionSet_.id), - distributionId)); + cb.equal(targetRoot. get(JpaTarget_.assignedDistributionSet) + .get(JpaDistributionSet_.id), distributionId)); }; } @@ -150,13 +155,12 @@ public final class TargetSpecifications { * set that is not yet assigned * @return the {@link Target} {@link Specification} */ - public static Specification hasControllerIdAndAssignedDistributionSetIdNot(final List tIDs, + public static Specification hasControllerIdAndAssignedDistributionSetIdNot(final List tIDs, @NotNull final Long distributionId) { - return (targetRoot, query, cb) -> cb - .and(targetRoot.get(Target_.controllerId).in(tIDs), - cb.or(cb.notEqual(targetRoot. get(Target_.assignedDistributionSet) - .get(DistributionSet_.id), distributionId), - cb.isNull(targetRoot. get(Target_.assignedDistributionSet)))); + return (targetRoot, query, cb) -> cb.and(targetRoot.get(JpaTarget_.controllerId).in(tIDs), + cb.or(cb.notEqual(targetRoot. get(JpaTarget_.assignedDistributionSet) + .get(JpaDistributionSet_.id), distributionId), + cb.isNull(targetRoot. get(JpaTarget_.assignedDistributionSet)))); } /** @@ -169,7 +173,7 @@ public final class TargetSpecifications { * flag to get targets with no tag assigned * @return the {@link Target} {@link Specification} */ - public static Specification hasTags(final String[] tagNames, final Boolean selectTargetWithNoTag) { + public static Specification hasTags(final String[] tagNames, final Boolean selectTargetWithNoTag) { return (targetRoot, query, cb) -> { final Predicate predicate = getPredicate(targetRoot, cb, selectTargetWithNoTag, tagNames); query.distinct(true); @@ -177,10 +181,10 @@ public final class TargetSpecifications { }; } - private static Predicate getPredicate(final Root targetRoot, final CriteriaBuilder cb, + private static Predicate getPredicate(final Root targetRoot, final CriteriaBuilder cb, final Boolean selectTargetWithNoTag, final String[] tagNames) { - final SetJoin tags = targetRoot.join(Target_.tags, JoinType.LEFT); - final Path exp = tags.get(TargetTag_.name); + final SetJoin tags = targetRoot.join(JpaTarget_.tags, JoinType.LEFT); + final Path exp = tags.get(JpaTargetTag_.name); if (selectTargetWithNoTag) { if (tagNames != null) { return cb.or(exp.isNull(), exp.in(tagNames)); @@ -200,9 +204,9 @@ public final class TargetSpecifications { * the ID of the distribution set which must be assigned * @return the {@link Target} {@link Specification} */ - public static Specification hasAssignedDistributionSet(final Long distributionSetId) { + public static Specification hasAssignedDistributionSet(final Long distributionSetId) { return (targetRoot, query, cb) -> cb.equal( - targetRoot. get(Target_.assignedDistributionSet).get(DistributionSet_.id), + targetRoot. get(JpaTarget_.assignedDistributionSet).get(JpaDistributionSet_.id), distributionSetId); } @@ -214,10 +218,10 @@ public final class TargetSpecifications { * the ID of the distribution set which must be assigned * @return the {@link Target} {@link Specification} */ - public static Specification hasInstalledDistributionSet(final Long distributionSetId) { + public static Specification hasInstalledDistributionSet(final Long distributionSetId) { return (targetRoot, query, cb) -> { - final Join targetInfoJoin = targetRoot.join(Target_.targetInfo); - return cb.equal(targetInfoJoin.get(TargetInfo_.installedDistributionSet).get(DistributionSet_.id), + final Join targetInfoJoin = targetRoot.join(JpaTarget_.targetInfo); + return cb.equal(targetInfoJoin.get(JpaTargetInfo_.installedDistributionSet).get(JpaDistributionSet_.id), distributionSetId); }; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java index eedb36037..51b57bb17 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java @@ -10,193 +10,66 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedAttributeNode; -import javax.persistence.NamedEntityGraph; -import javax.persistence.NamedEntityGraphs; -import javax.persistence.NamedSubgraph; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Transient; - -import org.eclipse.hawkbit.cache.CacheField; -import org.eclipse.hawkbit.cache.CacheKeys; -import org.eclipse.persistence.annotations.CascadeOnDelete; - -/** - *

- * Applicable transition changes of the {@link SoftwareModule}s state of a - * {@link Target}, e.g. install, uninstall, update and preparations for the - * transition change, i.e. download. - *

- * - *

- * Actions are managed by the SP server and applied to the targets by the - * client. - *

- */ -@Table(name = "sp_action", indexes = { @Index(name = "sp_idx_action_01", columnList = "tenant,distribution_set"), - @Index(name = "sp_idx_action_02", columnList = "tenant,target,active"), - @Index(name = "sp_idx_action_prim", columnList = "tenant,id") }) -@NamedEntityGraphs({ @NamedEntityGraph(name = "Action.ds", attributeNodes = { @NamedAttributeNode("distributionSet") }), - @NamedEntityGraph(name = "Action.all", attributeNodes = { @NamedAttributeNode("distributionSet"), - @NamedAttributeNode(value = "target", subgraph = "target.ds") }, subgraphs = @NamedSubgraph(name = "target.ds", attributeNodes = @NamedAttributeNode("assignedDistributionSet"))) }) -@Entity -public class Action extends TenantAwareBaseEntity { - private static final long serialVersionUID = 1L; +public interface Action extends TenantAwareBaseEntity { /** * indicating that target action has no force time {@link #hasForcedTime()}. */ public static final long NO_FORCE_TIME = 0L; - /** - * the {@link DistributionSet} which should be installed by this action. - */ - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "distribution_set", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_ds")) - private DistributionSet distributionSet; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "target", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_target")) - private Target target; - - @Column(name = "active") - private boolean active; - - @Column(name = "action_type", nullable = false) - @Enumerated(EnumType.STRING) - private ActionType actionType; - - @Column(name = "forced_time") - private long forcedTime; - - @Column(name = "status") - private Status status; - - @CascadeOnDelete - @OneToMany(mappedBy = "action", targetEntity = ActionStatus.class, fetch = FetchType.LAZY, cascade = { - CascadeType.REMOVE }) - private List actionStatus; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "rolloutgroup", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_rolloutgroup")) - private RolloutGroup rolloutGroup; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "rollout", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_rollout")) - private Rollout rollout; - - /** - * Note: filled only in {@link Status#DOWNLOAD}. - */ - @Transient - @CacheField(key = CacheKeys.DOWNLOAD_PROGRESS_PERCENT) - private int downloadProgressPercent; - /** * @return the distributionSet */ - public DistributionSet getDistributionSet() { - return distributionSet; - } + DistributionSet getDistributionSet(); /** * @param distributionSet * the distributionSet to set */ - public void setDistributionSet(final DistributionSet distributionSet) { - this.distributionSet = distributionSet; - } + void setDistributionSet(DistributionSet distributionSet); /** * @return true when action is in state {@link Status#CANCELING} or * {@link Status#CANCELED}, false otherwise */ - public boolean isCancelingOrCanceled() { - return status == Status.CANCELING || status == Status.CANCELED; - } + boolean isCancelingOrCanceled(); - public void setActive(final boolean active) { - this.active = active; - } + void setActive(boolean active); - public Status getStatus() { - return status; - } + Status getStatus(); - public void setStatus(final Status status) { - this.status = status; - } + void setStatus(Status status); - public int getDownloadProgressPercent() { - return downloadProgressPercent; - } + int getDownloadProgressPercent(); - public void setDownloadProgressPercent(final int downloadProgressPercent) { - this.downloadProgressPercent = downloadProgressPercent; - } + void setDownloadProgressPercent(int downloadProgressPercent); - public boolean isActive() { - return active; - } + boolean isActive(); - public void setActionType(final ActionType actionType) { - this.actionType = actionType; - } + void setActionType(ActionType actionType); /** * @return the actionType */ - public ActionType getActionType() { - return actionType; - } + ActionType getActionType(); - public List getActionStatus() { - return actionStatus; - } + List getActionStatus(); - public void setTarget(final Target target) { - this.target = target; - } + void setTarget(Target target); - public Target getTarget() { - return target; - } + Target getTarget(); - public long getForcedTime() { - return forcedTime; - } + long getForcedTime(); - public void setForcedTime(final long forcedTime) { - this.forcedTime = forcedTime; - } + void setForcedTime(long forcedTime); - public RolloutGroup getRolloutGroup() { - return rolloutGroup; - } + RolloutGroup getRolloutGroup(); - public void setRolloutGroup(final RolloutGroup rolloutGroup) { - this.rolloutGroup = rolloutGroup; - } + void setRolloutGroup(RolloutGroup rolloutGroup); - public Rollout getRollout() { - return rollout; - } + Rollout getRollout(); - public void setRollout(final Rollout rollout) { - this.rollout = rollout; - } + void setRollout(Rollout rollout); /** * checks if the {@link #forcedTime} is hit by the given @@ -210,12 +83,7 @@ public class Action extends TenantAwareBaseEntity { * {@link ActionType#TIMEFORCED} and the given {@code hitTimeMillis} * is greater than the {@link #forcedTime} otherwise {@code false} */ - public boolean isHitAutoForceTime(final long hitTimeMillis) { - if (actionType == ActionType.TIMEFORCED) { - return hitTimeMillis >= forcedTime; - } - return false; - } + boolean isHitAutoForceTime(long hitTimeMillis); /** * @return {@code true} if either the {@link #type} is @@ -223,28 +91,12 @@ public class Action extends TenantAwareBaseEntity { * then if the {@link #forcedTime} has been exceeded otherwise * always {@code false} */ - public boolean isForce() { - switch (actionType) { - case FORCED: - return true; - case TIMEFORCED: - return isHitAutoForceTime(System.currentTimeMillis()); - default: - return false; - } - } + boolean isForce(); /** * @return true when action is forced, false otherwise */ - public boolean isForced() { - return actionType == ActionType.FORCED; - } - - @Override - public String toString() { - return "Action [distributionSet=" + distributionSet + ", getId()=" + getId() + "]"; - } + boolean isForced(); /** * Action status as reported by the controller. @@ -309,4 +161,5 @@ public class Action extends TenantAwareBaseEntity { public enum ActionType { FORCED, SOFT, TIMEFORCED; } -} + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java index c8d320abd..05f6966d8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java @@ -8,107 +8,15 @@ */ package org.eclipse.hawkbit.repository.model; -import java.util.ArrayList; import java.util.List; -import javax.persistence.CollectionTable; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedAttributeNode; -import javax.persistence.NamedEntityGraph; -import javax.persistence.Table; - import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.persistence.annotations.CascadeOnDelete; -import com.google.common.base.Splitter; +public interface ActionStatus extends TenantAwareBaseEntity { -/** - * Entity to store the status for a specific action. - */ -@Table(name = "sp_action_status", indexes = { @Index(name = "sp_idx_action_status_01", columnList = "tenant,action"), - @Index(name = "sp_idx_action_status_02", columnList = "tenant,action,status"), - @Index(name = "sp_idx_action_status_prim", columnList = "tenant,id") }) -@NamedEntityGraph(name = "ActionStatus.withMessages", attributeNodes = { @NamedAttributeNode("messages") }) -@Entity -public class ActionStatus extends TenantAwareBaseEntity { - private static final long serialVersionUID = 1L; + Long getOccurredAt(); - @Column(name = "target_occurred_at") - private Long occurredAt; - - @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JoinColumn(name = "action", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_act_stat_action")) - private Action action; - - @Column(name = "status") - private Status status; - - @CascadeOnDelete - @ElementCollection(fetch = FetchType.LAZY, targetClass = String.class) - @CollectionTable(name = "sp_action_status_messages", joinColumns = @JoinColumn(name = "action_status_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_stat_msg_act_stat")), indexes = { - @Index(name = "sp_idx_action_status_msgs_01", columnList = "action_status_id") }) - @Column(name = "detail_message", length = 512) - private final List messages = new ArrayList<>(); - - /** - * Creates a new {@link ActionStatus} object. - * - * @param action - * the action for this action status - * @param status - * the status for this action status - * @param occurredAt - * the occurred timestamp - */ - public ActionStatus(final Action action, final Status status, final Long occurredAt) { - this.action = action; - this.status = status; - this.occurredAt = occurredAt; - } - - /** - * Creates a new {@link ActionStatus} object. - * - * @param action - * the action for this action status - * @param status - * the status for this action status - * @param occurredAt - * the occurred timestamp - * @param messages - * the messages which should be added to this action status - */ - public ActionStatus(final Action action, final Status status, final Long occurredAt, final String... messages) { - this.action = action; - this.status = status; - this.occurredAt = occurredAt; - for (final String msg : messages) { - addMessage(msg); - } - } - - /** - * JPA default constructor. - */ - public ActionStatus() { - // JPA default constructor. - } - - public Long getOccurredAt() { - return occurredAt; - } - - public void setOccurredAt(final Long occurredAt) { - this.occurredAt = occurredAt; - } + void setOccurredAt(Long occurredAt); /** * Adds message including splitting in case it exceeds 512 length. @@ -116,28 +24,16 @@ public class ActionStatus extends TenantAwareBaseEntity { * @param message * to add */ - public final void addMessage(final String message) { - Splitter.fixedLength(512).split(message).forEach(messages::add); - } + void addMessage(String message); - public List getMessages() { - return messages; - } + List getMessages(); - public Action getAction() { - return action; - } + Action getAction(); - public void setAction(final Action action) { - this.action = action; - } + void setAction(Action action); - public Status getStatus() { - return status; - } + Status getStatus(); - public void setStatus(final Status status) { - this.status = status; - } + void setStatus(Status status); -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java index 73eab32f9..4b81320e8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository.model; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; @@ -16,6 +17,7 @@ import org.eclipse.hawkbit.repository.model.Action.Status; * action's {@link ActionStatus}. * */ +// TODO: create interface public class ActionWithStatusCount { private final Long actionStatusCount; private final Long actionId; @@ -28,7 +30,7 @@ public class ActionWithStatusCount { private final Long dsId; private final String dsName; private final String dsVersion; - private final Action action; + private final JpaAction action; private final String rolloutName; /** @@ -78,7 +80,7 @@ public class ActionWithStatusCount { this.actionStatusCount = actionStatusCount; this.rolloutName = rolloutName; - action = new Action(); + action = new JpaAction(); action.setActionType(actionType); action.setActive(actionActive); action.setForcedTime(actionForceTime); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java index b384a3100..a4db06d25 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java @@ -8,49 +8,16 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.Column; -import javax.persistence.MappedSuperclass; +public interface Artifact extends TenantAwareBaseEntity { -/** - * Tenant specific locally stored artifact representation that is used by - * {@link SoftwareModule}. - */ -@MappedSuperclass -public abstract class Artifact extends TenantAwareBaseEntity { - private static final long serialVersionUID = 1L; + SoftwareModule getSoftwareModule(); - @Column(name = "sha1_hash", length = 40, nullable = true) - private String sha1Hash; + void setSoftwareModule(SoftwareModule softwareModule); - @Column(name = "md5_hash", length = 32, nullable = true) - private String md5Hash; + String getMd5Hash(); - @Column(name = "file_size") - private Long size; + String getSha1Hash(); - public abstract SoftwareModule getSoftwareModule(); + Long getSize(); - public String getMd5Hash() { - return md5Hash; - } - - public String getSha1Hash() { - return sha1Hash; - } - - public void setMd5Hash(final String md5Hash) { - this.md5Hash = md5Hash; - } - - public void setSha1Hash(final String sha1Hash) { - this.sha1Hash = sha1Hash; - } - - public Long getSize() { - return size; - } - - public void setSize(final Long size) { - this.size = size; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java index 65300c6c4..0b8a8c5ee 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java @@ -10,171 +10,18 @@ package org.eclipse.hawkbit.repository.model; import java.io.Serializable; -import javax.persistence.Access; -import javax.persistence.AccessType; -import javax.persistence.Column; -import javax.persistence.EntityListeners; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.MappedSuperclass; -import javax.persistence.Version; - -import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; -import org.eclipse.hawkbit.eventbus.EntityPropertyChangeListener; -import org.springframework.data.annotation.CreatedBy; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedBy; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; import org.springframework.hateoas.Identifiable; -/** - * Holder of the base attributes common to all entities. - * - */ -@MappedSuperclass -@Access(AccessType.FIELD) -@EntityListeners({ AuditingEntityListener.class, CacheFieldEntityListener.class, EntityPropertyChangeListener.class }) -public abstract class BaseEntity implements Serializable, Identifiable { - private static final long serialVersionUID = 1L; +public interface BaseEntity extends Serializable, Identifiable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - private Long id; + Long getCreatedAt(); - private String createdBy; - private String lastModifiedBy; - private Long createdAt; - private Long lastModifiedAt; + String getCreatedBy(); - @Version - @Column(name = "optlock_revision") - private long optLockRevision; + Long getLastModifiedAt(); - /** - * Default constructor needed for JPA entities. - */ - public BaseEntity() { - // Default constructor needed for JPA entities. - } + String getLastModifiedBy(); - @Access(AccessType.PROPERTY) - @Column(name = "created_at", insertable = true, updatable = false) - public Long getCreatedAt() { - return createdAt; - } + long getOptLockRevision(); - @Access(AccessType.PROPERTY) - @Column(name = "created_by", insertable = true, updatable = false, length = 40) - public String getCreatedBy() { - return createdBy; - } - - @Access(AccessType.PROPERTY) - @Column(name = "last_modified_at", insertable = false, updatable = true) - public Long getLastModifiedAt() { - return lastModifiedAt; - } - - @Access(AccessType.PROPERTY) - @Column(name = "last_modified_by", insertable = false, updatable = true, length = 40) - public String getLastModifiedBy() { - return lastModifiedBy; - } - - @CreatedBy - public void setCreatedBy(final String createdBy) { - this.createdBy = createdBy; - } - - @LastModifiedBy - public void setLastModifiedBy(final String lastModifiedBy) { - this.lastModifiedBy = lastModifiedBy; - } - - @CreatedDate - public void setCreatedAt(final Long createdAt) { - this.createdAt = createdAt; - } - - @LastModifiedDate - public void setLastModifiedAt(final Long lastModifiedAt) { - this.lastModifiedAt = lastModifiedAt; - } - - public long getOptLockRevision() { - return optLockRevision; - } - - // for test purposes only - void setOptLockRevision(final long optLockRevision) { - this.optLockRevision = optLockRevision; - } - - @Override - public Long getId() { - return id; - } - - @Override - public String toString() { - return "BaseEntity [id=" + id + "]"; - } - - public void setId(final Long id) { - this.id = id; - } - - /** - * Defined equals/hashcode strategy for the repository in general is that an - * entity is equal if it has the same {@link #getId()} and - * {@link #getOptLockRevision()} and class. - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { // NOSONAR - as this is generated code - final int prime = 31; - int result = 1; - result = prime * result + (id == null ? 0 : id.hashCode()); - result = prime * result + (int) (optLockRevision ^ optLockRevision >>> 32); - result = prime * result + this.getClass().getName().hashCode(); - return result; - } - - /** - * Defined equals/hashcode strategy for the repository in general is that an - * entity is equal if it has the same {@link #getId()} and - * {@link #getOptLockRevision()} and class. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object obj) { // NOSONAR - as this is generated - // code - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(this.getClass().isInstance(obj))) { - return false; - } - final BaseEntity other = (BaseEntity) obj; - if (id == null) { - if (other.id != null) { - return false; - } - } else if (!id.equals(other.id)) { - return false; - } - if (optLockRevision != other.optLockRevision) { - return false; - } - return true; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java index a9d390284..41b1e5f5d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java @@ -8,198 +8,47 @@ */ package org.eclipse.hawkbit.repository.model; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Optional; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.NamedAttributeNode; -import javax.persistence.NamedEntityGraph; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; +public interface DistributionSet extends NamedVersionedEntity { -import org.eclipse.hawkbit.repository.exception.DistributionSetTypeUndefinedException; -import org.eclipse.hawkbit.repository.exception.UnsupportedSoftwareModuleForThisDistributionSetException; -import org.eclipse.persistence.annotations.CascadeOnDelete; + Set getTags(); -/** - *

- * The {@link DistributionSet} is defined in the SP repository and contains at - * least an OS and an Agent Hub. - *

- * - *

- * A {@link Target} has exactly one target {@link DistributionSet} assigned. - *

- * - */ -@Entity -@Table(name = "sp_distribution_set", uniqueConstraints = { - @UniqueConstraint(columnNames = { "name", "version", "tenant" }, name = "uk_distrib_set") }, indexes = { - @Index(name = "sp_idx_distribution_set_01", columnList = "tenant,deleted,name,complete"), - @Index(name = "sp_idx_distribution_set_02", columnList = "tenant,required_migration_step"), - @Index(name = "sp_idx_distribution_set_prim", columnList = "tenant,id") }) -@NamedEntityGraph(name = "DistributionSet.detail", attributeNodes = { @NamedAttributeNode("modules"), - @NamedAttributeNode("tags"), @NamedAttributeNode("type") }) -public class DistributionSet extends NamedVersionedEntity { - private static final long serialVersionUID = 1L; - - @Column(name = "required_migration_step") - private boolean requiredMigrationStep = false; - - @ManyToMany(targetEntity = SoftwareModule.class, fetch = FetchType.LAZY) - @JoinTable(name = "sp_ds_module", joinColumns = { - @JoinColumn(name = "ds_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_module_ds")) }, inverseJoinColumns = { - @JoinColumn(name = "module_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_module_module")) }) - private final Set modules = new HashSet<>(); - - @ManyToMany(targetEntity = DistributionSetTag.class) - @JoinTable(name = "sp_ds_dstag", joinColumns = { - @JoinColumn(name = "ds", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_dstag_ds")) }, inverseJoinColumns = { - @JoinColumn(name = "TAG", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_dstag_tag")) }) - private Set tags = new HashSet<>(); - - @Column(name = "deleted") - private boolean deleted = false; - - @OneToMany(mappedBy = "assignedDistributionSet", targetEntity = Target.class, fetch = FetchType.LAZY) - private List assignedToTargets; - - @OneToMany(mappedBy = "installedDistributionSet", targetEntity = TargetInfo.class, fetch = FetchType.LAZY) - private List installedAtTargets; - - @OneToMany(mappedBy = "distributionSet", targetEntity = Action.class, fetch = FetchType.LAZY) - private List actions; - - @CascadeOnDelete - @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }) - @JoinColumn(name = "ds_id", insertable = false, updatable = false) - private final List metadata = new ArrayList<>(); - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "ds_id", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_dstype_ds")) - private DistributionSetType type; - - @Column(name = "complete") - private boolean complete = false; - - /** - * Default constructor. - */ - public DistributionSet() { - super(); - } - - /** - * Parameterized constructor. - * - * @param name - * of the {@link DistributionSet} - * @param version - * of the {@link DistributionSet} - * @param description - * of the {@link DistributionSet} - * @param type - * of the {@link DistributionSet} - * @param moduleList - * {@link SoftwareModule}s of the {@link DistributionSet} - */ - public DistributionSet(final String name, final String version, final String description, - final DistributionSetType type, final Iterable moduleList) { - super(name, version, description); - - this.type = type; - if (moduleList != null) { - moduleList.forEach(this::addModule); - } - if (this.type != null) { - complete = this.type.checkComplete(this); - } - } - - public Set getTags() { - return tags; - } - - public boolean isDeleted() { - return deleted; - } + boolean isDeleted(); /** * @return immutable list of meta data elements. */ - public List getMetadata() { - return Collections.unmodifiableList(metadata); - } + List getMetadata(); - public List getActions() { - return actions; - } + List getActions(); - public boolean isRequiredMigrationStep() { - return requiredMigrationStep; - } + boolean isRequiredMigrationStep(); - public DistributionSet setDeleted(final boolean deleted) { - this.deleted = deleted; - return this; - } + DistributionSet setDeleted(boolean deleted); - public DistributionSet setRequiredMigrationStep(final boolean isRequiredMigrationStep) { - requiredMigrationStep = isRequiredMigrationStep; - return this; - } + DistributionSet setRequiredMigrationStep(boolean isRequiredMigrationStep); - public DistributionSet setTags(final Set tags) { - this.tags = tags; - return this; - } + DistributionSet setTags(Set tags); /** * @return the assignedTargets */ - public List getAssignedTargets() { - return assignedToTargets; - } + List getAssignedTargets(); /** * @return the installedTargets */ - public List getInstalledTargets() { - return installedAtTargets; - } - - @Override - public String toString() { - return "DistributionSet [getName()=" + getName() + ", getOptLockRevision()=" + getOptLockRevision() - + ", getId()=" + getId() + "]"; - } + List getInstalledTargets(); /** * * @return unmodifiableSet of {@link SoftwareModule}. */ - public Set getModules() { - return Collections.unmodifiableSet(modules); - } + Set getModules(); - public DistributionSetIdName getDistributionSetIdName() { - return new DistributionSetIdName(getId(), getName(), getVersion()); - } + DistributionSetIdName getDistributionSetIdName(); /** * @param softwareModule @@ -207,41 +56,7 @@ public class DistributionSet extends NamedVersionedEntity { * if it already existed in the set * */ - public boolean addModule(final SoftwareModule softwareModule) { - - // we cannot allow that modules are added without a type defined - if (type == null) { - throw new DistributionSetTypeUndefinedException(); - } - - // check if it is allowed to such a module to this DS type - if (!type.containsModuleType(softwareModule.getType())) { - throw new UnsupportedSoftwareModuleForThisDistributionSetException(); - } - - final Optional found = modules.stream() - .filter(module -> module.getId().equals(softwareModule.getId())).findFirst(); - - if (found.isPresent()) { - return false; - } - - final long allready = modules.stream() - .filter(module -> module.getType().getKey().equals(softwareModule.getType().getKey())).count(); - - if (allready >= softwareModule.getType().getMaxAssignments()) { - final Optional sameKey = modules.stream() - .filter(module -> module.getType().getKey().equals(softwareModule.getType().getKey())).findFirst(); - modules.remove(sameKey.get()); - } - - if (modules.add(softwareModule)) { - complete = type.checkComplete(this); - return true; - } - - return false; - } + boolean addModule(SoftwareModule softwareModule); /** * Removed given {@link SoftwareModule} from this DS instance. @@ -250,19 +65,7 @@ public class DistributionSet extends NamedVersionedEntity { * to remove * @return true if element was found and removed */ - public boolean removeModule(final SoftwareModule softwareModule) { - final Optional found = modules.stream() - .filter(module -> module.getId().equals(softwareModule.getId())).findFirst(); - - if (found.isPresent()) { - modules.remove(found.get()); - complete = type.checkComplete(this); - return true; - } - - return false; - - } + boolean removeModule(SoftwareModule softwareModule); /** * Searches through modules for the given type. @@ -272,26 +75,12 @@ public class DistributionSet extends NamedVersionedEntity { * @return SoftwareModule of given type or null if not in the * list. */ - public SoftwareModule findFirstModuleByType(final SoftwareModuleType type) { - final Optional result = modules.stream().filter(module -> module.getType().equals(type)) - .findFirst(); + SoftwareModule findFirstModuleByType(SoftwareModuleType type); - if (result.isPresent()) { - return result.get(); - } + DistributionSetType getType(); - return null; - } + void setType(DistributionSetType type); - public DistributionSetType getType() { - return type; - } + boolean isComplete(); - public void setType(final DistributionSetType type) { - this.type = type; - } - - public boolean isComplete() { - return complete; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java index 67a99506c..187b04e81 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java @@ -8,73 +8,10 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +public interface DistributionSetMetadata extends MetaData { -/** - * Meta data for {@link DistributionSet}. - * - */ -@IdClass(DsMetadataCompositeKey.class) -@Entity -@Table(name = "sp_ds_metadata") -public class DistributionSetMetadata extends MetaData { - private static final long serialVersionUID = 1L; + void setDistributionSet(DistributionSet distributionSet); - @Id - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "ds_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_ds")) - private DistributionSet distributionSet; + DistributionSet getDistributionSet(); - public DistributionSetMetadata() { - // default public constructor for JPA - } - - public DistributionSetMetadata(final String key, final DistributionSet distributionSet, final String value) { - super(key, value); - this.distributionSet = distributionSet; - } - - public DsMetadataCompositeKey getId() { - return new DsMetadataCompositeKey(distributionSet, getKey()); - } - - public void setDistributionSet(final DistributionSet distributionSet) { - this.distributionSet = distributionSet; - } - - public DistributionSet getDistributionSet() { - return distributionSet; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((distributionSet == null) ? 0 : distributionSet.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (!super.equals(obj)) { - return false; - } - final DistributionSetMetadata other = (DistributionSetMetadata) obj; - if (distributionSet == null) { - if (other.distributionSet != null) { - return false; - } - } else if (!distributionSet.equals(other.distributionSet)) { - return false; - } - return true; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java index 137fde5b9..cd5ded232 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java @@ -10,77 +10,8 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Index; -import javax.persistence.ManyToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; +public interface DistributionSetTag extends Tag { -/** - * A {@link DistributionSetTag} is used to describe DistributionSet attributes - * and use them also for filtering the DistributionSet list. - * - */ -@Entity -@Table(name = "sp_distributionset_tag", indexes = { - @Index(name = "sp_idx_distribution_set_tag_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = { - "name", "tenant" }, name = "uk_ds_tag")) -public class DistributionSetTag extends Tag { - private static final long serialVersionUID = 1L; + List getAssignedToDistributionSet(); - @ManyToMany(mappedBy = "tags", targetEntity = DistributionSet.class, fetch = FetchType.LAZY) - private List assignedToDistributionSet; - - /** - * Public constructor. - * - * @param name - * of the {@link DistributionSetTag} - **/ - public DistributionSetTag(final String name) { - super(name, null, null); - } - - /** - * Public constructor. - * - * @param name - * of the {@link DistributionSetTag} - * @param description - * of the {@link DistributionSetTag} - * @param colour - * of tag in UI - */ - public DistributionSetTag(final String name, final String description, final String colour) { - super(name, description, colour); - } - - DistributionSetTag() { - super(); - } - - public List getAssignedToDistributionSet() { - return assignedToDistributionSet; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + this.getClass().getName().hashCode(); - return result; - } - - @Override - public boolean equals(final Object obj) { // NOSONAR - as this is generated - if (!super.equals(obj)) { - return false; - } - if (!(obj instanceof DistributionSetTag)) { - return false; - } - - return true; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java index 61d2fc58c..f540428a9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java @@ -8,109 +8,26 @@ */ package org.eclipse.hawkbit.repository.model; -import java.util.HashSet; -import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; +import org.eclipse.hawkbit.repository.jpa.model.DistributionSetTypeElement; -/** - * A distribution set type defines which software module types can or have to be - * {@link DistributionSet}. - * - */ -@Entity -@Table(name = "sp_distribution_set_type", indexes = { - @Index(name = "sp_idx_distribution_set_type_01", columnList = "tenant,deleted"), - @Index(name = "sp_idx_distribution_set_type_prim", columnList = "tenant,id") }, uniqueConstraints = { - @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_dst_name"), - @UniqueConstraint(columnNames = { "type_key", "tenant" }, name = "uk_dst_key") }) -public class DistributionSetType extends NamedEntity { - private static final long serialVersionUID = 1L; - - @OneToMany(targetEntity = DistributionSetTypeElement.class, cascade = { - CascadeType.ALL }, fetch = FetchType.EAGER, orphanRemoval = true) - @JoinColumn(name = "distribution_set_type", insertable = false, updatable = false) - private final Set elements = new HashSet<>(); - - @Column(name = "type_key", nullable = false, length = 64) - private String key; - - @Column(name = "colour", nullable = true, length = 16) - private String colour; - - @Column(name = "deleted") - private boolean deleted = false; - - public DistributionSetType() { - // default public constructor for JPA - } - - /** - * Standard constructor. - * - * @param key - * of the type (unique) - * @param name - * of the type (unique) - * @param description - * of the type - */ - public DistributionSetType(final String key, final String name, final String description) { - this(key, name, description, null); - } - - /** - * Constructor. - * - * @param key - * of the type - * @param name - * of the type - * @param description - * of the type - * @param color - * of the type. It will be null by default - */ - public DistributionSetType(final String key, final String name, final String description, final String color) { - super(name, description); - this.key = key; - colour = color; - } +public interface DistributionSetType extends NamedEntity { /** * @return the deleted */ - public boolean isDeleted() { - return deleted; - } + boolean isDeleted(); /** * @param deleted * the deleted to set */ - public void setDeleted(final boolean deleted) { - this.deleted = deleted; - } + void setDeleted(boolean deleted); - public Set getMandatoryModuleTypes() { - return elements.stream().filter(element -> element.isMandatory()).map(element -> element.getSmType()) - .collect(Collectors.toSet()); - } + Set getMandatoryModuleTypes(); - public Set getOptionalModuleTypes() { - return elements.stream().filter(element -> !element.isMandatory()).map(element -> element.getSmType()) - .collect(Collectors.toSet()); - } + Set getOptionalModuleTypes(); /** * Checks if the given {@link SoftwareModuleType} is in this @@ -120,15 +37,7 @@ public class DistributionSetType extends NamedEntity { * search for * @return true if found */ - public boolean containsModuleType(final SoftwareModuleType softwareModuleType) { - for (final DistributionSetTypeElement distributionSetTypeElement : elements) { - if (distributionSetTypeElement.getSmType().equals(softwareModuleType)) { - return true; - } - - } - return false; - } + boolean containsModuleType(SoftwareModuleType softwareModuleType); /** * Checks if the given {@link SoftwareModuleType} is in this @@ -139,11 +48,7 @@ public class DistributionSetType extends NamedEntity { * search for * @return true if found */ - public boolean containsMandatoryModuleType(final SoftwareModuleType softwareModuleType) { - return elements.stream().filter(element -> element.isMandatory()) - .filter(element -> element.getSmType().equals(softwareModuleType)).findFirst().isPresent(); - - } + boolean containsMandatoryModuleType(SoftwareModuleType softwareModuleType); /** * Checks if the given {@link SoftwareModuleType} is in this @@ -154,11 +59,7 @@ public class DistributionSetType extends NamedEntity { * search for by {@link SoftwareModuleType#getId()} * @return true if found */ - public boolean containsMandatoryModuleType(final Long softwareModuleTypeId) { - return elements.stream().filter(element -> element.isMandatory()) - .filter(element -> element.getSmType().getId().equals(softwareModuleTypeId)).findFirst().isPresent(); - - } + boolean containsMandatoryModuleType(Long softwareModuleTypeId); /** * Checks if the given {@link SoftwareModuleType} is in this @@ -169,11 +70,7 @@ public class DistributionSetType extends NamedEntity { * search for * @return true if found */ - public boolean containsOptionalModuleType(final SoftwareModuleType softwareModuleType) { - return elements.stream().filter(element -> !element.isMandatory()) - .filter(element -> element.getSmType().equals(softwareModuleType)).findFirst().isPresent(); - - } + boolean containsOptionalModuleType(SoftwareModuleType softwareModuleType); /** * Checks if the given {@link SoftwareModuleType} is in this @@ -184,11 +81,7 @@ public class DistributionSetType extends NamedEntity { * search by {@link SoftwareModuleType#getId()} * @return true if found */ - public boolean containsOptionalModuleType(final Long softwareModuleTypeId) { - return elements.stream().filter(element -> !element.isMandatory()) - .filter(element -> element.getSmType().getId().equals(softwareModuleTypeId)).findFirst().isPresent(); - - } + boolean containsOptionalModuleType(Long softwareModuleTypeId); /** * Compares the modules of this {@link DistributionSetType} and the given @@ -198,9 +91,7 @@ public class DistributionSetType extends NamedEntity { * to compare with * @return true if the lists are identical. */ - public boolean areModuleEntriesIdentical(final DistributionSetType dsType) { - return new HashSet(dsType.elements).equals(elements); - } + boolean areModuleEntriesIdentical(DistributionSetType dsType); /** * Adds {@link SoftwareModuleType} that is optional for the @@ -210,11 +101,7 @@ public class DistributionSetType extends NamedEntity { * to add * @return updated instance */ - public DistributionSetType addOptionalModuleType(final SoftwareModuleType smType) { - elements.add(new DistributionSetTypeElement(this, smType, false)); - - return this; - } + DistributionSetType addOptionalModuleType(SoftwareModuleType smType); /** * Adds {@link SoftwareModuleType} that is mandatory for the @@ -224,11 +111,7 @@ public class DistributionSetType extends NamedEntity { * to add * @return updated instance */ - public DistributionSetType addMandatoryModuleType(final SoftwareModuleType smType) { - elements.add(new DistributionSetTypeElement(this, smType, true)); - - return this; - } + DistributionSetType addMandatoryModuleType(SoftwareModuleType smType); /** * Removes {@link SoftwareModuleType} from the list. @@ -237,25 +120,11 @@ public class DistributionSetType extends NamedEntity { * to remove * @return updated instance */ - public DistributionSetType removeModuleType(final Long smTypeId) { - // we search by id (standard equals compares also revison) - final Optional found = elements.stream() - .filter(element -> element.getSmType().getId().equals(smTypeId)).findFirst(); + DistributionSetType removeModuleType(Long smTypeId); - if (found.isPresent()) { - elements.remove(found.get()); - } + String getKey(); - return this; - } - - public String getKey() { - return key; - } - - public void setKey(final String key) { - this.key = key; - } + void setKey(String key); /** * @param distributionSet @@ -263,26 +132,10 @@ public class DistributionSetType extends NamedEntity { * @return true if the all mandatory software module types are * in the system. */ - public boolean checkComplete(final DistributionSet distributionSet) { - return distributionSet.getModules().stream().map(module -> module.getType()).collect(Collectors.toList()) - .containsAll(getMandatoryModuleTypes()); - } + boolean checkComplete(DistributionSet distributionSet); - public String getColour() { - return colour; - } + String getColour(); - public void setColour(final String colour) { - this.colour = colour; - } + void setColour(final String colour); - public Set getElements() { - return elements; - } - - @Override - public String toString() { - return "DistributionSetType [key=" + key + ", isDeleted()=" + isDeleted() + ", getId()=" + getId() + "]"; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java index 898c685a5..daf0d1ae5 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java @@ -8,125 +8,20 @@ */ package org.eclipse.hawkbit.repository.model; -import java.net.URL; +public interface ExternalArtifact extends Artifact { -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.validation.constraints.NotNull; + ExternalArtifactProvider getExternalArtifactProvider(); -/** - * External artifact representation with all the necessary information to - * generate an artifact {@link URL} at runtime. - * - */ -@Table(name = "sp_external_artifact", indexes = { - @Index(name = "sp_idx_external_artifact_prim", columnList = "id,tenant") }) -@Entity -public class ExternalArtifact extends Artifact { - private static final long serialVersionUID = 1L; + String getUrl(); - @ManyToOne - @JoinColumn(name = "provider", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_art_to_ext_provider")) - private ExternalArtifactProvider externalArtifactProvider; + String getUrlSuffix(); - @Column(name = "url_suffix", length = 512) - private String urlSuffix; - - // CascadeType.PERSIST as we register ourself at the BSM - @ManyToOne(optional = false, cascade = { CascadeType.PERSIST }) - @JoinColumn(name = "software_module", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_external_assigned_sm")) - private SoftwareModule softwareModule; - - /** - * Default constructor. - */ - public ExternalArtifact() { - super(); - } - - /** - * Constructs {@link ExternalArtifact}. - * - * @param externalArtifactProvider - * of the artifact - * @param urlSuffix - * of the artifact - * @param softwareModule - * of the artifact - */ - public ExternalArtifact(@NotNull final ExternalArtifactProvider externalArtifactProvider, final String urlSuffix, - final SoftwareModule softwareModule) { - setSoftwareModule(softwareModule); - this.externalArtifactProvider = externalArtifactProvider; - - if (urlSuffix != null) { - this.urlSuffix = urlSuffix; - } else { - this.urlSuffix = externalArtifactProvider.getDefaultSuffix(); - } - } - - /** - * @return the softwareModule - */ - @Override - public SoftwareModule getSoftwareModule() { - return softwareModule; - } - - public final void setSoftwareModule(final SoftwareModule softwareModule) { - this.softwareModule = softwareModule; - this.softwareModule.addArtifact(this); - } - - public ExternalArtifactProvider getExternalArtifactProvider() { - return externalArtifactProvider; - } - - public String getUrl() { - return new StringBuilder().append(externalArtifactProvider.getBasePath()).append(urlSuffix).toString(); - } - - public String getUrlSuffix() { - return urlSuffix; - } - - public void setExternalArtifactProvider(final ExternalArtifactProvider externalArtifactProvider) { - this.externalArtifactProvider = externalArtifactProvider; - } + void setExternalArtifactProvider(ExternalArtifactProvider externalArtifactProvider); /** * @param urlSuffix * the urlSuffix to set */ - public void setUrlSuffix(final String urlSuffix) { - this.urlSuffix = urlSuffix; - } + void setUrlSuffix(String urlSuffix); - @Override - public int hashCode() { // NOSONAR - as this is generated - final int prime = 31; - int result = super.hashCode(); - result = prime * result + this.getClass().getName().hashCode(); - return result; - } - - @Override - public boolean equals(final Object obj) { // NOSONAR - as this is generated - if (!super.equals(obj)) { - return false; - } - if (!(obj instanceof ExternalArtifact)) { - return false; - } - - return true; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java index 9fa8714ac..bb9f2fbea 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java @@ -8,69 +8,14 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Index; -import javax.persistence.Table; +public interface ExternalArtifactProvider extends NamedEntity { -/** - * External repositories for artifact storage. The SP server provides URLs for - * the targets to download from these external resources but does not access - * them itself. - * - */ -@Table(name = "sp_external_provider", indexes = { - @Index(name = "sp_idx_external_provider_prim", columnList = "tenant,id") }) -@Entity -public class ExternalArtifactProvider extends NamedEntity { - private static final long serialVersionUID = 1L; + String getBasePath(); - @Column(name = "base_url", length = 512, nullable = false) - private String basePath; + String getDefaultSuffix(); - @Column(name = "default_url_suffix", length = 512, nullable = true) - private String defaultSuffix; + void setBasePath(String basePath); - /** - * Constructs {@link ExternalArtifactProvider} based on given properties. - * - * @param name - * of the provided - * @param description - * which is optional - * @param baseURL - * of all {@link ExternalArtifact}s of the provider - * @param defaultUrlSuffix - * that is used if {@link ExternalArtifact#getUrlSuffix()} is - * empty. - */ - public ExternalArtifactProvider(final String name, final String description, final String baseURL, - final String defaultUrlSuffix) { - super(name, description); - basePath = baseURL; - defaultSuffix = defaultUrlSuffix; - } + void setDefaultSuffix(String defaultSuffix); - ExternalArtifactProvider() { - super(); - defaultSuffix = ""; - basePath = ""; - } - - public String getBasePath() { - return basePath; - } - - public String getDefaultSuffix() { - return defaultSuffix; - } - - public void setBasePath(final String basePath) { - this.basePath = basePath; - } - - public void setDefaultSuffix(final String defaultSuffix) { - this.defaultSuffix = defaultSuffix; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java index 8afcdc168..0f3a22c41 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java @@ -8,106 +8,8 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.validation.constraints.NotNull; +public interface LocalArtifact extends Artifact { -import com.mongodb.gridfs.GridFS; -import com.mongodb.gridfs.GridFSFile; + String getFilename(); -/** - * Tenant specific locally stored artifact representation that is used by - * {@link SoftwareModule} . It contains all information that is provided by the - * user while all SP server generated information related to the artifact (hash, - * length) is stored directly with the binary itself. - * - * - * - */ -@Table(name = "sp_artifact", indexes = { @Index(name = "sp_idx_artifact_01", columnList = "tenant,software_module"), - @Index(name = "sp_idx_artifact_prim", columnList = "tenant,id") }) -@Entity -public class LocalArtifact extends Artifact { - private static final long serialVersionUID = 1L; - - @NotNull - @Column(name = "gridfs_file_name", length = 40) - private String gridFsFileName; - - @NotNull - @Column(name = "provided_file_name", length = 256) - private String filename; - - @ManyToOne(optional = false, cascade = { CascadeType.PERSIST }) - @JoinColumn(name = "software_module", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_assigned_sm")) - private SoftwareModule softwareModule; - - /** - * Default constructor. - */ - public LocalArtifact() { - super(); - } - - /** - * Constructs artifact. - * - * @param gridFsFileName - * that is the link to the {@link GridFS} entity. - * @param filename - * that is used by {@link GridFSFile} store. - * @param softwareModule - * of this artifact - */ - public LocalArtifact(@NotNull final String gridFsFileName, @NotNull final String filename, - final SoftwareModule softwareModule) { - setSoftwareModule(softwareModule); - this.gridFsFileName = gridFsFileName; - this.filename = filename; - } - - @Override - public int hashCode() { // NOSONAR - as this is generated - final int prime = 31; - int result = super.hashCode(); - result = prime * result + this.getClass().getName().hashCode(); - return result; - } - - @Override - public boolean equals(final Object obj) { // NOSONAR - as this is generated - if (!super.equals(obj)) { - return false; - } - if (!(obj instanceof LocalArtifact)) { - return false; - } - - return true; - } - - @Override - public SoftwareModule getSoftwareModule() { - return softwareModule; - } - - public final void setSoftwareModule(final SoftwareModule softwareModule) { - this.softwareModule = softwareModule; - this.softwareModule.addArtifact(this); - } - - public String getGridFsFileName() { - return gridFsFileName; - } - - public String getFilename() { - return filename; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java index c41a0e8c9..8d6e6eed6 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java @@ -10,89 +10,14 @@ package org.eclipse.hawkbit.repository.model; import java.io.Serializable; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Id; -import javax.persistence.MappedSuperclass; +public interface MetaData extends Serializable { -/** - * Meta data for entities. - * - */ -@MappedSuperclass -public abstract class MetaData implements Serializable { - private static final long serialVersionUID = 1L; + String getKey(); - @Id - @Column(name = "meta_key", length = 128) - private String key; + void setKey(String key); - @Column(name = "meta_value", length = 4000) - @Basic - private String value; + String getValue(); - public MetaData(final String key, final String value) { - super(); - this.key = key; - this.value = value; - } + void setValue(String value); - public MetaData() { - // Default constructor needed for JPA entities - } - - public String getKey() { - return key; - } - - public void setKey(final String key) { - this.key = key; - } - - public String getValue() { - return value; - } - - public void setValue(final String value) { - this.value = value; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((key == null) ? 0 : key.hashCode()); - result = prime * result + ((value == null) ? 0 : value.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(this.getClass().isInstance(obj))) { - return false; - } - final MetaData other = (MetaData) obj; - if (key == null) { - if (other.key != null) { - return false; - } - } else if (!key.equals(other.key)) { - return false; - } - if (value == null) { - if (other.value != null) { - return false; - } - } else if (!value.equals(other.value)) { - return false; - } - return true; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java index e14d88161..1cc84bf8f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java @@ -8,56 +8,14 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.Column; -import javax.persistence.MappedSuperclass; +public interface NamedEntity extends TenantAwareBaseEntity { -/** - * {@link TenantAwareBaseEntity} extension for all entities that are named in - * addition to their technical ID. - */ -@MappedSuperclass -public abstract class NamedEntity extends TenantAwareBaseEntity { - private static final long serialVersionUID = 1L; + String getDescription(); - @Column(name = "name", nullable = false, length = 64) - private String name; + String getName(); - @Column(name = "description", nullable = true, length = 512) - private String description; + void setDescription(String description); - /** - * Default constructor. - */ - public NamedEntity() { - super(); - } + void setName(String name); - /** - * Parameterized constructor. - * - * @param name - * of the {@link NamedEntity} - * @param description - * of the {@link NamedEntity} - */ - public NamedEntity(final String name, final String description) { - this.name = name; - this.description = description; - } - - public String getDescription() { - return description; - } - - public String getName() { - return name; - } - - public void setDescription(final String description) { - this.description = description; - } - - public void setName(final String name) { - this.name = name; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java index fa56da197..710980f13 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java @@ -8,43 +8,10 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.Column; -import javax.persistence.MappedSuperclass; +public interface NamedVersionedEntity extends NamedEntity { -/** - * Extension for {@link NamedEntity} that are versioned. - * - */ -@MappedSuperclass -public abstract class NamedVersionedEntity extends NamedEntity { - private static final long serialVersionUID = 1L; + String getVersion(); - @Column(name = "version", nullable = false, length = 64) - private String version; + void setVersion(String version); - /** - * parameterized constructor. - * - * @param name - * of the entity - * @param version - * of the entity - * @param description - */ - public NamedVersionedEntity(final String name, final String version, final String description) { - super(name, description); - this.version = version; - } - - NamedVersionedEntity() { - super(); - } - - public String getVersion() { - return version; - } - - public void setVersion(final String version) { - this.version = version; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java index a7f9b10cb..bf696d2fd 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java @@ -10,225 +10,53 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Transient; -import javax.persistence.UniqueConstraint; - -import org.eclipse.hawkbit.cache.CacheField; -import org.eclipse.hawkbit.cache.CacheKeys; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.Action.ActionType; -/** - * @author Michael Hirsch - * - */ -@Entity -@Table(name = "sp_rollout", indexes = { - @Index(name = "sp_idx_rollout_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { - "name", "tenant" }, name = "uk_rollout")) -public class Rollout extends NamedEntity { +public interface Rollout extends NamedEntity { - private static final long serialVersionUID = 1L; + DistributionSet getDistributionSet(); - @OneToMany(targetEntity = RolloutGroup.class) - @JoinColumn(name = "rollout", insertable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rollout_rolloutgroup")) - private List rolloutGroups; + void setDistributionSet(DistributionSet distributionSet); - @Column(name = "target_filter", length = 1024, nullable = false) - private String targetFilterQuery; + List getRolloutGroups(); - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "distribution_set", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rolltout_ds")) - private DistributionSet distributionSet; + void setRolloutGroups(List rolloutGroups); - @Column(name = "status") - private RolloutStatus status = RolloutStatus.CREATING; + String getTargetFilterQuery(); - @Column(name = "last_check") - private long lastCheck = 0L; + void setTargetFilterQuery(String targetFilterQuery); - @Column(name = "action_type", nullable = false) - @Enumerated(EnumType.STRING) - private ActionType actionType = ActionType.FORCED; + RolloutStatus getStatus(); - @Column(name = "forced_time") - private long forcedTime; + void setStatus(RolloutStatus status); - @Column(name = "total_targets") - private long totalTargets; + long getLastCheck(); - @Transient - @CacheField(key = CacheKeys.ROLLOUT_GROUP_TOTAL) - private int rolloutGroupsTotal = 0; + void setLastCheck(long lastCheck); - @Transient - @CacheField(key = CacheKeys.ROLLOUT_GROUP_CREATED) - private int rolloutGroupsCreated = 0; + ActionType getActionType(); - @Transient - private transient TotalTargetCountStatus totalTargetCountStatus; + void setActionType(ActionType actionType); - public DistributionSet getDistributionSet() { - return distributionSet; - } + long getForcedTime(); - public void setDistributionSet(final DistributionSet distributionSet) { - this.distributionSet = distributionSet; - } + void setForcedTime(long forcedTime); - public List getRolloutGroups() { - return rolloutGroups; - } + long getTotalTargets(); - public void setRolloutGroups(final List rolloutGroups) { - this.rolloutGroups = rolloutGroups; - } + void setTotalTargets(long totalTargets); - public String getTargetFilterQuery() { - return targetFilterQuery; - } + int getRolloutGroupsTotal(); - public void setTargetFilterQuery(final String targetFilterQuery) { - this.targetFilterQuery = targetFilterQuery; - } + void setRolloutGroupsTotal(int rolloutGroupsTotal); - public RolloutStatus getStatus() { - return status; - } + int getRolloutGroupsCreated(); - public void setStatus(final RolloutStatus status) { - this.status = status; - } + void setRolloutGroupsCreated(int rolloutGroupsCreated); - public long getLastCheck() { - return lastCheck; - } + TotalTargetCountStatus getTotalTargetCountStatus(); - public void setLastCheck(final long lastCheck) { - this.lastCheck = lastCheck; - } + void setTotalTargetCountStatus(TotalTargetCountStatus totalTargetCountStatus); - public ActionType getActionType() { - return actionType; - } - - public void setActionType(final ActionType actionType) { - this.actionType = actionType; - } - - public long getForcedTime() { - return forcedTime; - } - - public void setForcedTime(final long forcedTime) { - this.forcedTime = forcedTime; - } - - public long getTotalTargets() { - return totalTargets; - } - - public void setTotalTargets(final long totalTargets) { - this.totalTargets = totalTargets; - } - - public int getRolloutGroupsTotal() { - return rolloutGroupsTotal; - } - - public void setRolloutGroupsTotal(final int rolloutGroupsTotal) { - this.rolloutGroupsTotal = rolloutGroupsTotal; - } - - public int getRolloutGroupsCreated() { - return rolloutGroupsCreated; - } - - public void setRolloutGroupsCreated(final int rolloutGroupsCreated) { - this.rolloutGroupsCreated = rolloutGroupsCreated; - } - - public TotalTargetCountStatus getTotalTargetCountStatus() { - if (totalTargetCountStatus == null) { - totalTargetCountStatus = new TotalTargetCountStatus(totalTargets); - } - return totalTargetCountStatus; - } - - public void setTotalTargetCountStatus(final TotalTargetCountStatus totalTargetCountStatus) { - this.totalTargetCountStatus = totalTargetCountStatus; - } - - @Override - public String toString() { - return "Rollout [rolloutGroups=" + rolloutGroups + ", targetFilterQuery=" + targetFilterQuery - + ", distributionSet=" + distributionSet + ", status=" + status + ", lastCheck=" + lastCheck - + ", getName()=" + getName() + ", getId()=" + getId() + "]"; - } - - /** - * - * State machine for rollout. - * - */ - public enum RolloutStatus { - - /** - * Rollouts is beeing created. - */ - CREATING, - - /** - * Rollout is ready to start. - */ - READY, - - /** - * Rollout is paused. - */ - PAUSED, - - /** - * Rollout is starting. - */ - STARTING, - - /** - * Rollout is stopped. - */ - STOPPED, - - /** - * Rollout is running. - */ - RUNNING, - - /** - * Rollout is finished. - */ - FINISHED, - - /** - * Rollout could not created due errors, might be database problem due - * asynchronous creating. - */ - ERROR_CREATING, - - /** - * Rollout could not started due errors, might be database problem due - * asynchronous starting. - */ - ERROR_STARTING; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java index 5aa30126c..647278b78 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java @@ -8,472 +8,71 @@ */ package org.eclipse.hawkbit.repository.model; -import java.util.ArrayList; -import java.util.List; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessCondition; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Transient; -import javax.persistence.UniqueConstraint; +public interface RolloutGroup extends NamedEntity { -/** - * JPA entity definition of persisting a group of an rollout. - * - * @author Michael Hirsch - * - */ -@Entity -@Table(name = "sp_rolloutgroup", indexes = { - @Index(name = "sp_idx_rolloutgroup_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { - "name", "rollout", "tenant" }, name = "uk_rolloutgroup")) -public class RolloutGroup extends NamedEntity { + Rollout getRollout(); - private static final long serialVersionUID = 1L; + void setRollout(Rollout rollout); - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "rollout", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rolloutgroup_rollout")) - private Rollout rollout; + RolloutGroupStatus getStatus(); - @Column(name = "status") - private RolloutGroupStatus status = RolloutGroupStatus.READY; + void setStatus(RolloutGroupStatus status); - @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }) - @JoinColumn(name = "rolloutGroup_Id", insertable = false, updatable = false) - private final List rolloutTargetGroup = new ArrayList<>(); + RolloutGroup getParent(); - @ManyToOne(fetch = FetchType.LAZY) - private RolloutGroup parent; + void setParent(RolloutGroup parent); - @Column(name = "success_condition", nullable = false) - private RolloutGroupSuccessCondition successCondition = RolloutGroupSuccessCondition.THRESHOLD; + RolloutGroupSuccessCondition getSuccessCondition(); - @Column(name = "success_condition_exp", length = 512, nullable = false) - private String successConditionExp = null; + void setSuccessCondition(RolloutGroupSuccessCondition finishCondition); - @Column(name = "success_action", nullable = false) - private RolloutGroupSuccessAction successAction = RolloutGroupSuccessAction.NEXTGROUP; + String getSuccessConditionExp(); - @Column(name = "success_action_exp", length = 512, nullable = false) - private String successActionExp = null; + void setSuccessConditionExp(String finishExp); - @Column(name = "error_condition") - private RolloutGroupErrorCondition errorCondition = null; + RolloutGroupErrorCondition getErrorCondition(); - @Column(name = "error_condition_exp", length = 512) - private String errorConditionExp = null; + void setErrorCondition(RolloutGroupErrorCondition errorCondition); - @Column(name = "error_action") - private RolloutGroupErrorAction errorAction = null; + String getErrorConditionExp(); - @Column(name = "error_action_exp", length = 512) - private String errorActionExp = null; + void setErrorConditionExp(String errorExp); - @Column(name = "total_targets") - private long totalTargets; + RolloutGroupErrorAction getErrorAction(); - @Transient - private transient TotalTargetCountStatus totalTargetCountStatus; + void setErrorAction(RolloutGroupErrorAction errorAction); - public Rollout getRollout() { - return rollout; - } + String getErrorActionExp(); - public void setRollout(final Rollout rollout) { - this.rollout = rollout; - } + void setErrorActionExp(String errorActionExp); - public RolloutGroupStatus getStatus() { - return status; - } + RolloutGroupSuccessAction getSuccessAction(); - public void setStatus(final RolloutGroupStatus status) { - this.status = status; - } + String getSuccessActionExp(); - public List getRolloutTargetGroup() { - return rolloutTargetGroup; - } + long getTotalTargets(); - public RolloutGroup getParent() { - return parent; - } + void setTotalTargets(long totalTargets); - public void setParent(final RolloutGroup parent) { - this.parent = parent; - } + void setSuccessAction(RolloutGroupSuccessAction successAction); - public RolloutGroupSuccessCondition getSuccessCondition() { - return successCondition; - } - - public void setSuccessCondition(final RolloutGroupSuccessCondition finishCondition) { - successCondition = finishCondition; - } - - public String getSuccessConditionExp() { - return successConditionExp; - } - - public void setSuccessConditionExp(final String finishExp) { - successConditionExp = finishExp; - } - - public RolloutGroupErrorCondition getErrorCondition() { - return errorCondition; - } - - public void setErrorCondition(final RolloutGroupErrorCondition errorCondition) { - this.errorCondition = errorCondition; - } - - public String getErrorConditionExp() { - return errorConditionExp; - } - - public void setErrorConditionExp(final String errorExp) { - errorConditionExp = errorExp; - } - - public RolloutGroupErrorAction getErrorAction() { - return errorAction; - } - - public void setErrorAction(final RolloutGroupErrorAction errorAction) { - this.errorAction = errorAction; - } - - public String getErrorActionExp() { - return errorActionExp; - } - - public void setErrorActionExp(final String errorActionExp) { - this.errorActionExp = errorActionExp; - } - - public RolloutGroupSuccessAction getSuccessAction() { - return successAction; - } - - public String getSuccessActionExp() { - return successActionExp; - } - - public long getTotalTargets() { - return totalTargets; - } - - public void setTotalTargets(final long totalTargets) { - this.totalTargets = totalTargets; - } - - public void setSuccessAction(final RolloutGroupSuccessAction successAction) { - this.successAction = successAction; - } - - public void setSuccessActionExp(final String successActionExp) { - this.successActionExp = successActionExp; - } + void setSuccessActionExp(String successActionExp); /** * @return the totalTargetCountStatus */ - public TotalTargetCountStatus getTotalTargetCountStatus() { - if (totalTargetCountStatus == null) { - totalTargetCountStatus = new TotalTargetCountStatus(totalTargets); - } - return totalTargetCountStatus; - } + TotalTargetCountStatus getTotalTargetCountStatus(); /** * @param totalTargetCountStatus * the totalTargetCountStatus to set */ - public void setTotalTargetCountStatus(final TotalTargetCountStatus totalTargetCountStatus) { - this.totalTargetCountStatus = totalTargetCountStatus; - } + void setTotalTargetCountStatus(TotalTargetCountStatus totalTargetCountStatus); - @Override - public String toString() { - return "RolloutGroup [rollout=" + rollout + ", status=" + status + ", rolloutTargetGroup=" + rolloutTargetGroup - + ", parent=" + parent + ", finishCondition=" + successCondition + ", finishExp=" + successConditionExp - + ", errorCondition=" + errorCondition + ", errorExp=" + errorConditionExp + ", getName()=" + getName() - + ", getId()=" + getId() + "]"; - } - - /** - * Rollout goup state machine. - * - */ - public enum RolloutGroupStatus { - - /** - * Ready to start the group. - */ - READY, - - /** - * Group is scheduled and started sometime, e.g. trigger of group - * before. - */ - SCHEDULED, - - /** - * Group is finished. - */ - FINISHED, - - /** - * Group is finished and has errors. - */ - ERROR, - - /** - * Group is running. - */ - RUNNING; - } - - /** - * The condition to evaluate if an group is success state. - */ - public enum RolloutGroupSuccessCondition { - THRESHOLD("thresholdRolloutGroupSuccessCondition"); - - private final String beanName; - - private RolloutGroupSuccessCondition(final String beanName) { - this.beanName = beanName; - } - - /** - * @return the beanName - */ - public String getBeanName() { - return beanName; - } - } - - /** - * The condition to evaluate if an group is in error state. - */ - public enum RolloutGroupErrorCondition { - THRESHOLD("thresholdRolloutGroupErrorCondition"); - - private final String beanName; - - private RolloutGroupErrorCondition(final String beanName) { - this.beanName = beanName; - } - - /** - * @return the beanName - */ - public String getBeanName() { - return beanName; - } - } - - /** - * The actions executed when the {@link RolloutGroup#errorCondition} is hit. - */ - public enum RolloutGroupErrorAction { - PAUSE("pauseRolloutGroupAction"); - - private final String beanName; - - private RolloutGroupErrorAction(final String beanName) { - this.beanName = beanName; - } - - /** - * @return the beanName - */ - public String getBeanName() { - return beanName; - } - } - - /** - * The actions executed when the {@link RolloutGroup#successCondition} is - * hit. - */ - public enum RolloutGroupSuccessAction { - NEXTGROUP("startNextRolloutGroupAction"); - - private final String beanName; - - private RolloutGroupSuccessAction(final String beanName) { - this.beanName = beanName; - } - - /** - * @return the beanName - */ - public String getBeanName() { - return beanName; - } - } - - /** - * Object which holds all {@link RolloutGroup} conditions together which can - * easily built. - */ - public static class RolloutGroupConditions { - private RolloutGroupSuccessCondition successCondition = null; - private String successConditionExp = null; - private RolloutGroupSuccessAction successAction = null; - private String successActionExp = null; - private RolloutGroupErrorCondition errorCondition = null; - private String errorConditionExp = null; - private RolloutGroupErrorAction errorAction = null; - private String errorActionExp = null; - - public RolloutGroupSuccessCondition getSuccessCondition() { - return successCondition; - } - - public void setSuccessCondition(final RolloutGroupSuccessCondition finishCondition) { - successCondition = finishCondition; - } - - public String getSuccessConditionExp() { - return successConditionExp; - } - - public void setSuccessConditionExp(final String finishConditionExp) { - successConditionExp = finishConditionExp; - } - - public RolloutGroupSuccessAction getSuccessAction() { - return successAction; - } - - public void setSuccessAction(final RolloutGroupSuccessAction successAction) { - this.successAction = successAction; - } - - public String getSuccessActionExp() { - return successActionExp; - } - - public void setSuccessActionExp(final String successActionExp) { - this.successActionExp = successActionExp; - } - - public RolloutGroupErrorCondition getErrorCondition() { - return errorCondition; - } - - public void setErrorCondition(final RolloutGroupErrorCondition errorCondition) { - this.errorCondition = errorCondition; - } - - public String getErrorConditionExp() { - return errorConditionExp; - } - - public void setErrorConditionExp(final String errorConditionExp) { - this.errorConditionExp = errorConditionExp; - } - - public RolloutGroupErrorAction getErrorAction() { - return errorAction; - } - - public void setErrorAction(final RolloutGroupErrorAction errorAction) { - this.errorAction = errorAction; - } - - public String getErrorActionExp() { - return errorActionExp; - } - - public void setErrorActionExp(final String errorActionExp) { - this.errorActionExp = errorActionExp; - } - } - - /** - * Builder to build easily the {@link RolloutGroupConditions}. - * - */ - public static class RolloutGroupConditionBuilder { - private final RolloutGroupConditions conditions = new RolloutGroupConditions(); - - public RolloutGroupConditions build() { - return conditions; - } - - /** - * Sets the finish condition and expression on the builder. - * - * @param condition - * the finish condition - * @param expression - * the finish expression - * @return the builder itself - */ - public RolloutGroupConditionBuilder successCondition(final RolloutGroupSuccessCondition condition, - final String expression) { - conditions.setSuccessCondition(condition); - conditions.setSuccessConditionExp(expression); - return this; - } - - /** - * Sets the success action and expression on the builder. - * - * @param action - * the success action - * @param expression - * the error expression - * @return the builder itself - */ - public RolloutGroupConditionBuilder successAction(final RolloutGroupSuccessAction action, - final String expression) { - conditions.setSuccessAction(action); - conditions.setSuccessActionExp(expression); - return this; - } - - /** - * Sets the error condition and expression on the builder. - * - * @param condition - * the error condition - * @param expression - * the error expression - * @return the builder itself - */ - public RolloutGroupConditionBuilder errorCondition(final RolloutGroupErrorCondition condition, - final String expression) { - conditions.setErrorCondition(condition); - conditions.setErrorConditionExp(expression); - return this; - } - - /** - * Sets the error action and expression on the builder. - * - * @param action - * the error action - * @param expression - * the error expression - * @return the builder itself - */ - public RolloutGroupConditionBuilder errorAction(final RolloutGroupErrorAction action, final String expression) { - conditions.setErrorAction(action); - conditions.setErrorActionExp(expression); - return this; - } - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java index 327bff3db..67e1027a1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java @@ -8,236 +8,79 @@ */ package org.eclipse.hawkbit.repository.model; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Optional; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.NamedAttributeNode; -import javax.persistence.NamedEntityGraph; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; - -import org.eclipse.persistence.annotations.CascadeOnDelete; - -/** - * Base Software Module that is supported by OS level provisioning mechanism on - * the edge controller, e.g. OS, JVM, AgentHub. - * - */ -@Entity -@Table(name = "sp_base_software_module", uniqueConstraints = @UniqueConstraint(columnNames = { "module_type", "name", - "version", "tenant" }, name = "uk_base_sw_mod"), indexes = { - @Index(name = "sp_idx_base_sw_module_01", columnList = "tenant,deleted,name,version"), - @Index(name = "sp_idx_base_sw_module_02", columnList = "tenant,deleted,module_type"), - @Index(name = "sp_idx_base_sw_module_prim", columnList = "tenant,id") }) -@NamedEntityGraph(name = "SoftwareModule.artifacts", attributeNodes = { @NamedAttributeNode("artifacts") }) -public class SoftwareModule extends NamedVersionedEntity { - private static final long serialVersionUID = 1L; - - @ManyToOne - @JoinColumn(name = "module_type", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_module_type")) - private SoftwareModuleType type; - - @ManyToMany(mappedBy = "modules", targetEntity = DistributionSet.class, fetch = FetchType.LAZY) - private final List assignedTo = new ArrayList<>(); - - @Column(name = "deleted") - private boolean deleted = false; - - @Column(name = "vendor", nullable = true, length = 256) - private String vendor; - - @OneToMany(mappedBy = "softwareModule", cascade = { CascadeType.ALL }, targetEntity = LocalArtifact.class) - private List artifacts; - - @OneToMany(mappedBy = "softwareModule", cascade = { CascadeType.ALL }, targetEntity = ExternalArtifact.class) - private List externalArtifacts; - - @CascadeOnDelete - @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }) - @JoinColumn(name = "sw_id", insertable = false, updatable = false) - private final List metadata = new ArrayList<>(); - - /** - * Default constructor. - */ - public SoftwareModule() { - super(); - } - - /** - * parameterized constructor. - * - * @param type - * of the {@link SoftwareModule} - * @param name - * abstract name of the {@link SoftwareModule} - * @param version - * of the {@link SoftwareModule} - * @param description - * of the {@link SoftwareModule} - * @param vendor - * of the {@link SoftwareModule} - */ - public SoftwareModule(final SoftwareModuleType type, final String name, final String version, - final String description, final String vendor) { - super(name, version, description); - this.vendor = vendor; - this.type = type; - } +public interface SoftwareModule extends NamedVersionedEntity { /** * @param artifact * is added to the assigned {@link Artifact}s. */ - public void addArtifact(final LocalArtifact artifact) { - if (null == artifacts) { - artifacts = new ArrayList<>(4); - } - - if (!artifacts.contains(artifact)) { - artifacts.add(artifact); - } - } + void addArtifact(LocalArtifact artifact); /** * @param artifact * is added to the assigned {@link Artifact}s. */ - public void addArtifact(final ExternalArtifact artifact) { - if (null == externalArtifacts) { - externalArtifacts = new ArrayList<>(4); - } - - if (!externalArtifacts.contains(artifact)) { - externalArtifacts.add(artifact); - } - - } + void addArtifact(ExternalArtifact artifact); /** * @param artifactId * to look for * @return found {@link Artifact} */ - public Optional getLocalArtifact(final Long artifactId) { - if (null == artifacts) { - return Optional.empty(); - } - - return artifacts.stream().filter(artifact -> artifact.getId().equals(artifactId)).findFirst(); - } + Optional getLocalArtifact(Long artifactId); /** * @param fileName * to look for * @return found {@link Artifact} */ - public Optional getLocalArtifactByFilename(final String fileName) { - if (null == artifacts) { - return Optional.empty(); - } - - return artifacts.stream().filter(artifact -> artifact.getFilename().equalsIgnoreCase(fileName.trim())) - .findFirst(); - } + Optional getLocalArtifactByFilename(String fileName); /** * @return the artifacts */ - public List getArtifacts() { - final List result = new ArrayList<>(); - result.addAll(artifacts); - result.addAll(externalArtifacts); - - return result; - } + List getArtifacts(); /** * @return local artifacts only */ - public List getLocalArtifacts() { - if (artifacts == null) { - return Collections.emptyList(); - } + List getLocalArtifacts(); - return artifacts; - } - - public String getVendor() { - return vendor; - } + String getVendor(); /** * @param artifact * is removed from the assigned {@link LocalArtifact}s. */ - public void removeArtifact(final LocalArtifact artifact) { - if (null != artifacts) { - artifacts.remove(artifact); - } - } + void removeArtifact(LocalArtifact artifact); /** * @param artifact * is removed from the assigned {@link ExternalArtifact}s. */ - public void removeArtifact(final ExternalArtifact artifact) { - if (null != externalArtifacts) { - externalArtifacts.remove(artifact); - } - } + void removeArtifact(ExternalArtifact artifact); - public void setVendor(final String vendor) { - this.vendor = vendor; - } + void setVendor(String vendor); - public SoftwareModuleType getType() { - return type; - } + SoftwareModuleType getType(); - public boolean isDeleted() { - return deleted; - } + boolean isDeleted(); - public void setDeleted(final boolean deleted) { - this.deleted = deleted; - } + void setDeleted(boolean deleted); - public void setType(final SoftwareModuleType type) { - this.type = type; - } + void setType(SoftwareModuleType type); /** * @return immutable list of meta data elements. */ - public List getMetadata() { - return Collections.unmodifiableList(metadata); - } - - @Override - public String toString() { - return "SoftwareModule [deleted=" + deleted + ", name=" + getName() + ", version=" + getVersion() - + ", revision=" + getOptLockRevision() + ", Id=" + getId() + ", type=" + getType().getName() + "]"; - } + List getMetadata(); /** * @return the assignedTo */ - public List getAssignedTo() { - return assignedTo; - } + List getAssignedTo(); -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java index 5ddd273d3..8cece2a39 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java @@ -8,73 +8,10 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +public interface SoftwareModuleMetadata extends MetaData { -/** - * Metadata for {@link SoftwareModule}. - * - */ -@IdClass(SwMetadataCompositeKey.class) -@Entity -@Table(name = "sp_sw_metadata") -public class SoftwareModuleMetadata extends MetaData { - private static final long serialVersionUID = 1L; + SoftwareModule getSoftwareModule(); - @Id - @ManyToOne(targetEntity = SoftwareModule.class, fetch = FetchType.LAZY) - @JoinColumn(name = "sw_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_sw")) - private SoftwareModule softwareModule; + void setSoftwareModule(SoftwareModule softwareModule); - public SoftwareModuleMetadata() { - // default public constructor for JPA - } - - public SoftwareModuleMetadata(final String key, final SoftwareModule softwareModule, final String value) { - super(key, value); - this.softwareModule = softwareModule; - } - - public SwMetadataCompositeKey getId() { - return new SwMetadataCompositeKey(softwareModule, getKey()); - } - - public SoftwareModule getSoftwareModule() { - return softwareModule; - } - - public void setSoftwareModule(final SoftwareModule softwareModule) { - this.softwareModule = softwareModule; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((softwareModule == null) ? 0 : softwareModule.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (!super.equals(obj)) { - return false; - } - final SoftwareModuleMetadata other = (SoftwareModuleMetadata) obj; - if (softwareModule == null) { - if (other.softwareModule != null) { - return false; - } - } else if (!softwareModule.equals(other.softwareModule)) { - return false; - } - return true; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java index f31b74ff6..534d45fa3 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java @@ -8,110 +8,18 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Index; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; +public interface SoftwareModuleType extends NamedEntity { -/** - * Type of a software modules. - * - */ -@Entity -@Table(name = "sp_software_module_type", indexes = { - @Index(name = "sp_idx_software_module_type_01", columnList = "tenant,deleted"), - @Index(name = "sp_idx_software_module_type_prim", columnList = "tenant,id") }, uniqueConstraints = { - @UniqueConstraint(columnNames = { "type_key", "tenant" }, name = "uk_smt_type_key"), - @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_smt_name") }) -public class SoftwareModuleType extends NamedEntity { - private static final long serialVersionUID = 1L; + String getKey(); - @Column(name = "type_key", nullable = false, length = 64) - private String key; + int getMaxAssignments(); - @Column(name = "max_ds_assignments", nullable = false) - private int maxAssignments; + boolean isDeleted(); - @Column(name = "colour", nullable = true, length = 16) - private String colour; + void setDeleted(boolean deleted); - @Column(name = "deleted") - private boolean deleted = false; + String getColour(); - /** - * Constructor. - * - * @param key - * of the type - * @param name - * of the type - * @param description - * of the type - * @param maxAssignments - * assignments to a DS - */ - public SoftwareModuleType(final String key, final String name, final String description, final int maxAssignments) { - this(key, name, description, maxAssignments, null); - } + void setColour(String colour); - /** - * Constructor. - * - * @param key - * of the type - * @param name - * of the type - * @param description - * of the type - * @param maxAssignments - * assignments to a DS - * @param colour - * of the type. It will be null by default - */ - public SoftwareModuleType(final String key, final String name, final String description, final int maxAssignments, - final String colour) { - super(); - this.key = key; - this.maxAssignments = maxAssignments; - setDescription(description); - setName(name); - this.colour = colour; - } - - /** - * Default Constructor. - */ - public SoftwareModuleType() { - super(); - } - - public String getKey() { - return key; - } - - public int getMaxAssignments() { - return maxAssignments; - } - - public boolean isDeleted() { - return deleted; - } - - public void setDeleted(final boolean deleted) { - this.deleted = deleted; - } - - public String getColour() { - return colour; - } - - public void setColour(final String colour) { - this.colour = colour; - } - - @Override - public String toString() { - return "SoftwareModuleType [key=" + key + ", getName()=" + getName() + ", getId()=" + getId() + "]"; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java index 23489ea12..236ff2d3d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java @@ -8,52 +8,10 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.Column; -import javax.persistence.MappedSuperclass; +public interface Tag extends NamedEntity { -import org.springframework.hateoas.Identifiable; + String getColour(); -/** - * A Tag can be used as describing and organizational meta information for any - * kind of entity. - * - */ -@MappedSuperclass -public abstract class Tag extends NamedEntity implements Identifiable { - private static final long serialVersionUID = 1L; + void setColour(String colour); - @Column(name = "colour", nullable = true, length = 16) - private String colour; - - protected Tag() { - super(); - } - - /** - * Public constructor. - * - * @param name - * of the {@link Tag} - * @param description - * of the {@link Tag} - * @param colour - * of tag in UI - */ - public Tag(final String name, final String description, final String colour) { - super(name, description); - this.colour = colour; - } - - public String getColour() { - return colour; - } - - public void setColour(final String colour) { - this.colour = colour; - } - - @Override - public String toString() { - return "Tag [getOptLockRevision()=" + getOptLockRevision() + ", getId()=" + getId() + "]"; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java index 5f37fb653..ba6f8c42c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java @@ -8,211 +8,47 @@ */ package org.eclipse.hawkbit.repository.model; -import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.NamedAttributeNode; -import javax.persistence.NamedEntityGraph; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.PrimaryKeyJoinColumn; -import javax.persistence.Table; -import javax.persistence.Transient; -import javax.persistence.UniqueConstraint; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +public interface Target extends NamedEntity { -import org.eclipse.hawkbit.im.authentication.SpPermission; -import org.eclipse.hawkbit.repository.model.helper.SecurityChecker; -import org.eclipse.hawkbit.repository.model.helper.SecurityTokenGeneratorHolder; -import org.eclipse.persistence.annotations.CascadeOnDelete; -import org.springframework.data.domain.Persistable; + DistributionSet getAssignedDistributionSet(); -/** - *

- * The {@link Target} is the target of all provisioning operations. It contains - * the currently installed {@link DistributionSet} (i.e. current state). In - * addition it holds the target {@link DistributionSet} that has to be - * provisioned next (i.e. target state). - *

- * - *

- * {@link #getStatus()}s() shows if the {@link Target} is - * {@link TargetStatus#IN_SYNC} or a provisioning is - * {@link TargetStatus#PENDING} or the target is only - * {@link TargetStatus#REGISTERED}, i.e. a target {@link DistributionSet} . - *

- * - */ -@Entity -@Table(name = "sp_target", indexes = { - @Index(name = "sp_idx_target_01", columnList = "tenant,name,assigned_distribution_set"), - @Index(name = "sp_idx_target_02", columnList = "tenant,name"), - @Index(name = "sp_idx_target_03", columnList = "tenant,controller_id,assigned_distribution_set"), - @Index(name = "sp_idx_target_04", columnList = "tenant,created_at"), - @Index(name = "sp_idx_target_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = { - "controller_id", "tenant" }, name = "uk_tenant_controller_id")) -@NamedEntityGraph(name = "Target.detail", attributeNodes = { @NamedAttributeNode("tags"), - @NamedAttributeNode(value = "assignedDistributionSet"), @NamedAttributeNode(value = "targetInfo") }) -public class Target extends NamedEntity implements Persistable { - private static final long serialVersionUID = 1L; + String getControllerId(); - @Column(name = "controller_id", length = 64) - @Size(min = 1) - @NotNull - private String controllerId; + Set getTags(); - @Transient - private boolean entityNew = false; + void setAssignedDistributionSet(DistributionSet assignedDistributionSet); - @ManyToMany(targetEntity = TargetTag.class) - @JoinTable(name = "sp_target_target_tag", joinColumns = { - @JoinColumn(name = "target", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_targtag_target")) }, inverseJoinColumns = { - @JoinColumn(name = "tag", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_targtag_tag")) }) - private Set tags = new HashSet<>(); + void setControllerId(String controllerId); - @CascadeOnDelete - @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, cascade = { CascadeType.REMOVE }) - @JoinColumn(name = "target", insertable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_act_hist_targ")) - private final List actions = new ArrayList<>(); + void setTags(Set tags); - @ManyToOne(optional = true, fetch = FetchType.LAZY, targetEntity = DistributionSet.class) - @JoinColumn(name = "assigned_distribution_set", nullable = true, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_target_assign_ds")) - private DistributionSet assignedDistributionSet; + List getActions(); - @CascadeOnDelete - @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, targetEntity = TargetInfo.class) - @PrimaryKeyJoinColumn - private TargetInfo targetInfo = null; - - /** - * the security token of the target which allows if enabled to authenticate - * with this security token. - */ - @Column(name = "sec_token", insertable = true, updatable = true, nullable = false, length = 128) - private String securityToken = null; - - @CascadeOnDelete - @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE, CascadeType.PERSIST }) - @JoinColumn(name = "target_Id", insertable = false, updatable = false) - private final List rolloutTargetGroup = new ArrayList<>(); - - /** - * Constructor. - * - * @param controllerId - * controller ID of the {@link Target} - */ - public Target(final String controllerId) { - this.controllerId = controllerId; - setName(controllerId); - securityToken = SecurityTokenGeneratorHolder.getInstance().generateToken(); - targetInfo = new TargetInfo(this); - } - - /** - * empty constructor for JPA. - */ - Target() { - controllerId = null; - securityToken = null; - } - - public DistributionSet getAssignedDistributionSet() { - return assignedDistributionSet; - } - - public String getControllerId() { - return controllerId; - } - - public Set getTags() { - return tags; - } - - public void setAssignedDistributionSet(final DistributionSet assignedDistributionSet) { - this.assignedDistributionSet = assignedDistributionSet; - } - - public void setControllerId(final String controllerId) { - this.controllerId = controllerId; - } - - public void setTags(final Set tags) { - this.tags = tags; - } - - public List getActions() { - return actions; - } - - public TargetIdName getTargetIdName() { - return new TargetIdName(getId(), getControllerId(), getName()); - } - - @Override - @Transient - public boolean isNew() { - return entityNew; - } - - /** - * @param isNew - * the isNew to set - */ - public void setNew(final boolean entityNew) { - this.entityNew = entityNew; - } + TargetIdName getTargetIdName(); /** * @return the targetInfo */ - public TargetInfo getTargetInfo() { - return targetInfo; - } + TargetInfo getTargetInfo(); /** * @param targetInfo * the targetInfo to set */ - public void setTargetInfo(final TargetInfo targetInfo) { - this.targetInfo = targetInfo; - } + void setTargetInfo(TargetInfo targetInfo); /** * @return the securityToken */ - public String getSecurityToken() { - if (SecurityChecker.hasPermission(SpPermission.READ_TARGET_SEC_TOKEN)) { - return securityToken; - } - return null; - } + String getSecurityToken(); /** * @param securityToken * the securityToken to set */ - public void setSecurityToken(final String securityToken) { - this.securityToken = securityToken; - } + void setSecurityToken(String securityToken); - @Override - public String toString() { - return "Target [controllerId=" + controllerId + ", getId()=" + getId() + "]"; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java index 021b9ca7f..03508555a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java @@ -8,51 +8,14 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Index; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; +public interface TargetFilterQuery extends TenantAwareBaseEntity { -/** - * Stored target filter. - * - */ -@Entity -@Table(name = "sp_target_filter_query", indexes = { - @Index(name = "sp_idx_target_filter_query_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { - "name", "tenant" }, name = "uk_tenant_custom_filter_name")) -public class TargetFilterQuery extends TenantAwareBaseEntity { - private static final long serialVersionUID = 7493966984413479089L; + String getName(); - @Column(name = "name", length = 64) - private String name; + void setName(String name); - @Column(name = "query", length = 1024) - private String query; + String getQuery(); - public TargetFilterQuery() { - // Default constructor for JPA. - } + void setQuery(String query); - public TargetFilterQuery(final String name, final String query) { - this.name = name; - this.query = query; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public String getQuery() { - return query; - } - - public void setQuery(final String query) { - this.query = query; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java index 00a501540..657b95c41 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java @@ -10,231 +10,30 @@ package org.eclipse.hawkbit.repository.model; import java.io.Serializable; import java.net.URI; -import java.time.Duration; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Collections; -import java.util.HashMap; import java.util.Map; -import javax.persistence.CascadeType; -import javax.persistence.CollectionTable; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Id; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.MapKeyColumn; -import javax.persistence.MapsId; -import javax.persistence.OneToOne; -import javax.persistence.Table; -import javax.persistence.Transient; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo.PollStatus; -import org.eclipse.hawkbit.repository.model.helper.SystemSecurityContextHolder; -import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder; -import org.eclipse.hawkbit.tenancy.configuration.DurationHelper; -import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; -import org.eclipse.persistence.annotations.CascadeOnDelete; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.domain.Persistable; +public interface TargetInfo extends Serializable { -/** - * A table which contains all the information inserted, updated by the - * controller itself. So this entity does not provide audit information because - * changes on this entity are mostly only done by controller requests. That's - * the reason that we store these information in a separated table so we don't - * modifying the {@link Target} itself when a controller reports it's - * {@link #lastTargetQuery} for example. - * - */ -@Table(name = "sp_target_info", indexes = { - @Index(name = "sp_idx_target_info_02", columnList = "target_id,update_status") }) -@Entity -public class TargetInfo implements Persistable, Serializable { - private static final long serialVersionUID = 1L; - - private static final Logger LOG = LoggerFactory.getLogger(TargetInfo.class); - - @Id - private Long targetId; - - @Transient - private boolean entityNew = false; - - @CascadeOnDelete - @OneToOne(cascade = { CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.LAZY, targetEntity = Target.class) - @JoinColumn(name = "target_id", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_stat_targ")) - @MapsId - private Target target; - - @Column(name = "address", length = 512) - private String address = null; - - @Column(name = "last_target_query") - private Long lastTargetQuery = null; - - @Column(name = "install_date") - private Long installationDate; - - @Column(name = "update_status", nullable = false, length = 255) - @Enumerated(EnumType.STRING) - private TargetUpdateStatus updateStatus = TargetUpdateStatus.UNKNOWN; - - @ManyToOne(optional = true, fetch = FetchType.LAZY) - @JoinColumn(name = "installed_distribution_set", nullable = true, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_target_inst_ds")) - private DistributionSet installedDistributionSet; - - /** - * Read only on management API. Are commited by controller. - */ - @ElementCollection - @Column(name = "attribute_value", length = 128) - @MapKeyColumn(name = "attribute_key", nullable = false, length = 32) - @CollectionTable(name = "sp_target_attributes", joinColumns = { - @JoinColumn(name = "target_id") }, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_attrib_target")) - - private final Map controllerAttributes = Collections.synchronizedMap(new HashMap()); - - // set default request controller attributes to true, because we want to - // request them the first - // time - @Column(name = "request_controller_attributes", nullable = false) - private boolean requestControllerAttributes = true; - - /** - * Constructor for {@link TargetStatus}. - * - * @param target - * related to this status. - */ - public TargetInfo(final Target target) { - this.target = target; - targetId = target.getId(); - } - - TargetInfo() { - target = null; - targetId = null; - } - - @Override - public Long getId() { - return targetId; - } - - @Override - @Transient - public boolean isNew() { - return entityNew; - } - - /** - * @param isNew - * the isNew to set - */ - public void setNew(final boolean entityNew) { - this.entityNew = entityNew; - } + Long getId(); /** * @return the ipAddress */ - public URI getAddress() { - if (address == null) { - return null; - } - try { - return URI.create(address); - } catch (final IllegalArgumentException e) { - LOG.warn("Invalid address provided. Cloud not be configured to URI", e); - return null; - } - } + URI getAddress(); - /** - * @param address - * the ipAddress to set - * - * @throws IllegalArgumentException - * If the given string violates RFC 2396 - */ - public void setAddress(final String address) { - // check if this is a real URI - if (address != null) { - URI.create(address); - } + Target getTarget(); - this.address = address; - } + Long getLastTargetQuery(); - public Long getTargetId() { - return targetId; - } + Map getControllerAttributes(); - public void setTargetId(final Long targetId) { - this.targetId = targetId; - } + Long getInstallationDate(); - public Target getTarget() { - return target; - } + TargetUpdateStatus getUpdateStatus(); - public void setTarget(final Target target) { - this.target = target; - } - - public Long getLastTargetQuery() { - return lastTargetQuery; - } - - public void setLastTargetQuery(final Long lastTargetQuery) { - this.lastTargetQuery = lastTargetQuery; - } - - public void setRequestControllerAttributes(final boolean requestControllerAttributes) { - this.requestControllerAttributes = requestControllerAttributes; - } - - public Map getControllerAttributes() { - return controllerAttributes; - } - - public boolean isRequestControllerAttributes() { - return requestControllerAttributes; - } - - public Long getInstallationDate() { - return installationDate; - } - - public void setInstallationDate(final Long installationDate) { - this.installationDate = installationDate; - } - - public TargetUpdateStatus getUpdateStatus() { - return updateStatus; - } - - public void setUpdateStatus(final TargetUpdateStatus updateStatus) { - this.updateStatus = updateStatus; - } - - public DistributionSet getInstalledDistributionSet() { - return installedDistributionSet; - } - - public void setInstalledDistributionSet(final DistributionSet installedDistributionSet) { - this.installedDistributionSet = installedDistributionSet; - } + DistributionSet getInstalledDistributionSet(); /** * @return the poll time which holds the last poll time of the target, the @@ -242,119 +41,6 @@ public class TargetInfo implements Persistable, Serializable { * {@link #lastTargetQuery} is not set e.g. the target never polled * before this method returns {@code null} */ - public PollStatus getPollStatus() { - if (lastTargetQuery == null) { - return null; - } - return SystemSecurityContextHolder.getInstance().getSystemSecurityContext().runAsSystem(() -> { - final Duration pollTime = DurationHelper.formattedStringToDuration(TenantConfigurationManagementHolder - .getInstance().getTenantConfigurationManagement() - .getConfigurationValue(TenantConfigurationKey.POLLING_TIME_INTERVAL, String.class).getValue()); - final Duration overdueTime = DurationHelper.formattedStringToDuration( - TenantConfigurationManagementHolder.getInstance().getTenantConfigurationManagement() - .getConfigurationValue(TenantConfigurationKey.POLLING_OVERDUE_TIME_INTERVAL, String.class) - .getValue()); - final LocalDateTime currentDate = LocalDateTime.now(); - final LocalDateTime lastPollDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(lastTargetQuery), - ZoneId.systemDefault()); - final LocalDateTime nextPollDate = lastPollDate.plus(pollTime); - final LocalDateTime overdueDate = nextPollDate.plus(overdueTime); - return new PollStatus(lastPollDate, nextPollDate, overdueDate, currentDate); - }); - } + PollStatus getPollStatus(); - /** - * The poll time object which holds all the necessary information around the - * target poll time, e.g. the last poll time, the next poll time and the - * overdue poll time. - * - */ - public static final class PollStatus { - private final LocalDateTime lastPollDate; - private final LocalDateTime nextPollDate; - private final LocalDateTime overdueDate; - private final LocalDateTime currentDate; - - private PollStatus(final LocalDateTime lastPollDate, final LocalDateTime nextPollDate, - final LocalDateTime overdueDate, final LocalDateTime currentDate) { - this.lastPollDate = lastPollDate; - this.nextPollDate = nextPollDate; - this.overdueDate = overdueDate; - this.currentDate = currentDate; - } - - /** - * calculates if the target poll time is overdue and the target has not - * been polled in the configured poll time interval. - * - * @return {@code true} if the current time is after the poll time - * overdue date otherwise {@code false}. - */ - public boolean isOverdue() { - return currentDate.isAfter(overdueDate); - } - - /** - * @return the lastPollDate - */ - public LocalDateTime getLastPollDate() { - return lastPollDate; - } - - public LocalDateTime getNextPollDate() { - return nextPollDate; - } - - public LocalDateTime getOverdueDate() { - return overdueDate; - } - - public LocalDateTime getCurrentDate() { - return currentDate; - } - - @Override - public String toString() { - return "PollTime [lastPollDate=" + lastPollDate + ", nextPollDate=" + nextPollDate + ", overdueDate=" - + overdueDate + ", currentDate=" + currentDate + "]"; - } - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((target == null) ? 0 : target.hashCode()); - result = prime * result + ((targetId == null) ? 0 : targetId.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof TargetInfo)) { - return false; - } - final TargetInfo other = (TargetInfo) obj; - if (target == null) { - if (other.target != null) { - return false; - } - } else if (!target.equals(other.target)) { - return false; - } - if (targetId == null) { - if (other.targetId != null) { - return false; - } - } else if (!targetId.equals(other.targetId)) { - return false; - } - return true; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java index 5a5a310d0..3abe3cdd5 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java @@ -10,78 +10,8 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Index; -import javax.persistence.ManyToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; +public interface TargetTag extends Tag { -/** - * A {@link TargetTag} is used to describe Target attributes and use them also - * for filtering the target list. - * - */ -@Entity -@Table(name = "sp_target_tag", indexes = { - @Index(name = "sp_idx_target_tag_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = { - "name", "tenant" }, name = "uk_targ_tag")) -public class TargetTag extends Tag { - private static final long serialVersionUID = 1L; + List getAssignedToTargets(); - @ManyToMany(mappedBy = "tags", targetEntity = Target.class, fetch = FetchType.LAZY) - private List assignedToTargets; - - /** - * Constructor. - * - * @param name - * of {@link TargetTag} - * @param description - * of {@link TargetTag} - * @param colour - * of {@link TargetTag} - */ - public TargetTag(final String name, final String description, final String colour) { - super(name, description, colour); - } - - /** - * Public constructor. - * - * @param name - * of the {@link TargetTag} - **/ - public TargetTag(final String name) { - super(name, null, null); - } - - TargetTag() { - super(); - } - - public List getAssignedToTargets() { - return assignedToTargets; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + this.getClass().getName().hashCode(); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (!super.equals(obj)) { - return false; - } - if (!(obj instanceof TargetTag)) { - return false; - } - - return true; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java index ec09da3d5..987b993e1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java @@ -19,7 +19,7 @@ public class TargetWithActionStatus { private Target target; - private Status status = null;; + private Status status = null; public TargetWithActionStatus(final Target target) { this.target = target; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java index d03a4938a..4b7bf861e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java @@ -8,106 +8,8 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.Column; -import javax.persistence.MappedSuperclass; -import javax.persistence.PrePersist; +public interface TenantAwareBaseEntity extends BaseEntity { -import org.eclipse.hawkbit.repository.exception.TenantNotExistException; -import org.eclipse.hawkbit.repository.model.helper.SystemManagementHolder; -import org.eclipse.hawkbit.repository.model.helper.TenantAwareHolder; -import org.eclipse.persistence.annotations.Multitenant; -import org.eclipse.persistence.annotations.MultitenantType; -import org.eclipse.persistence.annotations.TenantDiscriminatorColumn; + String getTenant(); -/** - * Holder of the base attributes common to all tenant aware entities. - * - */ -@MappedSuperclass -@TenantDiscriminatorColumn(name = "tenant", length = 40) -@Multitenant(MultitenantType.SINGLE_TABLE) -public abstract class TenantAwareBaseEntity extends BaseEntity { - private static final long serialVersionUID = 1L; - - @Column(name = "tenant", nullable = false, insertable = false, updatable = false, length = 40) - private String tenant; - - /** - * Default constructor needed for JPA entities. - */ - public TenantAwareBaseEntity() { - // Default constructor needed for JPA entities. - } - - /** - * PrePersist listener method for all {@link TenantAwareBaseEntity} - * entities. - */ - @PrePersist - public void prePersist() { - // before persisting the entity check the current ID of the tenant by - // using the TenantAware - // service - final String currentTenant = SystemManagementHolder.getInstance().currentTenant(); - if (currentTenant == null) { - throw new TenantNotExistException("Tenant " - + TenantAwareHolder.getInstance().getTenantAware().getCurrentTenant() - + " does not exists, cannot create entity " + this.getClass() + " with id " + super.getId()); - } - setTenant(currentTenant.toUpperCase()); - } - - public String getTenant() { - return tenant; - } - - public void setTenant(final String tenant) { - this.tenant = tenant; - } - - @Override - public String toString() { - return "BaseEntity [id=" + super.getId() + "]"; - } - - /** - * Tenant aware entities extend the equals/hashcode strategy with the tenant - * name. That would allow for instance in a multi-schema based data - * separation setup to have the same primary key for different entities of - * different tenants. - * - * @see org.eclipse.hawkbit.repository.model.BaseEntity#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + (tenant == null ? 0 : tenant.hashCode()); - return result; - } - - /** - * Tenant aware entities extend the equals/hashcode strategy with the tenant - * name. That would allow for instance in a multi-schema based data - * separation setup to have the same primary key for different entities of - * different tenants. - * - * @see org.eclipse.hawkbit.repository.model.BaseEntity#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object obj) { - if (!super.equals(obj)) { - return false; - } - final TenantAwareBaseEntity other = (TenantAwareBaseEntity) obj; - if (tenant == null) { - if (other.tenant != null) { - return false; - } - } else if (!tenant.equals(other.tenant)) { - return false; - } - return true; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java index 5a938563b..78201410b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java @@ -8,64 +8,14 @@ */ package org.eclipse.hawkbit.repository.model; -import java.io.Serializable; +public interface TenantConfiguration extends TenantAwareBaseEntity { -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; + String getKey(); -/** - * A JPA entity which stores the tenant specific configuration. - * - */ -@Entity -@Table(name = "sp_tenant_configuration", uniqueConstraints = @UniqueConstraint(columnNames = { "conf_key", - "tenant" }, name = "uk_tenant_key")) -public class TenantConfiguration extends TenantAwareBaseEntity implements Serializable { - private static final long serialVersionUID = 1L; + void setKey(String key); - @Column(name = "conf_key", length = 128) - private String key; + String getValue(); - @Column(name = "conf_value", length = 512) - @Basic - private String value; + void setValue(String value); - /** - * JPA default constructor. - */ - public TenantConfiguration() { - // JPA default constructor. - } - - /** - * @param key - * the key of this configuration - * @param value - * the value of this configuration - */ - public TenantConfiguration(final String key, final String value) { - this.key = key; - this.value = value; - - } - - public String getKey() { - return key; - } - - public void setKey(final String key) { - this.key = key; - } - - public String getValue() { - return value; - } - - public void setValue(final String value) { - this.value = value; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java index a9572c21c..38f9ddbb3 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java @@ -8,93 +8,12 @@ */ package org.eclipse.hawkbit.repository.model; -import javax.persistence.Column; -import javax.persistence.ConstraintMode; -import javax.persistence.Entity; -import javax.persistence.EntityManager; -import javax.persistence.FetchType; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; +public interface TenantMetaData extends BaseEntity { -/** - * Tenant entity with meta data that is configured globally for the entire - * tenant. This entity is not tenant aware to allow the system to access it - * through the {@link EntityManager} even before the actual tenant exists. - * - * Entities owned by the tenant are based on {@link TenantAwareBaseEntity}. - * - */ -@Table(name = "sp_tenant", indexes = { - @Index(name = "sp_idx_tenant_prim", columnList = "tenant,id") }, uniqueConstraints = { - @UniqueConstraint(columnNames = { "tenant" }, name = "uk_tenantmd_tenant") }) -@Entity -public class TenantMetaData extends BaseEntity { - private static final long serialVersionUID = 1L; + DistributionSetType getDefaultDsType(); - @Column(name = "tenant", nullable = false, length = 40) - private String tenant; + void setDefaultDsType(DistributionSetType defaultDsType); - @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "default_ds_type", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_tenant_md_default_ds_type")) - private DistributionSetType defaultDsType; + String getTenant(); - /** - * Default constructor needed for JPA entities. - */ - public TenantMetaData() { - // Default constructor needed for JPA entities. - } - - /** - * Standard constructor. - * - * @param defaultDsType - * of this tenant - * @param tenant - */ - public TenantMetaData(final DistributionSetType defaultDsType, final String tenant) { - super(); - this.defaultDsType = defaultDsType; - this.tenant = tenant; - } - - public DistributionSetType getDefaultDsType() { - return defaultDsType; - } - - public void setDefaultDsType(final DistributionSetType defaultDsType) { - this.defaultDsType = defaultDsType; - } - - public String getTenant() { - return tenant; - } - - public void setTenant(final String tenant) { - this.tenant = tenant; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + this.getClass().getName().hashCode(); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (!super.equals(obj)) { - return false; - } - if (!(obj instanceof TenantMetaData)) { - return false; - } - - return true; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java index 3af269819..d80fc5a7b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java @@ -8,13 +8,12 @@ */ package org.eclipse.hawkbit.rollout.condition; -import java.util.concurrent.Callable; - import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -42,14 +41,11 @@ public class PauseRolloutGroupAction implements RolloutGroupActionEvaluator { @Override public void eval(final Rollout rollout, final RolloutGroup rolloutGroup, final String expression) { - systemSecurityContext.runAsSystem(new Callable() { - @Override - public Void call() throws Exception { - rolloutGroup.setStatus(RolloutGroupStatus.ERROR); - rolloutGroupRepository.save(rolloutGroup); - rolloutManagement.pauseRollout(rollout); - return null; - } + systemSecurityContext.runAsSystem(() -> { + rolloutGroup.setStatus(RolloutGroupStatus.ERROR); + rolloutGroupRepository.save((JpaRolloutGroup) rolloutGroup); + rolloutManagement.pauseRollout(rollout); + return null; }); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java index 224901053..223f20125 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java @@ -12,10 +12,11 @@ import java.util.List; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,7 +69,7 @@ public class StartNextGroupRolloutGroupSuccessAction implements RolloutGroupActi final RolloutGroup nextGroup = action.getRolloutGroup(); logger.debug("Rolloutgroup {} is now running", nextGroup); nextGroup.setStatus(RolloutGroupStatus.RUNNING); - rolloutGroupRepository.save(nextGroup); + rolloutGroupRepository.save((JpaRolloutGroup) nextGroup); }); } else { logger.info("No actions to start for next rolloutgroup of parent {}", rolloutGroup); @@ -76,8 +77,8 @@ public class StartNextGroupRolloutGroupSuccessAction implements RolloutGroupActi // e.g. if targets has been deleted after the group has been // scheduled. If the group is empty now, we just finish the group if // there are not actions available for this group. - final List findByRolloutGroupParent = rolloutGroupRepository - .findByParentAndStatus(rolloutGroup, RolloutGroupStatus.SCHEDULED); + final List findByRolloutGroupParent = rolloutGroupRepository + .findByParentAndStatus((JpaRolloutGroup) rolloutGroup, RolloutGroupStatus.SCHEDULED); findByRolloutGroupParent.forEach(nextGroup -> { logger.debug("Rolloutgroup {} is finished, starting next group", nextGroup); nextGroup.setStatus(RolloutGroupStatus.FINISHED); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java index e38cb0f16..32e9725f8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java @@ -9,6 +9,8 @@ package org.eclipse.hawkbit.rollout.condition; import org.eclipse.hawkbit.repository.jpa.ActionRepository; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; @@ -30,7 +32,8 @@ public class ThresholdRolloutGroupErrorCondition implements RolloutGroupConditio @Override public boolean eval(final Rollout rollout, final RolloutGroup rolloutGroup, final String expression) { - final Long totalGroup = actionRepository.countByRolloutAndRolloutGroup(rollout, rolloutGroup); + final Long totalGroup = actionRepository.countByRolloutAndRolloutGroup((JpaRollout) rollout, + (JpaRolloutGroup) rolloutGroup); final Long error = actionRepository.countByRolloutIdAndRolloutGroupIdAndStatus(rollout.getId(), rolloutGroup.getId(), Action.Status.ERROR); try { diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java index 1787d29e4..09959790f 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java @@ -20,6 +20,14 @@ import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.jpa.model.JpaArtifact; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -42,10 +50,10 @@ import net._01001111.text.LoremIpsum; public class TestDataUtil { private static final LoremIpsum LOREM = new LoremIpsum(); - public static List generateDistributionSets(final String suffix, final int number, + public static List generateDistributionSets(final String suffix, final int number, final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { - final List sets = new ArrayList(); + final List sets = new ArrayList<>(); for (int i = 0; i < number; i++) { sets.add(generateDistributionSet(suffix, "v1." + i, softwareManagement, distributionSetManagement, false)); } @@ -56,32 +64,32 @@ public class TestDataUtil { public static DistributionSet generateDistributionSetWithNoSoftwareModules(final String name, final String version, final DistributionSetManagement distributionSetManagement) { - final DistributionSet dis = new DistributionSet(); + final DistributionSet dis = new JpaDistributionSet(); dis.setName(name); dis.setVersion(version); dis.setDescription("Test describtion for " + name); return distributionSetManagement.createDistributionSet(dis); } - public static List generateDistributionSets(final int number, + public static List generateDistributionSets(final int number, final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { return generateDistributionSets("", number, softwareManagement, distributionSetManagement); } - public static DistributionSet generateDistributionSet(final String suffix, final String version, + public static JpaDistributionSet generateDistributionSet(final String suffix, final String version, final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement, final boolean isRequiredMigrationStep) { - final SoftwareModule ah = softwareManagement.createSoftwareModule(new SoftwareModule( + final SoftwareModule ah = softwareManagement.createSoftwareModule(new JpaSoftwareModule( findOrCreateSoftwareModuleType(softwareManagement, "application"), suffix + "application", version + "." + new Random().nextInt(100), LOREM.words(20), suffix + " vendor Limited, California")); - final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new SoftwareModule(findOrCreateSoftwareModuleType(softwareManagement, "runtime"), + final SoftwareModule jvm = softwareManagement.createSoftwareModule( + new JpaSoftwareModule(findOrCreateSoftwareModuleType(softwareManagement, "runtime"), suffix + "app runtime", version + "." + new Random().nextInt(100), LOREM.words(20), suffix + " vendor GmbH, Stuttgart, Germany")); final SoftwareModule os = softwareManagement - .createSoftwareModule(new SoftwareModule(findOrCreateSoftwareModuleType(softwareManagement, "os"), + .createSoftwareModule(new JpaSoftwareModule(findOrCreateSoftwareModuleType(softwareManagement, "os"), suffix + " Firmware", version + "." + new Random().nextInt(100), LOREM.words(20), suffix + " vendor Limited Inc, California")); @@ -92,7 +100,7 @@ public class TestDataUtil { opt.add(findOrCreateSoftwareModuleType(softwareManagement, "application")); opt.add(findOrCreateSoftwareModuleType(softwareManagement, "runtime")); - return distributionSetManagement.createDistributionSet( + return (JpaDistributionSet) distributionSetManagement.createDistributionSet( buildDistributionSet(suffix != null && suffix.length() > 0 ? suffix : "DS", version, findOrCreateDistributionSetType(distributionSetManagement, "ecl_os_app_jvm", "OS mandatory App/JVM optional", mand, opt), @@ -126,7 +134,7 @@ public class TestDataUtil { public static List generateTargets(final int start, final int number, final String prefix) { final List targets = new ArrayList<>(); for (int i = start; i < start + number; i++) { - targets.add(new Target(prefix + i)); + targets.add(new JpaTarget(prefix + i)); } return targets; @@ -136,7 +144,7 @@ public class TestDataUtil { final List result = new ArrayList<>(); for (int i = 0; i < number; i++) { - result.add(new TargetTag("tag" + i, "tagdesc" + i, "" + i)); + result.add(new JpaTargetTag("tag" + i, "tagdesc" + i, "" + i)); } return result; @@ -146,30 +154,31 @@ public class TestDataUtil { final List result = new ArrayList<>(); for (int i = 0; i < number; i++) { - result.add(new DistributionSetTag("tag" + i, "tagdesc" + i, "" + i)); + result.add(new JpaDistributionSetTag("tag" + i, "tagdesc" + i, "" + i)); } return result; } - public static DistributionSet generateDistributionSet(final String suffix, + public static JpaDistributionSet generateDistributionSet(final String suffix, final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement, final boolean isRequiredMigrationStep) { return generateDistributionSet(suffix, "v1.0", softwareManagement, distributionSetManagement, isRequiredMigrationStep); } - public static DistributionSet generateDistributionSet(final String suffix, + public static JpaDistributionSet generateDistributionSet(final String suffix, final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { return generateDistributionSet(suffix, "v1.0", softwareManagement, distributionSetManagement, false); } - public static List generateArtifacts( - final ArtifactManagement artifactManagement, final Long moduleId) { - final List artifacts = new ArrayList<>(); + public static List generateArtifacts(final ArtifactManagement artifactManagement, + final Long moduleId) { + final List artifacts = new ArrayList<>(); for (int i = 0; i < 3; i++) { final InputStream stubInputStream = IOUtils.toInputStream("some test data" + i); - artifacts.add(artifactManagement.createLocalArtifact(stubInputStream, moduleId, "filename" + i, false)); + artifacts.add((JpaArtifact) artifactManagement.createLocalArtifact(stubInputStream, moduleId, + "filename" + i, false)); } @@ -178,7 +187,7 @@ public class TestDataUtil { public static Target createTarget(final TargetManagement targetManagement) { final String targetExist = "targetExist"; - final Target target = new Target(targetExist); + final Target target = new JpaTarget(targetExist); targetManagement.createTarget(target); return target; } @@ -196,7 +205,7 @@ public class TestDataUtil { if (findSoftwareModuleTypeByKey != null) { return findSoftwareModuleTypeByKey; } - return softwareManagement.createSoftwareModuleType(new SoftwareModuleType(softwareModuleType, + return softwareManagement.createSoftwareModuleType(new JpaSoftwareModuleType(softwareModuleType, softwareModuleType, "Standard type " + softwareManagement, 1)); } @@ -210,7 +219,8 @@ public class TestDataUtil { return findDistributionSetTypeByname; } - final DistributionSetType type = new DistributionSetType(dsTypeKey, dsTypeName, "Standard type" + dsTypeName); + final DistributionSetType type = new JpaDistributionSetType(dsTypeKey, dsTypeName, + "Standard type" + dsTypeName); mandatory.forEach(entry -> type.addMandatoryModuleType(entry)); optional.forEach(entry -> type.addOptionalModuleType(entry)); @@ -280,7 +290,7 @@ public class TestDataUtil { * @return the created {@link Target} */ public static Target buildTargetFixture(final String ctrlID, final String description, final TargetTag[] tags) { - final Target target = new Target(ctrlID); + final Target target = new JpaTarget(ctrlID); target.setName("Prov.Target ".concat(ctrlID)); target.setDescription(description); if (tags != null && tags.length > 0) { @@ -322,7 +332,7 @@ public class TestDataUtil { public static DistributionSet buildDistributionSet(final String name, final String version, final DistributionSetType type, final SoftwareModule os, final SoftwareModule jvm, final SoftwareModule agentHub) { - final DistributionSet distributionSet = new DistributionSet(name, version, null, type, + final DistributionSet distributionSet = new JpaDistributionSet(name, version, null, type, Lists.newArrayList(os, jvm, agentHub)); distributionSet.setDescription( String.format("description of DistributionSet; name = '%s', version = '%s'", name, version)); @@ -361,6 +371,6 @@ public class TestDataUtil { * @return the {@link TargetTag} */ public static TargetTag buildTargetTagFixture(final String tagName) { - return new TargetTag(tagName); + return new JpaTargetTag(tagName); } } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java index 937a544a7..4fbd46a5c 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.junit.Test; @@ -30,7 +31,7 @@ public class ActionTest { // current time + 1 seconds final long sleepTime = 1000; final long timeForceTimeAt = System.currentTimeMillis() + sleepTime; - final Action timeforcedAction = new Action(); + final Action timeforcedAction = new JpaAction(); timeforcedAction.setActionType(ActionType.TIMEFORCED); timeforcedAction.setForcedTime(timeForceTimeAt); assertThat(timeforcedAction.isForce()).isFalse(); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementNoMongoDbTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementNoMongoDbTest.java index 30f4093c2..ee1cb3acd 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementNoMongoDbTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementNoMongoDbTest.java @@ -16,7 +16,7 @@ import java.io.IOException; import org.apache.commons.lang3.RandomStringUtils; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.exception.ArtifactUploadFailedException; -import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.junit.BeforeClass; import org.junit.Test; @@ -42,7 +42,7 @@ public class ArtifactManagementNoMongoDbTest extends AbstractIntegrationTest { @Test @Description("Checks if the expected ArtifactUploadFailedException is thrown in case of MongoDB down") public void createLocalArtifactWithMongoDbDown() throws IOException { - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + JpaSoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareModuleRepository.save(sm); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java index 7c801a571..7b704af12 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java @@ -27,8 +27,11 @@ import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.repository.exception.ArtifactDeleteFailedException; import org.eclipse.hawkbit.repository.exception.InsufficientPermissionException; +import org.eclipse.hawkbit.repository.jpa.model.JpaExternalArtifact; +import org.eclipse.hawkbit.repository.jpa.model.JpaExternalArtifactProvider; +import org.eclipse.hawkbit.repository.jpa.model.JpaLocalArtifact; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.model.Artifact; -import org.eclipse.hawkbit.repository.model.ExternalArtifact; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -70,15 +73,15 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(softwareModuleRepository.findAll()).hasSize(0); assertThat(artifactRepository.findAll()).hasSize(0); - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + JpaSoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareModuleRepository.save(sm); - SoftwareModule sm2 = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 2", + JpaSoftwareModule sm2 = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 2", "version 2", null, null); sm2 = softwareModuleRepository.save(sm2); - SoftwareModule sm3 = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 3", + JpaSoftwareModule sm3 = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 3", "version 3", null, null); sm3 = softwareModuleRepository.save(sm3); @@ -96,11 +99,11 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(result).isInstanceOf(LocalArtifact.class); assertThat(result.getSoftwareModule().getId()).isEqualTo(sm.getId()); assertThat(result2.getSoftwareModule().getId()).isEqualTo(sm2.getId()); - assertThat(((LocalArtifact) result).getFilename()).isEqualTo("file1"); - assertThat(((LocalArtifact) result).getGridFsFileName()).isNotNull(); + assertThat(((JpaLocalArtifact) result).getFilename()).isEqualTo("file1"); + assertThat(((JpaLocalArtifact) result).getGridFsFileName()).isNotNull(); assertThat(result).isNotEqualTo(result2); - assertThat(((LocalArtifact) result).getGridFsFileName()) - .isEqualTo(((LocalArtifact) result2).getGridFsFileName()); + assertThat(((JpaLocalArtifact) result).getGridFsFileName()) + .isEqualTo(((JpaLocalArtifact) result2).getGridFsFileName()); assertThat(artifactManagement.findLocalArtifactByFilename("file1").get(0).getSha1Hash()) .isEqualTo(HashGeneratorUtils.generateSHA1(random)); @@ -116,7 +119,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Tests hard delete directly on repository.") public void hardDeleteSoftwareModule() throws NoSuchAlgorithmException, IOException { - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + JpaSoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareModuleRepository.save(sm); @@ -137,18 +140,19 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Tests the creation of an external artifact metadata element.") public void createExternalArtifact() { - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + JpaSoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareModuleRepository.save(sm); - SoftwareModule sm2 = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 2", + JpaSoftwareModule sm2 = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 2", "version 2", null, null); sm2 = softwareModuleRepository.save(sm2); final ExternalArtifactProvider provider = artifactManagement.createExternalArtifactProvider("provider X", null, "https://fhghdfjgh", "/{version}/"); - ExternalArtifact result = artifactManagement.createExternalArtifact(provider, null, sm.getId()); + JpaExternalArtifact result = (JpaExternalArtifact) artifactManagement.createExternalArtifact(provider, null, + sm.getId()); assertNotNull("The result of an external artifact should not be null", result); assertThat(externalArtifactRepository.findAll()).contains(result).hasSize(1); @@ -156,7 +160,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(result.getUrl()).isEqualTo("https://fhghdfjgh/{version}/"); assertThat(result.getExternalArtifactProvider()).isEqualTo(provider); - result = artifactManagement.createExternalArtifact(provider, "/test", sm2.getId()); + result = (JpaExternalArtifact) artifactManagement.createExternalArtifact(provider, "/test", sm2.getId()); assertNotNull("The newly created external artifact should not be null", result); assertThat(externalArtifactRepository.findAll()).contains(result).hasSize(2); assertThat(result.getUrl()).isEqualTo("https://fhghdfjgh/test"); @@ -168,14 +172,15 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { public void deleteExternalArtifact() { assertThat(artifactRepository.findAll()).isEmpty(); - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + JpaSoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareModuleRepository.save(sm); - final ExternalArtifactProvider provider = artifactManagement.createExternalArtifactProvider("provider X", null, - "https://fhghdfjgh", "/{version}/"); + final JpaExternalArtifactProvider provider = (JpaExternalArtifactProvider) artifactManagement + .createExternalArtifactProvider("provider X", null, "https://fhghdfjgh", "/{version}/"); - final ExternalArtifact result = artifactManagement.createExternalArtifact(provider, null, sm.getId()); + final JpaExternalArtifact result = (JpaExternalArtifact) artifactManagement.createExternalArtifact(provider, + null, sm.getId()); assertNotNull("The newly created external artifact should not be null", result); assertThat(externalArtifactRepository.findAll()).contains(result).hasSize(1); @@ -194,11 +199,11 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Tests the deletion of a local artifact including metadata.") public void deleteLocalArtifact() throws NoSuchAlgorithmException, IOException { - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + JpaSoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareModuleRepository.save(sm); - SoftwareModule sm2 = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 2", + JpaSoftwareModule sm2 = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 2", "version 2", null, null); sm2 = softwareModuleRepository.save(sm2); @@ -213,26 +218,25 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(result.getId()).isNotNull(); assertThat(result2.getId()).isNotNull(); - assertThat(((LocalArtifact) result).getGridFsFileName()) - .isNotEqualTo(((LocalArtifact) result2).getGridFsFileName()); - assertThat(operations.findOne( - new Query().addCriteria(Criteria.where("filename").is(((LocalArtifact) result).getGridFsFileName())))) + assertThat(((JpaLocalArtifact) result).getGridFsFileName()) + .isNotEqualTo(((JpaLocalArtifact) result2).getGridFsFileName()); + assertThat(operations.findOne(new Query() + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result).getGridFsFileName())))) .isNotNull(); - assertThat(operations.findOne( - new Query().addCriteria(Criteria.where("filename").is(((LocalArtifact) result2).getGridFsFileName())))) + assertThat(operations.findOne(new Query() + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result2).getGridFsFileName())))) .isNotNull(); artifactManagement.deleteLocalArtifact(result.getId()); - assertThat(operations.findOne( - new Query().addCriteria(Criteria.where("filename").is(((LocalArtifact) result).getGridFsFileName())))) - .isNull(); - assertThat(operations.findOne( - new Query().addCriteria(Criteria.where("filename").is(((LocalArtifact) result2).getGridFsFileName())))) + assertThat(operations.findOne(new Query() + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result).getGridFsFileName())))).isNull(); + assertThat(operations.findOne(new Query() + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result2).getGridFsFileName())))) .isNotNull(); artifactManagement.deleteLocalArtifact(result2.getId()); - assertThat(operations.findOne( - new Query().addCriteria(Criteria.where("filename").is(((LocalArtifact) result2).getGridFsFileName())))) + assertThat(operations.findOne(new Query() + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result2).getGridFsFileName())))) .isNull(); assertThat(artifactRepository.findAll()).hasSize(0); @@ -245,7 +249,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(artifactRepository.findAll()).isEmpty(); // prepare test - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + JpaSoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareModuleRepository.save(sm); @@ -272,11 +276,11 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Test the deletion of an artifact metadata where the binary is still linked to another " + "metadata element. The expected result is that the metadata is deleted but the binary kept.") public void deleteDuplicateArtifacts() throws NoSuchAlgorithmException, IOException { - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + JpaSoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareModuleRepository.save(sm); - SoftwareModule sm2 = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 2", + JpaSoftwareModule sm2 = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 2", "version 2", null, null); sm2 = softwareModuleRepository.save(sm2); @@ -290,21 +294,20 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(artifactRepository.findAll()).hasSize(2); assertThat(result.getId()).isNotNull(); assertThat(result2.getId()).isNotNull(); - assertThat(((LocalArtifact) result).getGridFsFileName()) - .isEqualTo(((LocalArtifact) result2).getGridFsFileName()); + assertThat(((JpaLocalArtifact) result).getGridFsFileName()) + .isEqualTo(((JpaLocalArtifact) result2).getGridFsFileName()); - assertThat(operations.findOne( - new Query().addCriteria(Criteria.where("filename").is(((LocalArtifact) result).getGridFsFileName())))) + assertThat(operations.findOne(new Query() + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result).getGridFsFileName())))) .isNotNull(); artifactManagement.deleteLocalArtifact(result.getId()); - assertThat(operations.findOne( - new Query().addCriteria(Criteria.where("filename").is(((LocalArtifact) result).getGridFsFileName())))) + assertThat(operations.findOne(new Query() + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result).getGridFsFileName())))) .isNotNull(); artifactManagement.deleteLocalArtifact(result2.getId()); - assertThat(operations.findOne( - new Query().addCriteria(Criteria.where("filename").is(((LocalArtifact) result).getGridFsFileName())))) - .isNull(); + assertThat(operations.findOne(new Query() + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result).getGridFsFileName())))).isNull(); } /** @@ -318,7 +321,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Loads an artifact based on given ID.") public void findArtifact() throws NoSuchAlgorithmException, IOException { - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + SoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); @@ -339,7 +342,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Loads an artifact binary based on given ID.") public void loadStreamOfLocalArtifact() throws NoSuchAlgorithmException, IOException { - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + SoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); @@ -357,7 +360,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Trys and fails to load an artifact without required permission. Checks if expected InsufficientPermissionException is thrown.") public void loadLocalArtifactBinaryWithoutDownloadArtifactThrowsPermissionDenied() { try { - artifactManagement.loadLocalArtifactBinary(new LocalArtifact()); + artifactManagement.loadLocalArtifactBinary(new JpaLocalArtifact()); fail("Should not have worked with missing permission."); } catch (final InsufficientPermissionException e) { @@ -367,10 +370,10 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Searches an artifact through the relations of a software module.") public void findLocalArtifactBySoftwareModule() { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = new JpaSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); - SoftwareModule sm2 = new SoftwareModule(osType, "name 2", "version 2", null, null); + SoftwareModule sm2 = new JpaSoftwareModule(osType, "name 2", "version 2", null, null); sm2 = softwareManagement.createSoftwareModule(sm2); assertThat(artifactManagement.findLocalArtifactBySoftwareModule(pageReq, sm.getId())).isEmpty(); @@ -384,7 +387,7 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Searches an artifact through the relations of a software module and the filename.") public void findByFilenameAndSoftwareModule() { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = new JpaSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); assertThat(artifactManagement.findByFilenameAndSoftwareModule("file1", sm.getId())).isEmpty(); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java index 4c0bc1c19..76286d217 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java @@ -19,6 +19,8 @@ import javax.validation.ConstraintViolationException; import org.apache.commons.lang3.RandomStringUtils; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -38,7 +40,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { @Test @Description("Controller adds a new action status.") public void controllerAddsActionStatus() { - final Target target = new Target("4712"); + final Target target = new JpaTarget("4712"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); Target savedTarget = targetManagement.createTarget(target); @@ -54,7 +56,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { assertThat(targetManagement.findTargetByControllerID(savedTarget.getControllerId()).getTargetInfo() .getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING); - ActionStatus actionStatusMessage = new ActionStatus(savedAction, Action.Status.RUNNING, + ActionStatus actionStatusMessage = new JpaActionStatus(savedAction, Action.Status.RUNNING, System.currentTimeMillis()); actionStatusMessage.addMessage("foobar"); savedAction.setStatus(Status.RUNNING); @@ -62,7 +64,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.PENDING); - actionStatusMessage = new ActionStatus(savedAction, Action.Status.FINISHED, System.currentTimeMillis()); + actionStatusMessage = new JpaActionStatus(savedAction, Action.Status.FINISHED, System.currentTimeMillis()); actionStatusMessage.addMessage(RandomStringUtils.randomAscii(512)); savedAction.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus(actionStatusMessage); @@ -98,7 +100,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { public void tryToFinishUpdateProcessMoreThenOnce() { // mock - final Target target = new Target("Rabbit"); + final Target target = new JpaTarget("Rabbit"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); Target savedTarget = targetManagement.createTarget(target); @@ -108,21 +110,21 @@ public class ControllerManagementTest extends AbstractIntegrationTest { Action savedAction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); // test and verify - final ActionStatus actionStatusMessage = new ActionStatus(savedAction, Action.Status.RUNNING, + final ActionStatus actionStatusMessage = new JpaActionStatus(savedAction, Action.Status.RUNNING, System.currentTimeMillis()); actionStatusMessage.addMessage("running"); savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage); assertThat(targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.PENDING); - final ActionStatus actionStatusMessage2 = new ActionStatus(savedAction, Action.Status.ERROR, + final ActionStatus actionStatusMessage2 = new JpaActionStatus(savedAction, Action.Status.ERROR, System.currentTimeMillis()); actionStatusMessage2.addMessage("error"); savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage2); assertThat(targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.ERROR); - final ActionStatus actionStatusMessage3 = new ActionStatus(savedAction, Action.Status.FINISHED, + final ActionStatus actionStatusMessage3 = new JpaActionStatus(savedAction, Action.Status.FINISHED, System.currentTimeMillis()); actionStatusMessage3.addMessage("finish"); controllerManagament.addUpdateActionStatus(actionStatusMessage3); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java index 6a6d92bf0..50b929622 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java @@ -13,6 +13,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -28,6 +29,13 @@ import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.exception.ForceQuitActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetException; import org.eclipse.hawkbit.repository.jpa.TargetRepository; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; @@ -91,8 +99,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails( deploymentManagement.assignDistributionSet(testDs, testTarget).getActions().get(0)); // save 2 action status - actionStatusRepository.save(new ActionStatus(action, Status.RETRIEVED, System.currentTimeMillis())); - actionStatusRepository.save(new ActionStatus(action, Status.RUNNING, System.currentTimeMillis())); + actionStatusRepository.save(new JpaActionStatus(action, Status.RETRIEVED, System.currentTimeMillis())); + actionStatusRepository.save(new JpaActionStatus(action, Status.RUNNING, System.currentTimeMillis())); final List findActionsWithStatusCountByTarget = deploymentManagement .findActionsWithStatusCountByTargetOrderByIdDesc(testTarget.get(0)); @@ -112,7 +120,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { } // not exists assignDS.add(Long.valueOf(100)); - final DistributionSetTag tag = tagManagement.createDistributionSetTag(new DistributionSetTag("Tag1")); + final DistributionSetTag tag = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("Tag1")); final List assignedDS = distributionSetManagement.assignTag(assignDS, tag); assertThat(assignedDS.size()).as("assigned ds has wrong size").isEqualTo(4); @@ -171,17 +179,17 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { + "actions after canceling the second active action the first one is still running as it is not touched by the cancelation. After canceling the first one " + "also the target goes back to IN_SYNC as no open action is left.") public void manualCancelWithMultipleAssignmentsCancelLastOneFirst() { - Target target = new Target("4712"); - final DistributionSet dsFirst = TestDataUtil.generateDistributionSet("", softwareManagement, + JpaTarget target = new JpaTarget("4712"); + final JpaDistributionSet dsFirst = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement, true); dsFirst.setRequiredMigrationStep(true); - final DistributionSet dsSecond = TestDataUtil.generateDistributionSet("2", softwareManagement, + final JpaDistributionSet dsSecond = TestDataUtil.generateDistributionSet("2", softwareManagement, distributionSetManagement, true); - final DistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, + final JpaDistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, distributionSetManagement, true); - target.getTargetInfo().setInstalledDistributionSet(dsInstalled); - target = targetManagement.createTarget(target); + ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet(dsInstalled); + target = (JpaTarget) targetManagement.createTarget(target); // check initial status assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) @@ -201,7 +209,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // confirm cancellation secondAction.setStatus(Status.CANCELED); controllerManagement - .addCancelActionStatus(new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis())); + .addCancelActionStatus(new JpaActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis())); assertThat(actionStatusRepository.findAll()).as("wrong size of actions status").hasSize(4); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).as("wrong ds") .isEqualTo(dsFirst); @@ -215,7 +223,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // confirm cancellation firstAction.setStatus(Status.CANCELED); controllerManagement - .addCancelActionStatus(new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis())); + .addCancelActionStatus(new JpaActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis())); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(6); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) .as("wrong assigned ds").isEqualTo(dsInstalled); @@ -228,17 +236,17 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { + "actions after canceling the first active action the system switched to second one. After canceling this one " + "also the target goes back to IN_SYNC as no open action is left.") public void manualCancelWithMultipleAssignmentsCancelMiddleOneFirst() { - Target target = new Target("4712"); - final DistributionSet dsFirst = TestDataUtil.generateDistributionSet("", softwareManagement, + JpaTarget target = new JpaTarget("4712"); + final JpaDistributionSet dsFirst = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement, true); dsFirst.setRequiredMigrationStep(true); - final DistributionSet dsSecond = TestDataUtil.generateDistributionSet("2", softwareManagement, + final JpaDistributionSet dsSecond = TestDataUtil.generateDistributionSet("2", softwareManagement, distributionSetManagement, true); - final DistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, + final JpaDistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, distributionSetManagement, true); - target.getTargetInfo().setInstalledDistributionSet(dsInstalled); - target = targetManagement.createTarget(target); + ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet(dsInstalled); + target = (JpaTarget) targetManagement.createTarget(target); // check initial status assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) @@ -258,7 +266,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { firstAction = deploymentManagement.findActionWithDetails(firstAction.getId()); firstAction.setStatus(Status.CANCELED); controllerManagement - .addCancelActionStatus(new ActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis())); + .addCancelActionStatus(new JpaActionStatus(firstAction, Status.CANCELED, System.currentTimeMillis())); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(4); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) .as("wrong assigned ds").isEqualTo(dsSecond); @@ -275,7 +283,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // confirm cancellation secondAction.setStatus(Status.CANCELED); controllerManagement - .addCancelActionStatus(new ActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis())); + .addCancelActionStatus(new JpaActionStatus(secondAction, Status.CANCELED, System.currentTimeMillis())); // cancelled success -> back to dsInstalled assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()) .as("wrong installed ds").isEqualTo(dsInstalled); @@ -287,15 +295,15 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Description("Force Quit an Assignment. Expected behaviour is that the action is canceled and is marked as deleted. The assigned Software module") public void forceQuitSetActionToInactive() throws InterruptedException { - Target target = new Target("4712"); - final DistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, + JpaTarget target = new JpaTarget("4712"); + final JpaDistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, distributionSetManagement, true); - target.getTargetInfo().setInstalledDistributionSet(dsInstalled); - target = targetManagement.createTarget(target); + ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet(dsInstalled); + target = (JpaTarget) targetManagement.createTarget(target); - final DistributionSet ds = TestDataUtil - .generateDistributionSet("newDS", softwareManagement, distributionSetManagement, true) - .setRequiredMigrationStep(true); + final JpaDistributionSet ds = TestDataUtil.generateDistributionSet("newDS", softwareManagement, + distributionSetManagement, true); + ds.setRequiredMigrationStep(true); // verify initial status assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) @@ -307,7 +315,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { assertThat(actionRepository.findAll()).as("wrong size of action").hasSize(1); assertThat(actionStatusRepository.findAll()).as("wrong size of action status").hasSize(1); - target = targetManagement.findTargetByControllerID(target.getControllerId()); + target = (JpaTarget) targetManagement.findTargetByControllerID(target.getControllerId()); // force quit assignment deploymentManagement.cancelAction(assigningAction, target); @@ -329,15 +337,15 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Description("Force Quit an not canceled Assignment. Expected behaviour is that the action can not be force quit and there is thrown an exception.") public void forceQuitNotAllowedThrowsException() { - Target target = new Target("4712"); - final DistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, + JpaTarget target = new JpaTarget("4712"); + final JpaDistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, distributionSetManagement, true); - target.getTargetInfo().setInstalledDistributionSet(dsInstalled); - target = targetManagement.createTarget(target); + ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet(dsInstalled); + target = (JpaTarget) targetManagement.createTarget(target); - final DistributionSet ds = TestDataUtil - .generateDistributionSet("newDS", softwareManagement, distributionSetManagement, true) - .setRequiredMigrationStep(true); + final JpaDistributionSet ds = TestDataUtil.generateDistributionSet("newDS", softwareManagement, + distributionSetManagement, true); + ds.setRequiredMigrationStep(true); // verify initial status assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) @@ -357,7 +365,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { } } - private Action assignSet(final Target target, final DistributionSet ds) { + private Action assignSet(final JpaTarget target, final JpaDistributionSet ds) { deploymentManagement.assignDistributionSet(ds.getId(), new String[] { target.getControllerId() }); assertThat( targetManagement.findTargetByControllerID(target.getControllerId()).getTargetInfo().getUpdateStatus()) @@ -442,14 +450,14 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final List targets = targetManagement.createTargets(TestDataUtil.generateTargets(10)); final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); final SoftwareModule os = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "poky", "3.0.2", null, "")); final DistributionSet incomplete = distributionSetManagement.createDistributionSet( - new DistributionSet("incomplete", "v1", "", standardDsType, Lists.newArrayList(ah, jvm))); + new JpaDistributionSet("incomplete", "v1", "", standardDsType, Lists.newArrayList(ah, jvm))); try { deploymentManagement.assignDistributionSet(incomplete, targets); @@ -507,7 +515,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final List savedDeployedTargets = deploymentResult.getDeployedTargets(); // retrieving all Actions created by the assignDistributionSet call - final Page page = actionRepository.findAll(pageReq); + final Page page = actionRepository.findAll(pageReq); // and verify the number assertThat(page.getTotalElements()).as("wrong size of actions") .isEqualTo(noOfDeployedTargets * noOfDistributionSets); @@ -515,10 +523,10 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // only records retrieved from the DB can be evaluated to be sure that // all fields are // populated; - final Iterable allFoundTargets = targetRepository.findAll(); + final Iterable allFoundTargets = targetRepository.findAll(); - final Iterable deployedTargetsFromDB = targetRepository.findAll(deployedTargetIDs); - final Iterable undeployedTargetsFromDB = targetRepository.findAll(undeployedTargetIDs); + final Iterable deployedTargetsFromDB = targetRepository.findAll(deployedTargetIDs); + final Iterable undeployedTargetsFromDB = targetRepository.findAll(undeployedTargetIDs); // test that number of Targets assertThat(allFoundTargets.spliterator().getExactSizeIfKnown()).as("number of target is wrong") @@ -532,10 +540,12 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // test the content of different lists assertThat(allFoundTargets).as("content of founded target is wrong").containsAll(deployedTargetsFromDB) .containsAll(undeployedTargetsFromDB); - assertThat(deployedTargetsFromDB).as("content of deployed target is wrong").containsAll(savedDeployedTargets) - .doesNotContain(Iterables.toArray(undeployedTargetsFromDB, Target.class)); - assertThat(undeployedTargetsFromDB).as("content of undeployed target is wrong").containsAll(savedNakedTargets) - .doesNotContain(Iterables.toArray(deployedTargetsFromDB, Target.class)); + assertThat(deployedTargetsFromDB).as("content of deployed target is wrong") + .containsAll((Iterable) savedDeployedTargets) + .doesNotContain(Iterables.toArray(undeployedTargetsFromDB, JpaTarget.class)); + assertThat(undeployedTargetsFromDB).as("content of undeployed target is wrong") + .containsAll((Iterable) savedNakedTargets) + .doesNotContain(Iterables.toArray(deployedTargetsFromDB, JpaTarget.class)); // For each of the 4 targets 1 distribution sets gets assigned eventHandlerMock.getEvents(10, TimeUnit.SECONDS); @@ -557,9 +567,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final DeploymentResult deployResWithDsC = prepareComplexRepo("undep-C-T", 4, "dep-C-T", 6, 1, "dsC"); // keep a reference to the created DistributionSets - final DistributionSet dsA = deployResWithDsA.getDistributionSets().get(0); - final DistributionSet dsB = deployResWithDsB.getDistributionSets().get(0); - final DistributionSet dsC = deployResWithDsC.getDistributionSets().get(0); + final JpaDistributionSet dsA = (JpaDistributionSet) deployResWithDsA.getDistributionSets().get(0); + final JpaDistributionSet dsB = (JpaDistributionSet) deployResWithDsB.getDistributionSets().get(0); + final JpaDistributionSet dsC = (JpaDistributionSet) deployResWithDsC.getDistributionSets().get(0); // retrieving the UpdateActions created by the assignments actionRepository.findByDistributionSet(pageRequest, dsA).getContent().get(0); @@ -722,9 +732,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { private List sendUpdateActionStatusToTargets(final DistributionSet dsA, final Iterable targs, final Status status, final String... msgs) { - final List result = new ArrayList(); + final List result = new ArrayList<>(); for (final Target t : targs) { - final List findByTarget = actionRepository.findByTarget(t); + final List findByTarget = actionRepository.findByTarget((JpaTarget) t); for (final Action action : findByTarget) { result.add(sendUpdateActionStatusToTarget(status, action, t, msgs)); } @@ -736,7 +746,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final String... msgs) { updActA.setStatus(status); - final ActionStatus statusMessages = new ActionStatus(); + final ActionStatus statusMessages = new JpaActionStatus(); statusMessages.setAction(updActA); statusMessages.setOccurredAt(System.currentTimeMillis()); statusMessages.setStatus(status); @@ -751,14 +761,14 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Description("Testing if changing target and the status without refreshing the entities from the DB (e.g. concurrent changes from UI and from controller) works") public void alternatingAssignmentAndAddUpdateActionStatus() { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("a", softwareManagement, + final JpaDistributionSet dsA = TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); - final DistributionSet dsB = TestDataUtil.generateDistributionSet("b", softwareManagement, + final JpaDistributionSet dsB = TestDataUtil.generateDistributionSet("b", softwareManagement, distributionSetManagement); Target targ = targetManagement .createTarget(TestDataUtil.buildTargetFixture("target-id-A", "first description")); - List targs = new ArrayList(); + List targs = new ArrayList<>(); targs.add(targ); // doing the assignment @@ -786,7 +796,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final Page updAct = actionRepository.findByDistributionSet(pageReq, dsA); final Action action = updAct.getContent().get(0); action.setStatus(Status.FINISHED); - final ActionStatus statusMessage = new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), ""); + final ActionStatus statusMessage = new JpaActionStatus((JpaAction) action, Status.FINISHED, + System.currentTimeMillis(), ""); controllerManagament.addUpdateActionStatus(statusMessage); targ = targetManagement.findTargetByControllerID(targ.getControllerId()); @@ -842,7 +853,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Description("Tests the switch from a soft to hard update by API") public void forceSoftAction() { // prepare - final Target target = targetManagement.createTarget(new Target("knownControllerId")); + final Target target = targetManagement.createTarget(new JpaTarget("knownControllerId")); final DistributionSet ds = TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); // assign ds to create an action @@ -865,7 +876,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Description("Tests the switch from a hard to hard update by API, e.g. which in fact should not change anything.") public void forceAlreadyForcedActionNothingChanges() { // prepare - final Target target = targetManagement.createTarget(new Target("knownControllerId")); + final Target target = targetManagement.createTarget(new JpaTarget("knownControllerId")); final DistributionSet ds = TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); // assign ds to create an action @@ -919,8 +930,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { TestDataUtil.buildTargetFixtures(noOfDeployedTargets, deployedTargetPrefix, "first description")); // creating 10 DistributionSets - final List dsList = TestDataUtil.generateDistributionSets(distributionSetPrefix, - noOfDistributionSets, softwareManagement, distributionSetManagement); + final Collection dsList = (Collection) TestDataUtil.generateDistributionSets( + distributionSetPrefix, noOfDistributionSets, softwareManagement, distributionSetManagement); String time = String.valueOf(System.currentTimeMillis()); time = time.substring(time.length() - 5); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java index 8faae175e..3ed4e703e 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java @@ -12,6 +12,7 @@ import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.fail; import java.util.ArrayList; +import java.util.Collection; import java.util.Iterator; import java.util.List; @@ -24,6 +25,13 @@ import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityLockedException; import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException; import org.eclipse.hawkbit.repository.exception.UnsupportedSoftwareModuleForThisDistributionSetException; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -56,7 +64,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Tests the successfull module update of unused distribution set type which is in fact allowed.") public void updateUnassignedDistributionSetTypeModules() { DistributionSetType updatableType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("updatableType", "to be deleted", "")); + .createDistributionSetType(new JpaDistributionSetType("updatableType", "to be deleted", "")); assertThat(distributionSetManagement.findDistributionSetTypeByKey("updatableType").getMandatoryModuleTypes()) .isEmpty(); @@ -83,11 +91,11 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Tests the successfull update of used distribution set type meta data hich is in fact allowed.") public void updateAssignedDistributionSetTypeMetaData() { final DistributionSetType nonUpdatableType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("updatableType", "to be deletd", "")); + .createDistributionSetType(new JpaDistributionSetType("updatableType", "to be deletd", "")); assertThat(distributionSetManagement.findDistributionSetTypeByKey("updatableType").getMandatoryModuleTypes()) .isEmpty(); distributionSetManagement - .createDistributionSet(new DistributionSet("newtypesoft", "1", "", nonUpdatableType, null)); + .createDistributionSet(new JpaDistributionSet("newtypesoft", "1", "", nonUpdatableType, null)); nonUpdatableType.setDescription("a new description"); nonUpdatableType.setColour("test123"); @@ -104,11 +112,11 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Tests the unsuccessfull update of used distribution set type (module addition).") public void addModuleToAssignedDistributionSetTypeFails() { final DistributionSetType nonUpdatableType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("updatableType", "to be deletd", "")); + .createDistributionSetType(new JpaDistributionSetType("updatableType", "to be deletd", "")); assertThat(distributionSetManagement.findDistributionSetTypeByKey("updatableType").getMandatoryModuleTypes()) .isEmpty(); distributionSetManagement - .createDistributionSet(new DistributionSet("newtypesoft", "1", "", nonUpdatableType, null)); + .createDistributionSet(new JpaDistributionSet("newtypesoft", "1", "", nonUpdatableType, null)); nonUpdatableType.addMandatoryModuleType(osType); @@ -125,14 +133,14 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Tests the unsuccessfull update of used distribution set type (module removal).") public void removeModuleToAssignedDistributionSetTypeFails() { DistributionSetType nonUpdatableType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("updatableType", "to be deletd", "")); + .createDistributionSetType(new JpaDistributionSetType("updatableType", "to be deletd", "")); assertThat(distributionSetManagement.findDistributionSetTypeByKey("updatableType").getMandatoryModuleTypes()) .isEmpty(); nonUpdatableType.addMandatoryModuleType(osType); nonUpdatableType = distributionSetManagement.updateDistributionSetType(nonUpdatableType); distributionSetManagement - .createDistributionSet(new DistributionSet("newtypesoft", "1", "", nonUpdatableType, null)); + .createDistributionSet(new JpaDistributionSet("newtypesoft", "1", "", nonUpdatableType, null)); nonUpdatableType.removeModuleType(osType.getId()); try { @@ -146,8 +154,8 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Test @Description("Tests the successfull deletion of unused (hard delete) distribution set types.") public void deleteUnassignedDistributionSetType() { - final DistributionSetType hardDelete = distributionSetManagement - .createDistributionSetType(new DistributionSetType("deleted", "to be deleted", "")); + final JpaDistributionSetType hardDelete = (JpaDistributionSetType) distributionSetManagement + .createDistributionSetType(new JpaDistributionSetType("deleted", "to be deleted", "")); assertThat(distributionSetTypeRepository.findAll()).contains(hardDelete); distributionSetManagement.deleteDistributionSetType(hardDelete); @@ -158,11 +166,12 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Test @Description("Tests the successfull deletion of used (soft delete) distribution set types.") public void deleteAssignedDistributionSetType() { - final DistributionSetType softDelete = distributionSetManagement - .createDistributionSetType(new DistributionSetType("softdeleted", "to be deletd", "")); + final JpaDistributionSetType softDelete = (JpaDistributionSetType) distributionSetManagement + .createDistributionSetType(new JpaDistributionSetType("softdeleted", "to be deletd", "")); assertThat(distributionSetTypeRepository.findAll()).contains(softDelete); - distributionSetManagement.createDistributionSet(new DistributionSet("newtypesoft", "1", "", softDelete, null)); + distributionSetManagement + .createDistributionSet(new JpaDistributionSet("newtypesoft", "1", "", softDelete, null)); distributionSetManagement.deleteDistributionSetType(softDelete); assertThat(distributionSetManagement.findDistributionSetTypeByKey("softdeleted").isDeleted()).isEqualTo(true); @@ -185,7 +194,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Verfies that a DS is of default type if not specified explicitly at creation time.") public void createDistributionSetWithImplicitType() { final DistributionSet set = distributionSetManagement - .createDistributionSet(new DistributionSet("newtypesoft", "1", "", null, null)); + .createDistributionSet(new JpaDistributionSet("newtypesoft", "1", "", null, null)); assertThat(set.getType()).as("Type should be equal to default type of tenant") .isEqualTo(systemManagement.getTenantMetadata().getDefaultDsType()); @@ -198,7 +207,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { List sets = new ArrayList<>(); for (int i = 0; i < 10; i++) { - sets.add(new DistributionSet("another DS" + i, "X" + i, "", null, null)); + sets.add(new JpaDistributionSet("another DS" + i, "X" + i, "", null, null)); } sets = distributionSetManagement.createDistributionSets(sets); @@ -216,7 +225,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Verfies that a DS entity cannot be used for creation.") public void createDistributionSetFailsOnExistingEntity() { final DistributionSet set = distributionSetManagement - .createDistributionSet(new DistributionSet("newtypesoft", "1", "", null, null)); + .createDistributionSet(new JpaDistributionSet("newtypesoft", "1", "", null, null)); try { distributionSetManagement.createDistributionSet(set); @@ -235,8 +244,8 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { final DistributionSet ds = TestDataUtil.generateDistributionSet("testDs", softwareManagement, distributionSetManagement); - final DistributionSetMetadata metadata = new DistributionSetMetadata(knownKey, ds, knownValue); - final DistributionSetMetadata createdMetadata = distributionSetManagement + final DistributionSetMetadata metadata = new JpaDistributionSetMetadata(knownKey, ds, knownValue); + final JpaDistributionSetMetadata createdMetadata = (JpaDistributionSetMetadata) distributionSetManagement .createDistributionSetMetadata(metadata); assertThat(createdMetadata).isNotNull(); @@ -249,11 +258,11 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Ensures that updates concerning the internal software structure of a DS are not possible if the DS is already assigned.") public void updateDistributionSetForbiddedWithIllegalUpdate() { // prepare data - Target target = new Target("4711"); + Target target = new JpaTarget("4711"); target = targetManagement.createTarget(target); - SoftwareModule ah2 = new SoftwareModule(appType, "agent-hub2", "1.0.5", null, ""); - SoftwareModule os2 = new SoftwareModule(osType, "poky2", "3.0.3", null, ""); + SoftwareModule ah2 = new JpaSoftwareModule(appType, "agent-hub2", "1.0.5", null, ""); + SoftwareModule os2 = new JpaSoftwareModule(osType, "poky2", "3.0.3", null, ""); DistributionSet ds = TestDataUtil.generateDistributionSet("ds-1", softwareManagement, distributionSetManagement); @@ -303,8 +312,8 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that it is not possible to add a software module to a set that has no type defined.") public void updateDistributionSetModuleWithUndefinedTypeFails() { - final DistributionSet testSet = new DistributionSet(); - final SoftwareModule module = new SoftwareModule(appType, "agent-hub2", "1.0.5", null, ""); + final DistributionSet testSet = new JpaDistributionSet(); + final SoftwareModule module = new JpaSoftwareModule(appType, "agent-hub2", "1.0.5", null, ""); // update data try { @@ -318,9 +327,9 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that it is not possible to add a software module that is not defined of the DS's type.") public void updateDistributionSetUnsupportedModuleFails() { - final DistributionSet set = new DistributionSet("agent-hub2", "1.0.5", "desc", - new DistributionSetType("test", "test", "test").addMandatoryModuleType(osType), null); - final SoftwareModule module = new SoftwareModule(appType, "agent-hub2", "1.0.5", null, ""); + final DistributionSet set = new JpaDistributionSet("agent-hub2", "1.0.5", "desc", + new JpaDistributionSetType("test", "test", "test").addMandatoryModuleType(osType), null); + final SoftwareModule module = new JpaSoftwareModule(appType, "agent-hub2", "1.0.5", null, ""); // update data try { @@ -335,11 +344,11 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Legal updates of a DS, e.g. name or description and module addition, removal while still unassigned.") public void updateDistributionSet() { // prepare data - Target target = new Target("4711"); + Target target = new JpaTarget("4711"); target = targetManagement.createTarget(target); - SoftwareModule os2 = new SoftwareModule(osType, "poky2", "3.0.3", null, ""); - final SoftwareModule app2 = new SoftwareModule(appType, "app2", "3.0.3", null, ""); + SoftwareModule os2 = new JpaSoftwareModule(osType, "poky2", "3.0.3", null, ""); + final SoftwareModule app2 = new JpaSoftwareModule(appType, "app2", "3.0.3", null, ""); DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); @@ -387,7 +396,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { // create an DS meta data entry final DistributionSetMetadata dsMetadata = distributionSetManagement - .createDistributionSetMetadata(new DistributionSetMetadata(knownKey, ds, knownValue)); + .createDistributionSetMetadata(new JpaDistributionSetMetadata(knownKey, ds, knownValue)); DistributionSet changedLockRevisionDS = distributionSetManagement.findDistributionSetById(ds.getId()); assertThat(changedLockRevisionDS.getOptLockRevision()).isEqualTo(2L); @@ -400,7 +409,8 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { Thread.sleep(100); // update the DS metadata - final DistributionSetMetadata updated = distributionSetManagement.updateDistributionSetMetadata(dsMetadata); + final JpaDistributionSetMetadata updated = (JpaDistributionSetMetadata) distributionSetManagement + .updateDistributionSetMetadata(dsMetadata); // we are updating the sw meta data so also modifying the base software // module so opt lock // revision must be three @@ -419,13 +429,13 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Tests that a DS queue is possible where the result is ordered by the target assignment, i.e. assigned first in the list.") public void findDistributionSetsAllOrderedByLinkTarget() { - final List buildDistributionSets = TestDataUtil.generateDistributionSets("dsOrder", 10, + final List buildDistributionSets = TestDataUtil.generateDistributionSets("dsOrder", 10, softwareManagement, distributionSetManagement); final List buildTargetFixtures = targetManagement .createTargets(TestDataUtil.buildTargetFixtures(5, "tOrder", "someDesc")); - final Iterator dsIterator = buildDistributionSets.iterator(); + final Iterator dsIterator = buildDistributionSets.iterator(); final Iterator tIterator = buildTargetFixtures.iterator(); final DistributionSet dsFirst = dsIterator.next(); final DistributionSet dsSecond = dsIterator.next(); @@ -466,29 +476,29 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("searches for distribution sets based on the various filter options, e.g. name, version, desc., tags.") public void searchDistributionSetsOnFilters() { DistributionSetTag dsTagA = tagManagement - .createDistributionSetTag(new DistributionSetTag("DistributionSetTag-A")); + .createDistributionSetTag(new JpaDistributionSetTag("DistributionSetTag-A")); final DistributionSetTag dsTagB = tagManagement - .createDistributionSetTag(new DistributionSetTag("DistributionSetTag-B")); + .createDistributionSetTag(new JpaDistributionSetTag("DistributionSetTag-B")); final DistributionSetTag dsTagC = tagManagement - .createDistributionSetTag(new DistributionSetTag("DistributionSetTag-C")); + .createDistributionSetTag(new JpaDistributionSetTag("DistributionSetTag-C")); final DistributionSetTag dsTagD = tagManagement - .createDistributionSetTag(new DistributionSetTag("DistributionSetTag-D")); + .createDistributionSetTag(new JpaDistributionSetTag("DistributionSetTag-D")); - List ds100Group1 = TestDataUtil.generateDistributionSets("", 100, softwareManagement, - distributionSetManagement); - List ds100Group2 = TestDataUtil.generateDistributionSets("test2", 100, softwareManagement, - distributionSetManagement); + Collection ds100Group1 = (Collection) TestDataUtil.generateDistributionSets("", 100, + softwareManagement, distributionSetManagement); + Collection ds100Group2 = (Collection) TestDataUtil.generateDistributionSets("test2", 100, + softwareManagement, distributionSetManagement); DistributionSet dsDeleted = TestDataUtil.generateDistributionSet("deleted", softwareManagement, distributionSetManagement); final DistributionSet dsInComplete = distributionSetManagement - .createDistributionSet(new DistributionSet("notcomplete", "1", "", standardDsType, null)); + .createDistributionSet(new JpaDistributionSet("notcomplete", "1", "", standardDsType, null)); - final DistributionSetType newType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("foo", "bar", "test").addMandatoryModuleType(osType) + final DistributionSetType newType = distributionSetManagement.createDistributionSetType( + new JpaDistributionSetType("foo", "bar", "test").addMandatoryModuleType(osType) .addOptionalModuleType(appType).addOptionalModuleType(runtimeType)); final DistributionSet dsNewType = distributionSetManagement - .createDistributionSet(new DistributionSet("newtype", "1", "", newType, dsDeleted.getModules())); + .createDistributionSet(new JpaDistributionSet("newtype", "1", "", newType, dsDeleted.getModules())); deploymentManagement.assignDistributionSet(dsDeleted, targetManagement.createTargets(Lists.newArrayList(TestDataUtil.generateTargets(5)))); @@ -705,7 +715,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { final Status status, final String... msgs) { final List result = new ArrayList<>(); for (final Target t : targs) { - final List findByTarget = actionRepository.findByTarget(t); + final List findByTarget = actionRepository.findByTarget((JpaTarget) t); for (final Action action : findByTarget) { result.add(sendUpdateActionStatusToTarget(status, action, t, msgs)); } @@ -753,14 +763,14 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { for (int index = 0; index < 10; index++) { ds1 = distributionSetManagement - .createDistributionSetMetadata(new DistributionSetMetadata("key" + index, ds1, "value" + index)) + .createDistributionSetMetadata(new JpaDistributionSetMetadata("key" + index, ds1, "value" + index)) .getDistributionSet(); } for (int index = 0; index < 20; index++) { ds2 = distributionSetManagement - .createDistributionSetMetadata(new DistributionSetMetadata("key" + index, ds2, "value" + index)) + .createDistributionSetMetadata(new JpaDistributionSetMetadata("key" + index, ds2, "value" + index)) .getDistributionSet(); } @@ -794,7 +804,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { // create assigned DS dsAssigned = distributionSetManagement.findDistributionSetByNameAndVersion(dsAssigned.getName(), dsAssigned.getVersion()); - final Target target = new Target("4712"); + final Target target = new JpaTarget("4712"); final Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList<>(); toAssign.add(savedTarget); @@ -814,7 +824,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { final String... msgs) { updActA.setStatus(status); - final ActionStatus statusMessages = new ActionStatus(); + final ActionStatus statusMessages = new JpaActionStatus(); statusMessages.setAction(updActA); statusMessages.setOccurredAt(System.currentTimeMillis()); statusMessages.setStatus(status); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java index e41491962..0a18c0b03 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java @@ -29,13 +29,16 @@ import org.eclipse.hawkbit.report.model.DataReportSeriesItem; import org.eclipse.hawkbit.report.model.InnerOuterDataReportSeries; import org.eclipse.hawkbit.report.model.SeriesTime; import org.eclipse.hawkbit.repository.ReportManagement.DateTypes; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.junit.After; import org.junit.Test; @@ -83,7 +86,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { for (int month = 0; month < maxMonthBackAmountCreateTargets; month++) { dynamicDateTimeProvider.nowMinusMonths(month); - targetManagement.createTarget(new Target("t" + month)); + targetManagement.createTarget(new JpaTarget("t" + month)); } final LocalDateTime to = LocalDateTime.now(); @@ -105,7 +108,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { // check cache evict for (int month = 0; month < maxMonthBackAmountCreateTargets; month++) { dynamicDateTimeProvider.nowMinusMonths(month); - targetManagement.createTarget(new Target("t2" + month)); + targetManagement.createTarget(new JpaTarget("t2" + month)); } targetsCreatedOverPeriod = reportManagement.targetsCreatedOverPeriod(DateTypes.perMonth(), from, to); for (final DataReportSeriesItem reportItem : targetsCreatedOverPeriod.getData()) { @@ -135,7 +138,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { for (int month = 0; month < maxMonthBackAmountCreateTargets; month++) { dynamicDateTimeProvider.nowMinusMonths(month); - final Target createTarget = targetManagement.createTarget(new Target("t" + month)); + final Target createTarget = targetManagement.createTarget(new JpaTarget("t" + month)); final DistributionSetAssignmentResult result = deploymentManagement.assignDistributionSet(distributionSet, Lists.newArrayList(createTarget)); controllerManagament.registerRetrieved( @@ -157,7 +160,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { // check cache evict for (int month = 0; month < maxMonthBackAmountCreateTargets; month++) { dynamicDateTimeProvider.nowMinusMonths(month); - final Target createTarget = targetManagement.createTarget(new Target("t2" + month)); + final Target createTarget = targetManagement.createTarget(new JpaTarget("t2" + month)); final DistributionSetAssignmentResult result = deploymentManagement.assignDistributionSet(distributionSet, Lists.newArrayList(createTarget)); controllerManagament.registerRetrieved( @@ -174,18 +177,18 @@ public class ReportManagementTest extends AbstractIntegrationTest { @Test @Description("Tests correct statistics calculation including a correct cache evict.") public void distributionUsageInstalled() { - final Target knownTarget1 = targetManagement.createTarget(new Target("t1")); - final Target knownTarget2 = targetManagement.createTarget(new Target("t2")); - final Target knownTarget3 = targetManagement.createTarget(new Target("t3")); - final Target knownTarget4 = targetManagement.createTarget(new Target("t4")); - final Target knownTarget5 = targetManagement.createTarget(new Target("t5")); + final Target knownTarget1 = targetManagement.createTarget(new JpaTarget("t1")); + final Target knownTarget2 = targetManagement.createTarget(new JpaTarget("t2")); + final Target knownTarget3 = targetManagement.createTarget(new JpaTarget("t3")); + final Target knownTarget4 = targetManagement.createTarget(new JpaTarget("t4")); + final Target knownTarget5 = targetManagement.createTarget(new JpaTarget("t5")); final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); final SoftwareModule os = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "poky", "3.0.2", null, "")); final DistributionSet distributionSet1 = distributionSetManagement .createDistributionSet(TestDataUtil.buildDistributionSet("ds1", "0.0.0", standardDsType, os, jvm, ah)); @@ -250,7 +253,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { } // Test cache evict - final Target knownTarget6 = targetManagement.createTarget(new Target("t6")); + final Target knownTarget6 = targetManagement.createTarget(new JpaTarget("t6")); deploymentManagement.assignDistributionSet(distributionSet1.getId(), knownTarget6.getControllerId()); sendUpdateActionStatusToTargets(distributionSet1, Lists.newArrayList(knownTarget6), Status.FINISHED, "some message"); @@ -349,17 +352,17 @@ public class ReportManagementTest extends AbstractIntegrationTest { @Description("Tests correct statistics calculation including a correct cache evict.") public void topXDistributionUsage() { - final Target knownTarget1 = targetManagement.createTarget(new Target("t1")); - final Target knownTarget2 = targetManagement.createTarget(new Target("t2")); - final Target knownTarget3 = targetManagement.createTarget(new Target("t3")); - final Target knownTarget4 = targetManagement.createTarget(new Target("t4")); + final Target knownTarget1 = targetManagement.createTarget(new JpaTarget("t1")); + final Target knownTarget2 = targetManagement.createTarget(new JpaTarget("t2")); + final Target knownTarget3 = targetManagement.createTarget(new JpaTarget("t3")); + final Target knownTarget4 = targetManagement.createTarget(new JpaTarget("t4")); final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); final SoftwareModule os = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "poky", "3.0.2", null, "")); final DistributionSet distributionSet1 = distributionSetManagement .createDistributionSet(TestDataUtil.buildDistributionSet("ds1", "0.0.0", standardDsType, os, jvm, ah)); @@ -419,7 +422,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { } // test cache evict - final Target knownTarget5 = targetManagement.createTarget(new Target("t5")); + final Target knownTarget5 = targetManagement.createTarget(new JpaTarget("t5")); deploymentManagement.assignDistributionSet(distributionSet1.getId(), knownTarget5.getControllerId()); distributionUsage = reportManagement.distributionUsageAssigned(100); for (final InnerOuterDataReportSeries innerOuterDataReportSeries : distributionUsage) { @@ -490,7 +493,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { // create targets for another tenant securityRule.runAs(WithSpringAuthorityRule.withUserAndTenant("user", "anotherTenant"), () -> { for (int index = 0; index < targetCreateAmount; index++) { - targetManagement.createTarget(new Target("t" + index)); + targetManagement.createTarget(new JpaTarget("t" + index)); } return null; }); @@ -513,10 +516,10 @@ public class ReportManagementTest extends AbstractIntegrationTest { private void createTargets(final String prefix, final int amount, final LocalDateTime lastTargetQuery) { for (int index = 0; index < amount; index++) { - final Target target = new Target(prefix + index); - final Target createTarget = targetManagement.createTarget(target); + final Target target = new JpaTarget(prefix + index); + final JpaTarget createTarget = (JpaTarget) targetManagement.createTarget(target); if (lastTargetQuery != null) { - final TargetInfo targetInfo = createTarget.getTargetInfo(); + final JpaTargetInfo targetInfo = (JpaTargetInfo) createTarget.getTargetInfo(); targetInfo.setNew(false); targetInfo .setLastTargetQuery(lastTargetQuery.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); @@ -527,9 +530,9 @@ public class ReportManagementTest extends AbstractIntegrationTest { private void createTargetsWithStatus(final String prefix, final long amount, final TargetUpdateStatus status) { for (int index = 0; index < amount; index++) { - final Target target = new Target(prefix + index); + final JpaTarget target = new JpaTarget(prefix + index); final Target sTarget = targetRepository.save(target); - final TargetInfo targetInfo = sTarget.getTargetInfo(); + final JpaTargetInfo targetInfo = (JpaTargetInfo) sTarget.getTargetInfo(); targetInfo.setUpdateStatus(status); targetInfoRepository.save(targetInfo); } @@ -537,9 +540,9 @@ public class ReportManagementTest extends AbstractIntegrationTest { private List sendUpdateActionStatusToTargets(final DistributionSet dsA, final Iterable targs, final Status status, final String... msgs) { - final List result = new ArrayList(); + final List result = new ArrayList<>(); for (final Target t : targs) { - final List findByTarget = actionRepository.findByTarget(t); + final List findByTarget = actionRepository.findByTarget((JpaTarget) t); for (final Action action : findByTarget) { result.add(sendUpdateActionStatusToTarget(status, action, t, msgs)); } @@ -551,7 +554,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { final String... msgs) { updActA.setStatus(status); - final ActionStatus statusMessages = new ActionStatus(); + final ActionStatus statusMessages = new JpaActionStatus(); statusMessages.setAction(updActA); statusMessages.setOccurredAt(System.currentTimeMillis()); statusMessages.setStatus(status); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java index 88bb26616..e56ce6cd5 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java @@ -19,23 +19,26 @@ import java.util.concurrent.Callable; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupConditions; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; -import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorAction; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.utils.MultipleInvokeHelper; import org.eclipse.hawkbit.repository.utils.SuccessCondition; import org.junit.Test; @@ -45,7 +48,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; -import org.springframework.data.jpa.domain.Specification; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; @@ -135,10 +137,10 @@ public class RolloutManagementTest extends AbstractIntegrationTest { Status.RUNNING); // finish one action should be sufficient due the finish condition is at // 50% - final Action action = runningActions.get(0); + final JpaAction action = (JpaAction) runningActions.get(0); action.setStatus(Status.FINISHED); controllerManagament - .addUpdateActionStatus(new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "")); + .addUpdateActionStatus(new JpaActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "")); // check running rollouts again, now the finish condition should be hit // and should start the next group @@ -179,8 +181,8 @@ public class RolloutManagementTest extends AbstractIntegrationTest { // finish actions with error for (final Action action : runningActions) { action.setStatus(Status.ERROR); - controllerManagament - .addUpdateActionStatus(new ActionStatus(action, Status.ERROR, System.currentTimeMillis(), "")); + controllerManagament.addUpdateActionStatus( + new JpaActionStatus((JpaAction) action, Status.ERROR, System.currentTimeMillis(), "")); } // check running rollouts again, now the error condition should be hit @@ -221,8 +223,8 @@ public class RolloutManagementTest extends AbstractIntegrationTest { // finish actions with error for (final Action action : runningActions) { action.setStatus(Status.ERROR); - controllerManagament - .addUpdateActionStatus(new ActionStatus(action, Status.ERROR, System.currentTimeMillis(), "")); + controllerManagament.addUpdateActionStatus( + new JpaActionStatus((JpaAction) action, Status.ERROR, System.currentTimeMillis(), "")); } // check running rollouts again, now the error condition should be hit @@ -835,25 +837,24 @@ public class RolloutManagementTest extends AbstractIntegrationTest { targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountOtherTargets, "others-", "rollout")); final String rsqlParam = "controllerId==*MyRoll*"; - final Specification rsqlSpecification = RSQLUtility.parse(rsqlParam, TargetFields.class); rolloutManagement.startRollout(myRollout); myRollout = rolloutManagement.findRolloutById(myRollout.getId()); final List rolloutGroups = myRollout.getRolloutGroups(); - Page targetPage = rolloutGroupManagement.findRolloutGroupTargets(rolloutGroups.get(0), - rsqlSpecification, new OffsetBasedPageRequest(0, 100, new Sort(Direction.ASC, "controllerId"))); + Page targetPage = rolloutGroupManagement.findRolloutGroupTargets(rolloutGroups.get(0), rsqlParam, + new OffsetBasedPageRequest(0, 100, new Sort(Direction.ASC, "controllerId"))); final List targetlistGroup1 = targetPage.getContent(); assertThat(targetlistGroup1.size()).isEqualTo(5); assertThat(targetlistGroup1.get(0).getControllerId()).isEqualTo("MyRollout--00000"); - targetPage = rolloutGroupManagement.findRolloutGroupTargets(rolloutGroups.get(1), rsqlSpecification, + targetPage = rolloutGroupManagement.findRolloutGroupTargets(rolloutGroups.get(1), rsqlParam, new OffsetBasedPageRequest(0, 100, new Sort(Direction.DESC, "controllerId"))); final List targetlistGroup2 = targetPage.getContent(); assertThat(targetlistGroup2.size()).isEqualTo(5); assertThat(targetlistGroup2.get(0).getControllerId()).isEqualTo("MyRollout--00009"); - targetPage = rolloutGroupManagement.findRolloutGroupTargets(rolloutGroups.get(2), rsqlSpecification, + targetPage = rolloutGroupManagement.findRolloutGroupTargets(rolloutGroups.get(2), rsqlParam, new OffsetBasedPageRequest(0, 100, new Sort(Direction.ASC, "controllerId"))); final List targetlistGroup3 = targetPage.getContent(); assertThat(targetlistGroup3.size()).isEqualTo(5); @@ -875,11 +876,11 @@ public class RolloutManagementTest extends AbstractIntegrationTest { softwareManagement, distributionSetManagement); targetManagement.createTargets( TestDataUtil.buildTargetFixtures(amountTargetsForRollout, targetPrefixName + "-", targetPrefixName)); - final RolloutGroupConditions conditions = new RolloutGroup.RolloutGroupConditionBuilder() + final RolloutGroupConditions conditions = new JpaRolloutGroup.RolloutGroupConditionBuilder() .successCondition(RolloutGroupSuccessCondition.THRESHOLD, successCondition) .errorCondition(RolloutGroupErrorCondition.THRESHOLD, errorCondition) .errorAction(RolloutGroupErrorAction.PAUSE, null).build(); - Rollout myRollout = new Rollout(); + Rollout myRollout = new JpaRollout(); myRollout.setName(rolloutName); myRollout.setDescription("This is a test description for the rollout"); myRollout.setTargetFilterQuery("controllerId==" + targetPrefixName + "-*"); @@ -933,11 +934,11 @@ public class RolloutManagementTest extends AbstractIntegrationTest { final int amountOtherTargets, final int groupSize, final String successCondition, final String errorCondition) { final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); final SoftwareModule os = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "poky", "3.0.2", null, "")); final DistributionSet rolloutDS = distributionSetManagement.createDistributionSet( TestDataUtil.buildDistributionSet("rolloutDS", "0.0.0", standardDsType, os, jvm, ah)); targetManagement @@ -962,11 +963,11 @@ public class RolloutManagementTest extends AbstractIntegrationTest { private Rollout createRolloutByVariables(final String rolloutName, final String rolloutDescription, final int groupSize, final String filterQuery, final DistributionSet distributionSet, final String successCondition, final String errorCondition) { - final RolloutGroupConditions conditions = new RolloutGroup.RolloutGroupConditionBuilder() + final RolloutGroupConditions conditions = new JpaRolloutGroup.RolloutGroupConditionBuilder() .successCondition(RolloutGroupSuccessCondition.THRESHOLD, successCondition) .errorCondition(RolloutGroupErrorCondition.THRESHOLD, errorCondition) .errorAction(RolloutGroupErrorAction.PAUSE, null).build(); - final Rollout rolloutToCreate = new Rollout(); + final Rollout rolloutToCreate = new JpaRollout(); rolloutToCreate.setName(rolloutName); rolloutToCreate.setDescription(rolloutDescription); rolloutToCreate.setTargetFilterQuery(filterQuery); @@ -978,8 +979,8 @@ public class RolloutManagementTest extends AbstractIntegrationTest { final List runningActions = deploymentManagement.findActionsByRolloutAndStatus(rollout, Status.RUNNING); for (final Action action : runningActions) { action.setStatus(status); - controllerManagament - .addUpdateActionStatus(new ActionStatus(action, status, System.currentTimeMillis(), "")); + controllerManagament.addUpdateActionStatus( + new JpaActionStatus((JpaAction) action, status, System.currentTimeMillis(), "")); } return runningActions.size(); } @@ -990,12 +991,12 @@ public class RolloutManagementTest extends AbstractIntegrationTest { assertThat(runningActions.size()).isGreaterThanOrEqualTo(amountOfTargetsToGetChanged); for (int i = 0; i < amountOfTargetsToGetChanged; i++) { controllerManagament.addUpdateActionStatus( - new ActionStatus(runningActions.get(i), status, System.currentTimeMillis(), "")); + new JpaActionStatus((JpaAction) runningActions.get(i), status, System.currentTimeMillis(), "")); } return runningActions.size(); } - private Map createInitStatusMap() { + private static Map createInitStatusMap() { final Map map = new HashMap<>(); for (final TotalTargetCountStatus.Status status : TotalTargetCountStatus.Status.values()) { map.put(status, 0L); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java index 04eccb13e..300fe78dc 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java @@ -26,16 +26,22 @@ import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaLocalArtifact; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.junit.Test; @@ -59,7 +65,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Try to update non updatable fields results in repository doing nothing.") public void updateTypeNonUpdateableFieldsFails() { final SoftwareModuleType created = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test-key", "test-name", "test-desc", 1)); + .createSoftwareModuleType(new JpaSoftwareModuleType("test-key", "test-name", "test-desc", 1)); created.setName("a new name"); final SoftwareModuleType updated = softwareManagement.updateSoftwareModuleType(created); @@ -73,7 +79,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Calling update without changing fields results in no recorded change in the repository including unchanged audit fields.") public void updateNothingResultsInUnchangedRepositoryForType() { final SoftwareModuleType created = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test-key", "test-name", "test-desc", 1)); + .createSoftwareModuleType(new JpaSoftwareModuleType("test-key", "test-name", "test-desc", 1)); final SoftwareModuleType updated = softwareManagement.updateSoftwareModuleType(created); @@ -86,7 +92,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Calling update for changed fields results in change in the repository.") public void updateSoftareModuleTypeFieldsToNewValue() { final SoftwareModuleType created = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test-key", "test-name", "test-desc", 1)); + .createSoftwareModuleType(new JpaSoftwareModuleType("test-key", "test-name", "test-desc", 1)); created.setDescription("changed"); created.setColour("changed"); @@ -103,7 +109,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Try to update non updatable fields results in repository doing nothing.") public void updateNonUpdateableFieldsFails() { final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); ah.setName("a new name"); final SoftwareModule updated = softwareManagement.updateSoftwareModule(ah); @@ -117,7 +123,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Calling update without changing fields results in no recorded change in the repository including unchanged audit fields.") public void updateNothingResultsInUnchangedRepository() { final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); final SoftwareModule updated = softwareManagement.updateSoftwareModule(ah); @@ -130,7 +136,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Calling update for changed fields results in change in the repository.") public void updateSoftareModuleFieldsToNewValue() { final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", "test desc", "test vendor")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", "test desc", "test vendor")); ah.setDescription("changed"); ah.setVendor("changed"); @@ -146,7 +152,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Create Software Module call fails when called for existing entity.") public void createModuleCallFailsForExistingModule() { final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", "test desc", "test vendor")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", "test desc", "test vendor")); try { softwareManagement.createSoftwareModule(ah); fail("Should not have worked as module already exists."); @@ -159,8 +165,8 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Create Software Modules call fails when called for existing entities.") public void createModulesCallFailsForExistingModule() { final List modules = softwareManagement.createSoftwareModule( - Lists.newArrayList(new SoftwareModule(appType, "agent-hub", "1.0.1", "test desc", "test vendor"), - new SoftwareModule(appType, "agent-hub", "1.0.2", "test desc", "test vendor"))); + Lists.newArrayList(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", "test desc", "test vendor"), + new JpaSoftwareModule(appType, "agent-hub", "1.0.2", "test desc", "test vendor"))); try { softwareManagement.createSoftwareModule(modules); fail("Should not have worked as module already exists."); @@ -173,7 +179,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Create Software Module Type call fails when called for existing entity.") public void createModuleTypeCallFailsForExistingType() { final SoftwareModuleType created = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test-key", "test-name", "test-desc", 1)); + .createSoftwareModuleType(new JpaSoftwareModuleType("test-key", "test-name", "test-desc", 1)); try { softwareManagement.createSoftwareModuleType(created); @@ -187,8 +193,8 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Create Software Module Types call fails when called for existing entities.") public void createModuleTypesCallFailsForExistingTypes() { final List created = softwareManagement.createSoftwareModuleType( - Lists.newArrayList(new SoftwareModuleType("test-key-bumlux", "test-name", "test-desc", 1), - new SoftwareModuleType("test-key-bumlux2", "test-name2", "test-desc", 1))); + Lists.newArrayList(new JpaSoftwareModuleType("test-key-bumlux", "test-name", "test-desc", 1), + new JpaSoftwareModuleType("test-key-bumlux2", "test-name2", "test-desc", 1))); try { softwareManagement.createSoftwareModuleType(created); @@ -202,7 +208,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Calling update for changing fields to null results in change in the repository.") public void eraseSoftareModuleFields() { final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", "test desc", "test vendor")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", "test desc", "test vendor")); ah.setDescription(null); ah.setVendor(null); @@ -218,19 +224,19 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("searched for software modules based on the various filter options, e.g. name,desc,type, version.") public void findSoftwareModuleByFilters() { final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); final SoftwareModule os = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "poky", "3.0.2", null, "")); final SoftwareModule ah2 = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.2", null, "")); - DistributionSet ds = distributionSetManagement.createDistributionSet( + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.2", null, "")); + JpaDistributionSet ds = (JpaDistributionSet) distributionSetManagement.createDistributionSet( TestDataUtil.buildDistributionSet("ds-1", "1.0.1", standardDsType, os, jvm, ah2)); - final Target target = targetManagement.createTarget(new Target("test123")); - ds = assignSet(target, ds).getDistributionSet(); + final JpaTarget target = (JpaTarget) targetManagement.createTarget(new JpaTarget("test123")); + ds = (JpaDistributionSet) assignSet(target, ds).getDistributionSet(); // standard searches assertThat(softwareManagement.findSoftwareModuleByFilters(pageReq, "poky", osType).getContent()).hasSize(1); @@ -254,7 +260,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { .isEqualTo(ah); } - private Action assignSet(final Target target, final DistributionSet ds) { + private Action assignSet(final JpaTarget target, final JpaDistributionSet ds) { deploymentManagement.assignDistributionSet(ds.getId(), new String[] { target.getControllerId() }); assertThat( targetManagement.findTargetByControllerID(target.getControllerId()).getTargetInfo().getUpdateStatus()) @@ -272,10 +278,10 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { final List modules = new ArrayList<>(); - modules.add(softwareManagement.createSoftwareModule(new SoftwareModule(osType, "poky-una", "3.0.2", null, "")) - .getId()); - modules.add(softwareManagement.createSoftwareModule(new SoftwareModule(osType, "poky-u2na", "3.0.3", null, "")) - .getId()); + modules.add(softwareManagement + .createSoftwareModule(new JpaSoftwareModule(osType, "poky-una", "3.0.2", null, "")).getId()); + modules.add(softwareManagement + .createSoftwareModule(new JpaSoftwareModule(osType, "poky-u2na", "3.0.3", null, "")).getId()); modules.add(624355263L); assertThat(softwareManagement.findSoftwareModulesById(modules)).hasSize(2); @@ -286,13 +292,13 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { public void findSoftwareModulesByType() { // found in test final SoftwareModule one = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "one", "one", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "one", "one", null, "")); final SoftwareModule two = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "two", "two", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "two", "two", null, "")); // ignored softwareManagement.deleteSoftwareModule( - softwareManagement.createSoftwareModule(new SoftwareModule(osType, "deleted", "deleted", null, ""))); - softwareManagement.createSoftwareModule(new SoftwareModule(appType, "three", "3.0.2", null, "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(osType, "deleted", "deleted", null, ""))); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(appType, "three", "3.0.2", null, "")); assertThat(softwareManagement.findSoftwareModulesByType(pageReq, osType).getContent()) .as("Expected to find the following number of modules:").hasSize(2).as("with the following elements") @@ -303,11 +309,11 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Counts all software modules in the repsitory that are not marked as deleted.") public void countSoftwareModulesAll() { // found in test - softwareManagement.createSoftwareModule(new SoftwareModule(osType, "one", "one", null, "")); - softwareManagement.createSoftwareModule(new SoftwareModule(appType, "two", "two", null, "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(osType, "one", "one", null, "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(appType, "two", "two", null, "")); // ignored softwareManagement.deleteSoftwareModule( - softwareManagement.createSoftwareModule(new SoftwareModule(osType, "deleted", "deleted", null, ""))); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(osType, "deleted", "deleted", null, ""))); assertThat(softwareManagement.countSoftwareModulesAll()).as("Expected to find the following number of modules:") .isEqualTo(2); @@ -317,13 +323,13 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Counts for software modules by type.") public void countSoftwareModulesByType() { // found in test - softwareManagement.createSoftwareModule(new SoftwareModule(osType, "one", "one", null, "")); - softwareManagement.createSoftwareModule(new SoftwareModule(osType, "two", "two", null, "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(osType, "one", "one", null, "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(osType, "two", "two", null, "")); // ignored softwareManagement.deleteSoftwareModule( - softwareManagement.createSoftwareModule(new SoftwareModule(osType, "deleted", "deleted", null, ""))); - softwareManagement.createSoftwareModule(new SoftwareModule(appType, "three", "3.0.2", null, "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(osType, "deleted", "deleted", null, ""))); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(appType, "three", "3.0.2", null, "")); assertThat(softwareManagement.countSoftwareModulesByType(osType)) .as("Expected to find the following number of modules:").isEqualTo(2); @@ -336,7 +342,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { appType); SoftwareModuleType type = softwareManagement.createSoftwareModuleType( - new SoftwareModuleType("bundle", "OSGi Bundle", "fancy stuff", Integer.MAX_VALUE)); + new JpaSoftwareModuleType("bundle", "OSGi Bundle", "fancy stuff", Integer.MAX_VALUE)); assertThat(softwareManagement.findSoftwareModuleTypesAll(pageReq)).hasSize(4).contains(osType, runtimeType, appType, type); @@ -345,23 +351,25 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { softwareManagement.deleteSoftwareModuleType(type); assertThat(softwareManagement.findSoftwareModuleTypesAll(pageReq)).hasSize(3).contains(osType, runtimeType, appType); - assertThat(softwareModuleTypeRepository.findAll()).hasSize(3).contains(osType, runtimeType, appType); + assertThat(softwareModuleTypeRepository.findAll()).hasSize(3).contains((JpaSoftwareModuleType) osType, + (JpaSoftwareModuleType) runtimeType, (JpaSoftwareModuleType) appType); type = softwareManagement.createSoftwareModuleType( - new SoftwareModuleType("bundle2", "OSGi Bundle2", "fancy stuff", Integer.MAX_VALUE)); + new JpaSoftwareModuleType("bundle2", "OSGi Bundle2", "fancy stuff", Integer.MAX_VALUE)); assertThat(softwareManagement.findSoftwareModuleTypesAll(pageReq)).hasSize(4).contains(osType, runtimeType, appType, type); softwareManagement - .createSoftwareModule(new SoftwareModule(type, "Test SM", "1.0", "cool module", "from meeee")); + .createSoftwareModule(new JpaSoftwareModule(type, "Test SM", "1.0", "cool module", "from meeee")); // delete assigned softwareManagement.deleteSoftwareModuleType(type); assertThat(softwareManagement.findSoftwareModuleTypesAll(pageReq)).hasSize(3).contains(osType, runtimeType, appType); - assertThat(softwareModuleTypeRepository.findAll()).hasSize(4).contains(osType, runtimeType, appType, + assertThat(softwareModuleTypeRepository.findAll()).hasSize(4).contains((JpaSoftwareModuleType) osType, + (JpaSoftwareModuleType) runtimeType, (JpaSoftwareModuleType) appType, softwareModuleTypeRepository.findOne(type.getId())); } @@ -397,7 +405,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // Init DistributionSet final DistributionSet disSet = distributionSetManagement - .createDistributionSet(new DistributionSet("ds1", "v1.0", "test ds", standardDsType, null)); + .createDistributionSet(new JpaDistributionSet("ds1", "v1.0", "test ds", standardDsType, null)); // [STEP1]: Create SoftwareModuleX with ArtifactX SoftwareModule assignedModule = createSoftwareModuleWithArtifacts(osType, "moduleX", "3.0.2", 2); @@ -431,9 +439,9 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { public void softDeleteOfHistoricalAssignedArtifact() { // Init target and DistributionSet - final Target target = targetManagement.createTarget(new Target("test123")); + final Target target = targetManagement.createTarget(new JpaTarget("test123")); final DistributionSet disSet = distributionSetManagement - .createDistributionSet(new DistributionSet("ds1", "v1.0", "test ds", standardDsType, null)); + .createDistributionSet(new JpaDistributionSet("ds1", "v1.0", "test ds", standardDsType, null)); // [STEP1]: Create SoftwareModuleX and include the new ArtifactX SoftwareModule assignedModule = createSoftwareModuleWithArtifacts(osType, "moduleX", "3.0.2", 2); @@ -525,11 +533,11 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // Init artifact binary data, target and DistributionSets final byte[] source = RandomUtils.nextBytes(1024); - final Target target = targetManagement.createTarget(new Target("test123")); + final Target target = targetManagement.createTarget(new JpaTarget("test123")); final DistributionSet disSetX = distributionSetManagement - .createDistributionSet(new DistributionSet("dsX", "v1.0", "test dsX", standardDsType, null)); + .createDistributionSet(new JpaDistributionSet("dsX", "v1.0", "test dsX", standardDsType, null)); final DistributionSet disSetY = distributionSetManagement - .createDistributionSet(new DistributionSet("dsY", "v1.0", "test dsY", standardDsType, null)); + .createDistributionSet(new JpaDistributionSet("dsY", "v1.0", "test dsY", standardDsType, null)); // [STEP1]: Create SoftwareModuleX and add a new ArtifactX SoftwareModule moduleX = createSoftwareModuleWithArtifacts(osType, "modulex", "v1.0", 0); @@ -587,8 +595,8 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { final long countSoftwareModule = softwareModuleRepository.count(); // create SoftwareModule - SoftwareModule softwareModule = softwareManagement - .createSoftwareModule(new SoftwareModule(type, name, version, "description of artifact " + name, "")); + SoftwareModule softwareModule = softwareManagement.createSoftwareModule( + new JpaSoftwareModule(type, name, version, "description of artifact " + name, "")); for (int i = 0; i < numberArtifacts; i++) { artifactManagement.createLocalArtifact(new RandomGeneratedInputStream(5 * 1024), softwareModule.getId(), @@ -617,7 +625,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { for (final Artifact result : results) { assertThat(result.getId()).isNotNull(); assertThat(operations.findOne(new Query() - .addCriteria(Criteria.where("filename").is(((LocalArtifact) result).getGridFsFileName())))) + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result).getGridFsFileName())))) .isNotNull(); } } @@ -625,7 +633,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { private void assertArtfiactNull(final Artifact... results) { for (final Artifact result : results) { assertThat(operations.findOne(new Query() - .addCriteria(Criteria.where("filename").is(((LocalArtifact) result).getGridFsFileName())))) + .addCriteria(Criteria.where("filename").is(((JpaLocalArtifact) result).getGridFsFileName())))) .isNull(); } } @@ -635,28 +643,28 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { public void findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc() { // test meta data final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); + .createSoftwareModuleType(new JpaSoftwareModuleType("thetype", "thename", "desc", 100)); final DistributionSetType testDsType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("key", "name", "desc").addMandatoryModuleType(osType) - .addOptionalModuleType(testType)); + .createDistributionSetType(new JpaDistributionSetType("key", "name", "desc") + .addMandatoryModuleType(osType).addOptionalModuleType(testType)); // found in test final SoftwareModule unassigned = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "asis", "found", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "asis", "found", null, "")); final SoftwareModule one = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "found", "b", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "found", "b", null, "")); final SoftwareModule two = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "found", "c", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "found", "c", null, "")); final SoftwareModule differentName = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "differentname", "d", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "differentname", "d", null, "")); // ignored final SoftwareModule deleted = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "deleted", "deleted", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "deleted", "deleted", null, "")); final SoftwareModule four = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "sdfjhsdj", "e", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "sdfjhsdj", "e", null, "")); - final DistributionSet set = distributionSetManagement.createDistributionSet(new DistributionSet("set", "1", + final DistributionSet set = distributionSetManagement.createDistributionSet(new JpaDistributionSet("set", "1", "desc", testDsType, Lists.newArrayList(one, two, deleted, four, differentName))); softwareManagement.deleteSoftwareModule(deleted); @@ -688,26 +696,26 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // test meta data final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); + .createSoftwareModuleType(new JpaSoftwareModuleType("thetype", "thename", "desc", 100)); final DistributionSetType testDsType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("key", "name", "desc").addMandatoryModuleType(osType) - .addOptionalModuleType(testType)); + .createDistributionSetType(new JpaDistributionSetType("key", "name", "desc") + .addMandatoryModuleType(osType).addOptionalModuleType(testType)); // test modules - softwareManagement.createSoftwareModule(new SoftwareModule(testType, "asis", "found", null, "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(testType, "asis", "found", null, "")); final SoftwareModule one = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "found", "b", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "found", "b", null, "")); final SoftwareModule two = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "found", "c", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "found", "c", null, "")); final SoftwareModule differentName = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "differentname", "d", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "differentname", "d", null, "")); final SoftwareModule four = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "found", "3.0.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "found", "3.0.2", null, "")); // one soft deleted final SoftwareModule deleted = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "deleted", "deleted", null, "")); - distributionSetManagement.createDistributionSet(new DistributionSet("set", "1", "desc", testDsType, + .createSoftwareModule(new JpaSoftwareModule(testType, "deleted", "deleted", null, "")); + distributionSetManagement.createDistributionSet(new JpaDistributionSet("set", "1", "desc", testDsType, Lists.newArrayList(one, two, deleted, four, differentName))); softwareManagement.deleteSoftwareModule(deleted); @@ -724,18 +732,18 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Verfies that all undeleted software modules are found in the repository.") public void countSoftwareModuleTypesAll() { final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); + .createSoftwareModuleType(new JpaSoftwareModuleType("thetype", "thename", "desc", 100)); final DistributionSetType testDsType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("key", "name", "desc").addMandatoryModuleType(osType) - .addOptionalModuleType(testType)); + .createDistributionSetType(new JpaDistributionSetType("key", "name", "desc") + .addMandatoryModuleType(osType).addOptionalModuleType(testType)); final SoftwareModule four = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "found", "3.0.2", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "found", "3.0.2", null, "")); // one soft deleted final SoftwareModule deleted = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "deleted", "deleted", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "deleted", "deleted", null, "")); distributionSetManagement.createDistributionSet( - new DistributionSet("set", "1", "desc", testDsType, Lists.newArrayList(deleted, four))); + new JpaDistributionSet("set", "1", "desc", testDsType, Lists.newArrayList(deleted, four))); softwareManagement.deleteSoftwareModule(deleted); assertThat(softwareManagement.countSoftwareModulesAll()).as("Number of undeleted modules").isEqualTo(1); @@ -746,8 +754,8 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Checks that software module typeis found based on given name.") public void findSoftwareModuleTypeByName() { final SoftwareModuleType found = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); - softwareManagement.createSoftwareModuleType(new SoftwareModuleType("thetype2", "anothername", "desc", 100)); + .createSoftwareModuleType(new JpaSoftwareModuleType("thetype", "thename", "desc", 100)); + softwareManagement.createSoftwareModuleType(new JpaSoftwareModuleType("thetype2", "anothername", "desc", 100)); assertThat(softwareManagement.findSoftwareModuleTypeByName("thename")).as("Type with given name") .isEqualTo(found); @@ -757,7 +765,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Verfies that it is not possible to create a type that alrady exists.") public void createSoftwareModuleTypeFailsWithExistingEntity() { final SoftwareModuleType created = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); + .createSoftwareModuleType(new JpaSoftwareModuleType("thetype", "thename", "desc", 100)); try { softwareManagement.createSoftwareModuleType(created); fail("should not have worked as module type already exists"); @@ -771,10 +779,10 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Description("Verfies that it is not possible to create a list of types where one already exists.") public void createSoftwareModuleTypesFailsWithExistingEntity() { final SoftwareModuleType created = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); + .createSoftwareModuleType(new JpaSoftwareModuleType("thetype", "thename", "desc", 100)); try { softwareManagement.createSoftwareModuleType( - Lists.newArrayList(created, new SoftwareModuleType("anothertype", "anothername", "desc", 100))); + Lists.newArrayList(created, new JpaSoftwareModuleType("anothertype", "anothername", "desc", 100))); fail("should not have worked as module type already exists"); } catch (final EntityAlreadyExistsException e) { @@ -784,9 +792,9 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Verfies that multiple types are created as requested.") public void createMultipleoftwareModuleTypes() { - final List created = softwareManagement - .createSoftwareModuleType(Lists.newArrayList(new SoftwareModuleType("thetype", "thename", "desc", 100), - new SoftwareModuleType("thetype2", "thename2", "desc2", 100))); + final List created = softwareManagement.createSoftwareModuleType( + Lists.newArrayList(new JpaSoftwareModuleType("thetype", "thename", "desc", 100), + new JpaSoftwareModuleType("thetype2", "thename2", "desc2", 100))); assertThat(created.size()).as("Number of created types").isEqualTo(2); assertThat(softwareManagement.countSoftwareModuleTypesAll()).as("Number of types in repository").isEqualTo(5); @@ -797,23 +805,23 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { public void findSoftwareModuleByAssignedTo() { // test meta data final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); + .createSoftwareModuleType(new JpaSoftwareModuleType("thetype", "thename", "desc", 100)); final DistributionSetType testDsType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("key", "name", "desc").addMandatoryModuleType(osType) - .addOptionalModuleType(testType)); + .createDistributionSetType(new JpaDistributionSetType("key", "name", "desc") + .addMandatoryModuleType(osType).addOptionalModuleType(testType)); // test modules - softwareManagement.createSoftwareModule(new SoftwareModule(testType, "asis", "found", null, "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(testType, "asis", "found", null, "")); final SoftwareModule one = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "found", "b", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "found", "b", null, "")); final SoftwareModule two = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "found", "c", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "found", "c", null, "")); // one soft deleted final SoftwareModule deleted = softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "deleted", "deleted", null, "")); + .createSoftwareModule(new JpaSoftwareModule(testType, "deleted", "deleted", null, "")); final DistributionSet set = distributionSetManagement.createDistributionSet( - new DistributionSet("set", "1", "desc", testDsType, Lists.newArrayList(one, deleted))); + new JpaDistributionSet("set", "1", "desc", testDsType, Lists.newArrayList(one, deleted))); softwareManagement.deleteSoftwareModule(deleted); assertThat(softwareManagement.findSoftwareModuleByAssignedTo(pageReq, set).getContent()) @@ -831,13 +839,13 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { final String knownValue2 = "myKnownValue2"; final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); assertThat(ah.getOptLockRevision()).isEqualTo(1L); - final SoftwareModuleMetadata swMetadata1 = new SoftwareModuleMetadata(knownKey1, ah, knownValue1); + final SoftwareModuleMetadata swMetadata1 = new JpaSoftwareModuleMetadata(knownKey1, ah, knownValue1); - final SoftwareModuleMetadata swMetadata2 = new SoftwareModuleMetadata(knownKey2, ah, knownValue2); + final SoftwareModuleMetadata swMetadata2 = new JpaSoftwareModuleMetadata(knownKey2, ah, knownValue2); final List softwareModuleMetadata = softwareManagement .createSoftwareModuleMetadata(Lists.newArrayList(swMetadata1, swMetadata2)); @@ -848,7 +856,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(softwareModuleMetadata).hasSize(2); assertThat(softwareModuleMetadata.get(0)).isNotNull(); assertThat(softwareModuleMetadata.get(0).getValue()).isEqualTo(knownValue1); - assertThat(softwareModuleMetadata.get(0).getId().getKey()).isEqualTo(knownKey1); + assertThat(((JpaSoftwareModuleMetadata) softwareModuleMetadata.get(0)).getId().getKey()).isEqualTo(knownKey1); assertThat(softwareModuleMetadata.get(0).getSoftwareModule().getId()).isEqualTo(ah.getId()); } @@ -861,12 +869,12 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { final String knownValue2 = "myKnownValue2"; final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)); + softwareManagement.createSoftwareModuleMetadata(new JpaSoftwareModuleMetadata(knownKey1, ah, knownValue1)); try { - softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue2)); + softwareManagement.createSoftwareModuleMetadata(new JpaSoftwareModuleMetadata(knownKey1, ah, knownValue2)); fail("should not have worked as module metadata already exists"); } catch (final EntityAlreadyExistsException e) { @@ -883,13 +891,13 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // create a base software module final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); // initial opt lock revision must be 1 assertThat(ah.getOptLockRevision()).isEqualTo(1L); // create an software module meta data entry final List softwareModuleMetadata = softwareManagement.createSoftwareModuleMetadata( - Collections.singleton(new SoftwareModuleMetadata(knownKey, ah, knownValue))); + Collections.singleton(new JpaSoftwareModuleMetadata(knownKey, ah, knownValue))); assertThat(softwareModuleMetadata).hasSize(1); // base software module should have now the opt lock revision one // because we are modifying the @@ -915,7 +923,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // verify updated meta data contains the updated value assertThat(updated).isNotNull(); assertThat(updated.getValue()).isEqualTo(knownUpdateValue); - assertThat(updated.getId().getKey()).isEqualTo(knownKey); + assertThat(((JpaSoftwareModuleMetadata) updated).getId().getKey()).isEqualTo(knownKey); assertThat(updated.getSoftwareModule().getId()).isEqualTo(ah.getId()); } @@ -926,14 +934,14 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { final String knownValue1 = "myKnownValue1"; SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - ah = softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)) + ah = softwareManagement.createSoftwareModuleMetadata(new JpaSoftwareModuleMetadata(knownKey1, ah, knownValue1)) .getSoftwareModule(); assertThat(softwareManagement.findSoftwareModuleById(ah.getId()).getMetadata()) .as("Contains the created metadata element") - .containsExactly(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)); + .containsExactly(new JpaSoftwareModuleMetadata(knownKey1, ah, knownValue1)); softwareManagement.deleteSoftwareModuleMetadata(new SwMetadataCompositeKey(ah, knownKey1)); assertThat(softwareManagement.findSoftwareModuleById(ah.getId()).getMetadata()).as("Metadata elemenets are") @@ -947,9 +955,9 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { final String knownValue1 = "myKnownValue1"; SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - ah = softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)) + ah = softwareManagement.createSoftwareModuleMetadata(new JpaSoftwareModuleMetadata(knownKey1, ah, knownValue1)) .getSoftwareModule(); try { @@ -965,20 +973,20 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { public void findAllSoftwareModuleMetadataBySwId() { SoftwareModule sw1 = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); SoftwareModule sw2 = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "os", "1.0.1", null, "")); + .createSoftwareModule(new JpaSoftwareModule(osType, "os", "1.0.1", null, "")); for (int index = 0; index < 10; index++) { sw1 = softwareManagement - .createSoftwareModuleMetadata(new SoftwareModuleMetadata("key" + index, sw1, "value" + index)) + .createSoftwareModuleMetadata(new JpaSoftwareModuleMetadata("key" + index, sw1, "value" + index)) .getSoftwareModule(); } for (int index = 0; index < 20; index++) { sw2 = softwareManagement - .createSoftwareModuleMetadata(new SoftwareModuleMetadata("key" + index, sw2, "value" + index)) + .createSoftwareModuleMetadata(new JpaSoftwareModuleMetadata("key" + index, sw2, "value" + index)) .getSoftwareModule(); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SystemManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SystemManagementTest.java index 1a1632d32..261b921c8 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SystemManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SystemManagementTest.java @@ -18,8 +18,8 @@ import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithSpringAuthorityRule; import org.eclipse.hawkbit.report.model.TenantUsage; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.junit.Test; @@ -132,7 +132,7 @@ public class SystemManagementTest extends AbstractIntegrationTestWithMongoDB { } private void createTestArtifact(final byte[] random) { - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + JpaSoftwareModule sm = new JpaSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareModuleRepository.save(sm); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java index 4c6af0d83..66ea38e77 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java @@ -14,6 +14,7 @@ import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -21,6 +22,8 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; @@ -57,26 +60,26 @@ public class TagManagementTest extends AbstractIntegrationTest { @Test @Description("Full DS tag lifecycle tested. Create tags, assign them to sets and delete the tags.") public void createAndAssignAndDeleteDistributionSetTags() { - final List dsAs = TestDataUtil.generateDistributionSets("DS-A", 20, softwareManagement, - distributionSetManagement); - final List dsBs = TestDataUtil.generateDistributionSets("DS-B", 10, softwareManagement, - distributionSetManagement); - final List dsCs = TestDataUtil.generateDistributionSets("DS-C", 25, softwareManagement, - distributionSetManagement); - final List dsABs = TestDataUtil.generateDistributionSets("DS-AB", 5, softwareManagement, - distributionSetManagement); - final List dsACs = TestDataUtil.generateDistributionSets("DS-AC", 11, softwareManagement, - distributionSetManagement); - final List dsBCs = TestDataUtil.generateDistributionSets("DS-BC", 13, softwareManagement, - distributionSetManagement); - final List dsABCs = TestDataUtil.generateDistributionSets("DS-ABC", 9, softwareManagement, - distributionSetManagement); + final Collection dsAs = (Collection) TestDataUtil.generateDistributionSets("DS-A", 20, + softwareManagement, distributionSetManagement); + final Collection dsBs = (Collection) TestDataUtil.generateDistributionSets("DS-B", 10, + softwareManagement, distributionSetManagement); + final Collection dsCs = (Collection) TestDataUtil.generateDistributionSets("DS-C", 25, + softwareManagement, distributionSetManagement); + final Collection dsABs = (Collection) TestDataUtil.generateDistributionSets("DS-AB", 5, + softwareManagement, distributionSetManagement); + final Collection dsACs = (Collection) TestDataUtil.generateDistributionSets("DS-AC", 11, + softwareManagement, distributionSetManagement); + final Collection dsBCs = (Collection) TestDataUtil.generateDistributionSets("DS-BC", 13, + softwareManagement, distributionSetManagement); + final Collection dsABCs = (Collection) TestDataUtil.generateDistributionSets("DS-ABC", 9, + softwareManagement, distributionSetManagement); - final DistributionSetTag tagA = tagManagement.createDistributionSetTag(new DistributionSetTag("A")); - final DistributionSetTag tagB = tagManagement.createDistributionSetTag(new DistributionSetTag("B")); - final DistributionSetTag tagC = tagManagement.createDistributionSetTag(new DistributionSetTag("C")); - final DistributionSetTag tagX = tagManagement.createDistributionSetTag(new DistributionSetTag("X")); - final DistributionSetTag tagY = tagManagement.createDistributionSetTag(new DistributionSetTag("Y")); + final DistributionSetTag tagA = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("A")); + final DistributionSetTag tagB = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("B")); + final DistributionSetTag tagC = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("C")); + final DistributionSetTag tagX = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("X")); + final DistributionSetTag tagY = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("Y")); distributionSetManagement.toggleTagAssignment(dsAs, tagA); distributionSetManagement.toggleTagAssignment(dsBs, tagB); @@ -167,20 +170,20 @@ public class TagManagementTest extends AbstractIntegrationTest { @Description("Verifies the toogle mechanism by means on assigning tag if at least on DS in the list does not have" + "the tag yet. Unassign if all of them have the tag already.") public void assignAndUnassignDistributionSetTags() { - final List groupA = TestDataUtil.generateDistributionSets(20, softwareManagement, - distributionSetManagement); - final List groupB = TestDataUtil.generateDistributionSets("unassigned", 20, softwareManagement, - distributionSetManagement); + final Collection groupA = (Collection) TestDataUtil.generateDistributionSets(20, + softwareManagement, distributionSetManagement); + final Collection groupB = (Collection) TestDataUtil.generateDistributionSets("unassigned", 20, + softwareManagement, distributionSetManagement); final DistributionSetTag tag = tagManagement - .createDistributionSetTag(new DistributionSetTag("tag1", "tagdesc1", "")); + .createDistributionSetTag(new JpaDistributionSetTag("tag1", "tagdesc1", "")); // toggle A only -> A is now assigned DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(groupA, tag); assertThat(result.getAlreadyAssigned()).isEqualTo(0); assertThat(result.getAssigned()).isEqualTo(20); - assertThat(result.getAssignedEntity()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( - groupA.stream().map(set -> set.getId()).collect(Collectors.toList()))); + assertThat(result.getAssignedEntity()).containsAll(distributionSetManagement + .findDistributionSetsAll(groupA.stream().map(set -> set.getId()).collect(Collectors.toList()))); assertThat(result.getUnassigned()).isEqualTo(0); assertThat(result.getUnassignedEntity()).isEmpty(); assertThat(result.getDistributionSetTag()).isEqualTo(tag); @@ -189,8 +192,8 @@ public class TagManagementTest extends AbstractIntegrationTest { result = distributionSetManagement.toggleTagAssignment(concat(groupA, groupB), tag); assertThat(result.getAlreadyAssigned()).isEqualTo(20); assertThat(result.getAssigned()).isEqualTo(20); - assertThat(result.getAssignedEntity()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( - groupB.stream().map(set -> set.getId()).collect(Collectors.toList()))); + assertThat(result.getAssignedEntity()).containsAll(distributionSetManagement + .findDistributionSetsAll(groupB.stream().map(set -> set.getId()).collect(Collectors.toList()))); assertThat(result.getUnassigned()).isEqualTo(0); assertThat(result.getUnassignedEntity()).isEmpty(); assertThat(result.getDistributionSetTag()).isEqualTo(tag); @@ -201,7 +204,7 @@ public class TagManagementTest extends AbstractIntegrationTest { assertThat(result.getAssigned()).isEqualTo(0); assertThat(result.getAssignedEntity()).isEmpty(); assertThat(result.getUnassigned()).isEqualTo(40); - assertThat(result.getUnassignedEntity()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( + assertThat(result.getUnassignedEntity()).containsAll(distributionSetManagement.findDistributionSetsAll( concat(groupB, groupA).stream().map(set -> set.getId()).collect(Collectors.toList()))); assertThat(result.getDistributionSetTag()).isEqualTo(tag); @@ -214,7 +217,7 @@ public class TagManagementTest extends AbstractIntegrationTest { final List groupA = targetManagement.createTargets(TestDataUtil.generateTargets(20, "")); final List groupB = targetManagement.createTargets(TestDataUtil.generateTargets(20, "groupb")); - final TargetTag tag = tagManagement.createTargetTag(new TargetTag("tag1", "tagdesc1", "")); + final TargetTag tag = tagManagement.createTargetTag(new JpaTargetTag("tag1", "tagdesc1", "")); // toggle A only -> A is now assigned TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(groupA, tag); @@ -249,7 +252,7 @@ public class TagManagementTest extends AbstractIntegrationTest { } @SafeVarargs - private final List concat(final List... targets) { + private final Collection concat(final Collection... targets) { final List result = new ArrayList<>(); Arrays.asList(targets).forEach(result::addAll); return result; @@ -258,16 +261,16 @@ public class TagManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that all tags are retrieved through repository.") public void findAllTargetTags() { - final List tags = createTargetsWithTags(); + final List tags = createTargetsWithTags(); - assertThat(targetTagRepository.findAll()).isEqualTo(tagManagement.findAllTargetTags()).isEqualTo(tags) + assertThat(targetTagRepository.findAll()).isEqualTo(targetTagRepository.findAll()).isEqualTo(tags) .as("Wrong tag size").hasSize(20); } @Test @Description("Ensures that a created tag is persisted in the repository as defined.") public void createTargetTag() { - final Tag tag = tagManagement.createTargetTag(new TargetTag("kai1", "kai2", "colour")); + final Tag tag = tagManagement.createTargetTag(new JpaTargetTag("kai1", "kai2", "colour")); assertThat(targetTagRepository.findByNameEquals("kai1").getDescription()).as("wrong tag ed").isEqualTo("kai2"); assertThat(tagManagement.findTargetTag("kai1").getColour()).as("wrong tag found").isEqualTo("colour"); @@ -279,7 +282,7 @@ public class TagManagementTest extends AbstractIntegrationTest { public void deleteTargetTas() { // create test data - final Iterable tags = createTargetsWithTags(); + final Iterable tags = createTargetsWithTags(); final TargetTag toDelete = tags.iterator().next(); for (final Target target : targetRepository.findAll()) { @@ -296,13 +299,13 @@ public class TagManagementTest extends AbstractIntegrationTest { .doesNotContain(toDelete); } assertThat(targetTagRepository.findOne(toDelete.getId())).as("No tag should be found").isNull(); - assertThat(tagManagement.findAllTargetTags()).as("Wrong target tag size").hasSize(19); + assertThat(targetTagRepository.findAll()).as("Wrong target tag size").hasSize(19); } @Test @Description("Tests the name update of a target tag.") public void updateTargetTag() { - final List tags = createTargetsWithTags(); + final List tags = createTargetsWithTags(); // change data final TargetTag savedAssigned = tags.iterator().next(); @@ -312,7 +315,7 @@ public class TagManagementTest extends AbstractIntegrationTest { tagManagement.updateTargetTag(savedAssigned); // check data - assertThat(tagManagement.findAllTargetTags()).as("Wrong target tag size").hasSize(tags.size()); + assertThat(targetTagRepository.findAll()).as("Wrong target tag size").hasSize(tags.size()); assertThat(targetTagRepository.findOne(savedAssigned.getId()).getName()).as("wrong target tag is saved") .isEqualTo("test123"); assertThat(targetTagRepository.findOne(savedAssigned.getId()).getOptLockRevision()) @@ -322,7 +325,7 @@ public class TagManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that a created tag is persisted in the repository as defined.") public void createDistributionSetTag() { - final Tag tag = tagManagement.createDistributionSetTag(new DistributionSetTag("kai1", "kai2", "colour")); + final Tag tag = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("kai1", "kai2", "colour")); assertThat(distributionSetTagRepository.findByNameEquals("kai1").getDescription()).as("wrong tag found") .isEqualTo("kai2"); @@ -366,10 +369,10 @@ public class TagManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that a tag cannot be created if one exists already with that name (ecpects EntityAlreadyExistsException).") public void failedDuplicateTargetTagNameException() { - tagManagement.createTargetTag(new TargetTag("A")); + tagManagement.createTargetTag(new JpaTargetTag("A")); try { - tagManagement.createTargetTag(new TargetTag("A")); + tagManagement.createTargetTag(new JpaTargetTag("A")); fail("should not have worked as tag already exists"); } catch (final EntityAlreadyExistsException e) { @@ -379,8 +382,8 @@ public class TagManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that a tag cannot be updated to a name that already exists on another tag (ecpects EntityAlreadyExistsException).") public void failedDuplicateTargetTagNameExceptionAfterUpdate() { - tagManagement.createTargetTag(new TargetTag("A")); - final TargetTag tag = tagManagement.createTargetTag(new TargetTag("B")); + tagManagement.createTargetTag(new JpaTargetTag("A")); + final TargetTag tag = tagManagement.createTargetTag(new JpaTargetTag("B")); tag.setName("A"); try { @@ -394,9 +397,9 @@ public class TagManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that a tag cannot be created if one exists already with that name (ecpects EntityAlreadyExistsException).") public void failedDuplicateDsTagNameException() { - tagManagement.createDistributionSetTag(new DistributionSetTag("A")); + tagManagement.createDistributionSetTag(new JpaDistributionSetTag("A")); try { - tagManagement.createDistributionSetTag(new DistributionSetTag("A")); + tagManagement.createDistributionSetTag(new JpaDistributionSetTag("A")); fail("should not have worked as tag already exists"); } catch (final EntityAlreadyExistsException e) { @@ -406,8 +409,8 @@ public class TagManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that a tag cannot be updated to a name that already exists on another tag (ecpects EntityAlreadyExistsException).") public void failedDuplicateDsTagNameExceptionAfterUpdate() { - tagManagement.createDistributionSetTag(new DistributionSetTag("A")); - final DistributionSetTag tag = tagManagement.createDistributionSetTag(new DistributionSetTag("B")); + tagManagement.createDistributionSetTag(new JpaDistributionSetTag("A")); + final DistributionSetTag tag = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("B")); tag.setName("A"); try { @@ -448,19 +451,19 @@ public class TagManagementTest extends AbstractIntegrationTest { assertThat(distributionSetTagRepository.findAll()).as("Wrong size of tags").hasSize(20); } - private List createTargetsWithTags() { - targetManagement.createTargets(TestDataUtil.generateTargets(20)); + private List createTargetsWithTags() { + final List targets = targetManagement.createTargets(TestDataUtil.generateTargets(20)); final Iterable tags = tagManagement.createTargetTags(TestDataUtil.generateTargetTags(20)); - tags.forEach(tag -> targetManagement.toggleTagAssignment(targetRepository.findAll(), tag)); + tags.forEach(tag -> targetManagement.toggleTagAssignment(targets, tag)); - return tagManagement.findAllTargetTags(); + return targetTagRepository.findAll(); } private List createDsSetsWithTags() { - final List sets = TestDataUtil.generateDistributionSets(20, softwareManagement, - distributionSetManagement); + final Collection sets = (Collection) TestDataUtil.generateDistributionSets(20, + softwareManagement, distributionSetManagement); final Iterable tags = tagManagement .createDistributionSetTags(TestDataUtil.generateDistributionSetTags(20)); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java index 99e08f331..498364cf9 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java @@ -13,6 +13,7 @@ import static org.junit.Assert.fail; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.junit.Test; @@ -33,7 +34,7 @@ public class TargetFilterQueryManagenmentTest extends AbstractIntegrationTest { public void createTargetFilterQuery() { final String filterName = "new target filter"; final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement - .createTargetFilterQuery(new TargetFilterQuery(filterName, "name==PendingTargets001")); + .createTargetFilterQuery(new JpaTargetFilterQuery(filterName, "name==PendingTargets001")); assertEquals("Retrieved newly created custom target filter", targetFilterQuery, targetFilterQueryManagement.findTargetFilterQueryByName(filterName)); } @@ -43,11 +44,11 @@ public class TargetFilterQueryManagenmentTest extends AbstractIntegrationTest { public void createDuplicateTargetFilterQuery() { final String filterName = "new target filter duplicate"; targetFilterQueryManagement - .createTargetFilterQuery(new TargetFilterQuery(filterName, "name==PendingTargets001")); + .createTargetFilterQuery(new JpaTargetFilterQuery(filterName, "name==PendingTargets001")); try { targetFilterQueryManagement - .createTargetFilterQuery(new TargetFilterQuery(filterName, "name==PendingTargets001")); + .createTargetFilterQuery(new JpaTargetFilterQuery(filterName, "name==PendingTargets001")); fail("should not have worked as query already exists"); } catch (final EntityAlreadyExistsException e) { @@ -59,7 +60,7 @@ public class TargetFilterQueryManagenmentTest extends AbstractIntegrationTest { public void deleteTargetFilterQuery() { final String filterName = "delete_target_filter_query"; final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement - .createTargetFilterQuery(new TargetFilterQuery(filterName, "name==PendingTargets001")); + .createTargetFilterQuery(new JpaTargetFilterQuery(filterName, "name==PendingTargets001")); targetFilterQueryManagement.deleteTargetFilterQuery(targetFilterQuery.getId()); assertEquals("Returns null as the target filter is deleted", null, targetFilterQueryManagement.findTargetFilterQueryById(targetFilterQuery.getId())); @@ -71,7 +72,7 @@ public class TargetFilterQueryManagenmentTest extends AbstractIntegrationTest { public void updateTargetFilterQuery() { final String filterName = "target_filter_01"; final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement - .createTargetFilterQuery(new TargetFilterQuery(filterName, "name==PendingTargets001")); + .createTargetFilterQuery(new JpaTargetFilterQuery(filterName, "name==PendingTargets001")); final String newQuery = "status==UNKNOWN"; targetFilterQuery.setQuery(newQuery); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java index 6b509b257..4ff845e1a 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java @@ -19,17 +19,20 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; -import org.eclipse.hawkbit.repository.specifications.TargetSpecifications; import org.junit.Test; import org.springframework.data.domain.Slice; @@ -50,10 +53,10 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { + "That includes both the test itself, as a count operation with the same filters " + "and query definitions by RSQL (named and un-named).") public void targetSearchWithVariousFilterCombinations() { - final TargetTag targTagX = tagManagement.createTargetTag(new TargetTag("TargTag-X")); - final TargetTag targTagY = tagManagement.createTargetTag(new TargetTag("TargTag-Y")); - final TargetTag targTagZ = tagManagement.createTargetTag(new TargetTag("TargTag-Z")); - final TargetTag targTagW = tagManagement.createTargetTag(new TargetTag("TargTag-W")); + final TargetTag targTagX = tagManagement.createTargetTag(new JpaTargetTag("TargTag-X")); + final TargetTag targTagY = tagManagement.createTargetTag(new JpaTargetTag("TargTag-Y")); + final TargetTag targTagZ = tagManagement.createTargetTag(new JpaTargetTag("TargTag-Z")); + final TargetTag targTagW = tagManagement.createTargetTag(new JpaTargetTag("TargTag-W")); final DistributionSet setA = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); @@ -96,7 +99,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails(actionId); action.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); + new JpaActionStatus((JpaAction) action, Status.FINISHED, System.currentTimeMillis(), "message")); deploymentManagement.assignDistributionSet(setA.getId(), installedC); final List unknown = new ArrayList<>(); @@ -174,13 +177,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, pending, null, installedSet.getId(), Boolean.FALSE, new String[0])).as("has number of elements").hasSize(1) .as("and contains the following elements").containsExactly(expectedIdName) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findAllTargetIdsByTargetFilterQuery(pageReq, new TargetFilterQuery("test", query))); + .findAllTargetIdsByTargetFilterQuery(pageReq, new JpaTargetFilterQuery("test", query))); } @@ -200,13 +203,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, both, null, null, Boolean.FALSE, targTagW.getName())).as("has number of elements").hasSize(200).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } private static List convertToIdNames(final List expected) { @@ -234,13 +237,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, pending, null, null, Boolean.FALSE, targTagW.getName())).as("has number of elements").hasSize(2).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -260,13 +263,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, pending, null, null, Boolean.FALSE, targTagW.getName())).as("has number of elements").hasSize(2).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -286,13 +289,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, pending, "%targ-B%", setA.getId(), Boolean.FALSE, targTagW.getName())).as("has number of elements").hasSize(1).as("and contains the following elements") .containsExactly(expectedIdName).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -312,13 +315,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, pending, "%targ-A%", setA.getId(), Boolean.FALSE, new String[0])).as("has number of elements").hasSize(1).as("and contains the following elements") .containsExactly(expectedIdName).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -337,13 +340,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, pending, null, setA.getId(), Boolean.FALSE, new String[0])).as("has number of elements").hasSize(3).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -361,14 +364,14 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat( targetManagement.findAllTargetIdsByFilters(pageReq, pending, null, null, Boolean.FALSE, new String[0])) .as("has number of elements").hasSize(3).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -388,13 +391,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, unknown, "%targ-B%", null, Boolean.FALSE, targTagW.getName())).as("has number of elements").hasSize(99).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -412,13 +415,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, unknown, "%targ-A%", null, Boolean.FALSE, new String[0])).as("has number of elements").hasSize(99).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -435,12 +438,12 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .hasSize(targetManagement.findTargetsAll(query, pageReq).getContent().size()) .as("and NAMED filter query returns the same result").hasSize(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent().size()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent().size()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, unknown, null, setA.getId(), Boolean.FALSE, new String[0])).as("has number of elements").hasSize(0) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findAllTargetIdsByTargetFilterQuery(pageReq, new TargetFilterQuery("test", query))); + .findAllTargetIdsByTargetFilterQuery(pageReq, new JpaTargetFilterQuery("test", query))); } @Step @@ -459,13 +462,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, unknown, null, null, Boolean.FALSE, targTagY.getName(), targTagW.getName())).as("has number of elements").hasSize(198) .as("and contains the following elements").containsAll(expectedIdNames) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findAllTargetIdsByTargetFilterQuery(pageReq, new TargetFilterQuery("test", query))); + .findAllTargetIdsByTargetFilterQuery(pageReq, new JpaTargetFilterQuery("test", query))); } @Step @@ -483,14 +486,14 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat( targetManagement.findAllTargetIdsByFilters(pageReq, unknown, null, null, Boolean.FALSE, new String[0])) .as("has number of elements").hasSize(397).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -509,13 +512,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, null, "%targ-A%", setA.getId(), Boolean.FALSE, new String[0])).as("has number of elements").hasSize(1).as("and contains the following elements") .containsExactly(expectedIdName).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -532,13 +535,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, null, null, setA.getId(), Boolean.FALSE, new String[0])).as("has number of elements").hasSize(3).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -554,12 +557,12 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .hasSize(targetManagement.findTargetsAll(query, pageReq).getContent().size()) .as("and NAMED filter query returns the same result").hasSize(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent().size()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent().size()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, null, "%targ-C%", setA.getId(), Boolean.FALSE, targTagX.getName())).as("has number of elements").hasSize(0) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findAllTargetIdsByTargetFilterQuery(pageReq, new TargetFilterQuery("test", query))); + .findAllTargetIdsByTargetFilterQuery(pageReq, new JpaTargetFilterQuery("test", query))); } @Step @@ -575,12 +578,12 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .hasSize(targetManagement.findTargetsAll(query, pageReq).getContent().size()) .as("and NAMED filter query returns the same result").hasSize(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent().size()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent().size()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, null, "%targ-A%", setA.getId(), Boolean.FALSE, targTagW.getName())).as("has number of elements").hasSize(0) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findAllTargetIdsByTargetFilterQuery(pageReq, new TargetFilterQuery("test", query))); + .findAllTargetIdsByTargetFilterQuery(pageReq, new JpaTargetFilterQuery("test", query))); } @Step @@ -599,13 +602,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, null, "%targ-C%", setA.getId(), Boolean.FALSE, targTagW.getName())).as("has number of elements").hasSize(1).as("and contains the following elements") .containsExactly(expectedIdName).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @Step @@ -623,13 +626,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, null, "%targ-B%", null, Boolean.FALSE, targTagY.getName(), targTagW.getName())).as("has number of elements").hasSize(100) .as("and contains the following elements").containsAll(expectedIdNames) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findAllTargetIdsByTargetFilterQuery(pageReq, new TargetFilterQuery("test", query))); + .findAllTargetIdsByTargetFilterQuery(pageReq, new JpaTargetFilterQuery("test", query))); } @@ -653,13 +656,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { .as("and filter query returns the same result") .containsAll(targetManagement.findTargetsAll(query, pageReq).getContent()) .as("and NAMED filter query returns the same result").containsAll(targetManagement - .findTargetsAll(new TargetFilterQuery("test", query), pageReq).getContent()); + .findTargetsAll(new JpaTargetFilterQuery("test", query), pageReq).getContent()); assertThat(targetManagement.findAllTargetIdsByFilters(pageReq, null, null, null, Boolean.FALSE, targTagD.getName())).as("has number of elements").hasSize(200).as("and contains the following elements") .containsAll(expectedIdNames).as("and NAMED filter query returns the same result") .containsAll(targetManagement.findAllTargetIdsByTargetFilterQuery(pageReq, - new TargetFilterQuery("test", query))); + new JpaTargetFilterQuery("test", query))); } @@ -698,7 +701,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final Comparator byId = (e1, e2) -> Long.compare(e2.getId(), e1.getId()); assertThat(result.getNumberOfElements()).isEqualTo(9); - final List expected = new ArrayList(); + final List expected = new ArrayList<>(); Collections.sort(targInstalled, byId); Collections.sort(targAssigned, byId); Collections.sort(notAssigned, byId); @@ -730,34 +733,6 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { } - @Test - @Description("Verfies that targets with given assigned DS and additonal specification are returned from repository.") - public void findTargetByAssignedDistributionSetWithAdditonalSpecification() { - final DistributionSet assignedSet = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); - final DistributionSet installedSet = TestDataUtil.generateDistributionSet("another", softwareManagement, - distributionSetManagement); - targetManagement.createTargets(TestDataUtil.generateTargets(10, "unassigned")); - List assignedtargets = targetManagement.createTargets(TestDataUtil.generateTargets(10, "assigned")); - - // set on installed and assign another one - deploymentManagement.assignDistributionSet(installedSet, assignedtargets).getActions().forEach(actionId -> { - final Action action = deploymentManagement.findActionWithDetails(actionId); - action.setStatus(Status.FINISHED); - controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); - }); - deploymentManagement.assignDistributionSet(assignedSet, assignedtargets); - - assignedtargets = targetManagement.findTargetByControllerID( - assignedtargets.stream().map(target -> target.getControllerId()).collect(Collectors.toList())); - - assertThat(targetManagement.findTargetByAssignedDistributionSet(assignedSet.getId(), - TargetSpecifications.hasInstalledDistributionSet(installedSet.getId()), pageReq)) - .as("Contains the assigned targets").containsAll(assignedtargets) - .as("and that means the following expected amount").hasSize(10); - } - @Test @Description("Verfies that targets with given installed DS are returned from repository.") public void findTargetByInstalledDistributionSet() { @@ -773,7 +748,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final Action action = deploymentManagement.findActionWithDetails(actionId); action.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); + new JpaActionStatus((JpaAction) action, Status.FINISHED, System.currentTimeMillis(), "message")); }); deploymentManagement.assignDistributionSet(assignedSet, installedtargets); @@ -787,41 +762,11 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { } - @Test - @Description("Verfies that targets with given installed DS and additonal specification are returned from repository.") - public void findTargetByInstalledDistributionSetWithAdditonalSpecification() { - final DistributionSet assignedSet = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); - final DistributionSet installedSet = TestDataUtil.generateDistributionSet("another", softwareManagement, - distributionSetManagement); - targetManagement.createTargets(TestDataUtil.generateTargets(10, "unassigned")); - List installedtargets = targetManagement.createTargets(TestDataUtil.generateTargets(10, "assigned")); - - // set on installed and assign another one - deploymentManagement.assignDistributionSet(installedSet, installedtargets).getActions().forEach(actionId -> { - final Action action = deploymentManagement.findActionWithDetails(actionId); - action.setStatus(Status.FINISHED); - controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); - }); - deploymentManagement.assignDistributionSet(assignedSet, installedtargets); - - // get final updated version of targets - installedtargets = targetManagement.findTargetByControllerID( - installedtargets.stream().map(target -> target.getControllerId()).collect(Collectors.toList())); - - assertThat(targetManagement.findTargetByInstalledDistributionSet(installedSet.getId(), - TargetSpecifications.hasAssignedDistributionSet(assignedSet.getId()), pageReq)) - .as("Contains the assigned targets").containsAll(installedtargets) - .as("and that means the following expected amount").hasSize(10); - - } - private List sendUpdateActionStatusToTargets(final DistributionSet dsA, final Iterable targs, final Status status, final String... msgs) { final List result = new ArrayList(); for (final Target t : targs) { - final List findByTarget = actionRepository.findByTarget(t); + final List findByTarget = actionRepository.findByTarget((JpaTarget) t); for (final Action action : findByTarget) { result.add(sendUpdateActionStatusToTarget(status, action, t, msgs)); } @@ -833,7 +778,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final String... msgs) { updActA.setStatus(status); - final ActionStatus statusMessages = new ActionStatus(); + final ActionStatus statusMessages = new JpaActionStatus(); statusMessages.setAction(updActA); statusMessages.setOccurredAt(System.currentTimeMillis()); statusMessages.setStatus(status); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java index ae4447fc6..c2d7a0a4f 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java @@ -34,14 +34,16 @@ import org.eclipse.hawkbit.WithSpringAuthorityRule; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; -import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; -import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetTag; import org.junit.Test; import org.springframework.data.domain.PageRequest; @@ -61,7 +63,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { @WithUser(tenantId = "tenantWhichDoesNotExists", allSpPermissions = true, autoCreateTenant = false) public void createTargetForTenantWhichDoesNotExistThrowsTenantNotExistException() { try { - targetManagement.createTarget(new Target("targetId123")); + targetManagement.createTarget(new JpaTarget("targetId123")); fail("should not be possible as the tenant does not exist"); } catch (final TenantNotExistException e) { // ok @@ -72,14 +74,14 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Description("Verify that a target with empty controller id cannot be created") public void createTargetWithNoControllerId() { try { - targetManagement.createTarget(new Target("")); + targetManagement.createTarget(new JpaTarget("")); fail("target with empty controller id should not be created"); } catch (final ConstraintViolationException e) { // ok } try { - targetManagement.createTarget(new Target(null)); + targetManagement.createTarget(new JpaTarget(null)); fail("target with empty controller id should not be created"); } catch (final ConstraintViolationException e) { // ok @@ -90,13 +92,13 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Description("Ensures that targets can assigned and unassigned to a target tag. Not exists target will be ignored for the assignment.") public void assignAndUnassignTargetsToTag() { final List assignTarget = new ArrayList(); - assignTarget.add(targetManagement.createTarget(new Target("targetId123")).getControllerId()); - assignTarget.add(targetManagement.createTarget(new Target("targetId1234")).getControllerId()); - assignTarget.add(targetManagement.createTarget(new Target("targetId1235")).getControllerId()); - assignTarget.add(targetManagement.createTarget(new Target("targetId1236")).getControllerId()); + assignTarget.add(targetManagement.createTarget(new JpaTarget("targetId123")).getControllerId()); + assignTarget.add(targetManagement.createTarget(new JpaTarget("targetId1234")).getControllerId()); + assignTarget.add(targetManagement.createTarget(new JpaTarget("targetId1235")).getControllerId()); + assignTarget.add(targetManagement.createTarget(new JpaTarget("targetId1236")).getControllerId()); assignTarget.add("NotExist"); - final TargetTag targetTag = tagManagement.createTargetTag(new TargetTag("Tag1")); + final TargetTag targetTag = tagManagement.createTargetTag(new JpaTargetTag("Tag1")); final List assignedTargets = targetManagement.assignTag(assignTarget, targetTag); assertThat(assignedTargets.size()).as("Assigned targets are wrong").isEqualTo(4); @@ -125,7 +127,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that targets can deleted e.g. test all cascades") public void deleteAndCreateTargets() { - Target target = targetManagement.createTarget(new Target("targetId123")); + Target target = targetManagement.createTarget(new JpaTarget("targetId123")); assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(1); targetManagement.deleteTargets(target.getId()); assertThat(targetManagement.countTargetsAll()).as("target count is wrong").isEqualTo(0); @@ -137,7 +139,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { final List targets = new ArrayList(); for (int i = 0; i < 5; i++) { - target = targetManagement.createTarget(new Target("" + i)); + target = targetManagement.createTarget(new JpaTarget("" + i)); targets.add(target.getId()); targets.add(createTargetWithAttributes("" + (i * i + 1000)).getId()); } @@ -147,7 +149,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { } private Target createTargetWithAttributes(final String controllerId) { - Target target = new Target(controllerId); + Target target = new JpaTarget(controllerId); final Map testData = new HashMap<>(); testData.put("test1", "testdata1"); @@ -184,10 +186,10 @@ public class TargetManagementTest extends AbstractIntegrationTest { final DistributionSetAssignmentResult result = deploymentManagement.assignDistributionSet(set.getId(), "4711"); - final Action action = deploymentManagement.findActionWithDetails(result.getActions().get(0)); + final JpaAction action = (JpaAction) deploymentManagement.findActionWithDetails(result.getActions().get(0)); action.setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); + new JpaActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message")); deploymentManagement.assignDistributionSet(set2.getId(), "4711"); target = targetManagement.findTargetByControllerIDWithDetails("4711"); @@ -231,9 +233,9 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Test @Description("Checks if the EntityAlreadyExistsException is thrown if a single target with the same controller ID are created twice.") public void createTargetDuplicate() { - targetManagement.createTarget(new Target("4711")); + targetManagement.createTarget(new JpaTarget("4711")); try { - targetManagement.createTarget(new Target("4711")); + targetManagement.createTarget(new JpaTarget("4711")); fail("Target already exists"); } catch (final EntityAlreadyExistsException e) { } @@ -338,7 +340,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { final Target savedExtra = targetManagement.createTarget(extra); - Iterable allFound = targetRepository.findAll(); + final Iterable allFound = targetRepository.findAll(); assertThat(Long.valueOf(firstList.size())).as("List size of targets") .isEqualTo(firstSaved.spliterator().getExactSizeIfKnown()); @@ -391,11 +393,11 @@ public class TargetManagementTest extends AbstractIntegrationTest { targetManagement.deleteTargets(deletedTargetIDs); - allFound = targetManagement.findTargetsAll(new PageRequest(0, 200)).getContent(); + final List found = targetManagement.findTargetsAll(new PageRequest(0, 200)).getContent(); assertThat(firstSaved.spliterator().getExactSizeIfKnown() - nr2Del).as("Size of splited list") - .isEqualTo(allFound.spliterator().getExactSizeIfKnown()); + .isEqualTo(found.spliterator().getExactSizeIfKnown()); - assertThat(allFound).as("Not all undeleted found").doesNotContain(deletedTargets); + assertThat(found).as("Not all undeleted found").doesNotContain(deletedTargets); } @Test @@ -404,18 +406,18 @@ public class TargetManagementTest extends AbstractIntegrationTest { Iterable ts = targetManagement .createTargets(TestDataUtil.buildTargetFixtures(100, "myCtrlID", "first description")); - final Map attribs = new HashMap(); + final Map attribs = new HashMap<>(); attribs.put("a.b.c", "abc"); attribs.put("x.y.z", ""); attribs.put("1.2.3", "123"); attribs.put("1.2.3.4", "1234"); attribs.put("1.2.3.4.5", "12345"); - final Set attribs2Del = new HashSet(); + final Set attribs2Del = new HashSet<>(); attribs2Del.add("x.y.z"); attribs2Del.add("1.2.3"); for (final Target t : ts) { - TargetInfo targetInfo = t.getTargetInfo(); + JpaTargetInfo targetInfo = (JpaTargetInfo) t.getTargetInfo(); targetInfo.setNew(false); for (final Entry attrib : attribs.entrySet()) { final String key = attrib.getKey(); @@ -460,7 +462,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { for (final Target ta : ts2DelAllAttribs) { final Target t = targetManagement.findTargetByControllerIDWithDetails(ta.getControllerId()); - final TargetInfo targetStatus = t.getTargetInfo(); + final JpaTargetInfo targetStatus = (JpaTargetInfo) t.getTargetInfo(); targetStatus.getControllerAttributes().clear(); targetInfoRepository.save(targetStatus); } @@ -468,7 +470,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { for (final Target ta : ts2DelAttribs) { final Target t = targetManagement.findTargetByControllerIDWithDetails(ta.getControllerId()); - final TargetInfo targetStatus = t.getTargetInfo(); + final JpaTargetInfo targetStatus = (JpaTargetInfo) t.getTargetInfo(); for (final String attribKey : attribs2Del) { targetStatus.getControllerAttributes().remove(attribKey); } @@ -477,7 +479,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { // only the number of the remaining targets and controller attributes // are checked - final Iterable restTS = targetRepository.findAll(); + final Iterable restTS = targetRepository.findAll(); restTarget_: for (final Target targetl : restTS) { final Target target = targetManagement.findTargetByControllerIDWithDetails(targetl.getControllerId()); @@ -552,10 +554,10 @@ public class TargetManagementTest extends AbstractIntegrationTest { final List tagABCTargets = targetManagement .createTargets(TestDataUtil.buildTargetFixtures(10, "tagABCTargets", "first description")); - final TargetTag tagA = tagManagement.createTargetTag(new TargetTag("A")); - final TargetTag tagB = tagManagement.createTargetTag(new TargetTag("B")); - final TargetTag tagC = tagManagement.createTargetTag(new TargetTag("C")); - tagManagement.createTargetTag(new TargetTag("X")); + final TargetTag tagA = tagManagement.createTargetTag(new JpaTargetTag("A")); + final TargetTag tagB = tagManagement.createTargetTag(new JpaTargetTag("B")); + final TargetTag tagC = tagManagement.createTargetTag(new JpaTargetTag("C")); + tagManagement.createTargetTag(new JpaTargetTag("X")); // doing different assignments targetManagement.toggleTagAssignment(tagATargets, tagA); @@ -610,9 +612,9 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Test @Description("Tests the unassigment of tags to multiple targets.") public void targetTagBulkUnassignments() { - final TargetTag targTagA = tagManagement.createTargetTag(new TargetTag("Targ-A-Tag")); - final TargetTag targTagB = tagManagement.createTargetTag(new TargetTag("Targ-B-Tag")); - final TargetTag targTagC = tagManagement.createTargetTag(new TargetTag("Targ-C-Tag")); + final TargetTag targTagA = tagManagement.createTargetTag(new JpaTargetTag("Targ-A-Tag")); + final TargetTag targTagB = tagManagement.createTargetTag(new JpaTargetTag("Targ-B-Tag")); + final TargetTag targTagC = tagManagement.createTargetTag(new JpaTargetTag("Targ-C-Tag")); final List targAs = targetManagement .createTargets(TestDataUtil.buildTargetFixtures(25, "target-id-A", "first description")); @@ -673,7 +675,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Test @Description("Retrieves targets by ID with lazy loading of the tags. Checks the successfull load.") public void findTargetsByControllerIDsWithTags() { - final TargetTag targTagA = tagManagement.createTargetTag(new TargetTag("Targ-A-Tag")); + final TargetTag targTagA = tagManagement.createTargetTag(new JpaTargetTag("Targ-A-Tag")); final List targAs = targetManagement .createTargets(TestDataUtil.buildTargetFixtures(25, "target-id-A", "first description")); @@ -711,7 +713,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Description("Test that NO TAG functionality which gives all targets with no tag assigned.") public void findTargetsWithNoTag() { - final TargetTag targTagA = tagManagement.createTargetTag(new TargetTag("Targ-A-Tag")); + final TargetTag targTagA = tagManagement.createTargetTag(new JpaTargetTag("Targ-A-Tag")); final List targAs = targetManagement .createTargets(TestDataUtil.buildTargetFixtures(25, "target-id-A", "first description")); targetManagement.toggleTagAssignment(targAs, targTagA); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java index 45e56167a..c8f34cd48 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java @@ -11,6 +11,12 @@ package org.eclipse.hawkbit.repository.model; import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.junit.Test; import ru.yandex.qatools.allure.annotations.Description; @@ -25,29 +31,29 @@ public class ModelEqualsHashcodeTest extends AbstractIntegrationTest { @Description("Verfies that different objects even with identical primary key, version and tenant " + "return different hash codes.") public void differentEntitiesReturnDifferentHashCodes() { - assertThat(new Action().hashCode()).as("action should have different hashcode than action status") - .isNotEqualTo(new ActionStatus().hashCode()); - assertThat(new DistributionSet().hashCode()) + assertThat(new JpaAction().hashCode()).as("action should have different hashcode than action status") + .isNotEqualTo(new JpaActionStatus().hashCode()); + assertThat(new JpaDistributionSet().hashCode()) .as("Distribution set should have different hashcode than software module") - .isNotEqualTo(new SoftwareModule().hashCode()); - assertThat(new DistributionSet().hashCode()) + .isNotEqualTo(new JpaSoftwareModule().hashCode()); + assertThat(new JpaDistributionSet().hashCode()) .as("Distribution set should have different hashcode than action status") - .isNotEqualTo(new ActionStatus().hashCode()); - assertThat(new DistributionSetType().hashCode()) + .isNotEqualTo(new JpaActionStatus().hashCode()); + assertThat(new JpaDistributionSetType().hashCode()) .as("Distribution set type should have different hashcode than action status") - .isNotEqualTo(new ActionStatus().hashCode()); + .isNotEqualTo(new JpaActionStatus().hashCode()); } @Test @Description("Verfies that different object even with identical primary key, version and tenant " + "are not equal.") public void differentEntitiesAreNotEqual() { - assertThat(new Action().equals(new ActionStatus())).as("action equals action status").isFalse(); - assertThat(new DistributionSet().equals(new SoftwareModule())).as("Distribution set equals software module") + assertThat(new JpaAction().equals(new JpaActionStatus())).as("action equals action status").isFalse(); + assertThat(new JpaDistributionSet().equals(new JpaSoftwareModule())) + .as("Distribution set equals software module").isFalse(); + assertThat(new JpaDistributionSet().equals(new JpaActionStatus())).as("Distribution set equals action status") .isFalse(); - assertThat(new DistributionSet().equals(new ActionStatus())).as("Distribution set equals action status") - .isFalse(); - assertThat(new DistributionSetType().equals(new ActionStatus())) + assertThat(new JpaDistributionSetType().equals(new JpaActionStatus())) .as("Distribution set type equals action status").isFalse(); } @@ -55,9 +61,9 @@ public class ModelEqualsHashcodeTest extends AbstractIntegrationTest { @Description("Verfies that updated entities are not equal.") public void changedEntitiesAreNotEqual() { final SoftwareModuleType type = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test", "test", "test", 1)); + .createSoftwareModuleType(new JpaSoftwareModuleType("test", "test", "test", 1)); assertThat(type).as("persited entity is not equal to regular object") - .isNotEqualTo(new SoftwareModuleType("test", "test", "test", 1)); + .isNotEqualTo(new JpaSoftwareModuleType("test", "test", "test", 1)); type.setDescription("another"); final SoftwareModuleType updated = softwareManagement.updateSoftwareModuleType(type); @@ -68,9 +74,9 @@ public class ModelEqualsHashcodeTest extends AbstractIntegrationTest { @Description("Verify that no proxy of the entity manager has an influence on the equals or hashcode result.") public void managedEntityIsEqualToUnamangedObjectWithSameKey() { final SoftwareModuleType type = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test", "test", "test", 1)); + .createSoftwareModuleType(new JpaSoftwareModuleType("test", "test", "test", 1)); - final SoftwareModuleType mock = new SoftwareModuleType("test", "test", "test", 1); + final JpaSoftwareModuleType mock = new JpaSoftwareModuleType("test", "test", "test", 1); mock.setId(type.getId()); mock.setOptLockRevision(type.getOptLockRevision()); mock.setTenant(type.getTenant()); @@ -84,9 +90,9 @@ public class ModelEqualsHashcodeTest extends AbstractIntegrationTest { @Description("Verfies that updated entities do not have the same hashcode.") public void updatedEntitiesHaveDifferentHashcodes() { final SoftwareModuleType type = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test", "test", "test", 1)); + .createSoftwareModuleType(new JpaSoftwareModuleType("test", "test", "test", 1)); assertThat(type.hashCode()).as("persited entity does not have same hashcode as regular object") - .isNotEqualTo(new SoftwareModuleType("test", "test", "test", 1).hashCode()); + .isNotEqualTo(new JpaSoftwareModuleType("test", "test", "test", 1).hashCode()); final int beforeChange = type.hashCode(); type.setDescription("another"); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java index 8b20af27d..b37d70a33 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java @@ -13,6 +13,8 @@ import static org.junit.Assert.fail; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.ActionFields; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Target; @@ -20,7 +22,6 @@ import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Slice; -import org.springframework.data.jpa.domain.Specification; import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; @@ -31,20 +32,20 @@ import ru.yandex.qatools.allure.annotations.Stories; public class RSQLActionFieldsTest extends AbstractIntegrationTest { private Target target; - private Action action; + private JpaAction action; @Before public void setupBeforeTest() { - target = new Target("targetId123"); + target = new JpaTarget("targetId123"); target.setDescription("targetId123"); targetManagement.createTarget(target); - action = new Action(); + action = new JpaAction(); action.setActionType(ActionType.SOFT); target.getActions().add(action); action.setTarget(target); actionRepository.save(action); for (int i = 0; i < 10; i++) { - final Action newAction = new Action(); + final JpaAction newAction = new JpaAction(); newAction.setActionType(ActionType.SOFT); newAction.setActive(i % 2 == 0); newAction.setTarget(target); @@ -79,10 +80,9 @@ public class RSQLActionFieldsTest extends AbstractIntegrationTest { private void assertRSQLQuery(final String rsqlParam, final long expectedEntities) { - final Specification parse = RSQLUtility.parse(rsqlParam, ActionFields.class); - final Slice findEnitity = deploymentManagement.findActionsByTarget(parse, target, + final Slice findEnitity = deploymentManagement.findActionsByTarget(rsqlParam, target, new PageRequest(0, 100)); - final long countAllEntities = deploymentManagement.countActionsByTarget(parse, target); + final long countAllEntities = deploymentManagement.countActionsByTarget(rsqlParam, target); assertThat(findEnitity).isNotNull(); assertThat(countAllEntities).isEqualTo(expectedEntities); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java index 6b1682820..bd46ed387 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java @@ -16,8 +16,9 @@ import java.util.Arrays; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.DistributionSetFields; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.junit.Before; import org.junit.Test; @@ -39,19 +40,20 @@ public class RSQLDistributionSetFieldTest extends AbstractIntegrationTest { ds.setDescription("DS"); ds = distributionSetManagement.updateDistributionSet(ds); distributionSetManagement - .createDistributionSetMetadata(new DistributionSetMetadata("metaKey", ds, "metaValue")); + .createDistributionSetMetadata(new JpaDistributionSetMetadata("metaKey", ds, "metaValue")); DistributionSet ds2 = TestDataUtil .generateDistributionSets("NewDS", 3, softwareManagement, distributionSetManagement).get(0); ds2.setDescription("DS%"); ds2 = distributionSetManagement.updateDistributionSet(ds2); - distributionSetManagement.createDistributionSetMetadata(new DistributionSetMetadata("metaKey", ds2, "value")); + distributionSetManagement + .createDistributionSetMetadata(new JpaDistributionSetMetadata("metaKey", ds2, "value")); - final DistributionSetTag targetTag = tagManagement.createDistributionSetTag(new DistributionSetTag("Tag1")); - tagManagement.createDistributionSetTag(new DistributionSetTag("Tag2")); - tagManagement.createDistributionSetTag(new DistributionSetTag("Tag3")); - tagManagement.createDistributionSetTag(new DistributionSetTag("Tag4")); + final DistributionSetTag targetTag = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("Tag1")); + tagManagement.createDistributionSetTag(new JpaDistributionSetTag("Tag2")); + tagManagement.createDistributionSetTag(new JpaDistributionSetTag("Tag3")); + tagManagement.createDistributionSetTag(new JpaDistributionSetTag("Tag4")); distributionSetManagement.assignTag(Arrays.asList(ds.getId(), ds2.getId()), targetTag); } @@ -137,8 +139,8 @@ public class RSQLDistributionSetFieldTest extends AbstractIntegrationTest { } private void assertRSQLQuery(final String rsqlParam, final long excpectedEntity) { - final Page find = distributionSetManagement.findDistributionSetsAll( - RSQLUtility.parse(rsqlParam, DistributionSetFields.class), new PageRequest(0, 100), false); + final Page find = distributionSetManagement.findDistributionSetsAll(rsqlParam, + new PageRequest(0, 100), false); final long countAll = find.getTotalElements(); assertThat(find).as("Founded entity is should not be null").isNotNull(); assertThat(countAll).as("Founded entity size is wrong").isEqualTo(excpectedEntity); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java index 755e5a61f..09c1e8dd0 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java @@ -16,6 +16,7 @@ import java.util.List; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.junit.Before; @@ -41,7 +42,7 @@ public class RSQLDistributionSetMetadataFieldsTest extends AbstractIntegrationTe final List metadata = new ArrayList<>(); for (int i = 0; i < 5; i++) { - metadata.add(new DistributionSetMetadata("" + i, distributionSet, "" + i)); + metadata.add(new JpaDistributionSetMetadata("" + i, distributionSet, "" + i)); } distributionSetManagement.createDistributionSetMetadata(metadata); @@ -68,8 +69,7 @@ public class RSQLDistributionSetMetadataFieldsTest extends AbstractIntegrationTe private void assertRSQLQuery(final String rsqlParam, final long expectedEntities) { final Page findEnitity = distributionSetManagement - .findDistributionSetMetadataByDistributionSetId(distributionSetId, - RSQLUtility.parse(rsqlParam, DistributionSetMetadataFields.class), new PageRequest(0, 100)); + .findDistributionSetMetadataByDistributionSetId(distributionSetId, rsqlParam, new PageRequest(0, 100)); final long countAllEntities = findEnitity.getTotalElements(); assertThat(findEnitity).isNotNull(); assertThat(countAllEntities).isEqualTo(expectedEntities); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java index 18da430c7..83c31b31a 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java @@ -13,11 +13,12 @@ import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.RolloutGroupFields; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupConditionBuilder; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditionBuilder; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; @@ -75,8 +76,8 @@ public class RSQLRolloutGroupFields extends AbstractIntegrationTest { } private void assertRSQLQuery(final String rsqlParam, final long expcetedTargets) { - final Page findTargetPage = rolloutGroupManagement.findRolloutGroupsAll(rollout, - RSQLUtility.parse(rsqlParam, RolloutGroupFields.class), new PageRequest(0, 100)); + final Page findTargetPage = rolloutGroupManagement.findRolloutGroupsAll(rollout, rsqlParam, + new PageRequest(0, 100)); final long countTargetsAll = findTargetPage.getTotalElements(); assertThat(findTargetPage).isNotNull(); assertThat(countTargetsAll).isEqualTo(expcetedTargets); @@ -84,7 +85,7 @@ public class RSQLRolloutGroupFields extends AbstractIntegrationTest { private Rollout createRollout(final String name, final int amountGroups, final long distributionSetId, final String targetFilterQuery) { - final Rollout rollout = new Rollout(); + final Rollout rollout = new JpaRollout(); rollout.setDistributionSet(distributionSetManagement.findDistributionSetById(distributionSetId)); rollout.setName(name); rollout.setTargetFilterQuery(targetFilterQuery); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleFieldTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleFieldTest.java index 0c113fd2b..b049daa0c 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleFieldTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleFieldTest.java @@ -12,6 +12,8 @@ import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.SoftwareModuleFields; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.junit.Before; @@ -29,18 +31,18 @@ public class RSQLSoftwareModuleFieldTest extends AbstractIntegrationTest { @Before public void setupBeforeTest() { - final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", "agent-hub", "")); - softwareManagement.createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", "aa", "")); - softwareManagement.createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", "aa", "")); + final JpaSoftwareModule ah = (JpaSoftwareModule) softwareManagement + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", "agent-hub", "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(runtimeType, "oracle-jre", "1.7.2", "aa", "")); + softwareManagement.createSoftwareModule(new JpaSoftwareModule(osType, "poky", "3.0.2", "aa", "")); - final SoftwareModule ah2 = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub2", "1.0.1", "agent-hub2", "")); + final JpaSoftwareModule ah2 = (JpaSoftwareModule) softwareManagement + .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub2", "1.0.1", "agent-hub2", "")); - final SoftwareModuleMetadata softwareModuleMetadata = new SoftwareModuleMetadata("metaKey", ah, "metaValue"); + final SoftwareModuleMetadata softwareModuleMetadata = new JpaSoftwareModuleMetadata("metaKey", ah, "metaValue"); softwareManagement.createSoftwareModuleMetadata(softwareModuleMetadata); - final SoftwareModuleMetadata softwareModuleMetadata2 = new SoftwareModuleMetadata("metaKey", ah2, "value"); + final SoftwareModuleMetadata softwareModuleMetadata2 = new JpaSoftwareModuleMetadata("metaKey", ah2, "value"); softwareManagement.createSoftwareModuleMetadata(softwareModuleMetadata2); } @@ -101,8 +103,8 @@ public class RSQLSoftwareModuleFieldTest extends AbstractIntegrationTest { } private void assertRSQLQuery(final String rsqlParam, final long excpectedEntity) { - final Page find = softwareManagement.findSoftwareModulesByPredicate( - RSQLUtility.parse(rsqlParam, SoftwareModuleFields.class), new PageRequest(0, 100)); + final Page find = softwareManagement.findSoftwareModulesByPredicate(rsqlParam, + new PageRequest(0, 100)); final long countAll = find.getTotalElements(); assertThat(find).isNotNull(); assertThat(countAll).isEqualTo(excpectedEntity); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleMetadataFieldsTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleMetadataFieldsTest.java index 44fa3e3cd..362428887 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleMetadataFieldsTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleMetadataFieldsTest.java @@ -16,6 +16,8 @@ import java.util.List; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.SoftwareModuleMetadataFields; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.junit.Before; @@ -36,13 +38,13 @@ public class RSQLSoftwareModuleMetadataFieldsTest extends AbstractIntegrationTes @Before public void setupBeforeTest() { final SoftwareModule softwareModule = softwareManagement.createSoftwareModule( - new SoftwareModule(TestDataUtil.findOrCreateSoftwareModuleType(softwareManagement, "application"), + new JpaSoftwareModule(TestDataUtil.findOrCreateSoftwareModuleType(softwareManagement, "application"), "application", "1.0.0", "Desc", "vendor Limited, California")); softwareModuleId = softwareModule.getId(); final List metadata = new ArrayList<>(); for (int i = 0; i < 5; i++) { - metadata.add(new SoftwareModuleMetadata("" + i, softwareModule, "" + i)); + metadata.add(new JpaSoftwareModuleMetadata("" + i, softwareModule, "" + i)); } softwareManagement.createSoftwareModuleMetadata(metadata); @@ -70,8 +72,7 @@ public class RSQLSoftwareModuleMetadataFieldsTest extends AbstractIntegrationTes private void assertRSQLQuery(final String rsqlParam, final long expectedEntities) { final Page findEnitity = softwareManagement - .findSoftwareModuleMetadataBySoftwareModuleId(softwareModuleId, - RSQLUtility.parse(rsqlParam, SoftwareModuleMetadataFields.class), new PageRequest(0, 100)); + .findSoftwareModuleMetadataBySoftwareModuleId(softwareModuleId, rsqlParam, new PageRequest(0, 100)); final long countAllEntities = findEnitity.getTotalElements(); assertThat(findEnitity).isNotNull(); assertThat(countAllEntities).isEqualTo(expectedEntities); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java index 268bddf50..37a501a3f 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java @@ -59,8 +59,8 @@ public class RSQLSoftwareModuleTypeFieldsTest extends AbstractIntegrationTest { } private void assertRSQLQuery(final String rsqlParam, final long excpectedEntity) { - final Page find = softwareManagement.findSoftwareModuleTypesByPredicate( - RSQLUtility.parse(rsqlParam, SoftwareModuleTypeFields.class), new PageRequest(0, 100)); + final Page find = softwareManagement.findSoftwareModuleTypesByPredicate(rsqlParam, + new PageRequest(0, 100)); final long countAll = find.getTotalElements(); assertThat(find).isNotNull(); assertThat(countAll).isEqualTo(excpectedEntity); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTagFieldsTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTagFieldsTest.java index b35ed13d1..85474e70e 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTagFieldsTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTagFieldsTest.java @@ -12,6 +12,8 @@ import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.TagFields; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.TargetTag; import org.junit.Before; @@ -31,9 +33,9 @@ public class RSQLTagFieldsTest extends AbstractIntegrationTest { public void seuptBeforeTest() { for (int i = 0; i < 5; i++) { - final TargetTag targetTag = new TargetTag("" + i, "" + i, i % 2 == 0 ? "red" : "blue"); + final TargetTag targetTag = new JpaTargetTag("" + i, "" + i, i % 2 == 0 ? "red" : "blue"); tagManagement.createTargetTag(targetTag); - final DistributionSetTag distributionSetTag = new DistributionSetTag("" + i, "" + i, + final DistributionSetTag distributionSetTag = new JpaDistributionSetTag("" + i, "" + i, i % 2 == 0 ? "red" : "blue"); tagManagement.createDistributionSetTag(distributionSetTag); } @@ -101,8 +103,8 @@ public class RSQLTagFieldsTest extends AbstractIntegrationTest { private void assertRSQLQueryDistributionSet(final String rsqlParam, final long expectedEntities) { - final Page findEnitity = tagManagement - .findAllDistributionSetTags(RSQLUtility.parse(rsqlParam, TagFields.class), new PageRequest(0, 100)); + final Page findEnitity = tagManagement.findAllDistributionSetTags(rsqlParam, + new PageRequest(0, 100)); final long countAllEntities = findEnitity.getTotalElements(); assertThat(findEnitity).isNotNull(); assertThat(countAllEntities).isEqualTo(expectedEntities); @@ -110,8 +112,7 @@ public class RSQLTagFieldsTest extends AbstractIntegrationTest { private void assertRSQLQueryTarget(final String rsqlParam, final long expectedEntities) { - final Page findEnitity = tagManagement - .findAllTargetTags(RSQLUtility.parse(rsqlParam, TagFields.class), new PageRequest(0, 100)); + final Page findEnitity = tagManagement.findAllTargetTags(rsqlParam, new PageRequest(0, 100)); final long countAllEntities = findEnitity.getTotalElements(); assertThat(findEnitity).isNotNull(); assertThat(countAllEntities).isEqualTo(expectedEntities); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java index 54efab860..37fffec99 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java @@ -16,6 +16,9 @@ import java.util.Arrays; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; @@ -40,27 +43,27 @@ public class RSQLTargetFieldTest extends AbstractIntegrationTest { final DistributionSet ds = TestDataUtil.generateDistributionSet("AssignedDs", softwareManagement, distributionSetManagement); - final Target target = new Target("targetId123"); + final JpaTarget target = new JpaTarget("targetId123"); target.setDescription("targetId123"); - final TargetInfo targetInfo = new TargetInfo(target); + final TargetInfo targetInfo = new JpaTargetInfo(target); targetInfo.getControllerAttributes().put("revision", "1.1"); target.setTargetInfo(targetInfo); - target.getTargetInfo().setUpdateStatus(TargetUpdateStatus.PENDING); + ((JpaTargetInfo) target.getTargetInfo()).setUpdateStatus(TargetUpdateStatus.PENDING); targetManagement.createTarget(target); - final Target target2 = new Target("targetId1234"); + final JpaTarget target2 = new JpaTarget("targetId1234"); target2.setDescription("targetId1234"); - final TargetInfo targetInfo2 = new TargetInfo(target2); + final TargetInfo targetInfo2 = new JpaTargetInfo(target2); targetInfo2.getControllerAttributes().put("revision", "1.2"); target2.setTargetInfo(targetInfo2); targetManagement.createTarget(target2); - targetManagement.createTarget(new Target("targetId1235")); - targetManagement.createTarget(new Target("targetId1236")); + targetManagement.createTarget(new JpaTarget("targetId1235")); + targetManagement.createTarget(new JpaTarget("targetId1236")); - final TargetTag targetTag = tagManagement.createTargetTag(new TargetTag("Tag1")); - tagManagement.createTargetTag(new TargetTag("Tag2")); - tagManagement.createTargetTag(new TargetTag("Tag3")); - tagManagement.createTargetTag(new TargetTag("Tag4")); + final TargetTag targetTag = tagManagement.createTargetTag(new JpaTargetTag("Tag1")); + tagManagement.createTargetTag(new JpaTargetTag("Tag2")); + tagManagement.createTargetTag(new JpaTargetTag("Tag3")); + tagManagement.createTargetTag(new JpaTargetTag("Tag4")); targetManagement.assignTag(Arrays.asList(target.getControllerId(), target2.getControllerId()), targetTag); @@ -163,8 +166,7 @@ public class RSQLTargetFieldTest extends AbstractIntegrationTest { } private void assertRSQLQuery(final String rsqlParam, final long expcetedTargets) { - final Page findTargetPage = targetManagement - .findTargetsAll(RSQLUtility.parse(rsqlParam, TargetFields.class), new PageRequest(0, 100)); + final Page findTargetPage = targetManagement.findTargetsAll(rsqlParam, new PageRequest(0, 100)); final long countTargetsAll = findTargetPage.getTotalElements(); assertThat(findTargetPage).isNotNull(); assertThat(countTargetsAll).isEqualTo(expcetedTargets); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java index 73958e6fa..9cacd9a82 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java @@ -33,12 +33,17 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; @@ -129,7 +134,7 @@ public final class RepositoryDataGenerator { public void generateTestTagetGroup(final String group, final int sizeMultiplikator) { final DistributionSetTag dsTag = tagManagement - .createDistributionSetTag(new DistributionSetTag("For " + group + "s")); + .createDistributionSetTag(new JpaDistributionSetTag("For " + group + "s")); auditingHandler.setDateTimeProvider(() -> { final Calendar instance = Calendar.getInstance(); @@ -203,14 +208,14 @@ public final class RepositoryDataGenerator { "Controller retrieved update action and should start now the download."); // download - final ActionStatus download = new ActionStatus(); + final ActionStatus download = new JpaActionStatus(); download.setAction(action); download.setStatus(Status.DOWNLOAD); download.addMessage("Controller started download."); action = controllerManagement.addUpdateActionStatus(download); // warning - final ActionStatus warning = new ActionStatus(); + final ActionStatus warning = new JpaActionStatus(); warning.setAction(action); warning.setStatus(Status.WARNING); warning.addMessage("Some warning: " + jlorem.words(new Random().nextInt(50))); @@ -218,13 +223,13 @@ public final class RepositoryDataGenerator { // garbage for (int i = 0; i < new Random().nextInt(10); i++) { - final ActionStatus running = new ActionStatus(); + final ActionStatus running = new JpaActionStatus(); running.setAction(action); running.setStatus(Status.RUNNING); running.addMessage("Still running: " + jlorem.words(new Random().nextInt(50))); action = controllerManagement.addUpdateActionStatus(running); for (int g = 0; g < new Random().nextInt(5); g++) { - final ActionStatus rand = new ActionStatus(); + final ActionStatus rand = new JpaActionStatus(); rand.setAction(action); rand.setStatus(Status.RUNNING); rand.addMessage(jlorem.words(new Random().nextInt(50))); @@ -233,7 +238,7 @@ public final class RepositoryDataGenerator { } // close - final ActionStatus close = new ActionStatus(); + final ActionStatus close = new JpaActionStatus(); close.setAction(action); // with error @@ -262,7 +267,7 @@ public final class RepositoryDataGenerator { "Controller retrieved update action and should start now the download."); // close - final ActionStatus close = new ActionStatus(); + final ActionStatus close = new JpaActionStatus(); close.setAction(action); close.setStatus(Status.FINISHED); close.addMessage("Controller reported CLOSED with OK!"); @@ -274,7 +279,7 @@ public final class RepositoryDataGenerator { private List createTargetTestGroup(final String group, final int targets) { LOG.debug("createTargetTestGroup: create group {}", group); - final TargetTag targTag = tagManagement.createTargetTag(new TargetTag(group)); + final TargetTag targTag = tagManagement.createTargetTag(new JpaTargetTag(group)); final List targAs = targetManagement.createTargets(buildTargets(targets, group), TargetUpdateStatus.REGISTERED, System.currentTimeMillis() - new Random().nextInt(50_000_000), @@ -291,7 +296,7 @@ public final class RepositoryDataGenerator { final List result = new ArrayList(noOfTgts); for (int i = 0; i < noOfTgts; i++) { - final Target target = new Target(UUID.randomUUID().toString()); + final Target target = new JpaTarget(UUID.randomUUID().toString()); final StringBuilder builder = new StringBuilder(); builder.append(descriptionPrefix); @@ -331,7 +336,7 @@ public final class RepositoryDataGenerator { final String[] modulesTypes = { "HeadUnit_FW", "EDC17_FW", "OSGi_Bundle" }; final DistributionSetTag depTag = tagManagement - .createDistributionSetTag(new DistributionSetTag("deprecated")); + .createDistributionSetTag(new JpaDistributionSetTag("deprecated")); Arrays.stream(targetTestGroups).forEach(group -> { generateTestTagetGroup(group, sizeMultiplikator); @@ -346,11 +351,11 @@ public final class RepositoryDataGenerator { LOG.debug("initDemoRepo - start now Extra Software Modules and types"); Arrays.stream(modulesTypes).forEach(typeName -> { final SoftwareModuleType smtype = softwareManagement.createSoftwareModuleType( - new SoftwareModuleType(typeName.toLowerCase().replaceAll("\\s+", ""), typeName, + new JpaSoftwareModuleType(typeName.toLowerCase().replaceAll("\\s+", ""), typeName, jlorem.words(5), Integer.MAX_VALUE)); for (int i1 = 0; i1 < sizeMultiplikator; i1++) { - softwareManagement.createSoftwareModule(new SoftwareModule(smtype, typeName + i1, "1.0." + i1, + softwareManagement.createSoftwareModule(new JpaSoftwareModule(smtype, typeName + i1, "1.0." + i1, jlorem.words(5), "the " + typeName + " vendor Inc.")); } @@ -371,7 +376,7 @@ public final class RepositoryDataGenerator { // pending final DistributionSetTag dsTag = tagManagement - .createDistributionSetTag(new DistributionSetTag("OnlyAssignedTag")); + .createDistributionSetTag(new JpaDistributionSetTag("OnlyAssignedTag")); final DistributionSet ds = TestDataUtil.generateDistributionSet("Pending DS", "v1.0", softwareManagement, distributionSetManagement, Arrays.asList(new DistributionSetTag[] { dsTag })); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java index 67b9b5a26..ca0ef3840 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java @@ -13,8 +13,10 @@ import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.WithSpringAuthorityRule; import org.eclipse.hawkbit.WithUser; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.Target; import org.junit.Test; import org.springframework.data.domain.Page; @@ -162,7 +164,7 @@ public class MultiTenancyEntityTest extends AbstractIntegrationTest { private Target createTargetForTenant(final String controllerId, final String tenant) throws Exception { return securityRule.runAs(WithSpringAuthorityRule.withUserAndTenant("user", tenant), - () -> targetManagement.createTarget(new Target(controllerId))); + () -> targetManagement.createTarget(new JpaTarget(controllerId))); } private Slice findTargetsForTenant(final String tenant) throws Exception { @@ -180,12 +182,12 @@ public class MultiTenancyEntityTest extends AbstractIntegrationTest { private DistributionSet createDistributionSetForTenant(final String name, final String version, final String tenant) throws Exception { return securityRule.runAs(WithSpringAuthorityRule.withUserAndTenant("user", tenant), () -> { - final DistributionSet ds = new DistributionSet(); + final JpaDistributionSet ds = new JpaDistributionSet(); ds.setName(name); ds.setTenant(tenant); ds.setVersion(version); ds.setType(distributionSetManagement - .createDistributionSetType(new DistributionSetType("typetest", "test", "foobar"))); + .createDistributionSetType(new JpaDistributionSetType("typetest", "test", "foobar"))); return distributionSetManagement.createDistributionSet(ds); }); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java index d6e057edd..a36443024 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/ArtifactStoreController.java @@ -149,7 +149,7 @@ public class ArtifactStoreController { actionStatus.addMessage( ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } - controllerManagement.addInformationalActionStatus(actionStatus); + controllerManagement.addActionStatusMessage(actionStatus); return action; } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java index db5efd37c..14383f30b 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/controller/RootController.java @@ -150,7 +150,7 @@ public class RootController { return new ResponseEntity<>( DataConversionHelper.fromTarget(target, controllerManagement.findActionByTargetAndActive(target), - controllerManagement.getPollingTime(), tenantAware), + controllerManagement.findPollingTime(), tenantAware), HttpStatus.OK); } @@ -222,7 +222,7 @@ public class RootController { statusMessage.addMessage( ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } - controllerManagement.addInformationalActionStatus(statusMessage); + controllerManagement.addActionStatusMessage(statusMessage); return action; } @@ -371,7 +371,8 @@ public class RootController { return new ResponseEntity<>(HttpStatus.GONE); } - controllerManagement.addUpdateActionStatus(generateUpdateStatus(feedback, targetid, feedback.getId(), action)); + controllerManagement.addUpdateActionStatus(generateUpdateStatus(feedback, targetid, feedback.getId(), action), + action); return new ResponseEntity<>(HttpStatus.OK); @@ -545,7 +546,7 @@ public class RootController { } controllerManagement - .addCancelActionStatus(generateActionCancelStatus(feedback, target, feedback.getId(), action)); + .addCancelActionStatus(generateActionCancelStatus(feedback, target, feedback.getId(), action), action); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java index 1a766c8c4..27231308b 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetResource.java @@ -22,8 +22,8 @@ import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.TargetWithActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java index 8798f0ec8..f7346a6ff 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/DistributionSetTypeResource.java @@ -69,7 +69,7 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { final Slice findModuleTypessAll; Long countModulesAll; if (rsqlParam != null) { - findModuleTypessAll = distributionSetManagement.findDistributionSetTypesAll( + findModuleTypessAll = distributionSetManagement.findDistributionSetTypesByPredicate( RSQLUtility.parse(rsqlParam, DistributionSetTypeFields.class), pageable); countModulesAll = ((Page) findModuleTypessAll).getTotalElements(); } else { diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java index d8821f113..78cfefa0d 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/RolloutResource.java @@ -178,7 +178,7 @@ public class RolloutResource implements RolloutRestApi { final Page findRolloutGroupsAll; if (rsqlParam != null) { - findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsAll(rollout, + findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsByPredicate(rollout, RSQLUtility.parse(rsqlParam, RolloutGroupFields.class), pageable); } else { findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsByRolloutId(rolloutId, pageable); diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java index 3705e8da3..6254da992 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/DistributionSetResourceTest.java @@ -30,12 +30,12 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.MockMvcResultPrinter; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; +import org.eclipse.hawkbit.repository.ActionRepository; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.ActionRepository; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -890,7 +890,7 @@ public class DistributionSetResourceTest extends AbstractIntegrationTest { for (final String msg : msgs) { statusMessages.addMessage(msg); } - controllerManagament.addUpdateActionStatus(statusMessages); + controllerManagament.addUpdateActionStatus(statusMessages, updActA); return targetManagement.findTargetByControllerID(t.getControllerId()); } diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java index 2d3a9707e..8d27d5114 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/TargetResourceTest.java @@ -108,7 +108,8 @@ public class TargetResourceTest extends AbstractIntegrationTest { final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); actions.get(0).setStatus(Status.FINISHED); controllerManagament.addUpdateActionStatus( - new ActionStatus(actions.get(0), Status.FINISHED, System.currentTimeMillis(), "testmessage")); + new ActionStatus(actions.get(0), Status.FINISHED, System.currentTimeMillis(), "testmessage"), + actions.get(0)); final PageRequest pageRequest = new PageRequest(0, 1000, Direction.ASC, ActionFields.ID.getFieldName()); final ActionStatus status = deploymentManagement @@ -1283,8 +1284,8 @@ public class TargetResourceTest extends AbstractIntegrationTest { final Pageable pageReq = new PageRequest(0, 100); final Action action = actionRepository.findByDistributionSet(pageReq, savedSet).getContent().get(0); - final ActionStatus actionStatus = new ActionStatus(action, Status.FINISHED, 0L); - controllerManagement.addUpdateActionStatus(actionStatus); + final ActionStatus actionStatus = new ActionStatus(action, Status.FINISHED, 0l); + controllerManagement.addUpdateActionStatus(actionStatus, action); } /** From f0a78369f2a1a3a93f043cd9d1951ce66f2f4516 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 21 May 2016 21:01:23 +0200 Subject: [PATCH 136/371] Continued on the model API extraction. Merged rest api split branch. Signed-off-by: Kai Zimmermann --- .../eventbus/event/RolloutChangeEvent.java | 2 - .../repository/ControllerManagement.java | 8 + .../repository/DeploymentManagement.java | 9 +- .../repository/DistributionSetManagement.java | 74 ++-- .../{jpa => }/OffsetBasedPageRequest.java | 12 +- .../repository/RolloutGroupManagement.java | 16 +- .../hawkbit/repository/RolloutManagement.java | 18 +- .../repository/SoftwareManagement.java | 37 +- .../hawkbit/repository/TagManagement.java | 12 +- .../TargetFilterQueryManagement.java | 6 + .../repository/jpa/BaseEntityRepository.java | 4 +- .../jpa/JpaControllerManagement.java | 27 +- .../jpa/JpaDeploymentManagement.java | 29 +- .../jpa/JpaDistributionSetManagement.java | 58 +++- .../jpa/JpaRolloutGroupManagement.java | 31 +- .../repository/jpa/JpaRolloutManagement.java | 41 ++- .../repository/jpa/JpaSoftwareManagement.java | 69 +++- .../repository/jpa/JpaTagManagement.java | 46 ++- .../jpa/JpaTargetFilterQueryManagement.java | 14 +- .../repository/jpa/JpaTargetManagement.java | 37 +- .../jpa/RolloutGroupRepository.java | 2 +- .../repository/jpa/RolloutRepository.java | 2 +- ...Artifact.java => AbstractJpaArtifact.java} | 2 +- ...Entity.java => AbstractJpaBaseEntity.java} | 6 +- ...MetaData.java => AbstractJpaMetaData.java} | 8 +- ...ntity.java => AbstractJpaNamedEntity.java} | 6 +- ...a => AbstractJpaNamedVersionedEntity.java} | 6 +- .../{JpaTag.java => AbstractJpaTag.java} | 6 +- ... => AbstractJpaTenantAwareBaseEntity.java} | 6 +- .../repository/jpa/model/JpaAction.java | 88 +---- .../repository/jpa/model/JpaActionStatus.java | 19 +- .../jpa/model/JpaDistributionSet.java | 57 +-- .../jpa/model/JpaDistributionSetMetadata.java | 3 +- .../jpa/model/JpaDistributionSetTag.java | 2 +- .../jpa/model/JpaDistributionSetType.java | 93 +---- .../jpa/model/JpaExternalArtifact.java | 8 +- .../model/JpaExternalArtifactProvider.java | 6 +- .../jpa/model/JpaLocalArtifact.java | 10 +- .../repository/jpa/model/JpaRollout.java | 72 +--- .../repository/jpa/model/JpaRolloutGroup.java | 283 +-------------- .../jpa/model/JpaSoftwareModule.java | 4 +- .../jpa/model/JpaSoftwareModuleMetadata.java | 2 +- .../jpa/model/JpaSoftwareModuleType.java | 20 +- .../repository/jpa/model/JpaTarget.java | 8 +- .../jpa/model/JpaTargetFilterQuery.java | 2 +- .../repository/jpa/model/JpaTargetInfo.java | 65 +--- .../repository/jpa/model/JpaTargetTag.java | 2 +- .../jpa/model/JpaTenantConfiguration.java | 2 +- .../jpa/model/JpaTenantMetaData.java | 2 +- .../jpa/model/RolloutTargetGroupId.java | 2 +- .../hawkbit/repository/model/Action.java | 139 ++++++-- .../repository/model/ActionStatus.java | 41 ++- .../model/ActionWithStatusCount.java | 24 -- .../hawkbit/repository/model/Artifact.java | 23 +- .../hawkbit/repository/model/BaseEntity.java | 22 ++ .../repository/model/DistributionSet.java | 61 +++- .../model/DistributionSetMetadata.java | 9 +- .../repository/model/DistributionSetTag.java | 8 + .../repository/model/DistributionSetType.java | 38 +- .../repository/model/ExternalArtifact.java | 18 +- .../model/ExternalArtifactProvider.java | 22 +- .../repository/model/LocalArtifact.java | 15 +- .../hawkbit/repository/model/MetaData.java | 16 + .../hawkbit/repository/model/NamedEntity.java | 20 +- .../model/NamedVersionedEntity.java | 11 + .../hawkbit/repository/model/Rollout.java | 101 +++++- .../repository/model/RolloutGroup.java | 119 ++++++- .../repository/model/SoftwareModuleType.java | 4 + .../hawkbit/repository/model/TargetInfo.java | 4 +- .../condition/PauseRolloutGroupAction.java | 2 +- ...artNextGroupRolloutGroupSuccessAction.java | 2 +- .../org/eclipse/hawkbit/TestDataUtil.java | 10 +- .../hawkbit/repository/ActionTest.java | 5 +- .../repository/ControllerManagementTest.java | 2 +- .../repository/DeploymentManagementTest.java | 23 +- .../DistributionSetManagementTest.java | 15 +- .../repository/RolloutManagementTest.java | 19 +- .../repository/SoftwareManagementTest.java | 2 +- .../rsql/RSQLRolloutGroupFields.java | 4 +- .../RSQLSoftwareModuleTypeFieldsTest.java | 2 +- .../tenancy/MultiTenancyEntityTest.java | 2 +- .../hawkbit/rest/util/JsonBuilder.java | 2 +- .../artifacts/details/ArtifactBeanQuery.java | 5 +- .../smtable/BaseSwModuleBeanQuery.java | 2 +- .../smtable/ProxyBaseSoftwareModuleItem.java | 4 +- .../SoftwareModuleAddUpdateWindow.java | 6 +- .../CreateUpdateSoftwareTypeLayout.java | 6 +- .../common/DistributionSetTypeBeanQuery.java | 7 +- .../common/SoftwareModuleTypeBeanQuery.java | 4 +- .../ui/components/ProxyDistribution.java | 3 +- .../hawkbit/ui/components/ProxyTarget.java | 5 +- .../ui/components/ProxyTargetFilter.java | 4 +- .../CreateUpdateDistSetTypeLayout.java | 10 +- .../dstable/ManageDistBeanQuery.java | 6 +- .../smtable/SwModuleBeanQuery.java | 2 +- .../CreateOrUpdateFilterHeader.java | 2 +- .../actionhistory/ActionHistoryTable.java | 22 +- .../DistributionAddUpdateWindowLayout.java | 2 +- .../dstable/DistributionBeanQuery.java | 6 +- ...eateUpdateDistributionTagLayoutWindow.java | 9 +- .../dstag/DistributionTagBeanQuery.java | 2 +- .../dstag/DistributionTagButtons.java | 8 +- .../targettable/BulkUploadHandler.java | 2 +- .../TargetAddUpdateWindowLayout.java | 2 +- .../targettable/TargetBeanQuery.java | 2 +- .../management/targettable/TargetTable.java | 2 +- .../CreateUpdateTargetTagLayout.java | 2 +- .../targettag/TargetTagBeanQuery.java | 2 +- .../targettag/TargetTagFilterButtons.java | 8 +- .../rollout/AddUpdateRolloutWindowLayout.java | 7 +- .../ui/rollout/rollout/ProxyRollout.java | 14 +- .../rolloutgroup/ProxyRolloutGroup.java | 328 +++++++++--------- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 8 +- 113 files changed, 1374 insertions(+), 1247 deletions(-) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/{jpa => }/OffsetBasedPageRequest.java (87%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/{JpaArtifact.java => AbstractJpaArtifact.java} (93%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/{JpaBaseEntity.java => AbstractJpaBaseEntity.java} (96%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/{JpaMetaData.java => AbstractJpaMetaData.java} (90%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/{JpaNamedEntity.java => AbstractJpaNamedEntity.java} (87%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/{JpaNamedVersionedEntity.java => AbstractJpaNamedVersionedEntity.java} (82%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/{JpaTag.java => AbstractJpaTag.java} (86%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/{JpaTenantAwareBaseEntity.java => AbstractJpaTenantAwareBaseEntity.java} (93%) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java index 8f15602b5..576a6b99c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java @@ -8,8 +8,6 @@ */ package org.eclipse.hawkbit.eventbus.event; -import org.eclipse.hawkbit.eventbus.event.AbstractEvent; - /** * Event declaration for the UI to notify the UI that a rollout has been * changed. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index 47ff3c49f..dd91ee07a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.repository; import java.net.URI; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -275,4 +276,11 @@ public interface ControllerManagement { */ ActionStatus generateActionStatus(); + ActionStatus generateActionStatus(Action action, Status status, Long occurredAt, final String message); + + ActionStatus generateActionStatus(Action action, final Status status, Long occurredAt, + final Collection messages); + + ActionStatus generateActionStatus(Action action, Status status, Long occurredAt); + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 070594d4e..f58af4ca6 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -322,8 +322,10 @@ public interface DeploymentManagement { * @return the corresponding {@link Page} of {@link ActionStatus} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Page findActionStatusByAction(@NotNull Pageable pageReq, @NotNull Action action, - boolean withMessages); + Page findActionStatusByAction(@NotNull Pageable pageReq, @NotNull Action action); + + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findActionStatusByActionWithMessages(@NotNull Pageable pageReq, @NotNull Action action); /** * Retrieves all {@link Action}s of a specific target ordered by action ID. @@ -445,4 +447,7 @@ public interface DeploymentManagement { * @return {@link Action} object */ Action generateAction(); + + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Page findActionStatusAll(@NotNull Pageable pageable); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index 2574230b3..9b4dcb8c7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -83,6 +83,15 @@ public interface DistributionSetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Long countDistributionSetsAll(); + /** + * Count all {@link DistributionSet}s in the repository that are not marked + * as deleted. + * + * @return number of {@link DistributionSet}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countDistributionSetsByType(@NotNull DistributionSetType type); + /** * @return number of {@link DistributionSetType}s in the repository. */ @@ -261,20 +270,6 @@ public interface DistributionSetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) DistributionSet findDistributionSetByNameAndVersion(@NotEmpty String distributionName, @NotEmpty String version); - /** - * Retrieves {@link DistributionSet} List for overview purposes (no - * {@link SoftwareModule}s and {@link DistributionSetTag}s). - * - * Please use {@link #findDistributionSetListWithDetails(Iterable)} if - * details are required. - * - * @param dist - * List of {@link DistributionSet} IDs to be found - * @return the found {@link DistributionSet}s - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - List findDistributionSetsAll(Collection dist); - /** * finds all meta data by the given distribution set id. * @@ -305,6 +300,20 @@ public interface DistributionSetManagement { Page findDistributionSetMetadataByDistributionSetId(@NotNull Long distributionSetId, @NotNull String rsqlParam, @NotNull Pageable pageable); + /** + * Retrieves {@link DistributionSet} List for overview purposes (no + * {@link SoftwareModule}s and {@link DistributionSetTag}s). + * + * Please use {@link #findDistributionSetListWithDetails(Iterable)} if + * details are required. + * + * @param dist + * List of {@link DistributionSet} IDs to be found + * @return the found {@link DistributionSet}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + List findDistributionSetsAll(Collection dist); + // TODO discuss: use enum instead of the true,false,null switch ? /** * finds all {@link DistributionSet}s. @@ -328,7 +337,8 @@ public interface DistributionSetManagement { * @return all found {@link DistributionSet}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findDistributionSetsAll(@NotNull Pageable pageReq, Boolean deleted, Boolean complete); + Page findDistributionSetsByDeletedAndOrCompleted(@NotNull Pageable pageReq, Boolean deleted, + Boolean complete); /** * finds all {@link DistributionSet}s. @@ -445,6 +455,26 @@ public interface DistributionSetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) DistributionSetMetadata findOne(@NotNull DsMetadataCompositeKey id); + /** + * Generates an empty {@link DistributionSet} without persisting it. + * + * @return {@link DistributionSet} object + */ + DistributionSet generateDistributionSet(); + + DistributionSetMetadata generateDistributionSetMetadata(); + + DistributionSetMetadata generateDistributionSetMetadata(DistributionSet distributionSet, String key, String value); + + /** + * Generates an empty {@link DistributionSetType} without persisting it. + * + * @return {@link DistributionSetType} object + */ + DistributionSetType generateDistributionSetType(); + + DistributionSetType generateDistributionSetType(String key, String name, String description); + /** * Checks if a {@link DistributionSet} is currently in use by a target in * the repository. @@ -567,17 +597,7 @@ public interface DistributionSetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) DistributionSetType updateDistributionSetType(@NotNull DistributionSetType dsType); - /** - * Generates an empty {@link DistributionSetType} without persisting it. - * - * @return {@link DistributionSetType} object - */ - DistributionSetType generateDistributionSetType(); + DistributionSet generateDistributionSet(String name, String version, String description, DistributionSetType type, + Collection moduleList); - /** - * Generates an empty {@link DistributionSet} without persisting it. - * - * @return {@link DistributionSet} object - */ - DistributionSet generateDistributionSet(); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/OffsetBasedPageRequest.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java similarity index 87% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/OffsetBasedPageRequest.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java index 80bb85461..f28047666 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/OffsetBasedPageRequest.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; @@ -14,13 +14,9 @@ import org.springframework.data.domain.Sort; /** * An implementation of the {@link PageRequest} which is offset based by means * the offset is given and not the page number as in the original - * {@link PageRequest} implemntation where the offset is generated. Due that the - * REST-API is working with {@code offset} and {@code limit} parameter we need - * an offset based page request for JPA. - * - * @author Michael Hirsch - * @since 0.2.2 - * + * {@link PageRequest} implementation where the offset is generated. Due that + * the REST-API is working with {@code offset} and {@code limit} parameter we + * need an offset based page request. */ public final class OffsetBasedPageRequest extends PageRequest { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index efad0100c..bf58e3053 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -33,12 +33,12 @@ public interface RolloutGroupManagement { * * @param rolloutId * the ID of the rollout to filter the {@link RolloutGroup}s - * @param page + * @param pageable * the page request to sort and limit the result * @return a page of found {@link RolloutGroup}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findAllRolloutGroupsWithDetailedStatus(@NotNull Long rolloutId, @NotNull Pageable page); + Page findAllRolloutGroupsWithDetailedStatus(@NotNull Long rolloutId, @NotNull Pageable pageable); // TODO discuss: target read perm missing? /** @@ -79,13 +79,13 @@ public interface RolloutGroupManagement { * @param specification * the specification to filter the result set based on attributes * of the {@link RolloutGroup} - * @param page + * @param pageable * the page request to sort and limit the result * @return a page of found {@link RolloutGroup}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) Page findRolloutGroupsAll(@NotNull Rollout rollout, @NotNull String rsqlParam, - @NotNull Pageable page); + @NotNull Pageable pageable); /** * Retrieves a page of {@link RolloutGroup}s filtered by a given @@ -93,12 +93,12 @@ public interface RolloutGroupManagement { * * @param rolloutId * the ID of the rollout to filter the {@link RolloutGroup}s - * @param page + * @param pageable * the page request to sort and limit the result * @return a page of found {@link RolloutGroup}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findRolloutGroupsByRolloutId(@NotNull Long rolloutId, @NotNull Pageable page); + Page findRolloutGroupsByRolloutId(@NotNull Long rolloutId, @NotNull Pageable pageable); // TODO discuss: target read perm missing? /** @@ -122,14 +122,14 @@ public interface RolloutGroupManagement { * rollout group * @param specification * the specification for filtering the targets of a rollout group - * @param page + * @param pageable * the page request to sort and limit the result * * @return Page list of targets of a rollout group */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, @NotNull String rsqlParam, - @NotNull Pageable page); + @NotNull Pageable pageable); /** * Get count of targets in different status in rollout group. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index 140273439..f75ff545b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -13,11 +13,11 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.eventbus.event.RolloutGroupCreatedEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; -import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupConditions; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -149,36 +149,36 @@ public interface RolloutManagement { /** * Retrieves all rollouts. * - * @param page + * @param pageable * the page request to sort and limit the result * @return a page of found rollouts */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findAll(@NotNull Pageable page); + Page findAll(@NotNull Pageable pageable); /** * Get count of targets in different status in rollout. * - * @param page + * @param pageable * the page request to sort and limit the result * @return a list of rollouts with details of targets count for different * statuses * */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findAllRolloutsWithDetailedStatus(@NotNull Pageable page); + Page findAllRolloutsWithDetailedStatus(@NotNull Pageable pageable); /** * Retrieves all rollouts found by the given specification. * * @param specification * the specification to filter rollouts - * @param page + * @param pageable * the page request to sort and limit the result * @return a page of found rollouts */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) - Page findAllWithDetailedStatusByPredicate(@NotNull String rsqlParam, @NotNull Pageable page); + Page findAllWithDetailedStatusByPredicate(@NotNull String rsqlParam, @NotNull Pageable pageable); /** * Finds rollouts by given text in name or description. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java index 1802b1dcc..a586c0bfb 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java @@ -259,7 +259,7 @@ public interface SoftwareManagement { * in case the meta data does not exists for the given key */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - SoftwareModuleMetadata findSoftwareModuleMetadata(@NotNull SwMetadataCompositeKey id); + SoftwareModuleMetadata findSoftwareModuleMetadata(@NotNull SoftwareModule softwareModule, @NotEmpty String key); /** * finds all meta data by the given software module id. @@ -409,7 +409,7 @@ public interface SoftwareManagement { * @return the found {@link SoftwareModuleType}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Page findSoftwareModuleTypesByPredicate(@NotNull String rsqlParam, @NotNull Pageable pageable); + Page findSoftwareModuleTypesAll(@NotNull String rsqlParam, @NotNull Pageable pageable); /** * Retrieves software module including details ( @@ -478,4 +478,37 @@ public interface SoftwareManagement { * @return {@link SoftwareModule} object */ SoftwareModule generateSoftwareModule(); + + /** + * Generates a {@link SoftwareModule} without persisting it. + * + * @param type + * of the {@link SoftwareModule} + * @param name + * abstract name of the {@link SoftwareModule} + * @param version + * of the {@link SoftwareModule} + * @param description + * of the {@link SoftwareModule} + * @param vendor + * of the {@link SoftwareModule} + * + * @return {@link SoftwareModule} object + */ + SoftwareModule generateSoftwareModule(SoftwareModuleType type, String name, String version, String description, + String vendor); + + /** + * Generates an empty {@link SoftwareModuleMetadata} pair without persisting + * it. + * + * @return {@link SoftwareModuleMetadata} object + */ + SoftwareModuleMetadata generateSoftwareModuleMetadata(); + + SoftwareModuleMetadata generateSoftwareModuleMetadata(SoftwareModule softwareModule, String key, String value); + + SoftwareModuleType generateSoftwareModuleType(final String key, final String name, final String description, + final int maxAssignments); + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java index fa38e318b..786308e70 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java @@ -148,13 +148,13 @@ public interface TagManagement { /** * returns all {@link TargetTag}s. * - * @param pageReq + * @param pageable * page parameter * * @return all {@link TargetTag}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Page findAllTargetTags(@NotNull Pageable pageReq); + Page findAllTargetTags(@NotNull Pageable pageable); /** * Retrieves all target tags based on the given specification. @@ -245,4 +245,12 @@ public interface TagManagement { */ DistributionSetTag generateDistributionSetTag(); + TargetTag generateTargetTag(String name, String description, String colour); + + TargetTag generateTargetTag(String name); + + DistributionSetTag generateDistributionSetTag(String name, String description, String colour); + + DistributionSetTag generateDistributionSetTag(String name); + } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java index caf045c93..127e22e63 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java @@ -96,4 +96,10 @@ public interface TargetFilterQueryManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) TargetFilterQuery updateTargetFilterQuery(@NotNull TargetFilterQuery targetFilterQuery); + /** + * Generates an empty {@link TargetFilterQuery} without persisting it. + * + * @return {@link TargetFilterQuery} object + */ + TargetFilterQuery generateTargetFilterQuery(); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java index 92bec68a2..0d9f72b37 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.io.Serializable; -import org.eclipse.hawkbit.repository.jpa.model.JpaTenantAwareBaseEntity; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaTenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.repository.NoRepositoryBean; @@ -28,7 +28,7 @@ import org.springframework.transaction.annotation.Transactional; */ @NoRepositoryBean @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) -public interface BaseEntityRepository +public interface BaseEntityRepository extends PagingAndSortingRepository { /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index c7a229bf0..09283f67c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.net.URI; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -286,7 +287,7 @@ public class JpaControllerManagement implements ControllerManagement { return actionRepository.save(mergedAction); } - private void handleErrorOnAction(final Action mergedAction, final Target mergedTarget) { + private void handleErrorOnAction(final JpaAction mergedAction, final Target mergedTarget) { mergedAction.setActive(false); mergedAction.setStatus(Status.ERROR); mergedTarget.setAssignedDistributionSet(null); @@ -437,4 +438,28 @@ public class JpaControllerManagement implements ControllerManagement { public ActionStatus generateActionStatus() { return new JpaActionStatus(); } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public ActionStatus generateActionStatus(final Action action, final Status status, final Long occurredAt, + final String message) { + return new JpaActionStatus((JpaAction) action, status, occurredAt, message); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public ActionStatus generateActionStatus(final Action action, final Status status, final Long occurredAt, + final Collection messages) { + + final ActionStatus result = new JpaActionStatus((JpaAction) action, status, occurredAt, null); + messages.forEach(result::addMessage); + + return result; + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public ActionStatus generateActionStatus(final Action action, final Status status, final Long occurredAt) { + return new JpaActionStatus(action, status, occurredAt); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index 3dea0e549..e0ace822d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -598,11 +598,11 @@ public class JpaDeploymentManagement implements DeploymentManagement { return convertAcPage(actionRepository.findAll((Specification) (root, query, cb) -> cb .and(specification.toPredicate(root, query, cb), cb.equal(root.get(JpaAction_.target), target)), - pageable)); + pageable), pageable); } - private static Page convertAcPage(final Page findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertAcPage(final Page findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } @Override @@ -656,13 +656,13 @@ public class JpaDeploymentManagement implements DeploymentManagement { } @Override - public Page findActionStatusByAction(final Pageable pageReq, final Action action, - final boolean withMessages) { - if (withMessages) { - return actionStatusRepository.getByAction(pageReq, (JpaAction) action); - } else { - return actionStatusRepository.findByAction(pageReq, (JpaAction) action); - } + public Page findActionStatusByAction(final Pageable pageReq, final Action action) { + return actionStatusRepository.findByAction(pageReq, (JpaAction) action); + } + + @Override + public Page findActionStatusByActionWithMessages(final Pageable pageReq, final Action action) { + return actionStatusRepository.getByAction(pageReq, (JpaAction) action); } @Override @@ -682,4 +682,13 @@ public class JpaDeploymentManagement implements DeploymentManagement { public Action generateAction() { return new JpaAction(); } + + @Override + public Page findActionStatusAll(final Pageable pageable) { + return convertAcSPage(actionStatusRepository.findAll(pageable), pageable); + } + + private static Page convertAcSPage(final Page findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index 4e33d4960..e17c737e7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -298,11 +298,12 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { final DistributionSetFilter distributionSetFilter) { final List> specList = buildDistributionSetSpecifications( distributionSetFilter); - return convertDsPage(findByCriteriaAPI(pageable, specList)); + return convertDsPage(findByCriteriaAPI(pageable, specList), pageable); } - private static Page convertDsPage(final Page findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertDsPage(final Page findAll, + final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } /** @@ -323,8 +324,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { } @Override - public Page findDistributionSetsAll(final Pageable pageReq, final Boolean deleted, - final Boolean complete) { + public Page findDistributionSetsByDeletedAndOrCompleted(final Pageable pageReq, + final Boolean deleted, final Boolean complete) { final List> specList = new ArrayList<>(); if (deleted != null) { @@ -337,7 +338,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { specList.add(spec); } - return convertDsPage(findByCriteriaAPI(pageReq, specList)); + return convertDsPage(findByCriteriaAPI(pageReq, specList), pageReq); } @Override @@ -351,7 +352,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { specList.add(DistributionSetSpecification.isDeleted(deleted)); } specList.add(spec); - return convertDsPage(findByCriteriaAPI(pageReq, specList)); + return convertDsPage(findByCriteriaAPI(pageReq, specList), pageReq); } @Override @@ -528,7 +529,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { return convertMdPage(distributionSetMetadataRepository .findAll((Specification) (root, query, cb) -> cb.equal( root.get(JpaDistributionSetMetadata_.distributionSet).get(JpaDistributionSet_.id), - distributionSetId), pageable)); + distributionSetId), pageable), + pageable); } @Override @@ -543,11 +545,13 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { .findAll((Specification) (root, query, cb) -> cb.and( cb.equal(root.get(JpaDistributionSetMetadata_.distributionSet) .get(JpaDistributionSet_.id), distributionSetId), - spec.toPredicate(root, query, cb)), pageable)); + spec.toPredicate(root, query, cb)), pageable), + pageable); } - private static Page convertMdPage(final Page findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertMdPage(final Page findAll, + final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } @Override @@ -745,4 +749,36 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { public DistributionSet generateDistributionSet() { return new JpaDistributionSet(); } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public DistributionSetMetadata generateDistributionSetMetadata() { + return new JpaDistributionSetMetadata(); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public DistributionSetMetadata generateDistributionSetMetadata(final DistributionSet distributionSet, + final String key, final String value) { + return new JpaDistributionSetMetadata(key, distributionSet, value); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public DistributionSetType generateDistributionSetType(final String key, final String name, + final String description) { + return new JpaDistributionSetType(key, name, description); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public DistributionSet generateDistributionSet(final String name, final String version, final String description, + final DistributionSetType type, final Collection moduleList) { + return new JpaDistributionSet(name, version, description, type, moduleList); + } + + @Override + public Long countDistributionSetsByType(final DistributionSetType type) { + return distributionSetRepository.countByType((JpaDistributionSetType) type); + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java index b3ea8fb74..cde2a0a15 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java @@ -26,7 +26,6 @@ import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaAction_; -import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup_; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; @@ -35,6 +34,7 @@ import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup_; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetWithActionStatus; @@ -46,7 +46,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Slice; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; @@ -80,20 +79,21 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { } @Override - public Page findRolloutGroupsByRolloutId(final Long rolloutId, final Pageable page) { - return convertPage(rolloutGroupRepository.findByRolloutId(rolloutId, page)); + public Page findRolloutGroupsByRolloutId(final Long rolloutId, final Pageable pageable) { + return convertPage(rolloutGroupRepository.findByRolloutId(rolloutId, pageable), pageable); } - private static Page convertPage(final Slice findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertPage(final Page findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } - private static Page convertTPage(final Page findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertTPage(final Page findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } @Override - public Page findRolloutGroupsAll(final Rollout rollout, final String rsqlParam, final Pageable page) { + public Page findRolloutGroupsAll(final Rollout rollout, final String rsqlParam, + final Pageable pageable) { final Specification specification = RSQLUtility.parse(rsqlParam, RolloutGroupFields.class); @@ -103,12 +103,13 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { (root, query, criteriaBuilder) -> criteriaBuilder.and( criteriaBuilder.equal(root.get(JpaRolloutGroup_.rollout), rollout), specification.toPredicate(root, query, criteriaBuilder)), - page)); + pageable), + pageable); } @Override - public Page findAllRolloutGroupsWithDetailedStatus(final Long rolloutId, final Pageable page) { - final Page rolloutGroups = rolloutGroupRepository.findByRolloutId(rolloutId, page); + public Page findAllRolloutGroupsWithDetailedStatus(final Long rolloutId, final Pageable pageable) { + final Page rolloutGroups = rolloutGroupRepository.findByRolloutId(rolloutId, pageable); final List rolloutGroupIds = rolloutGroups.getContent().stream().map(rollout -> rollout.getId()) .collect(Collectors.toList()); final Map> allStatesForRollout = getStatusCountItemForRolloutGroup( @@ -120,7 +121,7 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { rolloutGroup.setTotalTargetCountStatus(totalTargetCountStatus); } - return convertPage(rolloutGroups); + return convertPage(rolloutGroups, pageable); } @Override @@ -145,7 +146,7 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { @Override public Page findRolloutGroupTargets(final RolloutGroup rolloutGroup, final String rsqlParam, - final Pageable page) { + final Pageable pageable) { final Specification rsqlSpecification = RSQLUtility.parse(rsqlParam, TargetFields.class); @@ -153,7 +154,7 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { final ListJoin rolloutTargetJoin = root.join(JpaTarget_.rolloutTargetGroup); return criteriaBuilder.and(rsqlSpecification.toPredicate(root, query, criteriaBuilder), criteriaBuilder.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); - }, page)); + }, pageable), pageable); } @Override diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index ec13c4f29..744c863ba 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -20,24 +20,25 @@ import javax.persistence.EntityManager; import org.eclipse.hawkbit.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.DeploymentManagement; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.RolloutFields; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; -import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupConditions; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorCondition; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout_; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; @@ -137,22 +138,26 @@ public class JpaRolloutManagement implements RolloutManagement { private static final Set startingRollouts = ConcurrentHashMap.newKeySet(); @Override - public Page findAll(final Pageable page) { - return convertPage(rolloutRepository.findAll(page)); + public Page findAll(final Pageable pageable) { + return convertPage(rolloutRepository.findAll(pageable), pageable); } - private static Page convertPage(final Slice findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertPage(final Page findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); + } + + private static Slice convertPage(final Slice findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, 0); } @Override - public Page findAllWithDetailedStatusByPredicate(final String rsqlParam, final Pageable page) { + public Page findAllWithDetailedStatusByPredicate(final String rsqlParam, final Pageable pageable) { final Specification specification = RSQLUtility.parse(rsqlParam, RolloutFields.class); - final Page findAll = rolloutRepository.findAll(specification, page); + final Page findAll = rolloutRepository.findAll(specification, pageable); setRolloutStatusDetails(findAll); - return convertPage(findAll); + return convertPage(findAll, pageable); } @Override @@ -570,7 +575,7 @@ public class JpaRolloutManagement implements RolloutManagement { final Specification specs = likeNameOrDescription(searchText); final Slice findAll = criteriaNoCountDao.findAll(specs, pageable, JpaRollout.class); setRolloutStatusDetails(findAll); - return convertPage(findAll); + return convertPage(findAll, pageable); } @Override @@ -604,10 +609,10 @@ public class JpaRolloutManagement implements RolloutManagement { * */ @Override - public Page findAllRolloutsWithDetailedStatus(final Pageable page) { - final Page rollouts = rolloutRepository.findAll(page); + public Page findAllRolloutsWithDetailedStatus(final Pageable pageable) { + final Page rollouts = rolloutRepository.findAll(pageable); setRolloutStatusDetails(rollouts); - return convertPage(rollouts); + return convertPage(rollouts, pageable); } @@ -618,7 +623,7 @@ public class JpaRolloutManagement implements RolloutManagement { .getStatusCountByRolloutId(rolloutId); final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus(rolloutStatusCountItems, rollout.getTotalTargets()); - rollout.setTotalTargetCountStatus(totalTargetCountStatus); + ((JpaRollout) rollout).setTotalTargetCountStatus(totalTargetCountStatus); return rollout; } @@ -636,7 +641,7 @@ public class JpaRolloutManagement implements RolloutManagement { for (final Rollout rollout : rollouts) { final TotalTargetCountStatus totalTargetCountStatus = new TotalTargetCountStatus( allStatesForRollout.get(rollout.getId()), rollout.getTotalTargets()); - rollout.setTotalTargetCountStatus(totalTargetCountStatus); + ((JpaRollout) rollout).setTotalTargetCountStatus(totalTargetCountStatus); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index 7ea7e46be..b98ff0754 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -183,15 +183,21 @@ public class JpaSoftwareManagement implements SoftwareManagement { spec = SoftwareModuleSpecification.isDeletedFalse(); specList.add(spec); - return convertSmPage(findSwModuleByCriteriaAPI(pageable, specList)); + return convertSmPage(findSwModuleByCriteriaAPI(pageable, specList), pageable); } - private static Page convertSmPage(final Slice findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Slice convertSmPage(final Slice findAll, + final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, 0); } - private static Page convertSmMdPage(final Slice findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertSmPage(final Page findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); + } + + private static Page convertSmMdPage(final Page findAll, + final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } @Override @@ -288,7 +294,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { specList.add(spec); - return convertSmPage(findSwModuleByCriteriaAPI(pageable, specList)); + return convertSmPage(findSwModuleByCriteriaAPI(pageable, specList), pageable); } @Override @@ -311,20 +317,20 @@ public class JpaSoftwareManagement implements SoftwareManagement { public Page findSoftwareModulesByPredicate(final String rsqlParam, final Pageable pageable) { final Specification spec = RSQLUtility.parse(rsqlParam, SoftwareModuleFields.class); - return convertSmPage(softwareModuleRepository.findAll(spec, pageable)); + return convertSmPage(softwareModuleRepository.findAll(spec, pageable), pageable); } @Override - public Page findSoftwareModuleTypesByPredicate(final String rsqlParam, - final Pageable pageable) { + public Page findSoftwareModuleTypesAll(final String rsqlParam, final Pageable pageable) { final Specification spec = RSQLUtility.parse(rsqlParam, SoftwareModuleTypeFields.class); - return convertSmTPage(softwareModuleTypeRepository.findAll(spec, pageable)); + return convertSmTPage(softwareModuleTypeRepository.findAll(spec, pageable), pageable); } - private static Page convertSmTPage(final Slice findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertSmTPage(final Page findAll, + final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } @Override @@ -361,7 +367,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { specList.add(spec); - return convertSmPage(findSwModuleByCriteriaAPI(pageable, specList)); + return convertSmPage(findSwModuleByCriteriaAPI(pageable, specList), pageable); } @Override @@ -614,11 +620,16 @@ public class JpaSoftwareManagement implements SoftwareManagement { cb.equal(root.get(JpaSoftwareModuleMetadata_.softwareModule) .get(JpaSoftwareModule_.id), softwareModuleId), spec.toPredicate(root, query, cb)), - pageable)); + pageable), + pageable); } @Override - public SoftwareModuleMetadata findSoftwareModuleMetadata(final SwMetadataCompositeKey id) { + public SoftwareModuleMetadata findSoftwareModuleMetadata(final SoftwareModule softwareModule, final String key) { + return findSoftwareModuleMetadata(new SwMetadataCompositeKey(softwareModule, key)); + } + + private SoftwareModuleMetadata findSoftwareModuleMetadata(final SwMetadataCompositeKey id) { final SoftwareModuleMetadata findOne = softwareModuleMetadataRepository.findOne(id); if (findOne == null) { throw new EntityNotFoundException("Metadata with key '" + id.getKey() + "' does not exist"); @@ -664,4 +675,32 @@ public class JpaSoftwareManagement implements SoftwareManagement { return new JpaSoftwareModule(); } + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public SoftwareModule generateSoftwareModule(final SoftwareModuleType type, final String name, final String version, + final String description, final String vendor) { + + return new JpaSoftwareModule(type, name, version, description, vendor); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public SoftwareModuleMetadata generateSoftwareModuleMetadata() { + return new JpaSoftwareModuleMetadata(); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public SoftwareModuleMetadata generateSoftwareModuleMetadata(final SoftwareModule softwareModule, final String key, + final String value) { + return new JpaSoftwareModuleMetadata(key, softwareModule, value); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public SoftwareModuleType generateSoftwareModuleType(final String key, final String name, final String description, + final int maxAssignments) { + return new JpaSoftwareModuleType(key, name, description, maxAssignments); + } + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java index 4ff9c6e2b..c8358b7ec 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java @@ -151,15 +151,16 @@ public class JpaTagManagement implements TagManagement { public Page findAllTargetTags(final String rsqlParam, final Pageable pageable) { final Specification spec = RSQLUtility.parse(rsqlParam, TagFields.class); - return convertTPage(targetTagRepository.findAll(spec, pageable)); + return convertTPage(targetTagRepository.findAll(spec, pageable), pageable); } - private static Page convertTPage(final Page findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertTPage(final Page findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } - private static Page convertDsPage(final Page findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertDsPage(final Page findAll, + final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } @Override @@ -270,20 +271,20 @@ public class JpaTagManagement implements TagManagement { } @Override - public Page findAllTargetTags(final Pageable pageReq) { - return convertTPage(targetTagRepository.findAll(pageReq)); + public Page findAllTargetTags(final Pageable pageable) { + return convertTPage(targetTagRepository.findAll(pageable), pageable); } @Override - public Page findAllDistributionSetTags(final Pageable pageReq) { - return convertDsPage(distributionSetTagRepository.findAll(pageReq)); + public Page findAllDistributionSetTags(final Pageable pageable) { + return convertDsPage(distributionSetTagRepository.findAll(pageable), pageable); } @Override public Page findAllDistributionSetTags(final String rsqlParam, final Pageable pageable) { final Specification spec = RSQLUtility.parse(rsqlParam, TagFields.class); - return convertDsPage(distributionSetTagRepository.findAll(spec, pageable)); + return convertDsPage(distributionSetTagRepository.findAll(spec, pageable), pageable); } @Override @@ -298,4 +299,29 @@ public class JpaTagManagement implements TagManagement { return new JpaDistributionSetTag(); } + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public TargetTag generateTargetTag(final String name, final String description, final String colour) { + return new JpaTargetTag(name, description, colour); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public DistributionSetTag generateDistributionSetTag(final String name, final String description, + final String colour) { + return new JpaDistributionSetTag(name, description, colour); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public TargetTag generateTargetTag(final String name) { + return new JpaTargetTag(name); + } + + @Override + @Transactional(propagation = Propagation.SUPPORTS) + public DistributionSetTag generateDistributionSetTag(final String name) { + return new JpaDistributionSetTag(name); + } + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java index 5dd33b762..8bc4a0833 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java @@ -64,11 +64,12 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme @Override public Page findAllTargetFilterQuery(final Pageable pageable) { - return convertPage(targetFilterQueryRepository.findAll(pageable)); + return convertPage(targetFilterQueryRepository.findAll(pageable), pageable); } - private static Page convertPage(final Page findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertPage(final Page findAll, + final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } @Override @@ -77,7 +78,7 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme if (!Strings.isNullOrEmpty(name)) { specList.add(TargetFilterQuerySpecification.likeName(name)); } - return convertPage(findTargetFilterQueryByCriteriaAPI(pageable, specList)); + return convertPage(findTargetFilterQueryByCriteriaAPI(pageable, specList), pageable); } private Page findTargetFilterQueryByCriteriaAPI(final Pageable pageable, @@ -108,4 +109,9 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme return targetFilterQueryRepository.save((JpaTargetFilterQuery) targetFilterQuery); } + @Override + public TargetFilterQuery generateTargetFilterQuery() { + return new JpaTargetFilterQuery(); + } + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java index 0e900e655..d73a9ae5f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java @@ -145,7 +145,7 @@ public class JpaTargetManagement implements TargetManagement { } return cb.conjunction(); }; - return convertPage(criteriaNoCountDao.findAll(spec, pageable, JpaTarget.class)); + return convertPage(criteriaNoCountDao.findAll(spec, pageable, JpaTarget.class), pageable); } @Override @@ -159,7 +159,7 @@ public class JpaTargetManagement implements TargetManagement { } private Page findTargetsBySpec(final Specification spec, final Pageable pageable) { - return convertPage(targetRepository.findAll(spec, pageable)); + return convertPage(targetRepository.findAll(spec, pageable), pageable); } @Override @@ -222,17 +222,21 @@ public class JpaTargetManagement implements TargetManagement { final Specification spec = RSQLUtility.parse(rsqlParam, TargetFields.class); - return convertPage(targetRepository.findAll((Specification) (root, query, cb) -> cb.and( - TargetSpecifications.hasAssignedDistributionSet(distributionSetID).toPredicate(root, query, cb), - spec.toPredicate(root, query, cb)), pageReq)); + return convertPage( + targetRepository + .findAll((Specification) (root, query, + cb) -> cb.and(TargetSpecifications.hasAssignedDistributionSet(distributionSetID) + .toPredicate(root, query, cb), spec.toPredicate(root, query, cb)), + pageReq), + pageReq); } - private static Page convertPage(final Page findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Page convertPage(final Page findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } - private static Slice convertPage(final Slice findAll) { - return new PageImpl<>(new ArrayList<>(findAll.getContent())); + private static Slice convertPage(final Slice findAll, final Pageable pageable) { + return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, 0); } @Override @@ -246,9 +250,13 @@ public class JpaTargetManagement implements TargetManagement { final Specification spec = RSQLUtility.parse(rsqlParam, TargetFields.class); - return convertPage(targetRepository.findAll((Specification) (root, query, cb) -> cb.and( - TargetSpecifications.hasInstalledDistributionSet(distributionSetId).toPredicate(root, query, cb), - spec.toPredicate(root, query, cb)), pageable)); + return convertPage( + targetRepository + .findAll((Specification) (root, query, + cb) -> cb.and(TargetSpecifications.hasInstalledDistributionSet(distributionSetId) + .toPredicate(root, query, cb), spec.toPredicate(root, query, cb)), + pageable), + pageable); } @Override @@ -296,10 +304,11 @@ public class JpaTargetManagement implements TargetManagement { private Slice findByCriteriaAPI(final Pageable pageable, final List> specList) { if (specList == null || specList.isEmpty()) { - return convertPage(criteriaNoCountDao.findAll(pageable, JpaTarget.class)); + return convertPage(criteriaNoCountDao.findAll(pageable, JpaTarget.class), pageable); } return convertPage( - criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable, JpaTarget.class)); + criteriaNoCountDao.findAll(SpecificationsBuilder.combineWithAnd(specList), pageable, JpaTarget.class), + pageable); } private Long countByCriteriaAPI(final List> specList) { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java index 0eaa237aa..134f7b18d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java @@ -12,9 +12,9 @@ import java.util.List; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java index e73c12952..74d47d99a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java @@ -11,8 +11,8 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; -import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java similarity index 93% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaArtifact.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java index be0b5e1ac..7a5bea6b7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaArtifact.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; * {@link SoftwareModule}. */ @MappedSuperclass -public abstract class JpaArtifact extends JpaTenantAwareBaseEntity implements Artifact { +public abstract class AbstractJpaArtifact extends AbstractJpaTenantAwareBaseEntity implements Artifact { private static final long serialVersionUID = 1L; @Column(name = "sha1_hash", length = 40, nullable = true) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaBaseEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java similarity index 96% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaBaseEntity.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java index cfe4ada52..b7e340085 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaBaseEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java @@ -34,7 +34,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; @MappedSuperclass @Access(AccessType.FIELD) @EntityListeners({ AuditingEntityListener.class, CacheFieldEntityListener.class, EntityPropertyChangeListener.class }) -public abstract class JpaBaseEntity implements BaseEntity { +public abstract class AbstractJpaBaseEntity implements BaseEntity { private static final long serialVersionUID = 1L; @Id @@ -54,7 +54,7 @@ public abstract class JpaBaseEntity implements BaseEntity { /** * Default constructor needed for JPA entities. */ - public JpaBaseEntity() { + public AbstractJpaBaseEntity() { // Default constructor needed for JPA entities. } @@ -167,7 +167,7 @@ public abstract class JpaBaseEntity implements BaseEntity { if (!(this.getClass().isInstance(obj))) { return false; } - final JpaBaseEntity other = (JpaBaseEntity) obj; + final AbstractJpaBaseEntity other = (AbstractJpaBaseEntity) obj; if (id == null) { if (other.id != null) { return false; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaMetaData.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaMetaData.java similarity index 90% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaMetaData.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaMetaData.java index f2d905d89..5a3f23ac3 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaMetaData.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaMetaData.java @@ -20,7 +20,7 @@ import org.eclipse.hawkbit.repository.model.MetaData; * */ @MappedSuperclass -public abstract class JpaMetaData implements MetaData { +public abstract class AbstractJpaMetaData implements MetaData { private static final long serialVersionUID = 1L; @Id @@ -31,13 +31,13 @@ public abstract class JpaMetaData implements MetaData { @Basic private String value; - public JpaMetaData(final String key, final String value) { + public AbstractJpaMetaData(final String key, final String value) { super(); this.key = key; this.value = value; } - public JpaMetaData() { + public AbstractJpaMetaData() { // Default constructor needed for JPA entities } @@ -81,7 +81,7 @@ public abstract class JpaMetaData implements MetaData { if (!(this.getClass().isInstance(obj))) { return false; } - final JpaMetaData other = (JpaMetaData) obj; + final AbstractJpaMetaData other = (AbstractJpaMetaData) obj; if (key == null) { if (other.key != null) { return false; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java similarity index 87% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedEntity.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java index e4e48ac36..196e636d9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; * addition to their technical ID. */ @MappedSuperclass -public abstract class JpaNamedEntity extends JpaTenantAwareBaseEntity implements NamedEntity { +public abstract class AbstractJpaNamedEntity extends AbstractJpaTenantAwareBaseEntity implements NamedEntity { private static final long serialVersionUID = 1L; @Column(name = "name", nullable = false, length = 64) @@ -31,7 +31,7 @@ public abstract class JpaNamedEntity extends JpaTenantAwareBaseEntity implements /** * Default constructor. */ - public JpaNamedEntity() { + public AbstractJpaNamedEntity() { super(); } @@ -43,7 +43,7 @@ public abstract class JpaNamedEntity extends JpaTenantAwareBaseEntity implements * @param description * of the {@link NamedEntity} */ - public JpaNamedEntity(final String name, final String description) { + public AbstractJpaNamedEntity(final String name, final String description) { this.name = name; this.description = description; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedVersionedEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java similarity index 82% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedVersionedEntity.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java index 33a7036d5..785666b67 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaNamedVersionedEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; * */ @MappedSuperclass -public abstract class JpaNamedVersionedEntity extends JpaNamedEntity implements NamedVersionedEntity { +public abstract class AbstractJpaNamedVersionedEntity extends AbstractJpaNamedEntity implements NamedVersionedEntity { private static final long serialVersionUID = 1L; @Column(name = "version", nullable = false, length = 64) @@ -34,12 +34,12 @@ public abstract class JpaNamedVersionedEntity extends JpaNamedEntity implements * of the entity * @param description */ - public JpaNamedVersionedEntity(final String name, final String version, final String description) { + public AbstractJpaNamedVersionedEntity(final String name, final String version, final String description) { super(name, description); this.version = version; } - JpaNamedVersionedEntity() { + AbstractJpaNamedVersionedEntity() { super(); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java similarity index 86% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTag.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java index ee4da0824..653b678bc 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTag.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java @@ -19,13 +19,13 @@ import org.eclipse.hawkbit.repository.model.Tag; * */ @MappedSuperclass -public abstract class JpaTag extends JpaNamedEntity implements Tag { +public abstract class AbstractJpaTag extends AbstractJpaNamedEntity implements Tag { private static final long serialVersionUID = 1L; @Column(name = "colour", nullable = true, length = 16) private String colour; - protected JpaTag() { + protected AbstractJpaTag() { super(); } @@ -39,7 +39,7 @@ public abstract class JpaTag extends JpaNamedEntity implements Tag { * @param colour * of tag in UI */ - public JpaTag(final String name, final String description, final String colour) { + public AbstractJpaTag(final String name, final String description, final String colour) { super(name, description); this.colour = colour; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantAwareBaseEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java similarity index 93% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantAwareBaseEntity.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java index e921e6915..134d0c788 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantAwareBaseEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java @@ -27,7 +27,7 @@ import org.eclipse.persistence.annotations.TenantDiscriminatorColumn; @MappedSuperclass @TenantDiscriminatorColumn(name = "tenant", length = 40) @Multitenant(MultitenantType.SINGLE_TABLE) -public abstract class JpaTenantAwareBaseEntity extends JpaBaseEntity implements TenantAwareBaseEntity { +public abstract class AbstractJpaTenantAwareBaseEntity extends AbstractJpaBaseEntity implements TenantAwareBaseEntity { private static final long serialVersionUID = 1L; @Column(name = "tenant", nullable = false, insertable = false, updatable = false, length = 40) @@ -36,7 +36,7 @@ public abstract class JpaTenantAwareBaseEntity extends JpaBaseEntity implements /** * Default constructor needed for JPA entities. */ - public JpaTenantAwareBaseEntity() { + public AbstractJpaTenantAwareBaseEntity() { // Default constructor needed for JPA entities. } @@ -101,7 +101,7 @@ public abstract class JpaTenantAwareBaseEntity extends JpaBaseEntity implements if (!super.equals(obj)) { return false; } - final JpaTenantAwareBaseEntity other = (JpaTenantAwareBaseEntity) obj; + final AbstractJpaTenantAwareBaseEntity other = (AbstractJpaTenantAwareBaseEntity) obj; if (tenant == null) { if (other.tenant != null) { return false; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java index 1080b35fd..7ad7d7a60 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java @@ -36,21 +36,11 @@ import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.persistence.annotations.CascadeOnDelete; /** - *

- * Applicable transition changes of the {@link SoftwareModule}s state of a - * {@link Target}, e.g. install, uninstall, update and preparations for the - * transition change, i.e. download. - *

- * - *

- * Actions are managed by the SP server and applied to the targets by the - * client. - *

+ * JPA implementation of {@link Action}. */ @Table(name = "sp_action", indexes = { @Index(name = "sp_idx_action_01", columnList = "tenant,distribution_set"), @Index(name = "sp_idx_action_02", columnList = "tenant,target,active"), @@ -59,12 +49,9 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; @NamedEntityGraph(name = "Action.all", attributeNodes = { @NamedAttributeNode("distributionSet"), @NamedAttributeNode(value = "target", subgraph = "target.ds") }, subgraphs = @NamedSubgraph(name = "target.ds", attributeNodes = @NamedAttributeNode("assignedDistributionSet"))) }) @Entity -public class JpaAction extends JpaTenantAwareBaseEntity implements Action { +public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Action { private static final long serialVersionUID = 1L; - /** - * the {@link DistributionSet} which should be installed by this action. - */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "distribution_set", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_ds")) private JpaDistributionSet distributionSet; @@ -106,33 +93,16 @@ public class JpaAction extends JpaTenantAwareBaseEntity implements Action { @CacheField(key = CacheKeys.DOWNLOAD_PROGRESS_PERCENT) private int downloadProgressPercent; - /** - * @return the distributionSet - */ @Override public DistributionSet getDistributionSet() { return distributionSet; } - /** - * @param distributionSet - * the distributionSet to set - */ @Override public void setDistributionSet(final DistributionSet distributionSet) { this.distributionSet = (JpaDistributionSet) distributionSet; } - /** - * @return true when action is in state {@link Status#CANCELING} or - * {@link Status#CANCELED}, false otherwise - */ - @Override - public boolean isCancelingOrCanceled() { - return status == Status.CANCELING || status == Status.CANCELED; - } - - @Override public void setActive(final boolean active) { this.active = active; } @@ -152,7 +122,6 @@ public class JpaAction extends JpaTenantAwareBaseEntity implements Action { return downloadProgressPercent; } - @Override public void setDownloadProgressPercent(final int downloadProgressPercent) { this.downloadProgressPercent = downloadProgressPercent; } @@ -162,14 +131,10 @@ public class JpaAction extends JpaTenantAwareBaseEntity implements Action { return active; } - @Override public void setActionType(final ActionType actionType) { this.actionType = actionType; } - /** - * @return the actionType - */ @Override public ActionType getActionType() { return actionType; @@ -195,7 +160,6 @@ public class JpaAction extends JpaTenantAwareBaseEntity implements Action { return forcedTime; } - @Override public void setForcedTime(final long forcedTime) { this.forcedTime = forcedTime; } @@ -205,7 +169,6 @@ public class JpaAction extends JpaTenantAwareBaseEntity implements Action { return rolloutGroup; } - @Override public void setRolloutGroup(final RolloutGroup rolloutGroup) { this.rolloutGroup = (JpaRolloutGroup) rolloutGroup; } @@ -215,57 +178,10 @@ public class JpaAction extends JpaTenantAwareBaseEntity implements Action { return rollout; } - @Override public void setRollout(final Rollout rollout) { this.rollout = (JpaRollout) rollout; } - /** - * checks if the {@link #forcedTime} is hit by the given - * {@code hitTimeMillis}, by means if the given milliseconds are greater - * than the forcedTime. - * - * @param hitTimeMillis - * the milliseconds, mostly the - * {@link System#currentTimeMillis()} - * @return {@code true} if this {@link #type} is in - * {@link ActionType#TIMEFORCED} and the given {@code hitTimeMillis} - * is greater than the {@link #forcedTime} otherwise {@code false} - */ - @Override - public boolean isHitAutoForceTime(final long hitTimeMillis) { - if (actionType == ActionType.TIMEFORCED) { - return hitTimeMillis >= forcedTime; - } - return false; - } - - /** - * @return {@code true} if either the {@link #type} is - * {@link ActionType#FORCED} or {@link ActionType#TIMEFORCED} but - * then if the {@link #forcedTime} has been exceeded otherwise - * always {@code false} - */ - @Override - public boolean isForce() { - switch (actionType) { - case FORCED: - return true; - case TIMEFORCED: - return isHitAutoForceTime(System.currentTimeMillis()); - default: - return false; - } - } - - /** - * @return true when action is forced, false otherwise - */ - @Override - public boolean isForced() { - return actionType == ActionType.FORCED; - } - @Override public String toString() { return "Action [distributionSet=" + distributionSet + ", getId()=" + getId() + "]"; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java index 94f76cae7..cf146651d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java @@ -40,7 +40,7 @@ import com.google.common.base.Splitter; @Index(name = "sp_idx_action_status_prim", columnList = "tenant,id") }) @NamedEntityGraph(name = "ActionStatus.withMessages", attributeNodes = { @NamedAttributeNode("messages") }) @Entity -public class JpaActionStatus extends JpaTenantAwareBaseEntity implements ActionStatus { +public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements ActionStatus { private static final long serialVersionUID = 1L; @Column(name = "target_occurred_at") @@ -88,14 +88,11 @@ public class JpaActionStatus extends JpaTenantAwareBaseEntity implements ActionS * @param messages * the messages which should be added to this action status */ - public JpaActionStatus(final JpaAction action, final Status status, final Long occurredAt, - final String... messages) { + public JpaActionStatus(final JpaAction action, final Status status, final Long occurredAt, final String message) { this.action = action; this.status = status; this.occurredAt = occurredAt; - for (final String msg : messages) { - addMessage(msg); - } + addMessage(message); } /** @@ -115,15 +112,11 @@ public class JpaActionStatus extends JpaTenantAwareBaseEntity implements ActionS this.occurredAt = occurredAt; } - /** - * Adds message including splitting in case it exceeds 512 length. - * - * @param message - * to add - */ @Override public final void addMessage(final String message) { - Splitter.fixedLength(512).split(message).forEach(messages::add); + if (message != null) { + Splitter.fixedLength(512).split(message).forEach(messages::add); + } } @Override diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java index 201d4d657..d01cf3f4c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.repository.jpa.model; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -47,14 +48,7 @@ import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.persistence.annotations.CascadeOnDelete; /** - *

- * The {@link DistributionSet} is defined in the SP repository and contains at - * least an OS and an Agent Hub. - *

- * - *

- * A {@link Target} has exactly one target {@link DistributionSet} assigned. - *

+ * Jpa implementation of {@link DistributionSet}. * */ @Entity @@ -65,11 +59,11 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; @Index(name = "sp_idx_distribution_set_prim", columnList = "tenant,id") }) @NamedEntityGraph(name = "DistributionSet.detail", attributeNodes = { @NamedAttributeNode("modules"), @NamedAttributeNode("tags"), @NamedAttributeNode("type") }) -public class JpaDistributionSet extends JpaNamedVersionedEntity implements DistributionSet { +public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implements DistributionSet { private static final long serialVersionUID = 1L; @Column(name = "required_migration_step") - private boolean requiredMigrationStep = false; + private boolean requiredMigrationStep; @ManyToMany(targetEntity = JpaSoftwareModule.class, fetch = FetchType.LAZY) @JoinTable(name = "sp_ds_module", joinColumns = { @@ -84,7 +78,7 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr private Set tags = new HashSet<>(); @Column(name = "deleted") - private boolean deleted = false; + private boolean deleted; @OneToMany(mappedBy = "assignedDistributionSet", targetEntity = JpaTarget.class, fetch = FetchType.LAZY) private List assignedToTargets; @@ -106,7 +100,7 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr private DistributionSetType type; @Column(name = "complete") - private boolean complete = false; + private boolean complete; /** * Default constructor. @@ -130,7 +124,7 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr * {@link SoftwareModule}s of the {@link DistributionSet} */ public JpaDistributionSet(final String name, final String version, final String description, - final DistributionSetType type, final Iterable moduleList) { + final DistributionSetType type, final Collection moduleList) { super(name, version, description); this.type = type; @@ -152,15 +146,11 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr return deleted; } - /** - * @return immutable list of meta data elements. - */ @Override public List getMetadata() { return Collections.unmodifiableList(metadata); } - @Override public List getActions() { return actions; } @@ -182,23 +172,16 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr return this; } - @Override public DistributionSet setTags(final Set tags) { this.tags = tags; return this; } - /** - * @return the assignedTargets - */ @Override public List getAssignedTargets() { return assignedToTargets; } - /** - * @return the installedTargets - */ @Override public List getInstalledTargets() { return installedAtTargets; @@ -210,10 +193,6 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr + ", getId()=" + getId() + "]"; } - /** - * - * @return unmodifiableSet of {@link SoftwareModule}. - */ @Override public Set getModules() { return Collections.unmodifiableSet(modules); @@ -224,12 +203,6 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr return new DistributionSetIdName(getId(), getName(), getVersion()); } - /** - * @param softwareModule - * @return true if the module was added and false - * if it already existed in the set - * - */ @Override public boolean addModule(final SoftwareModule softwareModule) { @@ -267,13 +240,6 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr return false; } - /** - * Removed given {@link SoftwareModule} from this DS instance. - * - * @param softwareModule - * to remove - * @return true if element was found and removed - */ @Override public boolean removeModule(final SoftwareModule softwareModule) { final Optional found = modules.stream() @@ -289,14 +255,6 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr } - /** - * Searches through modules for the given type. - * - * @param type - * to search for - * @return SoftwareModule of given type or null if not in the - * list. - */ @Override public SoftwareModule findFirstModuleByType(final SoftwareModuleType type) { final Optional result = modules.stream().filter(module -> module.getType().equals(type)) @@ -323,4 +281,5 @@ public class JpaDistributionSet extends JpaNamedVersionedEntity implements Distr public boolean isComplete() { return complete; } + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java index b73e3c72e..5d176b4a9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java @@ -28,7 +28,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; @IdClass(DsMetadataCompositeKey.class) @Entity @Table(name = "sp_ds_metadata") -public class JpaDistributionSetMetadata extends JpaMetaData implements DistributionSetMetadata { +public class JpaDistributionSetMetadata extends AbstractJpaMetaData implements DistributionSetMetadata { private static final long serialVersionUID = 1L; @Id @@ -49,7 +49,6 @@ public class JpaDistributionSetMetadata extends JpaMetaData implements Distribut return new DsMetadataCompositeKey(distributionSet, getKey()); } - @Override public void setDistributionSet(final DistributionSet distributionSet) { this.distributionSet = (JpaDistributionSet) distributionSet; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java index 4b6e67135..c4b55fe03 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTag; @Table(name = "sp_distributionset_tag", indexes = { @Index(name = "sp_idx_distribution_set_tag_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_ds_tag")) -public class JpaDistributionSetTag extends JpaTag implements DistributionSetTag { +public class JpaDistributionSetTag extends AbstractJpaTag implements DistributionSetTag { private static final long serialVersionUID = 1L; @ManyToMany(mappedBy = "tags", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java index d8edd4dcc..fa5d57642 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java @@ -38,7 +38,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @Index(name = "sp_idx_distribution_set_type_prim", columnList = "tenant,id") }, uniqueConstraints = { @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_dst_name"), @UniqueConstraint(columnNames = { "type_key", "tenant" }, name = "uk_dst_key") }) -public class JpaDistributionSetType extends JpaNamedEntity implements DistributionSetType { +public class JpaDistributionSetType extends AbstractJpaNamedEntity implements DistributionSetType { private static final long serialVersionUID = 1L; @OneToMany(targetEntity = DistributionSetTypeElement.class, cascade = { @@ -53,7 +53,7 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi private String colour; @Column(name = "deleted") - private boolean deleted = false; + private boolean deleted; public JpaDistributionSetType() { // default public constructor for JPA @@ -91,19 +91,11 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi colour = color; } - /** - * @return the deleted - */ @Override public boolean isDeleted() { return deleted; } - /** - * @param deleted - * the deleted to set - */ - @Override public void setDeleted(final boolean deleted) { this.deleted = deleted; } @@ -120,14 +112,6 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi .collect(Collectors.toSet()); } - /** - * Checks if the given {@link SoftwareModuleType} is in this - * {@link DistributionSetType}. - * - * @param softwareModuleType - * search for - * @return true if found - */ @Override public boolean containsModuleType(final SoftwareModuleType softwareModuleType) { for (final DistributionSetTypeElement distributionSetTypeElement : elements) { @@ -139,15 +123,6 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi return false; } - /** - * Checks if the given {@link SoftwareModuleType} is in this - * {@link DistributionSetType} and defined as - * {@link DistributionSetTypeElement#isMandatory()}. - * - * @param softwareModuleType - * search for - * @return true if found - */ @Override public boolean containsMandatoryModuleType(final SoftwareModuleType softwareModuleType) { return elements.stream().filter(element -> element.isMandatory()) @@ -155,15 +130,6 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi } - /** - * Checks if the given {@link SoftwareModuleType} is in this - * {@link DistributionSetType} and defined as - * {@link DistributionSetTypeElement#isMandatory()}. - * - * @param softwareModuleType - * search for by {@link SoftwareModuleType#getId()} - * @return true if found - */ @Override public boolean containsMandatoryModuleType(final Long softwareModuleTypeId) { return elements.stream().filter(element -> element.isMandatory()) @@ -171,15 +137,6 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi } - /** - * Checks if the given {@link SoftwareModuleType} is in this - * {@link DistributionSetType} and NOT defined as - * {@link DistributionSetTypeElement#isMandatory()}. - * - * @param softwareModuleType - * search for - * @return true if found - */ @Override public boolean containsOptionalModuleType(final SoftwareModuleType softwareModuleType) { return elements.stream().filter(element -> !element.isMandatory()) @@ -187,15 +144,6 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi } - /** - * Checks if the given {@link SoftwareModuleType} is in this - * {@link DistributionSetType} and NOT defined as - * {@link DistributionSetTypeElement#isMandatory()}. - * - * @param softwareModuleTypeId - * search by {@link SoftwareModuleType#getId()} - * @return true if found - */ @Override public boolean containsOptionalModuleType(final Long softwareModuleTypeId) { return elements.stream().filter(element -> !element.isMandatory()) @@ -203,27 +151,11 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi } - /** - * Compares the modules of this {@link DistributionSetType} and the given - * one. - * - * @param dsType - * to compare with - * @return true if the lists are identical. - */ @Override public boolean areModuleEntriesIdentical(final DistributionSetType dsType) { return new HashSet(((JpaDistributionSetType) dsType).elements).equals(elements); } - /** - * Adds {@link SoftwareModuleType} that is optional for the - * {@link DistributionSet}. - * - * @param smType - * to add - * @return updated instance - */ @Override public DistributionSetType addOptionalModuleType(final SoftwareModuleType smType) { elements.add(new DistributionSetTypeElement(this, (JpaSoftwareModuleType) smType, false)); @@ -231,14 +163,6 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi return this; } - /** - * Adds {@link SoftwareModuleType} that is mandatory for the - * {@link DistributionSet}. - * - * @param smType - * to add - * @return updated instance - */ @Override public DistributionSetType addMandatoryModuleType(final SoftwareModuleType smType) { elements.add(new DistributionSetTypeElement(this, (JpaSoftwareModuleType) smType, true)); @@ -246,13 +170,6 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi return this; } - /** - * Removes {@link SoftwareModuleType} from the list. - * - * @param smTypeId - * to remove - * @return updated instance - */ @Override public DistributionSetType removeModuleType(final Long smTypeId) { // we search by id (standard equals compares also revison) @@ -276,12 +193,6 @@ public class JpaDistributionSetType extends JpaNamedEntity implements Distributi this.key = key; } - /** - * @param distributionSet - * to check for completeness - * @return true if the all mandatory software module types are - * in the system. - */ @Override public boolean checkComplete(final DistributionSet distributionSet) { return distributionSet.getModules().stream().map(module -> module.getType()).collect(Collectors.toList()) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java index ab55bf307..91f3df598 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java @@ -33,7 +33,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; @Table(name = "sp_external_artifact", indexes = { @Index(name = "sp_idx_external_artifact_prim", columnList = "id,tenant") }) @Entity -public class JpaExternalArtifact extends JpaArtifact implements ExternalArtifact { +public class JpaExternalArtifact extends AbstractJpaArtifact implements ExternalArtifact { private static final long serialVersionUID = 1L; @ManyToOne @@ -85,7 +85,6 @@ public class JpaExternalArtifact extends JpaArtifact implements ExternalArtifact return softwareModule; } - @Override public final void setSoftwareModule(final SoftwareModule softwareModule) { this.softwareModule = (JpaSoftwareModule) softwareModule; this.softwareModule.addArtifact(this); @@ -106,9 +105,8 @@ public class JpaExternalArtifact extends JpaArtifact implements ExternalArtifact return urlSuffix; } - @Override - public void setExternalArtifactProvider(final ExternalArtifactProvider externalArtifactProvider) { - this.externalArtifactProvider = (JpaExternalArtifactProvider) externalArtifactProvider; + public void setExternalArtifactProvider(final JpaExternalArtifactProvider externalArtifactProvider) { + this.externalArtifactProvider = externalArtifactProvider; } /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java index 527a90510..06e572d57 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java @@ -17,15 +17,13 @@ import org.eclipse.hawkbit.repository.model.ExternalArtifact; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; /** - * External repositories for artifact storage. The SP server provides URLs for - * the targets to download from these external resources but does not access - * them itself. + * JPA implementation of {@link ExternalArtifactProvider}. * */ @Table(name = "sp_external_provider", indexes = { @Index(name = "sp_idx_external_provider_prim", columnList = "tenant,id") }) @Entity -public class JpaExternalArtifactProvider extends JpaNamedEntity implements ExternalArtifactProvider { +public class JpaExternalArtifactProvider extends AbstractJpaNamedEntity implements ExternalArtifactProvider { private static final long serialVersionUID = 1L; @Column(name = "base_url", length = 512, nullable = false) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java index 7c6de6c0d..4348a3a7d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java @@ -26,18 +26,13 @@ import com.mongodb.gridfs.GridFS; import com.mongodb.gridfs.GridFSFile; /** - * Tenant specific locally stored artifact representation that is used by - * {@link SoftwareModule} . It contains all information that is provided by the - * user while all SP server generated information related to the artifact (hash, - * length) is stored directly with the binary itself. - * - * + * JPA implementation of {@link LocalArtifact}. * */ @Table(name = "sp_artifact", indexes = { @Index(name = "sp_idx_artifact_01", columnList = "tenant,software_module"), @Index(name = "sp_idx_artifact_prim", columnList = "tenant,id") }) @Entity -public class JpaLocalArtifact extends JpaArtifact implements LocalArtifact { +public class JpaLocalArtifact extends AbstractJpaArtifact implements LocalArtifact { private static final long serialVersionUID = 1L; @NotNull @@ -101,7 +96,6 @@ public class JpaLocalArtifact extends JpaArtifact implements LocalArtifact { return softwareModule; } - @Override public final void setSoftwareModule(final SoftwareModule softwareModule) { this.softwareModule = (JpaSoftwareModule) softwareModule; this.softwareModule.addArtifact(this); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java index 25e1a3a93..38dadc1c4 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java @@ -34,14 +34,14 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; /** - * @author Michael Hirsch + * JPA implementation of a {@link Rollout}. * */ @Entity @Table(name = "sp_rollout", indexes = { @Index(name = "sp_idx_rollout_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_rollout")) -public class JpaRollout extends JpaNamedEntity implements Rollout { +public class JpaRollout extends AbstractJpaNamedEntity implements Rollout { private static final long serialVersionUID = 1L; @@ -60,7 +60,7 @@ public class JpaRollout extends JpaNamedEntity implements Rollout { private RolloutStatus status = RolloutStatus.CREATING; @Column(name = "last_check") - private long lastCheck = 0L; + private long lastCheck; @Column(name = "action_type", nullable = false) @Enumerated(EnumType.STRING) @@ -74,11 +74,11 @@ public class JpaRollout extends JpaNamedEntity implements Rollout { @Transient @CacheField(key = CacheKeys.ROLLOUT_GROUP_TOTAL) - private int rolloutGroupsTotal = 0; + private int rolloutGroupsTotal; @Transient @CacheField(key = CacheKeys.ROLLOUT_GROUP_CREATED) - private int rolloutGroupsCreated = 0; + private int rolloutGroupsCreated; @Transient private transient TotalTargetCountStatus totalTargetCountStatus; @@ -98,7 +98,6 @@ public class JpaRollout extends JpaNamedEntity implements Rollout { return rolloutGroups; } - @Override public void setRolloutGroups(final List rolloutGroups) { this.rolloutGroups = rolloutGroups; } @@ -118,17 +117,14 @@ public class JpaRollout extends JpaNamedEntity implements Rollout { return status; } - @Override public void setStatus(final RolloutStatus status) { this.status = status; } - @Override public long getLastCheck() { return lastCheck; } - @Override public void setLastCheck(final long lastCheck) { this.lastCheck = lastCheck; } @@ -158,7 +154,6 @@ public class JpaRollout extends JpaNamedEntity implements Rollout { return totalTargets; } - @Override public void setTotalTargets(final long totalTargets) { this.totalTargets = totalTargets; } @@ -168,7 +163,6 @@ public class JpaRollout extends JpaNamedEntity implements Rollout { return rolloutGroupsTotal; } - @Override public void setRolloutGroupsTotal(final int rolloutGroupsTotal) { this.rolloutGroupsTotal = rolloutGroupsTotal; } @@ -178,7 +172,6 @@ public class JpaRollout extends JpaNamedEntity implements Rollout { return rolloutGroupsCreated; } - @Override public void setRolloutGroupsCreated(final int rolloutGroupsCreated) { this.rolloutGroupsCreated = rolloutGroupsCreated; } @@ -191,7 +184,6 @@ public class JpaRollout extends JpaNamedEntity implements Rollout { return totalTargetCountStatus; } - @Override public void setTotalTargetCountStatus(final TotalTargetCountStatus totalTargetCountStatus) { this.totalTargetCountStatus = totalTargetCountStatus; } @@ -203,58 +195,4 @@ public class JpaRollout extends JpaNamedEntity implements Rollout { + ", getName()=" + getName() + ", getId()=" + getId() + "]"; } - /** - * - * State machine for rollout. - * - */ - public enum RolloutStatus { - - /** - * Rollouts is beeing created. - */ - CREATING, - - /** - * Rollout is ready to start. - */ - READY, - - /** - * Rollout is paused. - */ - PAUSED, - - /** - * Rollout is starting. - */ - STARTING, - - /** - * Rollout is stopped. - */ - STOPPED, - - /** - * Rollout is running. - */ - RUNNING, - - /** - * Rollout is finished. - */ - FINISHED, - - /** - * Rollout could not created due errors, might be database problem due - * asynchronous creating. - */ - ERROR_CREATING, - - /** - * Rollout could not started due errors, might be database problem due - * asynchronous starting. - */ - ERROR_STARTING; - } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java index f167d89fd..ed2620ae6 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java @@ -32,14 +32,12 @@ import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; /** * JPA entity definition of persisting a group of an rollout. * - * @author Michael Hirsch - * */ @Entity @Table(name = "sp_rolloutgroup", indexes = { @Index(name = "sp_idx_rolloutgroup_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { "name", "rollout", "tenant" }, name = "uk_rolloutgroup")) -public class JpaRolloutGroup extends JpaNamedEntity implements RolloutGroup { +public class JpaRolloutGroup extends AbstractJpaNamedEntity implements RolloutGroup { private static final long serialVersionUID = 1L; @@ -61,25 +59,25 @@ public class JpaRolloutGroup extends JpaNamedEntity implements RolloutGroup { private RolloutGroupSuccessCondition successCondition = RolloutGroupSuccessCondition.THRESHOLD; @Column(name = "success_condition_exp", length = 512, nullable = false) - private String successConditionExp = null; + private String successConditionExp; @Column(name = "success_action", nullable = false) private RolloutGroupSuccessAction successAction = RolloutGroupSuccessAction.NEXTGROUP; @Column(name = "success_action_exp", length = 512, nullable = false) - private String successActionExp = null; + private String successActionExp; @Column(name = "error_condition") - private RolloutGroupErrorCondition errorCondition = null; + private RolloutGroupErrorCondition errorCondition; @Column(name = "error_condition_exp", length = 512) - private String errorConditionExp = null; + private String errorConditionExp; @Column(name = "error_action") - private RolloutGroupErrorAction errorAction = null; + private RolloutGroupErrorAction errorAction; @Column(name = "error_action_exp", length = 512) - private String errorActionExp = null; + private String errorActionExp; @Column(name = "total_targets") private long totalTargets; @@ -239,271 +237,4 @@ public class JpaRolloutGroup extends JpaNamedEntity implements RolloutGroup { + ", getId()=" + getId() + "]"; } - /** - * Rollout goup state machine. - * - */ - public enum RolloutGroupStatus { - - /** - * Ready to start the group. - */ - READY, - - /** - * Group is scheduled and started sometime, e.g. trigger of group - * before. - */ - SCHEDULED, - - /** - * Group is finished. - */ - FINISHED, - - /** - * Group is finished and has errors. - */ - ERROR, - - /** - * Group is running. - */ - RUNNING; - } - - /** - * The condition to evaluate if an group is success state. - */ - public enum RolloutGroupSuccessCondition { - THRESHOLD("thresholdRolloutGroupSuccessCondition"); - - private final String beanName; - - private RolloutGroupSuccessCondition(final String beanName) { - this.beanName = beanName; - } - - /** - * @return the beanName - */ - public String getBeanName() { - return beanName; - } - } - - /** - * The condition to evaluate if an group is in error state. - */ - public enum RolloutGroupErrorCondition { - THRESHOLD("thresholdRolloutGroupErrorCondition"); - - private final String beanName; - - private RolloutGroupErrorCondition(final String beanName) { - this.beanName = beanName; - } - - /** - * @return the beanName - */ - public String getBeanName() { - return beanName; - } - } - - /** - * The actions executed when the {@link RolloutGroup#errorCondition} is hit. - */ - public enum RolloutGroupErrorAction { - PAUSE("pauseRolloutGroupAction"); - - private final String beanName; - - private RolloutGroupErrorAction(final String beanName) { - this.beanName = beanName; - } - - /** - * @return the beanName - */ - public String getBeanName() { - return beanName; - } - } - - /** - * The actions executed when the {@link RolloutGroup#successCondition} is - * hit. - */ - public enum RolloutGroupSuccessAction { - NEXTGROUP("startNextRolloutGroupAction"); - - private final String beanName; - - private RolloutGroupSuccessAction(final String beanName) { - this.beanName = beanName; - } - - /** - * @return the beanName - */ - public String getBeanName() { - return beanName; - } - } - - /** - * Object which holds all {@link RolloutGroup} conditions together which can - * easily built. - */ - public static class RolloutGroupConditions { - private RolloutGroupSuccessCondition successCondition = null; - private String successConditionExp = null; - private RolloutGroupSuccessAction successAction = null; - private String successActionExp = null; - private RolloutGroupErrorCondition errorCondition = null; - private String errorConditionExp = null; - private RolloutGroupErrorAction errorAction = null; - private String errorActionExp = null; - - public RolloutGroupSuccessCondition getSuccessCondition() { - return successCondition; - } - - public void setSuccessCondition(final RolloutGroupSuccessCondition finishCondition) { - successCondition = finishCondition; - } - - public String getSuccessConditionExp() { - return successConditionExp; - } - - public void setSuccessConditionExp(final String finishConditionExp) { - successConditionExp = finishConditionExp; - } - - public RolloutGroupSuccessAction getSuccessAction() { - return successAction; - } - - public void setSuccessAction(final RolloutGroupSuccessAction successAction) { - this.successAction = successAction; - } - - public String getSuccessActionExp() { - return successActionExp; - } - - public void setSuccessActionExp(final String successActionExp) { - this.successActionExp = successActionExp; - } - - public RolloutGroupErrorCondition getErrorCondition() { - return errorCondition; - } - - public void setErrorCondition(final RolloutGroupErrorCondition errorCondition) { - this.errorCondition = errorCondition; - } - - public String getErrorConditionExp() { - return errorConditionExp; - } - - public void setErrorConditionExp(final String errorConditionExp) { - this.errorConditionExp = errorConditionExp; - } - - public RolloutGroupErrorAction getErrorAction() { - return errorAction; - } - - public void setErrorAction(final RolloutGroupErrorAction errorAction) { - this.errorAction = errorAction; - } - - public String getErrorActionExp() { - return errorActionExp; - } - - public void setErrorActionExp(final String errorActionExp) { - this.errorActionExp = errorActionExp; - } - } - - /** - * Builder to build easily the {@link RolloutGroupConditions}. - * - */ - public static class RolloutGroupConditionBuilder { - private final RolloutGroupConditions conditions = new RolloutGroupConditions(); - - public RolloutGroupConditions build() { - return conditions; - } - - /** - * Sets the finish condition and expression on the builder. - * - * @param condition - * the finish condition - * @param expression - * the finish expression - * @return the builder itself - */ - public RolloutGroupConditionBuilder successCondition(final RolloutGroupSuccessCondition condition, - final String expression) { - conditions.setSuccessCondition(condition); - conditions.setSuccessConditionExp(expression); - return this; - } - - /** - * Sets the success action and expression on the builder. - * - * @param action - * the success action - * @param expression - * the error expression - * @return the builder itself - */ - public RolloutGroupConditionBuilder successAction(final RolloutGroupSuccessAction action, - final String expression) { - conditions.setSuccessAction(action); - conditions.setSuccessActionExp(expression); - return this; - } - - /** - * Sets the error condition and expression on the builder. - * - * @param condition - * the error condition - * @param expression - * the error expression - * @return the builder itself - */ - public RolloutGroupConditionBuilder errorCondition(final RolloutGroupErrorCondition condition, - final String expression) { - conditions.setErrorCondition(condition); - conditions.setErrorConditionExp(expression); - return this; - } - - /** - * Sets the error action and expression on the builder. - * - * @param action - * the error action - * @param expression - * the error expression - * @return the builder itself - */ - public RolloutGroupConditionBuilder errorAction(final RolloutGroupErrorAction action, final String expression) { - conditions.setErrorAction(action); - conditions.setErrorActionExp(expression); - return this; - } - } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java index 306b6980b..6465e135a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java @@ -50,7 +50,7 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; @Index(name = "sp_idx_base_sw_module_02", columnList = "tenant,deleted,module_type"), @Index(name = "sp_idx_base_sw_module_prim", columnList = "tenant,id") }) @NamedEntityGraph(name = "SoftwareModule.artifacts", attributeNodes = { @NamedAttributeNode("artifacts") }) -public class JpaSoftwareModule extends JpaNamedVersionedEntity implements SoftwareModule { +public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implements SoftwareModule { private static final long serialVersionUID = 1L; @ManyToOne @@ -61,7 +61,7 @@ public class JpaSoftwareModule extends JpaNamedVersionedEntity implements Softwa private final List assignedTo = new ArrayList<>(); @Column(name = "deleted") - private boolean deleted = false; + private boolean deleted; @Column(name = "vendor", nullable = true, length = 256) private String vendor; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java index aba08f0ed..53ce08ca9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java @@ -28,7 +28,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; @IdClass(SwMetadataCompositeKey.class) @Entity @Table(name = "sp_sw_metadata") -public class JpaSoftwareModuleMetadata extends JpaMetaData implements SoftwareModuleMetadata { +public class JpaSoftwareModuleMetadata extends AbstractJpaMetaData implements SoftwareModuleMetadata { private static final long serialVersionUID = 1L; @Id diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java index 9948a7cde..a943b08a4 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java @@ -26,12 +26,16 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @Index(name = "sp_idx_software_module_type_prim", columnList = "tenant,id") }, uniqueConstraints = { @UniqueConstraint(columnNames = { "type_key", "tenant" }, name = "uk_smt_type_key"), @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_smt_name") }) -public class JpaSoftwareModuleType extends JpaNamedEntity implements SoftwareModuleType { +public class JpaSoftwareModuleType extends AbstractJpaNamedEntity implements SoftwareModuleType { private static final long serialVersionUID = 1L; @Column(name = "type_key", nullable = false, length = 64) private String key; + public void setMaxAssignments(final int maxAssignments) { + this.maxAssignments = maxAssignments; + } + @Column(name = "max_ds_assignments", nullable = false) private int maxAssignments; @@ -39,7 +43,7 @@ public class JpaSoftwareModuleType extends JpaNamedEntity implements SoftwareMod private String colour; @Column(name = "deleted") - private boolean deleted = false; + private boolean deleted; /** * Constructor. @@ -53,7 +57,8 @@ public class JpaSoftwareModuleType extends JpaNamedEntity implements SoftwareMod * @param maxAssignments * assignments to a DS */ - public JpaSoftwareModuleType(final String key, final String name, final String description, final int maxAssignments) { + public JpaSoftwareModuleType(final String key, final String name, final String description, + final int maxAssignments) { this(key, name, description, maxAssignments, null); } @@ -71,8 +76,8 @@ public class JpaSoftwareModuleType extends JpaNamedEntity implements SoftwareMod * @param colour * of the type. It will be null by default */ - public JpaSoftwareModuleType(final String key, final String name, final String description, final int maxAssignments, - final String colour) { + public JpaSoftwareModuleType(final String key, final String name, final String description, + final int maxAssignments, final String colour) { super(); this.key = key; this.maxAssignments = maxAssignments; @@ -122,4 +127,9 @@ public class JpaSoftwareModuleType extends JpaNamedEntity implements SoftwareMod public String toString() { return "SoftwareModuleType [key=" + key + ", getName()=" + getName() + ", getId()=" + getId() + "]"; } + + @Override + public void setKey(final String key) { + this.key = key; + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java index 08a66a9b3..229ef1a42 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -73,7 +73,7 @@ import org.springframework.data.domain.Persistable; "controller_id", "tenant" }, name = "uk_tenant_controller_id")) @NamedEntityGraph(name = "Target.detail", attributeNodes = { @NamedAttributeNode("tags"), @NamedAttributeNode(value = "assignedDistributionSet"), @NamedAttributeNode(value = "targetInfo") }) -public class JpaTarget extends JpaNamedEntity implements Persistable, Target { +public class JpaTarget extends AbstractJpaNamedEntity implements Persistable, Target { private static final long serialVersionUID = 1L; @Column(name = "controller_id", length = 64) @@ -82,7 +82,7 @@ public class JpaTarget extends JpaNamedEntity implements Persistable, Targ private String controllerId; @Transient - private boolean entityNew = false; + private boolean entityNew; @ManyToMany(targetEntity = JpaTargetTag.class) @JoinTable(name = "sp_target_target_tag", joinColumns = { @@ -103,14 +103,14 @@ public class JpaTarget extends JpaNamedEntity implements Persistable, Targ @CascadeOnDelete @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, targetEntity = JpaTargetInfo.class) @PrimaryKeyJoinColumn - private JpaTargetInfo targetInfo = null; + private JpaTargetInfo targetInfo; /** * the security token of the target which allows if enabled to authenticate * with this security token. */ @Column(name = "sec_token", insertable = true, updatable = true, nullable = false, length = 128) - private String securityToken = null; + private String securityToken; @CascadeOnDelete @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE, CascadeType.PERSIST }) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java index 1ad1b69b8..55aaec0fe 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java @@ -24,7 +24,7 @@ import org.eclipse.hawkbit.repository.model.TargetFilterQuery; @Table(name = "sp_target_filter_query", indexes = { @Index(name = "sp_idx_target_filter_query_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_tenant_custom_filter_name")) -public class JpaTargetFilterQuery extends JpaTenantAwareBaseEntity implements TargetFilterQuery { +public class JpaTargetFilterQuery extends AbstractJpaTenantAwareBaseEntity implements TargetFilterQuery { private static final long serialVersionUID = 7493966984413479089L; @Column(name = "name", length = 64) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java index 7b7b3e2e4..80e3cd563 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java @@ -38,6 +38,7 @@ import javax.persistence.Table; import javax.persistence.Transient; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.PollStatus; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; @@ -71,7 +72,7 @@ public class JpaTargetInfo implements Persistable, TargetInfo { private Long targetId; @Transient - private boolean entityNew = false; + private boolean entityNew; @CascadeOnDelete @OneToOne(cascade = { CascadeType.MERGE, @@ -81,10 +82,10 @@ public class JpaTargetInfo implements Persistable, TargetInfo { private JpaTarget target; @Column(name = "address", length = 512) - private String address = null; + private String address; @Column(name = "last_target_query") - private Long lastTargetQuery = null; + private Long lastTargetQuery; @Column(name = "install_date") private Long installationDate; @@ -216,6 +217,7 @@ public class JpaTargetInfo implements Persistable, TargetInfo { return controllerAttributes; } + @Override public boolean isRequestControllerAttributes() { return requestControllerAttributes; } @@ -275,63 +277,6 @@ public class JpaTargetInfo implements Persistable, TargetInfo { }); } - /** - * The poll time object which holds all the necessary information around the - * target poll time, e.g. the last poll time, the next poll time and the - * overdue poll time. - * - */ - public static final class PollStatus { - private final LocalDateTime lastPollDate; - private final LocalDateTime nextPollDate; - private final LocalDateTime overdueDate; - private final LocalDateTime currentDate; - - private PollStatus(final LocalDateTime lastPollDate, final LocalDateTime nextPollDate, - final LocalDateTime overdueDate, final LocalDateTime currentDate) { - this.lastPollDate = lastPollDate; - this.nextPollDate = nextPollDate; - this.overdueDate = overdueDate; - this.currentDate = currentDate; - } - - /** - * calculates if the target poll time is overdue and the target has not - * been polled in the configured poll time interval. - * - * @return {@code true} if the current time is after the poll time - * overdue date otherwise {@code false}. - */ - public boolean isOverdue() { - return currentDate.isAfter(overdueDate); - } - - /** - * @return the lastPollDate - */ - public LocalDateTime getLastPollDate() { - return lastPollDate; - } - - public LocalDateTime getNextPollDate() { - return nextPollDate; - } - - public LocalDateTime getOverdueDate() { - return overdueDate; - } - - public LocalDateTime getCurrentDate() { - return currentDate; - } - - @Override - public String toString() { - return "PollTime [lastPollDate=" + lastPollDate + ", nextPollDate=" + nextPollDate + ", overdueDate=" - + overdueDate + ", currentDate=" + currentDate + "]"; - } - } - @Override public int hashCode() { final int prime = 31; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java index 0d8f3a5d1..800fcc15e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.repository.model.TargetTag; @Table(name = "sp_target_tag", indexes = { @Index(name = "sp_idx_target_tag_prim", columnList = "tenant,id") }, uniqueConstraints = @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_targ_tag")) -public class JpaTargetTag extends JpaTag implements TargetTag { +public class JpaTargetTag extends AbstractJpaTag implements TargetTag { private static final long serialVersionUID = 1L; @ManyToMany(mappedBy = "tags", targetEntity = JpaTarget.class, fetch = FetchType.LAZY) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java index 2d1342b74..2b28aa55f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java @@ -23,7 +23,7 @@ import org.eclipse.hawkbit.repository.model.TenantConfiguration; @Entity @Table(name = "sp_tenant_configuration", uniqueConstraints = @UniqueConstraint(columnNames = { "conf_key", "tenant" }, name = "uk_tenant_key")) -public class JpaTenantConfiguration extends JpaTenantAwareBaseEntity implements TenantConfiguration { +public class JpaTenantConfiguration extends AbstractJpaTenantAwareBaseEntity implements TenantConfiguration { private static final long serialVersionUID = 1L; @Column(name = "conf_key", length = 128) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java index 7cb31b3c4..32b6b1082 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java @@ -36,7 +36,7 @@ import org.eclipse.hawkbit.repository.model.TenantMetaData; @Index(name = "sp_idx_tenant_prim", columnList = "tenant,id") }, uniqueConstraints = { @UniqueConstraint(columnNames = { "tenant" }, name = "uk_tenantmd_tenant") }) @Entity -public class JpaTenantMetaData extends JpaBaseEntity implements TenantMetaData { +public class JpaTenantMetaData extends AbstractJpaBaseEntity implements TenantMetaData { private static final long serialVersionUID = 1L; @Column(name = "tenant", nullable = false, length = 40) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroupId.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroupId.java index cc1c9cbe7..b4001d9dc 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroupId.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroupId.java @@ -50,4 +50,4 @@ public class RolloutTargetGroupId implements Serializable { public Long getTarget() { return target; } -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java index 51b57bb17..74f921642 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java @@ -9,13 +9,21 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; +import java.util.concurrent.TimeUnit; +/** + * Operations to be executed by the target. Usually a software update. Other + * supported actions are the cancellation of a running update action or a + * refresh request for target attributes. + * + */ public interface Action extends TenantAwareBaseEntity { /** - * indicating that target action has no force time {@link #hasForcedTime()}. + * indicating that target action has no force time which is only needed in + * case of {@link ActionType#TIMEFORCED}. */ - public static final long NO_FORCE_TIME = 0L; + long NO_FORCE_TIME = 0L; /** * @return the distributionSet @@ -29,74 +37,117 @@ public interface Action extends TenantAwareBaseEntity { void setDistributionSet(DistributionSet distributionSet); /** - * @return true when action is in state {@link Status#CANCELING} or - * {@link Status#CANCELED}, false otherwise + * @return true when action is in state + * {@link Status#CANCELING} or {@link Status#CANCELED}, false + * otherwise */ - boolean isCancelingOrCanceled(); - - void setActive(boolean active); - - Status getStatus(); - - void setStatus(Status status); - - int getDownloadProgressPercent(); - - void setDownloadProgressPercent(int downloadProgressPercent); - - boolean isActive(); - - void setActionType(ActionType actionType); + default boolean isCancelingOrCanceled() { + return Status.CANCELING.equals(getStatus()) || Status.CANCELED.equals(getStatus()); + } /** - * @return the actionType + * @return current {@link Status#DOWNLOAD} progress if known by the update + * server. + */ + int getDownloadProgressPercent(); + + /** + * @return current {@link Status} of the {@link Action}. + */ + Status getStatus(); + + /** + * @param status + * of the {@link Action} + */ + void setStatus(Status status); + + /** + * @return true if {@link Action} is still running. + */ + boolean isActive(); + + /** + * @return the {@link ActionType} */ ActionType getActionType(); + /** + * @return list of {@link ActionStatus} entries. + */ List getActionStatus(); + /** + * @param target + * of this {@link Action} + */ void setTarget(Target target); + /** + * @return {@link Target} of this {@link Action}. + */ Target getTarget(); + /** + * @return time in {@link TimeUnit#MILLISECONDS} after which + * {@link #isForced()} switches to true in case of + * {@link ActionType#TIMEFORCED}. + */ long getForcedTime(); - void setForcedTime(long forcedTime); - + /** + * @return rolloutGroup related to this {@link Action}. + */ RolloutGroup getRolloutGroup(); - void setRolloutGroup(RolloutGroup rolloutGroup); - + /** + * @return rollout related to this {@link Action}. + */ Rollout getRollout(); - void setRollout(Rollout rollout); - /** - * checks if the {@link #forcedTime} is hit by the given + * checks if the {@link #getForcedTime()} is hit by the given * {@code hitTimeMillis}, by means if the given milliseconds are greater * than the forcedTime. * * @param hitTimeMillis * the milliseconds, mostly the * {@link System#currentTimeMillis()} - * @return {@code true} if this {@link #type} is in + * @return {@code true} if this {@link #getActionType()} is in * {@link ActionType#TIMEFORCED} and the given {@code hitTimeMillis} - * is greater than the {@link #forcedTime} otherwise {@code false} + * is greater than the {@link #getForcedTime()} otherwise + * {@code false} */ - boolean isHitAutoForceTime(long hitTimeMillis); + default boolean isHitAutoForceTime(final long hitTimeMillis) { + if (ActionType.TIMEFORCED.equals(getActionType())) { + return hitTimeMillis >= getForcedTime(); + } + return false; + } /** - * @return {@code true} if either the {@link #type} is + * @return {@code true} if either the {@link #getActionType()} is * {@link ActionType#FORCED} or {@link ActionType#TIMEFORCED} but - * then if the {@link #forcedTime} has been exceeded otherwise + * then if the {@link #getForcedTime()} has been exceeded otherwise * always {@code false} */ - boolean isForce(); + default boolean isForce() { + switch (getActionType()) { + case FORCED: + return true; + case TIMEFORCED: + return isHitAutoForceTime(System.currentTimeMillis()); + default: + return false; + } + } /** * @return true when action is forced, false otherwise */ - boolean isForced(); + default boolean isForced() { + return ActionType.FORCED.equals(getActionType()); + } /** * Action status as reported by the controller. @@ -159,7 +210,21 @@ public interface Action extends TenantAwareBaseEntity { * */ public enum ActionType { - FORCED, SOFT, TIMEFORCED; - } + /** + * Forced action execution. Target is advised to executed immediately. + */ + FORCED, -} \ No newline at end of file + /** + * Soft action execution. Target is advised to execute when it fits. + */ + SOFT, + + /** + * {@link #SOFT} action execution until + * {@link Action#isHitAutoForceTime(long)} is reached, {@link #FORCED} + * after that. + */ + TIMEFORCED; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java index 05f6966d8..f3ca66887 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java @@ -9,13 +9,30 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; +import java.util.concurrent.TimeUnit; import org.eclipse.hawkbit.repository.model.Action.Status; +/** + * Status information of an {@link Action} which can be provided by the + * {@link Target} or is added by the update server itself. This can be the start + * of the {@link Action} life cycle, the end and update notifications in + * between. + * + */ public interface ActionStatus extends TenantAwareBaseEntity { + /** + * @return time in {@link TimeUnit#MILLISECONDS} when the status was + * reported. + */ Long getOccurredAt(); + /** + * @param occurredAt + * time in {@link TimeUnit#MILLISECONDS} when the status was + * reported. + */ void setOccurredAt(Long occurredAt); /** @@ -26,14 +43,36 @@ public interface ActionStatus extends TenantAwareBaseEntity { */ void addMessage(String message); + /** + * @return list of message entries that can be added to the + * {@link ActionStatus}. + */ List getMessages(); + /** + * @return {@link Action} this {@link ActionStatus} belongs to. + */ Action getAction(); + /** + * @param action + * this {@link ActionStatus} belongs to. + */ void setAction(Action action); + /** + * @return the {@link Status} of this {@link ActionStatus}. Caused + * potentially a transition change of the {@link #getAction()} if + * different from the previous {@link ActionStatus#getStatus()}. + */ Status getStatus(); + /** + * @param status + * of this {@link ActionStatus}. May cause a transition change of + * the {@link #getAction()} if different from the previous + * {@link ActionStatus#getStatus()}. + */ void setStatus(Status status); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java index 4b81320e8..6bc1efa56 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java @@ -20,8 +20,6 @@ import org.eclipse.hawkbit.repository.model.Action.Status; // TODO: create interface public class ActionWithStatusCount { private final Long actionStatusCount; - private final Long actionId; - private final ActionType actionType; private final boolean actionActive; private final long actionForceTime; private final Status actionStatus; @@ -67,8 +65,6 @@ public class ActionWithStatusCount { final long forcedTime, final Status status, final Long actionCreatedAt, final Long actionLastModifiedAt, final Long dsId, final String dsName, final String dsVersion, final Long actionStatusCount, final String rolloutName) { - this.actionId = actionId; - this.actionType = actionType; actionActive = active; actionForceTime = forcedTime; actionStatus = status; @@ -92,26 +88,6 @@ public class ActionWithStatusCount { return action; } - public Long getActionId() { - return actionId; - } - - public ActionType getActionType() { - return actionType; - } - - public boolean isActionActive() { - return actionActive; - } - - public long getActionForceTime() { - return actionForceTime; - } - - public Status getActionStatus() { - return actionStatus; - } - public Long getActionCreatedAt() { return actionCreatedAt; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java index a4db06d25..95689a9d9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java @@ -8,16 +8,35 @@ */ package org.eclipse.hawkbit.repository.model; +import com.google.common.io.BaseEncoding; + +/** + * Binaries for a {@link SoftwareModule} Note: the decision which artifacts have + * to be downloaded are done on the device side. e.g. Full Package, Signatures, + * binary deltas + * + */ public interface Artifact extends TenantAwareBaseEntity { + /** + * @return {@link SoftwareModule} this {@link Artifact} belongs to. + */ SoftwareModule getSoftwareModule(); - void setSoftwareModule(SoftwareModule softwareModule); - + /** + * @return MD5 hash of the artifact. + */ String getMd5Hash(); + /** + * @return SHA-1 hash of the artifact in {@link BaseEncoding#base16()} + * format. + */ String getSha1Hash(); + /** + * @return size of the artifact in bytes. + */ Long getSize(); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java index 0b8a8c5ee..f23b226c6 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java @@ -9,19 +9,41 @@ package org.eclipse.hawkbit.repository.model; import java.io.Serializable; +import java.util.concurrent.TimeUnit; import org.springframework.hateoas.Identifiable; +/** + * Core information of all entities. + * + */ public interface BaseEntity extends Serializable, Identifiable { + /** + * @return time in {@link TimeUnit#MILLISECONDS} when the {@link BaseEntity} + * was created. + */ Long getCreatedAt(); + /** + * @return user that created the {@link BaseEntity}. + */ String getCreatedBy(); + /** + * @return time in {@link TimeUnit#MILLISECONDS} when the {@link BaseEntity} + * was last time changed. + */ Long getLastModifiedAt(); + /** + * @return user that updated the {@link BaseEntity} last. + */ String getLastModifiedBy(); + /** + * @return version of the {@link BaseEntity}. + */ long getOptLockRevision(); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java index 41b1e5f5d..1c23cec27 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java @@ -11,27 +11,63 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; import java.util.Set; +import org.eclipse.hawkbit.repository.DistributionSetManagement; + +/** + * A {@link DistributionSet} defines a meta package that combines a set of + * {@link SoftwareModule}s which have to be or are provisioned to a + * {@link Target}. + * + *

+ * A {@link Target} has exactly one target {@link DistributionSet} assigned. + *

+ * + */ public interface DistributionSet extends NamedVersionedEntity { + /** + * @return {@link Set} of assigned {@link DistributionSetTag}s. + */ Set getTags(); + /** + * @return true if the set is deleted and only kept for history + * purposes. + */ boolean isDeleted(); /** - * @return immutable list of meta data elements. + * @return immutable {@link List} of {@link DistributionSetMetadata} + * elements. See {@link DistributionSetManagement} to alter. */ List getMetadata(); - List getActions(); - + /** + * @return true if {@link DistributionSet} contains a mandatory + * migration step, i.e. unfinished {@link Action}s will kept active + * and not automatically canceled if overridden by a newer update. + */ boolean isRequiredMigrationStep(); + /** + * @param deleted + * to true if {@link DistributionSet} is no longer + * be usage but kept for history purposes. + * @return updated {@link DistributionSet} + */ DistributionSet setDeleted(boolean deleted); + /** + * @param isRequiredMigrationStep + * to true if {@link DistributionSet} contains a + * mandatory migration step, i.e. unfinished {@link Action}s will + * kept active and not automatically canceled if overridden by a + * newer update. + * + * @return updated {@link DistributionSet} + */ DistributionSet setRequiredMigrationStep(boolean isRequiredMigrationStep); - DistributionSet setTags(Set tags); - /** * @return the assignedTargets */ @@ -48,6 +84,9 @@ public interface DistributionSet extends NamedVersionedEntity { */ Set getModules(); + /** + * @return {@link DistributionSetIdName} view. + */ DistributionSetIdName getDistributionSetIdName(); /** @@ -77,10 +116,22 @@ public interface DistributionSet extends NamedVersionedEntity { */ SoftwareModule findFirstModuleByType(SoftwareModuleType type); + /** + * @return type of the {@link DistributionSet}. + */ DistributionSetType getType(); + /** + * @param type + * of the {@link DistributionSet}. + */ void setType(DistributionSetType type); + /** + * @return true if all defined + * {@link DistributionSetType#getMandatoryModuleTypes()} of + * {@link #getType()} are present in this {@link DistributionSet}. + */ boolean isComplete(); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java index 187b04e81..dfa9b9716 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java @@ -8,10 +8,15 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * {@link MetaData} of a {@link DistributionSet}. + * + */ public interface DistributionSetMetadata extends MetaData { - void setDistributionSet(DistributionSet distributionSet); - + /** + * @return {@link DistributionSet} of this {@link MetaData} entry. + */ DistributionSet getDistributionSet(); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java index cd5ded232..31f909348 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java @@ -10,8 +10,16 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; +/** + * {@link Tag} of a {@link DistributionSet}. + * + */ public interface DistributionSetTag extends Tag { + /** + * @return {@link List} of {@link DistributionSet}s this {@link Tag} is + * assigned to. + */ List getAssignedToDistributionSet(); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java index f540428a9..07c63ee89 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java @@ -12,21 +12,33 @@ import java.util.Set; import org.eclipse.hawkbit.repository.jpa.model.DistributionSetTypeElement; +/** + * A {@link DistributionSetType} is an abstract definition for + * {@link DistributionSet} that defines what {@link SoftwareModule}s can be + * added (optional) to {@link DistributionSet} of that type or have to added + * (mandatory) in order to be considered complete. Only complete DS can be + * assigned to a {@link Target}. + * + */ public interface DistributionSetType extends NamedEntity { /** - * @return the deleted + * @return true if the type is deleted and only kept for + * history purposes. */ boolean isDeleted(); /** - * @param deleted - * the deleted to set + * @return set of {@link SoftwareModuleType}s that need to be in a + * {@link DistributionSet} of this type to be + * {@link DistributionSet#isComplete()}. */ - void setDeleted(boolean deleted); - Set getMandatoryModuleTypes(); + /** + * @return set of optional {@link SoftwareModuleType}s that can be in a + * {@link DistributionSet} of this type. + */ Set getOptionalModuleTypes(); /** @@ -55,7 +67,7 @@ public interface DistributionSetType extends NamedEntity { * {@link DistributionSetType} and defined as * {@link DistributionSetTypeElement#isMandatory()}. * - * @param softwareModuleType + * @param softwareModuleTypeId * search for by {@link SoftwareModuleType#getId()} * @return true if found */ @@ -122,8 +134,15 @@ public interface DistributionSetType extends NamedEntity { */ DistributionSetType removeModuleType(Long smTypeId); + /** + * @return business key of this {@link DistributionSetType}. + */ String getKey(); + /** + * @param key + * of this {@link DistributionSetType}. + */ void setKey(String key); /** @@ -134,8 +153,15 @@ public interface DistributionSetType extends NamedEntity { */ boolean checkComplete(DistributionSet distributionSet); + /** + * @return get color code to by used in management UI views. + */ String getColour(); + /** + * @param colour + * code to by used in management UI views. + */ void setColour(final String colour); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java index daf0d1ae5..4ff3ab5a8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java @@ -8,16 +8,30 @@ */ package org.eclipse.hawkbit.repository.model; +import java.net.URL; + +/** + * External artifact representation with all the necessary information to + * generate an artifact {@link URL} at runtime. + * + */ public interface ExternalArtifact extends Artifact { + /** + * @return {@link ExternalArtifactProvider} of this {@link Artifact}. + */ ExternalArtifactProvider getExternalArtifactProvider(); + /** + * @return generated download {@link URL}. + */ String getUrl(); + /** + * @return suffix for {@link URL} generation. + */ String getUrlSuffix(); - void setExternalArtifactProvider(ExternalArtifactProvider externalArtifactProvider); - /** * @param urlSuffix * the urlSuffix to set diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java index bb9f2fbea..139327096 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java @@ -8,14 +8,34 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * External repositories for artifact storage. The update server provides URLs + * for the targets to download from these external resources but does not access + * them itself. + * + */ public interface ExternalArtifactProvider extends NamedEntity { + /** + * @return prefix for url generation + */ String getBasePath(); + /** + * @return default for {@link ExternalArtifact#getUrlSuffix()}. + */ String getDefaultSuffix(); + /** + * @param basePath + * prefix for url generation + */ void setBasePath(String basePath); + /** + * @param defaultSuffix + * for {@link ExternalArtifact#getUrlSuffix()}. + */ void setDefaultSuffix(String defaultSuffix); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java index 0f3a22c41..9aeb791c4 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java @@ -8,8 +8,21 @@ */ package org.eclipse.hawkbit.repository.model; +import org.eclipse.hawkbit.artifact.repository.ArtifactRepository; + +/** + * Tenant specific locally stored artifact representation that is used by + * {@link SoftwareModule}s . It contains all information that is provided by the + * user while all update server generated information related to the artifact + * (hash, length) is stored directly with the binary itself in the + * {@link ArtifactRepository}. + * + */ public interface LocalArtifact extends Artifact { + /** + * @return the filename that was provided during upload. + */ String getFilename(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java index 8d6e6eed6..4f3397b23 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java @@ -10,14 +10,30 @@ package org.eclipse.hawkbit.repository.model; import java.io.Serializable; +/** + * Meta data for entities, a (key/value) store. + * + */ public interface MetaData extends Serializable { + /** + * @return the key + */ String getKey(); + /** + * @param key + */ void setKey(String key); + /** + * @return the value + */ String getValue(); + /** + * @param value + */ void setValue(String value); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java index 1cc84bf8f..4d3f3e419 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java @@ -8,14 +8,32 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * Entities that have a name and description. + * + */ public interface NamedEntity extends TenantAwareBaseEntity { + /** + * @return the description of the entity. + */ String getDescription(); + /** + * @return the name of the entity. + */ String getName(); + /** + * @param description + * of the entity. + */ void setDescription(String description); + /** + * @param name + * of the entity. + */ void setName(String name); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java index 710980f13..de6cded12 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java @@ -8,10 +8,21 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * Entities that have a name and a description. + * + */ public interface NamedVersionedEntity extends NamedEntity { + /** + * @return the version of entity. + */ String getVersion(); + /** + * @param version + * of the entity. + */ void setVersion(String version); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java index bf696d2fd..f87b1067f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java @@ -10,31 +10,53 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; -import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.Action.ActionType; +/** + * Software update operations in large scale IoT scenarios with hundred of + * thousands of devices require special handling. + * + * That includes secure handling of large volumes of devices at rollout creation + * time. Monitoring of the rollout progress. Emergency rollout shutdown in case + * of problems on to many devices and reporting capabilities for a complete + * understanding of the rollout progress at each point in time. + * + */ public interface Rollout extends NamedEntity { + /** + * @return {@link DistributionSet} that is rolled out + */ DistributionSet getDistributionSet(); + /** + * @param distributionSet + * that is rolled out + */ void setDistributionSet(DistributionSet distributionSet); + /** + * @return list of deployment groups of the rollout. + */ List getRolloutGroups(); - void setRolloutGroups(List rolloutGroups); - + /** + * @return rsql query that identifies the targets that are part of this + * rollout. + */ String getTargetFilterQuery(); + /** + * @param targetFilterQuery + * that identifies the targets that are part of this rollout. + */ void setTargetFilterQuery(String targetFilterQuery); + /** + * @return status of the rollout + */ RolloutStatus getStatus(); - void setStatus(RolloutStatus status); - - long getLastCheck(); - - void setLastCheck(long lastCheck); - ActionType getActionType(); void setActionType(ActionType actionType); @@ -45,18 +67,65 @@ public interface Rollout extends NamedEntity { long getTotalTargets(); - void setTotalTargets(long totalTargets); - int getRolloutGroupsTotal(); - void setRolloutGroupsTotal(int rolloutGroupsTotal); - int getRolloutGroupsCreated(); - void setRolloutGroupsCreated(int rolloutGroupsCreated); - TotalTargetCountStatus getTotalTargetCountStatus(); - void setTotalTargetCountStatus(TotalTargetCountStatus totalTargetCountStatus); + /** + * + * State machine for rollout. + * + */ + public enum RolloutStatus { + + /** + * Rollouts is being created. + */ + CREATING, + + /** + * Rollout is ready to start. + */ + READY, + + /** + * Rollout is paused. + */ + PAUSED, + + /** + * Rollout is starting. + */ + STARTING, + + /** + * Rollout is stopped. + */ + STOPPED, + + /** + * Rollout is running. + */ + RUNNING, + + /** + * Rollout is finished. + */ + FINISHED, + + /** + * Rollout could not be created due to errors, might be a database + * problem during asynchronous creating. + */ + ERROR_CREATING, + + /** + * Rollout could not be started due to errors, might be database problem + * during asynchronous starting. + */ + ERROR_STARTING; + } } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java index 647278b78..cd65c4d2f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java @@ -8,12 +8,6 @@ */ package org.eclipse.hawkbit.repository.model; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorAction; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorCondition; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessAction; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessCondition; - public interface RolloutGroup extends NamedEntity { Rollout getRollout(); @@ -75,4 +69,117 @@ public interface RolloutGroup extends NamedEntity { */ void setTotalTargetCountStatus(TotalTargetCountStatus totalTargetCountStatus); + /** + * Rollout goup state machine. + * + */ + public enum RolloutGroupStatus { + + /** + * Ready to start the group. + */ + READY, + + /** + * Group is scheduled and started sometime, e.g. trigger of group + * before. + */ + SCHEDULED, + + /** + * Group is finished. + */ + FINISHED, + + /** + * Group is finished and has errors. + */ + ERROR, + + /** + * Group is running. + */ + RUNNING; + } + + /** + * The condition to evaluate if an group is success state. + */ + public enum RolloutGroupSuccessCondition { + THRESHOLD("thresholdRolloutGroupSuccessCondition"); + + private final String beanName; + + private RolloutGroupSuccessCondition(final String beanName) { + this.beanName = beanName; + } + + /** + * @return the beanName + */ + public String getBeanName() { + return beanName; + } + } + + /** + * The condition to evaluate if an group is in error state. + */ + public enum RolloutGroupErrorCondition { + THRESHOLD("thresholdRolloutGroupErrorCondition"); + + private final String beanName; + + private RolloutGroupErrorCondition(final String beanName) { + this.beanName = beanName; + } + + /** + * @return the beanName + */ + public String getBeanName() { + return beanName; + } + } + + /** + * The actions executed when the {@link RolloutGroup#errorCondition} is hit. + */ + public enum RolloutGroupErrorAction { + PAUSE("pauseRolloutGroupAction"); + + private final String beanName; + + private RolloutGroupErrorAction(final String beanName) { + this.beanName = beanName; + } + + /** + * @return the beanName + */ + public String getBeanName() { + return beanName; + } + } + + /** + * The actions executed when the {@link RolloutGroup#successCondition} is + * hit. + */ + public enum RolloutGroupSuccessAction { + NEXTGROUP("startNextRolloutGroupAction"); + + private final String beanName; + + private RolloutGroupSuccessAction(final String beanName) { + this.beanName = beanName; + } + + /** + * @return the beanName + */ + public String getBeanName() { + return beanName; + } + } } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java index 534d45fa3..24417d3f8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java @@ -12,8 +12,12 @@ public interface SoftwareModuleType extends NamedEntity { String getKey(); + void setKey(String key); + int getMaxAssignments(); + void setMaxAssignments(int maxAssignments); + boolean isDeleted(); void setDeleted(boolean deleted); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java index 657b95c41..e918d7376 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java @@ -12,8 +12,6 @@ import java.io.Serializable; import java.net.URI; import java.util.Map; -import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo.PollStatus; - public interface TargetInfo extends Serializable { Long getId(); @@ -43,4 +41,6 @@ public interface TargetInfo extends Serializable { */ PollStatus getPollStatus(); + boolean isRequestControllerAttributes(); + } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java index d80fc5a7b..43232ef2d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java @@ -11,9 +11,9 @@ package org.eclipse.hawkbit.rollout.condition; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java index 223f20125..0f1d1376f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java @@ -13,10 +13,10 @@ import java.util.List; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java index f0e2d382c..5992ed1fc 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java @@ -24,8 +24,8 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.jpa.ActionRepository; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaArtifact; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaArtifact; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; @@ -76,7 +76,7 @@ public class TestDataUtil { // load also lazy stuff set = distributionSetManagement.findDistributionSetByIdWithDetails(set.getId()); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(1); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)).hasSize(1); return set; } @@ -232,12 +232,12 @@ public class TestDataUtil { return generateDistributionSet(suffix, "v1.0", softwareManagement, distributionSetManagement, false); } - public static List generateArtifacts(final ArtifactManagement artifactManagement, + public static List generateArtifacts(final ArtifactManagement artifactManagement, final Long moduleId) { - final List artifacts = new ArrayList<>(); + final List artifacts = new ArrayList<>(); for (int i = 0; i < 3; i++) { final InputStream stubInputStream = IOUtils.toInputStream("some test data" + i); - artifacts.add((JpaArtifact) artifactManagement.createLocalArtifact(stubInputStream, moduleId, + artifacts.add((AbstractJpaArtifact) artifactManagement.createLocalArtifact(stubInputStream, moduleId, "filename" + i, false)); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java index 4fbd46a5c..0b8938808 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java @@ -11,7 +11,6 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; -import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.junit.Test; @@ -27,11 +26,11 @@ public class ActionTest { @Description("Ensures that timeforced moded switch from soft to forces after defined timeframe.") public void timeforcedHitNewHasCodeIsGenerated() throws InterruptedException { - final boolean active = true; + final boolean active; // current time + 1 seconds final long sleepTime = 1000; final long timeForceTimeAt = System.currentTimeMillis() + sleepTime; - final Action timeforcedAction = new JpaAction(); + final JpaAction timeforcedAction = new JpaAction(); timeforcedAction.setActionType(ActionType.TIMEFORCED); timeforcedAction.setForcedTime(timeForceTimeAt); assertThat(timeforcedAction.isForce()).isFalse(); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java index 76286d217..4b2a92169 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java @@ -72,7 +72,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { .isEqualTo(TargetUpdateStatus.IN_SYNC); assertThat(actionStatusRepository.findAll(pageReq).getNumberOfElements()).isEqualTo(3); - assertThat(deploymentManagement.findActionStatusByAction(pageReq, savedAction, false).getNumberOfElements()) + assertThat(deploymentManagement.findActionStatusByAction(pageReq, savedAction).getNumberOfElements()) .isEqualTo(3); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java index 50b929622..c1b0541f2 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java @@ -511,8 +511,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final List deployedTargetIDs = deploymentResult.getDeployedTargetIDs(); final List undeployedTargetIDs = deploymentResult.getUndeployedTargetIDs(); - final List savedNakedTargets = deploymentResult.getUndeployedTargets(); - final List savedDeployedTargets = deploymentResult.getDeployedTargets(); + final Collection savedNakedTargets = (Collection) deploymentResult.getUndeployedTargets(); + final Collection savedDeployedTargets = (Collection) deploymentResult.getDeployedTargets(); // retrieving all Actions created by the assignDistributionSet call final Page page = actionRepository.findAll(pageReq); @@ -540,11 +540,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // test the content of different lists assertThat(allFoundTargets).as("content of founded target is wrong").containsAll(deployedTargetsFromDB) .containsAll(undeployedTargetsFromDB); - assertThat(deployedTargetsFromDB).as("content of deployed target is wrong") - .containsAll((Iterable) savedDeployedTargets) + assertThat(deployedTargetsFromDB).as("content of deployed target is wrong").containsAll(savedDeployedTargets) .doesNotContain(Iterables.toArray(undeployedTargetsFromDB, JpaTarget.class)); - assertThat(undeployedTargetsFromDB).as("content of undeployed target is wrong") - .containsAll((Iterable) savedNakedTargets) + assertThat(undeployedTargetsFromDB).as("content of undeployed target is wrong").containsAll(savedNakedTargets) .doesNotContain(Iterables.toArray(deployedTargetsFromDB, JpaTarget.class)); // For each of the 4 targets 1 distribution sets gets assigned @@ -675,10 +673,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { } // verify that deleted attribute is used correctly - List allFoundDS = distributionSetManagement.findDistributionSetsAll(pageReq, false, true) - .getContent(); + List allFoundDS = distributionSetManagement + .findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true).getContent(); assertThat(allFoundDS.size()).as("no ds should be founded").isEqualTo(0); - allFoundDS = distributionSetManagement.findDistributionSetsAll(pageRequest, true, true).getContent(); + allFoundDS = distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageRequest, true, true) + .getContent(); assertThat(allFoundDS).as("wrong size of founded ds").hasSize(noOfDistributionSets); for (final DistributionSet ds : deploymentResult.getDistributionSets()) { @@ -692,9 +691,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // has been installed // successfully and no activeAction is referring to created distribution // sets - allFoundDS = distributionSetManagement.findDistributionSetsAll(pageRequest, false, true).getContent(); + allFoundDS = distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageRequest, false, true) + .getContent(); assertThat(allFoundDS.size()).as("no ds should be founded").isEqualTo(0); - allFoundDS = distributionSetManagement.findDistributionSetsAll(pageRequest, true, true).getContent(); + allFoundDS = distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageRequest, true, true) + .getContent(); assertThat(allFoundDS).as("size of founded ds is wrong").hasSize(noOfDistributionSets); } diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java index 3ed4e703e..5a5518cf3 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java @@ -404,7 +404,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { // modifying the meta data value dsMetadata.setValue(knownUpdateValue); dsMetadata.setKey(knownKey); - dsMetadata.setDistributionSet(changedLockRevisionDS); + ((JpaDistributionSetMetadata) dsMetadata).setDistributionSet(changedLockRevisionDS); Thread.sleep(100); @@ -728,7 +728,8 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { public void findDistributionSetsWithoutLazy() { TestDataUtil.generateDistributionSets(20, softwareManagement, distributionSetManagement); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(20); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(20); } @Test @@ -747,8 +748,9 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { distributionSetManagement.deleteDistributionSet(ds1.getId()); // not assigned so not marked as deleted but fully deleted assertThat(distributionSetRepository.findAll()).hasSize(1); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, Boolean.FALSE, Boolean.TRUE) - .getTotalElements()).isEqualTo(1); + assertThat(distributionSetManagement + .findDistributionSetsByDeletedAndOrCompleted(pageReq, Boolean.FALSE, Boolean.TRUE).getTotalElements()) + .isEqualTo(1); } @Test @@ -816,8 +818,9 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { // not assigned so not marked as deleted assertThat(distributionSetRepository.findAll()).hasSize(3); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, Boolean.FALSE, Boolean.TRUE) - .getTotalElements()).isEqualTo(2); + assertThat(distributionSetManagement + .findDistributionSetsByDeletedAndOrCompleted(pageReq, Boolean.FALSE, Boolean.TRUE).getTotalElements()) + .isEqualTo(2); } private Target sendUpdateActionStatusToTarget(final Status status, final Action updActA, final Target t, diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java index e56ce6cd5..576315b3a 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java @@ -18,23 +18,22 @@ import java.util.concurrent.Callable; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; -import org.eclipse.hawkbit.repository.jpa.model.JpaRollout.RolloutStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupConditions; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorAction; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupErrorCondition; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorAction; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; @@ -876,7 +875,7 @@ public class RolloutManagementTest extends AbstractIntegrationTest { softwareManagement, distributionSetManagement); targetManagement.createTargets( TestDataUtil.buildTargetFixtures(amountTargetsForRollout, targetPrefixName + "-", targetPrefixName)); - final RolloutGroupConditions conditions = new JpaRolloutGroup.RolloutGroupConditionBuilder() + final RolloutGroupConditions conditions = new RolloutGroupConditionBuilder() .successCondition(RolloutGroupSuccessCondition.THRESHOLD, successCondition) .errorCondition(RolloutGroupErrorCondition.THRESHOLD, errorCondition) .errorAction(RolloutGroupErrorAction.PAUSE, null).build(); @@ -963,7 +962,7 @@ public class RolloutManagementTest extends AbstractIntegrationTest { private Rollout createRolloutByVariables(final String rolloutName, final String rolloutDescription, final int groupSize, final String filterQuery, final DistributionSet distributionSet, final String successCondition, final String errorCondition) { - final RolloutGroupConditions conditions = new JpaRolloutGroup.RolloutGroupConditionBuilder() + final RolloutGroupConditions conditions = new RolloutGroupConditionBuilder() .successCondition(RolloutGroupSuccessCondition.THRESHOLD, successCondition) .errorCondition(RolloutGroupErrorCondition.THRESHOLD, errorCondition) .errorAction(RolloutGroupErrorAction.PAUSE, null).build(); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java index 300fe78dc..befcf5f3d 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java @@ -961,7 +961,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { .getSoftwareModule(); try { - softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(ah, "doesnotexist")); + softwareManagement.findSoftwareModuleMetadata(ah, "doesnotexist"); fail("should not have worked as module metadata with that key does not exist"); } catch (final EntityNotFoundException e) { diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java index 83c31b31a..32c4d8641 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java @@ -14,11 +14,11 @@ import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.RolloutGroupFields; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupConditionBuilder; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java index 37a501a3f..e4988025e 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java @@ -59,7 +59,7 @@ public class RSQLSoftwareModuleTypeFieldsTest extends AbstractIntegrationTest { } private void assertRSQLQuery(final String rsqlParam, final long excpectedEntity) { - final Page find = softwareManagement.findSoftwareModuleTypesByPredicate(rsqlParam, + final Page find = softwareManagement.findSoftwareModuleTypesAll(rsqlParam, new PageRequest(0, 100)); final long countAll = find.getTotalElements(); assertThat(find).isNotNull(); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java index ca0ef3840..e5cbc18a0 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java @@ -194,7 +194,7 @@ public class MultiTenancyEntityTest extends AbstractIntegrationTest { private Page findDistributionSetForTenant(final String tenant) throws Exception { return securityRule.runAs(WithSpringAuthorityRule.withUserAndTenant("user", tenant), - () -> distributionSetManagement.findDistributionSetsAll(pageReq, false, false)); + () -> distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, false)); } } diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java index b73320f0e..f67f15815 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java @@ -16,7 +16,7 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.RandomStringUtils; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java index 5e7c0f3c7..b9bceda3a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java @@ -12,7 +12,8 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.jpa.model.JpaLocalArtifact; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -72,7 +73,7 @@ public class ArtifactBeanQuery extends AbstractBeanQuery { @Override protected LocalArtifact constructBean() { - return new LocalArtifact(); + return new JpaLocalArtifact(); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java index ea49d2f1f..29bea30eb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/BaseSwModuleBeanQuery.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java index 6e417435c..14568c307 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.security.SecureRandom; -import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; /** * @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; * * */ -public class ProxyBaseSoftwareModuleItem extends SoftwareModule { +public class ProxyBaseSoftwareModuleItem extends JpaSoftwareModule { private static final long serialVersionUID = -1555306616599140635L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 1e4029087..d6fbada89 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -234,7 +234,7 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { mainLayout.addComponent(hLayout); mainLayout.setComponentAlignment(hLayout, Alignment.MIDDLE_LEFT); mainLayout.addComponents(nameTextField, versionTextField, vendorTextField, descTextArea, buttonsLayout); - + /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW); @@ -277,8 +277,8 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { uiNotifcation.displayValidationError( i18n.get("message.duplicate.softwaremodule", new Object[] { name, version })); } else { - final SoftwareModule newBaseSoftwareModule = HawkbitCommonUtil.addNewBaseSoftware(name, version, vendor, - softwareManagement.findSoftwareModuleTypeByName(type), description); + final SoftwareModule newBaseSoftwareModule = HawkbitCommonUtil.addNewBaseSoftware(softwareManagement, + name, version, vendor, softwareManagement.findSoftwareModuleTypeByName(type), description); if (newBaseSoftwareModule != null) { /* display success message */ uiNotifcation.displaySuccess(i18n.get("message.save.success", new Object[] { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index f2e43c1fb..c71b06671 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -625,8 +625,10 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C } if (null != typeNameValue && null != typeKeyValue) { - SoftwareModuleType newSWType = new SoftwareModuleType(typeKeyValue, typeNameValue, typeDescValue, - assignNumber, colorPicked); + SoftwareModuleType newSWType = swTypeManagementService.generateSoftwareModuleType(typeKeyValue, + typeNameValue, typeDescValue, assignNumber); + newSWType.setColour(colorPicked); + if (null != typeDescValue) { newSWType.setDescription(typeDescValue); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java index b8f5435dd..04200208b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; @@ -57,8 +57,9 @@ public class DistributionSetTypeBeanQuery extends AbstractBeanQuery itemIds = (List) selectedTable.getItemIds(); if (null != typeNameValue && null != typeKeyValue && null != itemIds && !itemIds.isEmpty()) { - DistributionSetType newDistType = new DistributionSetType(typeKeyValue, typeNameValue, typeDescValue); + DistributionSetType newDistType = distributionSetManagement.generateDistributionSetType(typeKeyValue, + typeNameValue, typeDescValue); for (final Long id : itemIds) { final Item item = selectedTable.getItem(id); final String distTypeName = (String) item.getItemProperty(DIST_TYPE_NAME).getValue(); @@ -704,7 +705,8 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co updateDistSetType.setKey(typeKeyValue); updateDistSetType.setDescription(null != typeDescValue ? typeDescValue : null); - if (distributionSetRepository.countByType(existingType) <= 0 && null != itemIds && !itemIds.isEmpty()) { + if (distributionSetManagement.countDistributionSetsByType(existingType) <= 0 && null != itemIds + && !itemIds.isEmpty()) { for (final Long id : itemIds) { final Item item = selectedTable.getItem(id); final CheckBox mandatoryCheckBox = (CheckBox) item.getItemProperty(DIST_TYPE_MANDATORY).getValue(); @@ -1040,7 +1042,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co typeDesc.setValue(selectedTypeTag.getDescription()); typeKey.setValue(selectedTypeTag.getKey()); - if (distributionSetRepository.countByType(selectedTypeTag) <= 0) { + if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) { distTypeSelectLayout.setEnabled(true); selectedTable.setEnabled(true); saveDistSetType.setEnabled(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java index 1fd306816..91fd3336c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java @@ -17,7 +17,7 @@ import java.util.Map; import org.eclipse.hawkbit.repository.DistributionSetFilter; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; @@ -96,7 +96,7 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { } else if (Strings.isNullOrEmpty(searchText)) { // if no search filters available distBeans = getDistributionSetManagement() - .findDistributionSetsAll(new OffsetBasedPageRequest(startIndex, count, sort), false, null); + .findDistributionSetsByDeletedAndOrCompleted(new OffsetBasedPageRequest(startIndex, count, sort), false, null); } else { final DistributionSetFilter distributionSetFilter = new DistributionSetFilterBuilder().setIsDeleted(false) .setSearchText(searchText).setSelectDSWithNoTag(Boolean.FALSE).setType(distributionSetType).build(); @@ -133,7 +133,7 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { if (Strings.isNullOrEmpty(searchText) && null == distributionSetType) { // if no search filters available firstPageDistributionSets = getDistributionSetManagement() - .findDistributionSetsAll(new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort), false, null); + .findDistributionSetsByDeletedAndOrCompleted(new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort), false, null); } else { final DistributionSetFilter distributionSetFilter = new DistributionSetFilterBuilder().setIsDeleted(false) .setSearchText(searchText).setSelectDSWithNoTag(Boolean.FALSE).setType(distributionSetType).build(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java index eb53cef55..21ce01347 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index 6a671e228..a89e98d56 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -503,7 +503,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } private void createTargetFilterQuery() { - final TargetFilterQuery targetFilterQuery = new TargetFilterQuery(); + final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement.generateTargetFilterQuery(); targetFilterQuery.setName(nameTextField.getValue()); targetFilterQuery.setQuery(queryTextField.getValue()); targetFilterQueryManagement.createTargetFilterQuery(targetFilterQuery); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index 834566f7e..0288cf9c2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -268,29 +268,29 @@ public class ActionHistoryTable extends TreeTable implements Handler { final Action action = actionWithStatusCount.getAction(); - final Item item = hierarchicalContainer.addItem(actionWithStatusCount.getActionId()); + final Item item = hierarchicalContainer.addItem(actionWithStatusCount.getAction().getId()); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_STATUS_HIDDEN) - .setValue(actionWithStatusCount.getActionStatus()); + .setValue(actionWithStatusCount.getAction().getStatus()); /* * add action id. */ item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID) - .setValue(actionWithStatusCount.getActionId().toString()); + .setValue(actionWithStatusCount.getAction().getId().toString()); /* * add active/inactive status to the item which will be used in * Column generator to generate respective icon */ item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE_HIDDEN).setValue( - actionWithStatusCount.isActionActive() ? SPUIDefinitions.ACTIVE : SPUIDefinitions.IN_ACTIVE); + actionWithStatusCount.getAction().isActive() ? SPUIDefinitions.ACTIVE : SPUIDefinitions.IN_ACTIVE); /* * add action Id to the item which will be used for fetching child * items ( previous action status ) during expand */ item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID_HIDDEN) - .setValue(actionWithStatusCount.getActionId()); + .setValue(actionWithStatusCount.getAction().getId()); /* * add distribution name to the item which will be displayed in the @@ -301,7 +301,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED).setValue(action); /* Default no child */ - ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getActionId(), false); + ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getAction().getId(), false); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DATETIME) .setValue(SPDateTimeUtil.getFormattedDate((actionWithStatusCount.getActionLastModifiedAt() != null) @@ -312,7 +312,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { .setValue(actionWithStatusCount.getRolloutName()); if (actionWithStatusCount.getActionStatusCount() > 0) { - ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getActionId(), true); + ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getAction().getId(), true); } } } @@ -422,8 +422,12 @@ public class ActionHistoryTable extends TreeTable implements Handler { .findActionWithDetails(actionId); final Pageable pageReq = new PageRequest(0, 1000, new Sort(Direction.DESC, ActionStatusFields.ID.getFieldName())); - final Page actionStatusList = deploymentManagement.findActionStatusByAction(pageReq, action, - managementUIState.isActionHistoryMaximized()); + final Page actionStatusList; + if (managementUIState.isActionHistoryMaximized()) { + actionStatusList = deploymentManagement.findActionStatusByActionWithMessages(pageReq, action); + } else { + actionStatusList = deploymentManagement.findActionStatusByAction(pageReq, action); + } final List content = actionStatusList.getContent(); /* * Since the recent action status and messages are already diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index d13dc94cf..cc52ce795 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -297,7 +297,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { if (mandatoryCheck(name, version, distSetTypeName) && duplicateCheck(name, version)) { final String desc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); final boolean isMigStepReq = reqMigStepCheckbox.getValue(); - DistributionSet newDist = new DistributionSet(); + DistributionSet newDist = distributionSetManagement.generateDistributionSet(); setDistributionValues(newDist, name, version, distSetTypeName, desc, isMigStepReq); newDist = distributionSetManagement.createDistributionSet(newDist); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java index 353ef3e95..5aee6cbe1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java @@ -16,7 +16,7 @@ import java.util.Map; import org.eclipse.hawkbit.repository.DistributionSetFilter; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyDistribution; @@ -111,7 +111,7 @@ public class DistributionBeanQuery extends AbstractBeanQuery } else if (distributionTags.isEmpty() && Strings.isNullOrEmpty(searchText) && !noTagClicked) { // if no search filters available distBeans = getDistributionSetManagement() - .findDistributionSetsAll(new OffsetBasedPageRequest(startIndex, count, sort), false, true); + .findDistributionSetsByDeletedAndOrCompleted(new OffsetBasedPageRequest(startIndex, count, sort), false, true); } else { final DistributionSetFilter distributionSetFilter = new DistributionSetFilterBuilder().setIsDeleted(false) .setIsComplete(true).setSearchText(searchText).setSelectDSWithNoTag(noTagClicked) @@ -153,7 +153,7 @@ public class DistributionBeanQuery extends AbstractBeanQuery } else if (distributionTags.isEmpty() && Strings.isNullOrEmpty(searchText) && !noTagClicked) { // if no search filters available firstPageDistributionSets = getDistributionSetManagement() - .findDistributionSetsAll(new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort), false, true); + .findDistributionSetsByDeletedAndOrCompleted(new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort), false, true); } else { final DistributionSetFilter distributionSetFilter = new DistributionSetFilterBuilder().setIsDeleted(false) .setIsComplete(true).setSearchText(searchText).setSelectDSWithNoTag(noTagClicked) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 4d63753fe..e540017c3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -98,14 +98,13 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo final String tagDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); if (null != tagNameValue) { - DistributionSetTag newDistTag = new DistributionSetTag(tagNameValue); - if (null != tagDescValue) { - newDistTag.setDescription(tagDescValue); - } - newDistTag.setColour(new Color(0, 146, 58).getCSS()); + DistributionSetTag newDistTag = tagManagement.generateDistributionSetTag(tagNameValue, tagDescValue, + new Color(0, 146, 58).getCSS()); + if (colorPicked != null) { newDistTag.setColour(colorPicked); } + newDistTag = tagManagement.createDistributionSetTag(newDistTag); uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { newDistTag.getName() })); resetDistTagValues(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java index 9b66f2836..8be9548f7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagBeanQuery.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TagManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.ui.management.tag.ProxyTag; import org.eclipse.hawkbit.ui.management.tag.TagIdName; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java index 934d9c4c7..fbf882695 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java @@ -14,6 +14,7 @@ import java.util.Map; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtonClickBehaviour; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtons; @@ -51,13 +52,16 @@ public class DistributionTagButtons extends AbstractFilterButtons { @Autowired private DistributionTagDropEvent spDistTagDropEvent; + @Autowired + private TagManagement tagManagement; + @Autowired private ManagementUIState managementUIState; @Override public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { super.init(filterButtonClickBehaviour); - addNewTag(new DistributionSetTag("NO TAG")); + addNewTag(tagManagement.generateDistributionSetTag("NO TAG")); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -139,7 +143,7 @@ public class DistributionTagButtons extends AbstractFilterButtons { private void refreshTagTable() { ((LazyQueryContainer) getContainerDataSource()).refresh(); removeGeneratedColumn(FILTER_BUTTON_COLUMN); - addNewTag(new DistributionSetTag("NO TAG")); + addNewTag(tagManagement.generateDistributionSetTag("NO TAG")); addColumn(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java index 2369893c7..9ef0b742c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java @@ -380,7 +380,7 @@ public class BulkUploadHandler extends CustomComponent final String newDesc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); /* create new target entity */ - final Target newTarget = new Target(newControllerId); + final Target newTarget = targetManagement.generateTarget(newControllerId); setTargetValues(newTarget, newName, newDesc); targetManagement.createTarget(newTarget); managementUIState.getTargetTableFilters().getBulkUpload().getTargetsCreated().add(newControllerId); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index e54911d86..ddf109773 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -245,7 +245,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { final String newDesc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); /* create new target entity */ - Target newTarget = new Target(newControlllerId); + Target newTarget = targetManagement.generateTarget(newControlllerId); /* set values to the new target entity */ setTargetValues(newTarget, newName, newDesc); /* save new target */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java index f3e0078f3..e96a9af8e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBeanQuery.java @@ -13,8 +13,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 4ed2580f6..62ad96205 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -21,9 +21,9 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java index 79a44c38c..efd4084f5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java @@ -193,7 +193,7 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { final String tagNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String tagDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); if (null != tagNameValue) { - TargetTag newTargetTag = new TargetTag(tagNameValue); + TargetTag newTargetTag = tagManagement.generateTargetTag(tagNameValue); if (null != tagDescValue) { newTargetTag.setDescription(tagDescValue); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java index 066383d8a..5164a409a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagBeanQuery.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TagManagement; -import org.eclipse.hawkbit.repository.jpa.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.ui.management.tag.ProxyTag; import org.eclipse.hawkbit.ui.management.tag.TagIdName; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java index 48447f112..58721d77d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java @@ -16,6 +16,7 @@ import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetTag; @@ -75,6 +76,9 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { @Autowired private SpPermissionChecker permChecker; + @Autowired + private TagManagement tagManagement; + @Autowired private transient TargetManagement targetManagement; @@ -90,7 +94,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { public void init(final TargetTagFilterButtonClick filterButtonClickBehaviour) { this.filterButtonClickBehaviour = filterButtonClickBehaviour; super.init(filterButtonClickBehaviour); - addNewTargetTag(new TargetTag("NO TAG")); + addNewTargetTag(tagManagement.generateTargetTag("NO TAG")); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -290,7 +294,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { private void refreshContainer() { removeGeneratedColumn(FILTER_BUTTON_COLUMN); ((LazyQueryContainer) getContainerDataSource()).refresh(); - addNewTargetTag(new TargetTag("NO TAG")); + addNewTargetTag(tagManagement.generateTargetTag("NO TAG")); addColumn(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 7e8d45e1b..c6a2bdc4d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -21,11 +21,12 @@ import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorAction; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -478,12 +479,12 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private Rollout saveRollout() { - Rollout rolloutToCreate = new Rollout(); + Rollout rolloutToCreate = rolloutManagement.generateRollout(); final int amountGroup = Integer.parseInt(noOfGroups.getValue()); final String targetFilter = getTargetFilterQuery(); final int errorThresoldPercent = getErrorThresoldPercentage(amountGroup); - final RolloutGroupConditions conditions = new RolloutGroup.RolloutGroupConditionBuilder() + final RolloutGroupConditions conditions = new RolloutGroupConditionBuilder() .successAction(RolloutGroupSuccessAction.NEXTGROUP, null) .successCondition(RolloutGroupSuccessCondition.THRESHOLD, triggerThreshold.getValue()) .errorCondition(RolloutGroupErrorCondition.THRESHOLD, String.valueOf(errorThresoldPercent)) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java index 04c6659a5..4074edb55 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.rollout.rollout; import java.util.Set; -import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; @@ -20,7 +20,7 @@ import com.vaadin.server.FontAwesome; * Proxy rollout with custom properties. * */ -public class ProxyRollout extends Rollout { +public class ProxyRollout extends JpaRollout { private static final long serialVersionUID = 4539849939617681918L; @@ -59,7 +59,7 @@ public class ProxyRollout extends Rollout { * the isRequiredMigrationStep to set */ - public void setIsRequiredMigrationStep(Boolean isRequiredMigrationStep) { + public void setIsRequiredMigrationStep(final Boolean isRequiredMigrationStep) { this.isRequiredMigrationStep = isRequiredMigrationStep; } @@ -76,7 +76,7 @@ public class ProxyRollout extends Rollout { * the discription to set */ - public void setDiscription(String discription) { + public void setDiscription(final String discription) { this.discription = discription; } @@ -92,7 +92,7 @@ public class ProxyRollout extends Rollout { * the type to set */ - public void setType(String type) { + public void setType(final String type) { this.type = type; } @@ -108,7 +108,7 @@ public class ProxyRollout extends Rollout { * @param swModules * Set to set */ - public void setSwModules(Set swModules) { + public void setSwModules(final Set swModules) { this.swModules = swModules; } @@ -116,7 +116,7 @@ public class ProxyRollout extends Rollout { return rolloutRendererData; } - public void setRolloutRendererData(RolloutRendererData rendererData) { + public void setRolloutRendererData(final RolloutRendererData rendererData) { this.rolloutRendererData = rendererData; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java index 08f2c0a0b..f6653d971 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java @@ -8,212 +8,212 @@ */ package org.eclipse.hawkbit.ui.rollout.rolloutgroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; /** * Proxy rollout group with renderer properties. * */ -public class ProxyRolloutGroup extends RolloutGroup { +public class ProxyRolloutGroup extends JpaRolloutGroup { - private static final long serialVersionUID = -2745056813306692356L; + private static final long serialVersionUID = -2745056813306692356L; - private String createdDate; + private String createdDate; - private String modifiedDate; + private String modifiedDate; - private String finishedPercentage; + private String finishedPercentage; - private Long runningTargetsCount; + private Long runningTargetsCount; - private Long scheduledTargetsCount; + private Long scheduledTargetsCount; - private Long cancelledTargetsCount; + private Long cancelledTargetsCount; - private Long errorTargetsCount; + private Long errorTargetsCount; - private Long finishedTargetsCount; + private Long finishedTargetsCount; - private Long notStartedTargetsCount; + private Long notStartedTargetsCount; - private Boolean isActionRecieved = Boolean.FALSE; + private Boolean isActionRecieved = Boolean.FALSE; - private String totalTargetsCount; + private String totalTargetsCount; - private RolloutRendererData rolloutRendererData; + private RolloutRendererData rolloutRendererData; - public RolloutRendererData getRolloutRendererData() { - return rolloutRendererData; - } + public RolloutRendererData getRolloutRendererData() { + return rolloutRendererData; + } - public void setRolloutRendererData(RolloutRendererData rendererData) { - this.rolloutRendererData = rendererData; - } + public void setRolloutRendererData(final RolloutRendererData rendererData) { + this.rolloutRendererData = rendererData; + } - /** - * @return the createdDate - */ - public String getCreatedDate() { - return createdDate; - } + /** + * @return the createdDate + */ + public String getCreatedDate() { + return createdDate; + } - /** - * @param createdDate - * the createdDate to set - */ - public void setCreatedDate(final String createdDate) { - this.createdDate = createdDate; - } + /** + * @param createdDate + * the createdDate to set + */ + public void setCreatedDate(final String createdDate) { + this.createdDate = createdDate; + } - /** - * @return the modifiedDate - */ - public String getModifiedDate() { - return modifiedDate; - } + /** + * @return the modifiedDate + */ + public String getModifiedDate() { + return modifiedDate; + } - /** - * @param modifiedDate - * the modifiedDate to set - */ - public void setModifiedDate(final String modifiedDate) { - this.modifiedDate = modifiedDate; - } + /** + * @param modifiedDate + * the modifiedDate to set + */ + public void setModifiedDate(final String modifiedDate) { + this.modifiedDate = modifiedDate; + } - /** - * @return the finishedPercentage - */ - public String getFinishedPercentage() { - return finishedPercentage; - } + /** + * @return the finishedPercentage + */ + public String getFinishedPercentage() { + return finishedPercentage; + } - /** - * @param finishedPercentage - * the finishedPercentage to set - */ - public void setFinishedPercentage(final String finishedPercentage) { - this.finishedPercentage = finishedPercentage; - } + /** + * @param finishedPercentage + * the finishedPercentage to set + */ + public void setFinishedPercentage(final String finishedPercentage) { + this.finishedPercentage = finishedPercentage; + } - /** - * @return the runningTargetsCount - */ - public Long getRunningTargetsCount() { - return runningTargetsCount; - } + /** + * @return the runningTargetsCount + */ + public Long getRunningTargetsCount() { + return runningTargetsCount; + } - /** - * @param runningTargetsCount - * the runningTargetsCount to set - */ - public void setRunningTargetsCount(final Long runningTargetsCount) { - this.runningTargetsCount = runningTargetsCount; - } + /** + * @param runningTargetsCount + * the runningTargetsCount to set + */ + public void setRunningTargetsCount(final Long runningTargetsCount) { + this.runningTargetsCount = runningTargetsCount; + } - /** - * @return the scheduledTargetsCount - */ - public Long getScheduledTargetsCount() { - return scheduledTargetsCount; - } + /** + * @return the scheduledTargetsCount + */ + public Long getScheduledTargetsCount() { + return scheduledTargetsCount; + } - /** - * @param scheduledTargetsCount - * the scheduledTargetsCount to set - */ - public void setScheduledTargetsCount(final Long scheduledTargetsCount) { - this.scheduledTargetsCount = scheduledTargetsCount; - } + /** + * @param scheduledTargetsCount + * the scheduledTargetsCount to set + */ + public void setScheduledTargetsCount(final Long scheduledTargetsCount) { + this.scheduledTargetsCount = scheduledTargetsCount; + } - /** - * @return the cancelledTargetsCount - */ - public Long getCancelledTargetsCount() { - return cancelledTargetsCount; - } + /** + * @return the cancelledTargetsCount + */ + public Long getCancelledTargetsCount() { + return cancelledTargetsCount; + } - /** - * @param cancelledTargetsCount - * the cancelledTargetsCount to set - */ - public void setCancelledTargetsCount(final Long cancelledTargetsCount) { - this.cancelledTargetsCount = cancelledTargetsCount; - } + /** + * @param cancelledTargetsCount + * the cancelledTargetsCount to set + */ + public void setCancelledTargetsCount(final Long cancelledTargetsCount) { + this.cancelledTargetsCount = cancelledTargetsCount; + } - /** - * @return the errorTargetsCount - */ - public Long getErrorTargetsCount() { - return errorTargetsCount; - } + /** + * @return the errorTargetsCount + */ + public Long getErrorTargetsCount() { + return errorTargetsCount; + } - /** - * @param errorTargetsCount - * the errorTargetsCount to set - */ - public void setErrorTargetsCount(final Long errorTargetsCount) { - this.errorTargetsCount = errorTargetsCount; - } + /** + * @param errorTargetsCount + * the errorTargetsCount to set + */ + public void setErrorTargetsCount(final Long errorTargetsCount) { + this.errorTargetsCount = errorTargetsCount; + } - /** - * @return the finishedTargetsCount - */ - public Long getFinishedTargetsCount() { - return finishedTargetsCount; - } + /** + * @return the finishedTargetsCount + */ + public Long getFinishedTargetsCount() { + return finishedTargetsCount; + } - /** - * @param finishedTargetsCount - * the finishedTargetsCount to set - */ - public void setFinishedTargetsCount(final Long finishedTargetsCount) { - this.finishedTargetsCount = finishedTargetsCount; - } + /** + * @param finishedTargetsCount + * the finishedTargetsCount to set + */ + public void setFinishedTargetsCount(final Long finishedTargetsCount) { + this.finishedTargetsCount = finishedTargetsCount; + } - /** - * @return the notStartedTargetsCount - */ - public Long getNotStartedTargetsCount() { - return notStartedTargetsCount; - } + /** + * @return the notStartedTargetsCount + */ + public Long getNotStartedTargetsCount() { + return notStartedTargetsCount; + } - /** - * @param notStartedTargetsCount - * the notStartedTargetsCount to set - */ - public void setNotStartedTargetsCount(final Long notStartedTargetsCount) { - this.notStartedTargetsCount = notStartedTargetsCount; - } + /** + * @param notStartedTargetsCount + * the notStartedTargetsCount to set + */ + public void setNotStartedTargetsCount(final Long notStartedTargetsCount) { + this.notStartedTargetsCount = notStartedTargetsCount; + } - /** - * @return the isActionRecieved - */ - public Boolean getIsActionRecieved() { - return isActionRecieved; - } + /** + * @return the isActionRecieved + */ + public Boolean getIsActionRecieved() { + return isActionRecieved; + } - /** - * @param isActionRecieved - * the isActionRecieved to set - */ - public void setIsActionRecieved(final Boolean isActionRecieved) { - this.isActionRecieved = isActionRecieved; - } + /** + * @param isActionRecieved + * the isActionRecieved to set + */ + public void setIsActionRecieved(final Boolean isActionRecieved) { + this.isActionRecieved = isActionRecieved; + } - /** - * @return the totalTargetsCount - */ - public String getTotalTargetsCount() { - return totalTargetsCount; - } + /** + * @return the totalTargetsCount + */ + public String getTotalTargetsCount() { + return totalTargetsCount; + } - /** - * @param totalTargetsCount - * the totalTargetsCount to set - */ - public void setTotalTargetsCount(final String totalTargetsCount) { - this.totalTargetsCount = totalTargetsCount; - } + /** + * @param totalTargetsCount + * the totalTargetsCount to set + */ + public void setTotalTargetsCount(final String totalTargetsCount) { + this.totalTargetsCount = totalTargetsCount; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index 0e71567af..5491acaaf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -24,10 +24,10 @@ import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.NamedEntity; +import org.eclipse.hawkbit.repository.model.PollStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.model.TargetInfo.PollStatus; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; @@ -781,10 +781,10 @@ public final class HawkbitCommonUtil { * base software module description * @return BaseSoftwareModule new base software module */ - public static SoftwareModule addNewBaseSoftware(final String bsname, final String bsversion, final String bsvendor, - final SoftwareModuleType bstype, final String description) { + public static SoftwareModule addNewBaseSoftware(final SoftwareManagement softwareManagement, final String bsname, + final String bsversion, final String bsvendor, final SoftwareModuleType bstype, final String description) { final SoftwareManagement swMgmtService = SpringContextHelper.getBean(SoftwareManagement.class); - SoftwareModule newSWModule = new SoftwareModule(); + SoftwareModule newSWModule = softwareManagement.generateSoftwareModule(); newSWModule.setType(bstype); newSWModule.setName(bsname); newSWModule.setVersion(bsversion); From 9301de096c6f1a7fdd2aab0ac0a5a541682c44bc Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sun, 22 May 2016 08:48:47 +0200 Subject: [PATCH 137/371] Worked on the interfaces and documentation. Signed-off-by: Kai Zimmermann --- .../resource/DdiArtifactStoreController.java | 4 +- .../ddi/rest/resource/DdiRootController.java | 22 ++-- .../resource/DdiArtifactDownloadTest.java | 26 ++-- .../rest/resource/DdiCancelActionTest.java | 12 +- .../ddi/rest/resource/DdiConfigDataTest.java | 8 +- .../rest/resource/DdiDeploymentBaseTest.java | 102 ++++++++------- .../rest/resource/DdiRootControllerTest.java | 6 +- .../amqp/AmqpMessageDispatcherService.java | 4 + .../amqp/AmqpMessageHandlerService.java | 2 +- .../amqp/AmqpMessageHandlerServiceTest.java | 12 +- .../hawkbit/dmf/json/model/ActionStatus.java | 39 +++++- .../resource/MgmtDistributionSetMapper.java | 18 +-- .../resource/MgmtDistributionSetResource.java | 31 ++--- .../MgmtDistributionSetTagResource.java | 8 +- .../MgmtDistributionSetTypeMapper.java | 16 ++- .../MgmtDistributionSetTypeResource.java | 12 +- .../mgmt/rest/resource/MgmtRolloutMapper.java | 7 +- .../rest/resource/MgmtRolloutResource.java | 19 +-- .../resource/MgmtSoftwareModuleMapper.java | 14 +- .../resource/MgmtSoftwareModuleResource.java | 23 ++-- .../MgmtSoftwareModuleTypeMapper.java | 18 ++- .../MgmtSoftwareModuleTypeResource.java | 9 +- .../mgmt/rest/resource/MgmtTagMapper.java | 20 +-- .../mgmt/rest/resource/MgmtTargetMapper.java | 12 +- .../rest/resource/MgmtTargetResource.java | 18 +-- .../rest/resource/MgmtTargetTagResource.java | 7 +- .../MgmtDistributionSetResourceTest.java | 120 +++++++++-------- .../MgmtDistributionSetTypeResourceTest.java | 97 +++++++------- .../resource/MgmtRolloutResourceTest.java | 4 +- .../MgmtSoftwareModuleResourceTest.java | 122 ++++++++++-------- .../MgmtSoftwareModuleTypeResourceTest.java | 32 ++--- .../rest/resource/MgmtTargetResourceTest.java | 75 +++++------ ...MRessourceMisingMongoDbConnectionTest.java | 2 +- .../repository/DeploymentManagement.java | 9 +- .../DistributionSetAssignmentResult.java | 3 +- .../repository/DistributionSetManagement.java | 15 ++- .../hawkbit/repository/TagManagement.java | 46 ++++++- .../jpa/JpaControllerManagement.java | 2 +- .../jpa/JpaTenantConfigurationManagement.java | 7 +- .../jpa/model/JpaDistributionSetTag.java | 5 +- .../repository/jpa/model/JpaRollout.java | 1 - .../jpa/model/JpaSoftwareModuleType.java | 14 +- .../jpa/model/JpaTargetFilterQuery.java | 8 ++ .../repository/jpa/model/JpaTargetTag.java | 2 +- .../TargetFilterQuerySpecification.java | 10 +- .../hawkbit/repository/model/Action.java | 4 +- .../hawkbit/repository/model/PollStatus.java | 68 ++++++++++ .../hawkbit/repository/model/Rollout.java | 32 ++++- .../repository/model/RolloutGroup.java | 2 +- .../model/RolloutGroupConditionBuilder.java | 91 +++++++++++++ .../model/RolloutGroupConditions.java | 93 +++++++++++++ .../repository/model/SoftwareModuleType.java | 37 +++++- .../repository/model/TargetIdName.java | 2 + .../model/TenantConfigurationValue.java | 12 +- .../model/TotalTargetCountStatus.java | 93 ++++++++----- 55 files changed, 971 insertions(+), 506 deletions(-) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/PollStatus.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditionBuilder.java create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditions.java diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 9c51cf8f4..36fa926e8 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -138,7 +138,7 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR .getActionForDownloadByTargetAndSoftwareModule(target.getControllerId(), artifact.getSoftwareModule()); final String range = request.getHeader("Range"); - final ActionStatus actionStatus = new ActionStatus(); + final ActionStatus actionStatus = controllerManagement.generateActionStatus(); actionStatus.setAction(action); actionStatus.setOccurredAt(System.currentTimeMillis()); actionStatus.setStatus(Status.DOWNLOAD); @@ -150,7 +150,7 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR actionStatus.addMessage( ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } - controllerManagement.addActionStatusMessage(actionStatus); + controllerManagement.addInformationalActionStatus(actionStatus); return 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 3bf70ccfd..355a43b3c 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 @@ -132,7 +132,7 @@ public class DdiRootController implements DdiRootControllerRestApi { return new ResponseEntity<>( DataConversionHelper.fromTarget(target, controllerManagement.findActionByTargetAndActive(target), - controllerManagement.findPollingTime(), tenantAware), + controllerManagement.getPollingTime(), tenantAware), HttpStatus.OK); } @@ -174,7 +174,7 @@ public class DdiRootController implements DdiRootControllerRestApi { .getActionForDownloadByTargetAndSoftwareModule(target.getControllerId(), module); final String range = request.getHeader("Range"); - final ActionStatus statusMessage = new ActionStatus(); + final ActionStatus statusMessage = controllerManagement.generateActionStatus(); statusMessage.setAction(action); statusMessage.setOccurredAt(System.currentTimeMillis()); statusMessage.setStatus(Status.DOWNLOAD); @@ -186,7 +186,7 @@ public class DdiRootController implements DdiRootControllerRestApi { statusMessage.addMessage( ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } - controllerManagement.addActionStatusMessage(statusMessage); + controllerManagement.addInformationalActionStatus(statusMessage); return action; } @@ -247,8 +247,7 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Found an active UpdateAction for target {}. returning deyploment: {}", targetid, base); - controllerManagement.registerRetrieved(action, - ControllerManagement.SERVER_MESSAGE_PREFIX + controllerManagement.registerRetrieved(action, ControllerManagement.SERVER_MESSAGE_PREFIX + "Target retrieved update action and should start now the download."); return new ResponseEntity<>(base, HttpStatus.OK); @@ -285,8 +284,7 @@ public class DdiRootController implements DdiRootControllerRestApi { return new ResponseEntity<>(HttpStatus.GONE); } - controllerManagement.addUpdateActionStatus( - generateUpdateStatus(feedback, targetid, feedback.getId(), action), action); + controllerManagement.addUpdateActionStatus(generateUpdateStatus(feedback, targetid, feedback.getId(), action)); return new ResponseEntity<>(HttpStatus.OK); @@ -295,7 +293,7 @@ public class DdiRootController implements DdiRootControllerRestApi { private ActionStatus generateUpdateStatus(final DdiActionFeedback feedback, final String targetid, final Long actionid, final Action action) { - final ActionStatus actionStatus = new ActionStatus(); + final ActionStatus actionStatus = controllerManagement.generateActionStatus(); actionStatus.setAction(action); actionStatus.setOccurredAt(System.currentTimeMillis()); @@ -420,15 +418,15 @@ public class DdiRootController implements DdiRootControllerRestApi { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } - controllerManagement - .addCancelActionStatus(generateActionCancelStatus(feedback, target, feedback.getId(), action), action); + controllerManagement.addCancelActionStatus( + generateActionCancelStatus(feedback, target, feedback.getId(), action, controllerManagement)); return new ResponseEntity<>(HttpStatus.OK); } private static ActionStatus generateActionCancelStatus(final DdiActionFeedback feedback, final Target target, - final Long actionid, final Action action) { + final Long actionid, final Action action, final ControllerManagement controllerManagement) { - final ActionStatus actionStatus = new ActionStatus(); + final ActionStatus actionStatus = controllerManagement.generateActionStatus(); actionStatus.setAction(action); actionStatus.setOccurredAt(System.currentTimeMillis()); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java index 6c3bdea4e..25e4776c9 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java @@ -73,7 +73,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Tests non allowed requests on the artifact ressource, e.g. invalid URI, wrong if-match, wrong command.") public void invalidRequestsOnArtifactResource() throws Exception { // create target - Target target = new Target("4712"); + Target target = targetManagement.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); @@ -158,7 +158,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Tests non allowed requests on the artifact ressource, e.g. invalid URI, wrong if-match, wrong command.") public void invalidRequestsOnArtifactResourceByName() throws Exception { // create target - Target target = new Target("4712"); + Target target = targetManagement.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); @@ -244,7 +244,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong assertThat(artifactRepository.findAll()).hasSize(0); // create target - Target target = new Target("4712"); + Target target = targetManagement.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList(); targets.add(target); @@ -287,7 +287,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Tests valid MD5SUm file downloads through the artifact resource by identifying the artifact by ID.") public void downloadMd5sumThroughControllerApi() throws Exception { // create target - Target target = new Target("4712"); + Target target = targetManagement.generateTarget("4712"); target = targetManagement.createTarget(target); // create ds @@ -325,7 +325,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong assertThat(artifactRepository.findAll()).hasSize(0); // create target - Target target = new Target("4712"); + Target target = targetManagement.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList(); targets.add(target); @@ -356,7 +356,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong assertThat(artifactRepository.findAll()).hasSize(0); // create target - Target target = new Target("4712"); + Target target = targetManagement.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); @@ -389,13 +389,13 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong Arrays.equals(result.getResponse().getContentAsByteArray(), random)); // one (update) action - assertThat(actionRepository.findByTargetAndDistributionSet(pageReq, target, ds).getContent()).hasSize(1); - final Action action = actionRepository.findByTargetAndDistributionSet(pageReq, target, ds).getContent().get(0); + assertThat(deploymentManagement.findActionsByTarget(target)).hasSize(1); + final Action action = deploymentManagement.findActionsByTarget(target).get(0); // one status - download assertThat(actionStatusRepository.findAll()).hasSize(2); - assertThat(actionStatusRepository.findByAction(pageReq, action).getContent()).hasSize(2); - assertThat(actionStatusRepository.findByAction(new PageRequest(0, 400, Direction.DESC, "id"), action) + assertThat(action.getActionStatus()).hasSize(2); + assertThat(deploymentManagement.findActionStatusByAction(new PageRequest(0, 400, Direction.DESC, "id"), action) .getContent().get(0).getStatus()).isEqualTo(Status.DOWNLOAD); // download complete @@ -407,7 +407,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Test various HTTP range requests for artifact download, e.g. chunk download or download resume.") public void rangeDownloadArtifactByName() throws Exception { // create target - Target target = new Target("4712"); + Target target = targetManagement.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); @@ -515,7 +515,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong assertThat(artifactRepository.findAll()).hasSize(0); // create target - Target target = new Target("4712"); + Target target = targetManagement.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); @@ -538,7 +538,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Downloads an MD5SUM file by the related artifacts filename.") public void downloadMd5sumFileByName() throws Exception { // create target - Target target = new Target("4712"); + Target target = targetManagement.generateTarget("4712"); target = targetManagement.createTarget(target); // create ds diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java index 9913d5e51..b52d0fddc 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java @@ -49,7 +49,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Description("Test of the controller can continue a started update even after a cancel command if it so desires.") public void rootRsCancelActionButContinueAnyway() throws Exception { // prepare test data - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); final Target savedTarget = targetManagement.createTarget(target); @@ -106,7 +106,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Test @Description("Test for cancel operation of a update action.") public void rootRsCancelAction() throws Exception { - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); final Target savedTarget = targetManagement.createTarget(target); @@ -224,7 +224,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { } private Action createCancelAction(final String targetid) { - final Target target = new Target(targetid); + final Target target = targetManagement.generateTarget(targetid); final DistributionSet ds = TestDataUtil.generateDistributionSet(targetid, softwareManagement, distributionSetManagement); final Target savedTarget = targetManagement.createTarget(target); @@ -241,7 +241,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Description("Tests the feedback channel of the cancel operation.") public void rootRsCancelActionFeedback() throws Exception { - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); @@ -334,7 +334,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Test @Description("Tests the feeback chanel of for multiple open cancel operations on the same target.") public void multipleCancelActionFeedback() throws Exception { - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement, true); final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, @@ -453,7 +453,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Test @Description("Tests the feeback channel closing for too many feedbacks, i.e. denial of service prevention.") public void tooMuchCancelActionFeedback() throws Exception { - final Target target = targetManagement.createTarget(new Target("4712")); + final Target target = targetManagement.createTarget(targetManagement.generateTarget("4712")); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java index 4a86cfe8c..afb60043d 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java @@ -46,7 +46,7 @@ public class DdiConfigDataTest extends AbstractIntegrationTest { @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) " + "are requested only once from the device.") public void requestConfigDataIfEmpty() throws Exception { - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final Target savedTarget = targetManagement.createTarget(target); final long current = System.currentTimeMillis(); @@ -84,7 +84,7 @@ public class DdiConfigDataTest extends AbstractIntegrationTest { @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) " + "can be uploaded correctly by the controller.") public void putConfigData() throws Exception { - targetManagement.createTarget(new Target("4717")); + targetManagement.createTarget(targetManagement.generateTarget("4717")); // initial final Map attributes = new HashMap<>(); @@ -127,7 +127,7 @@ public class DdiConfigDataTest extends AbstractIntegrationTest { @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) " + "upload limitation is inplace which is meant to protect the server from malicious attempts.") public void putToMuchConfigData() throws Exception { - targetManagement.createTarget(new Target("4717")); + targetManagement.createTarget(targetManagement.generateTarget("4717")); // initial Map attributes = new HashMap<>(); @@ -150,7 +150,7 @@ public class DdiConfigDataTest extends AbstractIntegrationTest { @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) " + "resource behaves as exptected in cae of invalid request attempts.") public void badConfigData() throws Exception { - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final Target savedTarget = targetManagement.createTarget(target); // not allowed methods diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index df75bc6b3..741a6729a 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -26,6 +26,7 @@ import java.util.List; import org.apache.commons.lang3.RandomUtils; import org.eclipse.hawkbit.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; @@ -40,8 +41,6 @@ import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.fest.assertions.core.Condition; import org.junit.Test; import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; @@ -96,7 +95,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Description("Forced deployment to a controller. Checks if the resource reponse payload for a given deployment is as expected.") public void deplomentForceAction() throws Exception { // Prepare test data - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement, true); final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, @@ -228,9 +227,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD .isGreaterThanOrEqualTo(current); // Retrieved is reported - final Iterable actionStatusMessages = actionStatusRepository - .findAll(new PageRequest(0, 100, Direction.DESC, "id")); - assertThat(actionStatusMessages).hasSize(3); + final Iterable actionStatusMessages = deploymentManagement + .findActionStatusByAction(new PageRequest(0, 100, Direction.DESC, "id"), uaction); + assertThat(actionStatusMessages).hasSize(2); final ActionStatus actionStatusMessage = actionStatusMessages.iterator().next(); assertThat(actionStatusMessage.getStatus()).isEqualTo(Status.RETRIEVED); } @@ -239,7 +238,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Description("Attempt/soft deployment to a controller. Checks if the resource reponse payload for a given deployment is as expected.") public void deplomentAttemptAction() throws Exception { // Prepare test data - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement, true); final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, @@ -361,9 +360,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD .isGreaterThanOrEqualTo(current); // Retrieved is reported - final Iterable actionStatusMessages = actionStatusRepository - .findAll(new PageRequest(0, 100, Direction.DESC, "id")); - assertThat(actionStatusMessages).hasSize(3); + final List actionStatusMessages = deploymentManagement + .findActionStatusByAction(new PageRequest(0, 100, Direction.DESC, "id"), uaction).getContent(); + assertThat(actionStatusMessages).hasSize(2); final ActionStatus actionStatusMessage = actionStatusMessages.iterator().next(); assertThat(actionStatusMessage.getStatus()).isEqualTo(Status.RETRIEVED); } @@ -372,7 +371,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Description("Attempt/soft deployment to a controller including automated switch to hard. Checks if the resource reponse payload for a given deployment is as expected.") public void deplomentAutoForceAction() throws Exception { // Prepare test data - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement, true); final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, @@ -503,9 +502,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD .isGreaterThanOrEqualTo(current); // Retrieved is reported - final Iterable actionStatusMessages = actionStatusRepository - .findAll(new PageRequest(0, 100, Direction.DESC, "id")); - assertThat(actionStatusMessages).hasSize(3); + final Iterable actionStatusMessages = deploymentManagement + .findActionStatusByAction(new PageRequest(0, 100, Direction.DESC, "id"), uaction).getContent(); + assertThat(actionStatusMessages).hasSize(2); final ActionStatus actionStatusMessage = actionStatusMessages.iterator().next(); assertThat(actionStatusMessage.getStatus()).isEqualTo(Status.RETRIEVED); } @@ -513,7 +512,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test @Description("Test various invalid access attempts to the deployment resource und the expected behaviour of the server.") public void badDeploymentAction() throws Exception { - final Target target = targetManagement.createTarget(new Target("4712")); + final Target target = targetManagement.createTarget(targetManagement.generateTarget("4712")); // not allowed methods mvc.perform(post("/{tenant}/controller/v1/4712/deploymentBase/1", tenantAware.getCurrentTenant())) @@ -534,7 +533,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); // wrong media type - final List toAssign = new ArrayList(); + final List toAssign = new ArrayList<>(); toAssign.add(target); final DistributionSet savedSet = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); @@ -554,16 +553,15 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Description("The server protects itself against to many feedback upload attempts. The test verfies that " + "it is not possible to exceed the configured maximum number of feedback uplods.") public void toMuchDeplomentActionFeedback() throws Exception { - final Target target = targetManagement.createTarget(new Target("4712")); + final Target target = targetManagement.createTarget(targetManagement.generateTarget("4712")); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); - final List toAssign = new ArrayList(); + final List toAssign = new ArrayList<>(); toAssign.add(target); deploymentManagement.assignDistributionSet(ds.getId(), new String[] { "4712" }); - final Pageable pageReq = new PageRequest(0, 100); - final Action action = actionRepository.findByDistributionSet(pageReq, ds).getContent().get(0); + final Action action = deploymentManagement.findActionsByTarget(target).get(0); final String feedback = JsonBuilder.deploymentActionFeedback(action.getId().toString(), "proceeding"); // assign distribution set creates an action status, so only 99 left @@ -583,9 +581,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test @Description("Multiple uploads of deployment status feedback to the server.") public void multipleDeplomentActionFeedback() throws Exception { - final Target target1 = new Target("4712"); - final Target target2 = new Target("4713"); - final Target target3 = new Target("4714"); + final Target target1 = targetManagement.generateTarget("4712"); + final Target target2 = targetManagement.generateTarget("4713"); + final Target target3 = targetManagement.generateTarget("4714"); final Target savedTarget1 = targetManagement.createTarget(target1); targetManagement.createTarget(target2); targetManagement.createTarget(target3); @@ -597,7 +595,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD final DistributionSet ds3 = TestDataUtil.generateDistributionSet("3", softwareManagement, distributionSetManagement, true); - final List toAssign = new ArrayList(); + final List toAssign = new ArrayList<>(); toAssign.add(savedTarget1); final Action action1 = deploymentManagement.findActionWithDetails( @@ -637,7 +635,8 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(myT.getTargetInfo().getInstalledDistributionSet().getId()).isEqualTo(ds1.getId()); assertThat(myT.getAssignedDistributionSet()).isEqualTo(ds3); - Iterable actionStatusMessages = actionStatusRepository.findAll(new Sort(Direction.DESC, "id")); + Iterable actionStatusMessages = deploymentManagement + .findActionStatusAll(new PageRequest(0, 100, Direction.DESC, "id")).getContent(); assertThat(actionStatusMessages).hasSize(4); assertThat(actionStatusMessages.iterator().next().getStatus()).isEqualTo(Status.FINISHED); @@ -657,7 +656,8 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(deploymentManagement.findActiveActionsByTarget(myT)).hasSize(1); assertThat(myT.getTargetInfo().getInstalledDistributionSet().getId()).isEqualTo(ds2.getId()); assertThat(myT.getAssignedDistributionSet()).isEqualTo(ds3); - actionStatusMessages = actionStatusRepository.findAll(new PageRequest(0, 100, Direction.DESC, "id")); + actionStatusMessages = deploymentManagement.findActionStatusAll(new PageRequest(0, 100, Direction.DESC, "id")) + .getContent(); assertThat(actionStatusMessages).hasSize(5); assertThat(actionStatusMessages).haveAtLeast(1, new ActionStatusCondition(Status.FINISHED)); @@ -676,7 +676,8 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(deploymentManagement.findActiveActionsByTarget(myT)).hasSize(0); assertThat(myT.getTargetInfo().getInstalledDistributionSet()).isEqualTo(ds3); assertThat(myT.getAssignedDistributionSet()).isEqualTo(ds3); - actionStatusMessages = actionStatusRepository.findAll(); + actionStatusMessages = deploymentManagement.findActionStatusAll(new PageRequest(0, 100, Direction.DESC, "id")) + .getContent(); assertThat(actionStatusMessages).hasSize(6); assertThat(actionStatusMessages).haveAtLeast(1, new ActionStatusCondition(Status.FINISHED)); @@ -685,18 +686,19 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test @Description("Verfies that an update action is correctly set to error if the controller provides error feedback.") public void rootRsSingleDeplomentActionWithErrorFeedback() throws Exception { - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); final Target savedTarget = targetManagement.createTarget(target); - List toAssign = new ArrayList(); + List toAssign = new ArrayList<>(); toAssign.add(savedTarget); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.UNKNOWN); deploymentManagement.assignDistributionSet(ds, toAssign); - final Action action = actionRepository.findByDistributionSet(pageReq, ds).getContent().get(0); + final Action action = actionRepository.findByDistributionSet(pageReq, (JpaDistributionSet) ds).getContent() + .get(0); long current = System.currentTimeMillis(); long lastModified = targetManagement.findTargetByControllerID("4712").getLastModifiedAt(); @@ -719,7 +721,8 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD .hasSize(0); assertThat(deploymentManagement.findActiveActionsByTarget(myT)).hasSize(0); assertThat(deploymentManagement.findActionsByTarget(myT)).hasSize(1); - final Iterable actionStatusMessages = actionStatusRepository.findAll(); + final Iterable actionStatusMessages = deploymentManagement + .findActionStatusAll(new PageRequest(0, 100, Direction.DESC, "id")).getContent(); assertThat(actionStatusMessages).hasSize(2); assertThat(actionStatusMessages).haveAtLeast(1, new ActionStatusCondition(Status.ERROR)); @@ -751,9 +754,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(deploymentManagement.findActiveActionsByTarget(myT)).hasSize(0); assertThat(deploymentManagement.findInActiveActionsByTarget(myT)).hasSize(2); assertThat(actionStatusRepository.findAll()).hasSize(4); - assertThat(actionStatusRepository.findByAction(pageReq, action).getContent()).haveAtLeast(1, + assertThat(deploymentManagement.findActionStatusByAction(pageReq, action).getContent()).haveAtLeast(1, new ActionStatusCondition(Status.ERROR)); - assertThat(actionStatusRepository.findByAction(pageReq, action2).getContent()).haveAtLeast(1, + assertThat(deploymentManagement.findActionStatusByAction(pageReq, action2).getContent()).haveAtLeast(1, new ActionStatusCondition(Status.FINISHED)); } @@ -761,27 +764,29 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test @Description("Verfies that the controller can provided as much feedback entries as necessry as long as it is in the configured limites.") public void rootRsSingleDeplomentActionFeedback() throws Exception { - final Target target = new Target("4712"); + final Target target = targetManagement.generateTarget("4712"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); final Target savedTarget = targetManagement.createTarget(target); - final List toAssign = new ArrayList(); + final List toAssign = new ArrayList<>(); toAssign.add(savedTarget); Target myT = targetManagement.findTargetByControllerID("4712"); assertThat(myT.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.UNKNOWN); deploymentManagement.assignDistributionSet(ds, toAssign); - final Action action = actionRepository.findByDistributionSet(pageReq, ds).getContent().get(0); + final Action action = actionRepository.findByDistributionSet(pageReq, (JpaDistributionSet) ds).getContent() + .get(0); myT = targetManagement.findTargetByControllerID("4712"); assertThat(myT.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING); - assertThat(targetRepository.findByTargetInfoInstalledDistributionSet(new PageRequest(0, 10), ds)).hasSize(0); - assertThat(targetRepository.findByAssignedDistributionSet(new PageRequest(0, 10), ds)).hasSize(1); - assertThat(targetRepository - .findByAssignedDistributionSetOrTargetInfoInstalledDistributionSet(new PageRequest(0, 10), ds, ds)) - .hasSize(1); + assertThat(targetRepository.findByTargetInfoInstalledDistributionSet(new PageRequest(0, 10), + (JpaDistributionSet) ds)).hasSize(0); + assertThat(targetRepository.findByAssignedDistributionSet(new PageRequest(0, 10), (JpaDistributionSet) ds)) + .hasSize(1); + assertThat(targetRepository.findByAssignedDistributionSetOrTargetInfoInstalledDistributionSet( + new PageRequest(0, 10), (JpaDistributionSet) ds, (JpaDistributionSet) ds)).hasSize(1); // Now valid Feedback @@ -903,18 +908,19 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(actionStatusRepository.findAll()).haveAtLeast(1, new ActionStatusCondition(Status.CANCELED)); assertThat(actionStatusRepository.findAll()).haveAtLeast(1, new ActionStatusCondition(Status.FINISHED)); - assertThat(targetRepository.findByTargetInfoInstalledDistributionSet(new PageRequest(0, 10), ds)).hasSize(1); - assertThat(targetRepository.findByAssignedDistributionSet(new PageRequest(0, 10), ds)).hasSize(1); - assertThat(targetRepository - .findByAssignedDistributionSetOrTargetInfoInstalledDistributionSet(new PageRequest(0, 10), ds, ds)) - .hasSize(1); + assertThat(targetRepository.findByTargetInfoInstalledDistributionSet(new PageRequest(0, 10), + (JpaDistributionSet) ds)).hasSize(1); + assertThat(targetRepository.findByAssignedDistributionSet(new PageRequest(0, 10), (JpaDistributionSet) ds)) + .hasSize(1); + assertThat(targetRepository.findByAssignedDistributionSetOrTargetInfoInstalledDistributionSet( + new PageRequest(0, 10), (JpaDistributionSet) ds, (JpaDistributionSet) ds)).hasSize(1); } @Test @Description("Various forbidden request appempts on the feedback resource. Ensures correct answering behaviour as expected to these kind of errors.") public void badDeplomentActionFeedback() throws Exception { - final Target target = new Target("4712"); - final Target target2 = new Target("4713"); + final Target target = targetManagement.generateTarget("4712"); + final Target target2 = targetManagement.generateTarget("4713"); final DistributionSet savedSet = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); final DistributionSet savedSet2 = TestDataUtil.generateDistributionSet("1", softwareManagement, diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index 8041e8b36..ffeed1956 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -80,7 +80,7 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD // create target first with "knownPrincipal" user and audit data final String knownTargetControllerId = "target1"; final String knownCreatedBy = "knownPrincipal"; - targetManagement.createTarget(new Target(knownTargetControllerId)); + targetManagement.createTarget(targetManagement.generateTarget(knownTargetControllerId)); final Target findTargetByControllerID = targetManagement.findTargetByControllerID(knownTargetControllerId); assertThat(findTargetByControllerID.getCreatedBy()).isEqualTo(knownCreatedBy); assertThat(findTargetByControllerID.getCreatedAt()).isNotNull(); @@ -226,7 +226,7 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD @Description("Ensures that the target state machine of a precomissioned target switches from " + "UNKNOWN to REGISTERED when the target polls for the first time.") public void rootRsPrecommissioned() throws Exception { - final Target target = new Target("4711"); + final Target target = targetManagement.generateTarget("4711"); targetManagement.createTarget(target); assertThat(targetRepository.findByControllerId("4711").getTargetInfo().getUpdateStatus()) @@ -265,7 +265,7 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD public void tryToFinishAnUpdateProcessAfterItHasBeenFinished() throws Exception { // mock - final Target target = new Target("911"); + final Target target = targetManagement.generateTarget("911"); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); Target savedTarget = targetManagement.createTarget(target); diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java index dae5772e6..dbfded401 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java @@ -26,6 +26,7 @@ import org.eclipse.hawkbit.dmf.json.model.SoftwareModule; import org.eclipse.hawkbit.eventbus.EventSubscriber; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.util.IpUtil; import org.springframework.amqp.core.Message; @@ -52,6 +53,9 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { @Autowired private AmqpSenderService amqpSenderService; + @Autowired + private SoftwareManagement softwareManagement; + /** * Constructor. * 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 3756688c2..03b2c7514 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 @@ -336,7 +336,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final ActionUpdateStatus actionUpdateStatus = convertMessage(message, ActionUpdateStatus.class); final Action action = checkActionExist(message, actionUpdateStatus); - final ActionStatus actionStatus = new ActionStatus(); + final ActionStatus actionStatus = controllerManagement.generateActionStatus(); actionUpdateStatus.getMessage().forEach(actionStatus::addMessage); actionStatus.setAction(action); 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 e057144df..b0c5d777b 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 @@ -40,11 +40,14 @@ import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; 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.SoftwareModule; -import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.helper.SecurityTokenGeneratorHolder; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.junit.Before; @@ -347,6 +350,7 @@ public class AmqpMessageHandlerServiceTest { final Action action = createActionWithTarget(22L, Status.FINISHED); when(controllerManagementMock.findActionWithDetails(Matchers.any())).thenReturn(action); when(controllerManagementMock.addUpdateActionStatus(Matchers.any())).thenReturn(action); + when(controllerManagementMock.generateActionStatus()).thenReturn(new JpaActionStatus()); // for the test the same action can be used final List actionList = new ArrayList<>(); actionList.add(action); @@ -409,7 +413,7 @@ public class AmqpMessageHandlerServiceTest { private List createSoftwareModuleList() { final List softwareModuleList = new ArrayList<>(); - final SoftwareModule softwareModule = new SoftwareModule(); + final JpaSoftwareModule softwareModule = new JpaSoftwareModule(); softwareModule.setId(777L); softwareModuleList.add(softwareModule); return softwareModuleList; @@ -420,11 +424,11 @@ public class AmqpMessageHandlerServiceTest { initalizeSecurityTokenGenerator(); // Mock - final Action action = new Action(); + final JpaAction action = new JpaAction(); action.setId(targetId); action.setStatus(status); action.setTenant("DEFAULT"); - final Target target = new Target("target1"); + final JpaTarget target = new JpaTarget("target1"); action.setTarget(target); return action; diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionStatus.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionStatus.java index c31ab83f3..2c38a771c 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionStatus.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionStatus.java @@ -21,6 +21,43 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public enum ActionStatus { + /** + * Action requests download by this target which has now started. + */ + DOWNLOAD, - DOWNLOAD, RETRIEVED, RUNNING, FINISHED, ERROR, WARNING, CANCELED, CANCEL_REJECTED; + /** + * Action has been send to the target. + */ + RETRIEVED, + + /** + * Action is still running for this target. + */ + RUNNING, + + /** + * Action is finished successfully for this target. + */ + FINISHED, + + /** + * Action has failed for this target. + */ + ERROR, + + /** + * Action is still running but with warnings. + */ + WARNING, + + /** + * Action has been canceled for this target. + */ + CANCELED, + + /** + * Cancellation has been rejected by the target.. + */ + CANCEL_REJECTED; } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java index 6d2d890b2..d4780f71c 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java @@ -97,7 +97,7 @@ public final class MgmtDistributionSetMapper { static DistributionSet fromRequest(final MgmtDistributionSetRequestBodyPost dsRest, final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { - final DistributionSet result = new DistributionSet(); + final DistributionSet result = distributionSetManagement.generateDistributionSet(); result.setDescription(dsRest.getDescription()); result.setName(dsRest.getName()); result.setType(findDistributionSetTypeWithExceptionIfNotFound(dsRest.getType(), distributionSetManagement)); @@ -135,13 +135,14 @@ public final class MgmtDistributionSetMapper { * @return */ static List fromRequestDsMetadata(final DistributionSet ds, - final List metadata) { + final List metadata, final DistributionSetManagement distributionSetManagement) { final List mappedList = new ArrayList<>(metadata.size()); for (final MgmtMetadata metadataRest : metadata) { if (metadataRest.getKey() == null) { throw new IllegalArgumentException("the key of the metadata must be present"); } - mappedList.add(new DistributionSetMetadata(metadataRest.getKey(), ds, metadataRest.getValue())); + mappedList.add(distributionSetManagement.generateDistributionSetMetadata(ds, metadataRest.getKey(), + metadataRest.getValue())); } return mappedList; } @@ -170,12 +171,11 @@ public final class MgmtDistributionSetMapper { response.setRequiredMigrationStep(distributionSet.isRequiredMigrationStep()); - response.add( - linkTo(methodOn(MgmtDistributionSetRestApi.class).getDistributionSet(response.getDsId())).withRel("self")); + response.add(linkTo(methodOn(MgmtDistributionSetRestApi.class).getDistributionSet(response.getDsId())) + .withRel("self")); - response.add(linkTo( - methodOn(MgmtDistributionSetTypeRestApi.class).getDistributionSetType(distributionSet.getType().getId())) - .withRel("type")); + response.add(linkTo(methodOn(MgmtDistributionSetTypeRestApi.class) + .getDistributionSetType(distributionSet.getType().getId())).withRel("type")); response.add(linkTo(methodOn(MgmtDistributionSetRestApi.class).getMetadata(response.getDsId(), Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET), @@ -206,7 +206,7 @@ public final class MgmtDistributionSetMapper { static MgmtMetadata toResponseDsMetadata(final DistributionSetMetadata metadata) { final MgmtMetadata metadataRest = new MgmtMetadata(); - metadataRest.setKey(metadata.getId().getKey()); + metadataRest.setKey(metadata.getKey()); metadataRest.setValue(metadata.getValue()); return metadataRest; } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java index 17f4c3303..a048226ec 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java @@ -27,22 +27,18 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; -import org.eclipse.hawkbit.repository.DistributionSetFields; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SystemManagement; -import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.TargetWithActionType; +import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; -import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -96,10 +92,9 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { final Pageable pageable = new OffsetBasedPageRequest(sanitizedOffsetParam, sanitizedLimitParam, sorting); final Page findDsPage; if (rsqlParam != null) { - findDsPage = this.distributionSetManagement.findDistributionSetsAll( - RSQLUtility.parse(rsqlParam, DistributionSetFields.class), pageable, false); + findDsPage = this.distributionSetManagement.findDistributionSetsAll(rsqlParam, pageable, false); } else { - findDsPage = this.distributionSetManagement.findDistributionSetsAll(pageable, false, null); + findDsPage = this.distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageable, false, null); } final List rest = MgmtDistributionSetMapper.toResponseFromDsList(findDsPage.getContent()); @@ -181,8 +176,8 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { final Pageable pageable = new OffsetBasedPageRequest(sanitizedOffsetParam, sanitizedLimitParam, sorting); final Page targetsAssignedDS; if (rsqlParam != null) { - targetsAssignedDS = this.targetManagement.findTargetByAssignedDistributionSet(distributionSetId, - RSQLUtility.parse(rsqlParam, TargetFields.class), pageable); + targetsAssignedDS = this.targetManagement.findTargetByAssignedDistributionSet(distributionSetId, rsqlParam, + pageable); } else { targetsAssignedDS = this.targetManagement.findTargetByAssignedDistributionSet(distributionSetId, pageable); } @@ -210,7 +205,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { final Page targetsInstalledDS; if (rsqlParam != null) { targetsInstalledDS = this.targetManagement.findTargetByInstalledDistributionSet(distributionSetId, - RSQLUtility.parse(rsqlParam, TargetFields.class), pageable); + rsqlParam, pageable); } else { targetsInstalledDS = this.targetManagement.findTargetByInstalledDistributionSet(distributionSetId, pageable); @@ -257,8 +252,8 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { final Page metaDataPage; if (rsqlParam != null) { - metaDataPage = this.distributionSetManagement.findDistributionSetMetadataByDistributionSetId( - distributionSetId, RSQLUtility.parse(rsqlParam, DistributionSetMetadataFields.class), pageable); + metaDataPage = this.distributionSetManagement + .findDistributionSetMetadataByDistributionSetId(distributionSetId, rsqlParam, pageable); } else { metaDataPage = this.distributionSetManagement .findDistributionSetMetadataByDistributionSetId(distributionSetId, pageable); @@ -289,8 +284,8 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); - final DistributionSetMetadata updated = this.distributionSetManagement - .updateDistributionSetMetadata(new DistributionSetMetadata(metadataKey, ds, metadata.getValue())); + final DistributionSetMetadata updated = this.distributionSetManagement.updateDistributionSetMetadata( + distributionSetManagement.generateDistributionSetMetadata(ds, metadataKey, metadata.getValue())); return ResponseEntity.ok(MgmtDistributionSetMapper.toResponseDsMetadata(updated)); } @@ -312,8 +307,8 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); - final List created = this.distributionSetManagement - .createDistributionSetMetadata(MgmtDistributionSetMapper.fromRequestDsMetadata(ds, metadataRest)); + final List created = this.distributionSetManagement.createDistributionSetMetadata( + MgmtDistributionSetMapper.fromRequestDsMetadata(ds, metadataRest, distributionSetManagement)); return new ResponseEntity<>(MgmtDistributionSetMapper.toResponseDsMetadata(created), HttpStatus.CREATED); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java index 907bbb574..69f6e044c 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java @@ -21,13 +21,11 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.TagFields; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -75,8 +73,8 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes countTargetsAll = this.tagManagement.countTargetTags(); } else { - final Page findTargetPage = this.tagManagement - .findAllDistributionSetTags(RSQLUtility.parse(rsqlParam, TagFields.class), pageable); + final Page findTargetPage = this.tagManagement.findAllDistributionSetTags(rsqlParam, + pageable); countTargetsAll = findTargetPage.getTotalElements(); findTargetsAll = findTargetPage; @@ -99,7 +97,7 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes LOG.debug("creating {} ds tags", tags.size()); final List createdTags = this.tagManagement - .createDistributionSetTags(MgmtTagMapper.mapDistributionSetTagFromRequest(tags)); + .createDistributionSetTags(MgmtTagMapper.mapDistributionSetTagFromRequest(tagManagement, tags)); return new ResponseEntity<>(MgmtTagMapper.toResponseDistributionSetTag(createdTags), HttpStatus.CREATED); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java index d3046f149..a6dd6f32b 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java @@ -14,10 +14,11 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -35,21 +36,22 @@ final class MgmtDistributionSetTypeMapper { } - static List smFromRequest(final SoftwareManagement softwareManagement, + static List smFromRequest(final DistributionSetManagement distributionSetManagement, + final SoftwareManagement softwareManagement, final Iterable smTypesRest) { final List mappedList = new ArrayList<>(); for (final MgmtDistributionSetTypeRequestBodyPost smRest : smTypesRest) { - mappedList.add(fromRequest(softwareManagement, smRest)); + mappedList.add(fromRequest(distributionSetManagement, softwareManagement, smRest)); } return mappedList; } - static DistributionSetType fromRequest(final SoftwareManagement softwareManagement, - final MgmtDistributionSetTypeRequestBodyPost smsRest) { + static DistributionSetType fromRequest(final DistributionSetManagement distributionSetManagement, + final SoftwareManagement softwareManagement, final MgmtDistributionSetTypeRequestBodyPost smsRest) { - final DistributionSetType result = new DistributionSetType(smsRest.getKey(), smsRest.getName(), - smsRest.getDescription()); + final DistributionSetType result = distributionSetManagement.generateDistributionSetType(smsRest.getKey(), + smsRest.getName(), smsRest.getDescription()); // Add mandatory smsRest.getMandatorymodules().stream().map(mand -> { diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java index baa6f2955..16cba384b 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java @@ -12,14 +12,13 @@ import java.util.List; import org.eclipse.hawkbit.mgmt.json.model.MgmtId; import org.eclipse.hawkbit.mgmt.json.model.PagedList; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPut; -import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.DistributionSetTypeFields; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -27,7 +26,6 @@ import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -71,8 +69,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR final Slice findModuleTypessAll; Long countModulesAll; if (rsqlParam != null) { - findModuleTypessAll = distributionSetManagement.findDistributionSetTypesByPredicate( - RSQLUtility.parse(rsqlParam, DistributionSetTypeFields.class), pageable); + findModuleTypessAll = distributionSetManagement.findDistributionSetTypesAll(rsqlParam, pageable); countModulesAll = ((Page) findModuleTypessAll).getTotalElements(); } else { findModuleTypessAll = distributionSetManagement.findDistributionSetTypesAll(pageable); @@ -124,8 +121,9 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR public ResponseEntity> createDistributionSetTypes( @RequestBody final List distributionSetTypes) { - final List createdSoftwareModules = distributionSetManagement.createDistributionSetTypes( - MgmtDistributionSetTypeMapper.smFromRequest(softwareManagement, distributionSetTypes)); + final List createdSoftwareModules = distributionSetManagement + .createDistributionSetTypes(MgmtDistributionSetTypeMapper.smFromRequest(distributionSetManagement, + softwareManagement, distributionSetTypes)); return new ResponseEntity<>(MgmtDistributionSetTypeMapper.toTypesResponse(createdSoftwareModules), HttpStatus.CREATED); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java index 4dcaf0bf1..e80889508 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java @@ -22,6 +22,7 @@ import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutSuccessAction.Succ import org.eclipse.hawkbit.mgmt.json.model.rolloutgroup.MgmtRolloutGroupResponseBody; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRolloutRestApi; +import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; @@ -83,9 +84,9 @@ final class MgmtRolloutMapper { return body; } - static Rollout fromRequest(final MgmtRolloutRestRequestBody restRequest, final DistributionSet distributionSet, - final String filterQuery) { - final Rollout rollout = new Rollout(); + static Rollout fromRequest(final RolloutManagement rolloutManagement, final MgmtRolloutRestRequestBody restRequest, + final DistributionSet distributionSet, final String filterQuery) { + final Rollout rollout = rolloutManagement.generateRollout(); rollout.setName(restRequest.getName()); rollout.setDescription(restRequest.getDescription()); rollout.setDistributionSet(distributionSet); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java index 37d5c6fdc..ae025e51b 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java @@ -19,8 +19,6 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRolloutRestApi; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.RolloutFields; -import org.eclipse.hawkbit.repository.RolloutGroupFields; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetFields; @@ -28,18 +26,18 @@ import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorAction; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -80,8 +78,7 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { final Page findModulesAll; if (rsqlParam != null) { - findModulesAll = this.rolloutManagement - .findAllWithDetailedStatusByPredicate(RSQLUtility.parse(rsqlParam, RolloutFields.class), pageable); + findModulesAll = this.rolloutManagement.findAllWithDetailedStatusByPredicate(rsqlParam, pageable); } else { findModulesAll = this.rolloutManagement.findAll(pageable); } @@ -136,12 +133,12 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { errorActionExpr = rolloutRequestBody.getErrorAction().getExpression(); } - final RolloutGroupConditions rolloutGroupConditions = new RolloutGroup.RolloutGroupConditionBuilder() + final RolloutGroupConditions rolloutGroupConditions = new RolloutGroupConditionBuilder() .successCondition(successCondition, successConditionExpr) .successAction(successAction, successActionExpr).errorCondition(errorCondition, errorConditionExpr) .errorAction(errorAction, errorActionExpr).build(); final Rollout rollout = this.rolloutManagement.createRollout( - MgmtRolloutMapper.fromRequest(rolloutRequestBody, distributionSet, + MgmtRolloutMapper.fromRequest(rolloutManagement, rolloutRequestBody, distributionSet, rolloutRequestBody.getTargetFilterQuery()), rolloutRequestBody.getAmountGroups(), rolloutGroupConditions); @@ -191,8 +188,7 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { final Page findRolloutGroupsAll; if (rsqlParam != null) { - findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsByPredicate(rollout, - RSQLUtility.parse(rsqlParam, RolloutGroupFields.class), pageable); + findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsAll(rollout, rsqlParam, pageable); } else { findRolloutGroupsAll = this.rolloutGroupManagement.findRolloutGroupsByRolloutId(rolloutId, pageable); } @@ -228,8 +224,7 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { final Page rolloutGroupTargets; if (rsqlParam != null) { - final Specification rsqlSpecification = RSQLUtility.parse(rsqlParam, TargetFields.class); - rolloutGroupTargets = this.rolloutGroupManagement.findRolloutGroupTargets(rolloutGroup, rsqlSpecification, + rolloutGroupTargets = this.rolloutGroupManagement.findRolloutGroupTargets(rolloutGroup, rsqlParam, pageable); } else { final Page pageTargets = this.rolloutGroupManagement.findRolloutGroupTargets(rolloutGroup, diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java index 5ca100ca9..ff721dfbc 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java @@ -54,18 +54,20 @@ public final class MgmtSoftwareModuleMapper { static SoftwareModule fromRequest(final MgmtSoftwareModuleRequestBodyPost smsRest, final SoftwareManagement softwareManagement) { - return new SoftwareModule(getSoftwareModuleTypeFromKeyString(smsRest.getType(), softwareManagement), - smsRest.getName(), smsRest.getVersion(), smsRest.getDescription(), smsRest.getVendor()); + return softwareManagement.generateSoftwareModule( + getSoftwareModuleTypeFromKeyString(smsRest.getType(), softwareManagement), smsRest.getName(), + smsRest.getVersion(), smsRest.getDescription(), smsRest.getVendor()); } - static List fromRequestSwMetadata(final SoftwareModule sw, - final List metadata) { + static List fromRequestSwMetadata(final SoftwareManagement softwareManagement, + final SoftwareModule sw, final List metadata) { final List mappedList = new ArrayList<>(metadata.size()); for (final MgmtMetadata metadataRest : metadata) { if (metadataRest.getKey() == null) { throw new IllegalArgumentException("the key of the metadata must be present"); } - mappedList.add(new SoftwareModuleMetadata(metadataRest.getKey(), sw, metadataRest.getValue())); + mappedList.add(softwareManagement.generateSoftwareModuleMetadata(sw, metadataRest.getKey(), + metadataRest.getValue())); } return mappedList; } @@ -116,7 +118,7 @@ public final class MgmtSoftwareModuleMapper { static MgmtMetadata toResponseSwMetadata(final SoftwareModuleMetadata metadata) { final MgmtMetadata metadataRest = new MgmtMetadata(); - metadataRest.setKey(metadata.getId().getKey()); + metadataRest.setKey(metadata.getKey()); metadataRest.setValue(metadata.getValue()); return metadataRest; } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java index 75abe57f4..c01295828 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java @@ -22,14 +22,11 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.SoftwareModuleFields; -import org.eclipse.hawkbit.repository.SoftwareModuleMetadataFields; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; -import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -139,8 +136,7 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { final Slice findModulesAll; Long countModulesAll; if (rsqlParam != null) { - findModulesAll = softwareManagement - .findSoftwareModulesByPredicate(RSQLUtility.parse(rsqlParam, SoftwareModuleFields.class), pageable); + findModulesAll = softwareManagement.findSoftwareModulesByPredicate(rsqlParam, pageable); countModulesAll = ((Page) findModulesAll).getTotalElements(); } else { findModulesAll = softwareManagement.findSoftwareModulesAll(pageable); @@ -217,8 +213,8 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { final Page metaDataPage; if (rsqlParam != null) { - metaDataPage = softwareManagement.findSoftwareModuleMetadataBySoftwareModuleId(softwareModuleId, - RSQLUtility.parse(rsqlParam, SoftwareModuleMetadataFields.class), pageable); + metaDataPage = softwareManagement.findSoftwareModuleMetadataBySoftwareModuleId(softwareModuleId, rsqlParam, + pageable); } else { metaDataPage = softwareManagement.findSoftwareModuleMetadataBySoftwareModuleId(softwareModuleId, pageable); } @@ -233,8 +229,7 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { public ResponseEntity getMetadataValue(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("metadataKey") final String metadataKey) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); - final SoftwareModuleMetadata findOne = softwareManagement - .findSoftwareModuleMetadata(new SwMetadataCompositeKey(sw, metadataKey)); + final SoftwareModuleMetadata findOne = softwareManagement.findSoftwareModuleMetadata(sw, metadataKey); return ResponseEntity. ok(MgmtSoftwareModuleMapper.toResponseSwMetadata(findOne)); } @@ -242,8 +237,8 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { public ResponseEntity updateMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("metadataKey") final String metadataKey, @RequestBody final MgmtMetadata metadata) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); - final SoftwareModuleMetadata updated = softwareManagement - .updateSoftwareModuleMetadata(new SoftwareModuleMetadata(metadataKey, sw, metadata.getValue())); + final SoftwareModuleMetadata updated = softwareManagement.updateSoftwareModuleMetadata( + softwareManagement.generateSoftwareModuleMetadata(sw, metadataKey, metadata.getValue())); return ResponseEntity.ok(MgmtSoftwareModuleMapper.toResponseSwMetadata(updated)); } @@ -261,8 +256,8 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { @RequestBody final List metadataRest) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); - final List created = softwareManagement - .createSoftwareModuleMetadata(MgmtSoftwareModuleMapper.fromRequestSwMetadata(sw, metadataRest)); + final List created = softwareManagement.createSoftwareModuleMetadata( + MgmtSoftwareModuleMapper.fromRequestSwMetadata(softwareManagement, sw, metadataRest)); return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponseSwMetadata(created), HttpStatus.CREATED); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java index 5b16436a9..f52ea7f2a 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java @@ -18,6 +18,7 @@ import java.util.List; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; /** @@ -35,18 +36,25 @@ final class MgmtSoftwareModuleTypeMapper { } - static List smFromRequest(final Iterable smTypesRest) { + static List smFromRequest(final SoftwareManagement softwareManagement, + final Iterable smTypesRest) { final List mappedList = new ArrayList<>(); for (final MgmtSoftwareModuleTypeRequestBodyPost smRest : smTypesRest) { - mappedList.add(fromRequest(smRest)); + mappedList.add(fromRequest(softwareManagement, smRest)); } return mappedList; } - static SoftwareModuleType fromRequest(final MgmtSoftwareModuleTypeRequestBodyPost smsRest) { - return new SoftwareModuleType(smsRest.getKey(), smsRest.getName(), smsRest.getDescription(), - smsRest.getMaxAssignments()); + static SoftwareModuleType fromRequest(final SoftwareManagement softwareManagement, + final MgmtSoftwareModuleTypeRequestBodyPost smsRest) { + final SoftwareModuleType result = softwareManagement.generateSoftwareModuleType(); + result.setName(smsRest.getName()); + result.setKey(smsRest.getKey()); + result.setDescription(smsRest.getDescription()); + result.setMaxAssignments(smsRest.getMaxAssignments()); + + return result; } static List toTypesResponse(final List types) { diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java index deba883f6..bbb61571c 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java @@ -18,12 +18,10 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.SoftwareModuleTypeFields; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -62,8 +60,7 @@ public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRes final Slice findModuleTypessAll; Long countModulesAll; if (rsqlParam != null) { - findModuleTypessAll = this.softwareManagement.findSoftwareModuleTypesByPredicate( - RSQLUtility.parse(rsqlParam, SoftwareModuleTypeFields.class), pageable); + findModuleTypessAll = this.softwareManagement.findSoftwareModuleTypesAll(rsqlParam, pageable); countModulesAll = ((Page) findModuleTypessAll).getTotalElements(); } else { findModuleTypessAll = this.softwareManagement.findSoftwareModuleTypesAll(pageable); @@ -112,8 +109,8 @@ public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRes public ResponseEntity> createSoftwareModuleTypes( @RequestBody final List softwareModuleTypes) { - final List createdSoftwareModules = this.softwareManagement - .createSoftwareModuleType(MgmtSoftwareModuleTypeMapper.smFromRequest(softwareModuleTypes)); + final List createdSoftwareModules = this.softwareManagement.createSoftwareModuleType( + MgmtSoftwareModuleTypeMapper.smFromRequest(softwareManagement, softwareModuleTypes)); return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toTypesResponse(createdSoftwareModules), HttpStatus.CREATED); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java index 3ab2016ec..7ede69658 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTag; import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.TargetTag; @@ -84,8 +85,9 @@ final class MgmtTagMapper { mapTag(response, distributionSetTag); - response.add(linkTo(methodOn(MgmtDistributionSetTagRestApi.class).getDistributionSetTag(distributionSetTag.getId())) - .withRel("self")); + response.add( + linkTo(methodOn(MgmtDistributionSetTagRestApi.class).getDistributionSetTag(distributionSetTag.getId())) + .withRel("self")); response.add(linkTo( methodOn(MgmtDistributionSetTagRestApi.class).getAssignedDistributionSets(distributionSetTag.getId())) @@ -94,20 +96,22 @@ final class MgmtTagMapper { return response; } - static List mapTargeTagFromRequest(final Iterable tags) { + static List mapTargeTagFromRequest(final TagManagement tagManagement, + final Iterable tags) { final List mappedList = new ArrayList<>(); for (final MgmtTagRequestBodyPut targetTagRest : tags) { - mappedList.add( - new TargetTag(targetTagRest.getName(), targetTagRest.getDescription(), targetTagRest.getColour())); + mappedList.add(tagManagement.generateTargetTag(targetTagRest.getName(), targetTagRest.getDescription(), + targetTagRest.getColour())); } return mappedList; } - static List mapDistributionSetTagFromRequest(final Iterable tags) { + static List mapDistributionSetTagFromRequest(final TagManagement tagManagement, + final Iterable tags) { final List mappedList = new ArrayList<>(); for (final MgmtTagRequestBodyPut targetTagRest : tags) { - mappedList.add(new DistributionSetTag(targetTagRest.getName(), targetTagRest.getDescription(), - targetTagRest.getColour())); + mappedList.add(tagManagement.generateDistributionSetTag(targetTagRest.getName(), + targetTagRest.getDescription(), targetTagRest.getColour())); } return mappedList; } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java index afb941bc1..b377e95f7 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java @@ -25,10 +25,11 @@ import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTargetRequestBody; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetRestApi; import org.eclipse.hawkbit.repository.ActionFields; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.PollStatus; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetInfo.PollStatus; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.rest.data.SortDirection; @@ -168,16 +169,17 @@ public final class MgmtTargetMapper { return targetRest; } - static List fromRequest(final Iterable targetsRest) { + static List fromRequest(final TargetManagement targetManagement, + final Iterable targetsRest) { final List mappedList = new ArrayList<>(); for (final MgmtTargetRequestBody targetRest : targetsRest) { - mappedList.add(fromRequest(targetRest)); + mappedList.add(fromRequest(targetManagement, targetRest)); } return mappedList; } - static Target fromRequest(final MgmtTargetRequestBody targetRest) { - final Target target = new Target(targetRest.getControllerId()); + static Target fromRequest(final TargetManagement targetManagement, final MgmtTargetRequestBody targetRest) { + final Target target = targetManagement.generateTarget(targetRest.getControllerId()); target.setDescription(targetRest.getDescription()); target.setName(targetRest.getName()); return target; diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java index 4a7c760e3..e02072238 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java @@ -26,18 +26,15 @@ import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTargetRequestBody; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetRestApi; -import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.rest.data.SortDirection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,7 +43,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; -import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -93,8 +89,7 @@ public class MgmtTargetResource implements MgmtTargetRestApi { final Slice findTargetsAll; final Long countTargetsAll; if (rsqlParam != null) { - final Page findTargetPage = this.targetManagement - .findTargetsAll(RSQLUtility.parse(rsqlParam, TargetFields.class), pageable); + final Page findTargetPage = this.targetManagement.findTargetsAll(rsqlParam, pageable); countTargetsAll = findTargetPage.getTotalElements(); findTargetsAll = findTargetPage; } else { @@ -110,7 +105,7 @@ public class MgmtTargetResource implements MgmtTargetRestApi { public ResponseEntity> createTargets(@RequestBody final List targets) { LOG.debug("creating {} targets", targets.size()); final Iterable createdTargets = this.targetManagement - .createTargets(MgmtTargetMapper.fromRequest(targets)); + .createTargets(MgmtTargetMapper.fromRequest(targetManagement, targets)); LOG.debug("{} targets created, return status {}", targets.size(), HttpStatus.CREATED); return new ResponseEntity<>(MgmtTargetMapper.toResponse(createdTargets), HttpStatus.CREATED); } @@ -170,9 +165,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi { final Slice activeActions; final Long totalActionCount; if (rsqlParam != null) { - final Specification parse = RSQLUtility.parse(rsqlParam, ActionFields.class); - activeActions = this.deploymentManagement.findActionsByTarget(parse, foundTarget, pageable); - totalActionCount = this.deploymentManagement.countActionsByTarget(parse, foundTarget); + activeActions = this.deploymentManagement.findActionsByTarget(rsqlParam, foundTarget, pageable); + totalActionCount = this.deploymentManagement.countActionsByTarget(rsqlParam, foundTarget); } else { activeActions = this.deploymentManagement.findActionsByTarget(foundTarget, pageable); totalActionCount = this.deploymentManagement.countActionsByTarget(foundTarget); @@ -250,8 +244,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi { final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); final Sort sorting = PagingUtility.sanitizeActionStatusSortParam(sortParam); - final Page statusList = this.deploymentManagement.findActionStatusByAction( - new OffsetBasedPageRequest(sanitizedOffsetParam, sanitizedLimitParam, sorting), action, true); + final Page statusList = this.deploymentManagement.findActionStatusByActionWithMessages( + new OffsetBasedPageRequest(sanitizedOffsetParam, sanitizedLimitParam, sorting), action); return new ResponseEntity<>( new PagedList<>(MgmtTargetMapper.toActionStatusRestResponse(statusList.getContent()), diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java index 2bafecd8b..7d1ba3f7f 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java @@ -20,14 +20,12 @@ import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.TagFields; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -75,8 +73,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { countTargetsAll = this.tagManagement.countTargetTags(); } else { - final Page findTargetPage = this.tagManagement - .findAllTargetTags(RSQLUtility.parse(rsqlParam, TagFields.class), pageable); + final Page findTargetPage = this.tagManagement.findAllTargetTags(rsqlParam, pageable); countTargetsAll = findTargetPage.getTotalElements(); findTargetsAll = findTargetPage; @@ -96,7 +93,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { public ResponseEntity> createTargetTags(@RequestBody final List tags) { LOG.debug("creating {} target tags", tags.size()); final List createdTargetTags = this.tagManagement - .createTargetTags(MgmtTagMapper.mapTargeTagFromRequest(tags)); + .createTargetTags(MgmtTagMapper.mapTargeTagFromRequest(tagManagement, tags)); return new ResponseEntity<>(MgmtTagMapper.toResponse(createdTargetTags), HttpStatus.CREATED); } diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index 8cfef095e..daa010166 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -30,10 +30,10 @@ import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; -import org.eclipse.hawkbit.repository.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; @@ -76,7 +76,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final DistributionSet disSet = TestDataUtil.generateDistributionSetWithNoSoftwareModules("Eris", "560a", distributionSetManagement); final List smIDs = new ArrayList(); - SoftwareModule sm = new SoftwareModule(osType, "Dysnomia ", "15,772", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "Dysnomia ", "15,772", null, null); sm = softwareManagement.createSoftwareModule(sm); smIDs.add(sm.getId()); final JSONArray smList = new JSONArray(); @@ -92,7 +92,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String[] knownTargetIds = new String[] { "1", "2" }; final JSONArray list = new JSONArray(); for (final String targetId : knownTargetIds) { - targetManagement.createTarget(new Target(targetId)); + targetManagement.createTarget(targetManagement.generateTarget(targetId)); list.put(new JSONObject().put("id", Long.valueOf(targetId))); } deploymentManagement.assignDistributionSet(disSet.getId(), knownTargetIds[0]); @@ -120,7 +120,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final DistributionSet disSet = TestDataUtil.generateDistributionSetWithNoSoftwareModules("Mars", "686,980", distributionSetManagement); final List smIDs = new ArrayList<>(); - SoftwareModule sm = new SoftwareModule(osType, "Phobos", "0,3189", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "Phobos", "0,3189", null, null); sm = softwareManagement.createSoftwareModule(sm); smIDs.add(sm.getId()); final JSONArray smList = new JSONArray(); @@ -136,7 +136,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String[] knownTargetIds = new String[] { "1", "2" }; final JSONArray list = new JSONArray(); for (final String targetId : knownTargetIds) { - targetManagement.createTarget(new Target(targetId)); + targetManagement.createTarget(targetManagement.generateTarget(targetId)); list.put(new JSONObject().put("id", Long.valueOf(targetId))); } // assign DisSet to target and test assignment @@ -150,8 +150,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest .andExpect(jsonPath("$.total", equalTo(knownTargetIds.length))); // Create another SM and post assignment - final List smID2s = new ArrayList(); - SoftwareModule sm2 = new SoftwareModule(appType, "Deimos", "1,262", null, null); + final List smID2s = new ArrayList<>(); + SoftwareModule sm2 = softwareManagement.generateSoftwareModule(appType, "Deimos", "1,262", null, null); sm2 = softwareManagement.createSoftwareModule(sm2); smID2s.add(sm2.getId()); final JSONArray smList2 = new JSONArray(); @@ -178,13 +178,13 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest .andExpect(jsonPath("$.size", equalTo(disSet.getModules().size()))); // create Software Modules final List smIDs = new ArrayList(); - SoftwareModule sm = new SoftwareModule(osType, "Europa", "3,551", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "Europa", "3,551", null, null); sm = softwareManagement.createSoftwareModule(sm); smIDs.add(sm.getId()); - SoftwareModule sm2 = new SoftwareModule(appType, "Ganymed", "7,155", null, null); + SoftwareModule sm2 = softwareManagement.generateSoftwareModule(appType, "Ganymed", "7,155", null, null); sm2 = softwareManagement.createSoftwareModule(sm2); smIDs.add(sm2.getId()); - SoftwareModule sm3 = new SoftwareModule(runtimeType, "Kallisto", "16,689", null, null); + SoftwareModule sm3 = softwareManagement.generateSoftwareModule(runtimeType, "Kallisto", "16,689", null, null); sm3 = softwareManagement.createSoftwareModule(sm3); smIDs.add(sm3.getId()); final JSONArray list = new JSONArray(); @@ -234,7 +234,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String[] knownTargetIds = new String[] { "1", "2", "3", "4", "5" }; final JSONArray list = new JSONArray(); for (final String targetId : knownTargetIds) { - targetManagement.createTarget(new Target(targetId)); + targetManagement.createTarget(targetManagement.generateTarget(targetId)); list.put(new JSONObject().put("id", Long.valueOf(targetId))); } // assign already one target to DS @@ -258,7 +258,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String knownTargetId = "knownTargetId1"; final Set createDistributionSetsAlphabetical = createDistributionSetsAlphabetical(1); final DistributionSet createdDs = createDistributionSetsAlphabetical.iterator().next(); - targetManagement.createTarget(new Target(knownTargetId)); + targetManagement.createTarget(targetManagement.generateTarget(knownTargetId)); deploymentManagement.assignDistributionSet(createdDs.getId(), knownTargetId); mvc.perform(get( @@ -285,10 +285,10 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String knownTargetId = "knownTargetId1"; final Set createDistributionSetsAlphabetical = createDistributionSetsAlphabetical(1); final DistributionSet createdDs = createDistributionSetsAlphabetical.iterator().next(); - final Target createTarget = targetManagement.createTarget(new Target(knownTargetId)); + final Target createTarget = targetManagement.createTarget(targetManagement.generateTarget(knownTargetId)); // create some dummy targets which are not assigned or installed - targetManagement.createTarget(new Target("dummy1")); - targetManagement.createTarget(new Target("dummy2")); + targetManagement.createTarget(targetManagement.generateTarget("dummy1")); + targetManagement.createTarget(targetManagement.generateTarget("dummy2")); // assign knownTargetId to distribution set deploymentManagement.assignDistributionSet(createdDs.getId(), knownTargetId); // make it in install state @@ -348,7 +348,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @Description("Ensures that multiple DS requested are listed with expected payload.") public void getDistributionSets() throws Exception { // prepare test data - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(0); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(0); DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); @@ -361,7 +362,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest // load also lazy stuff set = distributionSetManagement.findDistributionSetByIdWithDetails(set.getId()); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(1); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(1); // perform request mvc.perform(get("/rest/v1/distributionsets").accept(MediaType.APPLICATION_JSON)) @@ -425,14 +427,15 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Ensures that multipe DS posted to API are created in the repository.") public void createDistributionSets() throws JSONException, Exception { - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(0); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(0); - final SoftwareModule ah = softwareManagement - .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); + final SoftwareModule ah = softwareManagement.createSoftwareModule( + softwareManagement.generateSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + final SoftwareModule jvm = softwareManagement.createSoftwareModule( + softwareManagement.generateSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); final SoftwareModule os = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, "")); + .createSoftwareModule(softwareManagement.generateSoftwareModule(osType, "poky", "3.0.2", null, "")); DistributionSet one = TestDataUtil.buildDistributionSet("one", "one", standardDsType, os, jvm, ah); DistributionSet two = TestDataUtil.buildDistributionSet("two", "two", standardDsType, os, jvm, ah); @@ -527,7 +530,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest .isEqualTo(String.valueOf(three.getId())); // check in database - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(3); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(3); assertThat(one.isRequiredMigrationStep()).isEqualTo(false); assertThat(two.isRequiredMigrationStep()).isEqualTo(false); assertThat(three.isRequiredMigrationStep()).isEqualTo(true); @@ -541,19 +545,22 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @Description("Ensures that DS deletion request to API is reflected by the repository.") public void deleteUnassignedistributionSet() throws Exception { // prepare test data - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(0); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(0); final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(1); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(1); // perform request mvc.perform(delete("/rest/v1/distributionsets/{smId}", set.getId())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); // check repository content - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).isEmpty(); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .isEmpty(); assertThat(distributionSetRepository.findAll()).isEmpty(); } @@ -561,22 +568,26 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @Description("Ensures that assigned DS deletion request to API is reflected by the repository by means of deleted flag set.") public void deleteAssignedDistributionSet() throws Exception { // prepare test data - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(0); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(0); final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); - targetManagement.createTarget(new Target("test")); + targetManagement.createTarget(targetManagement.generateTarget("test")); deploymentManagement.assignDistributionSet(set.getId(), "test"); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(1); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(1); // perform request mvc.perform(delete("/rest/v1/distributionsets/{smId}", set.getId())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); // check repository content - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(0); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, true, true)).hasSize(1); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(0); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, true, true)) + .hasSize(1); } @Test @@ -584,14 +595,16 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest public void updateDistributionSet() throws Exception { // prepare test data - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(0); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(0); final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true)).hasSize(1); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) + .hasSize(1); - final DistributionSet update = new DistributionSet(); + final DistributionSet update = distributionSetManagement.generateDistributionSet(); update.setVersion("anotherVersion"); update.setName(null); update.setType(standardDsType); @@ -600,11 +613,10 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - assertThat(distributionSetManagement.findDistributionSetsAll(pageReq, false, true).getContent().get(0) - .getVersion()).isEqualTo("anotherVersion"); - assertThat( - distributionSetManagement.findDistributionSetsAll(pageReq, false, true).getContent().get(0).getName()) - .isEqualTo(set.getName()); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true) + .getContent().get(0).getVersion()).isEqualTo("anotherVersion"); + assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true) + .getContent().get(0).getName()).isEqualTo(set.getName()); } @Test @@ -692,8 +704,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); - distributionSetManagement - .createDistributionSetMetadata(new DistributionSetMetadata(knownKey, testDS, knownValue)); + distributionSetManagement.createDistributionSetMetadata( + distributionSetManagement.generateDistributionSetMetadata(testDS, knownKey, knownValue)); final JSONObject jsonObject = new JSONObject().put("key", knownKey).put("value", updateValue); @@ -718,8 +730,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); - distributionSetManagement - .createDistributionSetMetadata(new DistributionSetMetadata(knownKey, testDS, knownValue)); + distributionSetManagement.createDistributionSetMetadata( + distributionSetManagement.generateDistributionSetMetadata(testDS, knownKey, knownValue)); mvc.perform(delete("/rest/v1/distributionsets/{dsId}/metadata/{key}", testDS.getId(), knownKey)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); @@ -740,8 +752,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String knownValue = "knownValue"; final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); - distributionSetManagement - .createDistributionSetMetadata(new DistributionSetMetadata(knownKey, testDS, knownValue)); + distributionSetManagement.createDistributionSetMetadata( + distributionSetManagement.generateDistributionSetMetadata(testDS, knownKey, knownValue)); mvc.perform(get("/rest/v1/distributionsets/{dsId}/metadata/{key}", testDS.getId(), knownKey)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) @@ -760,8 +772,9 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); for (int index = 0; index < totalMetadata; index++) { - distributionSetManagement.createDistributionSetMetadata(new DistributionSetMetadata(knownKeyPrefix + index, - distributionSetManagement.findDistributionSetById(testDS.getId()), knownValuePrefix + index)); + distributionSetManagement.createDistributionSetMetadata(distributionSetManagement + .generateDistributionSetMetadata(distributionSetManagement.findDistributionSetById(testDS.getId()), + knownKeyPrefix + index, knownValuePrefix + index)); } mvc.perform(get("/rest/v1/distributionsets/{dsId}/metadata?offset=" + offsetParam + "&limit=" + limitParam, @@ -795,8 +808,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest public void filterDistributionSetComplete() throws Exception { final int amount = 10; TestDataUtil.generateDistributionSets(amount, softwareManagement, distributionSetManagement); - distributionSetManagement.createDistributionSet(new DistributionSet("incomplete", "2", "incomplete", - distributionSetManagement.findDistributionSetTypeByKey("ecl_os"), null)); + distributionSetManagement.createDistributionSet(distributionSetManagement.generateDistributionSet("incomplete", + "2", "incomplete", distributionSetManagement.findDistributionSetTypeByKey("ecl_os"), null)); final String rsqlFindLikeDs1OrDs2 = "complete==" + Boolean.TRUE; @@ -815,7 +828,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String[] knownTargetIds = new String[] { "1", "2", "3", "4", "5" }; final JSONArray list = new JSONArray(); for (final String targetId : knownTargetIds) { - targetManagement.createTarget(new Target(targetId)); + targetManagement.createTarget(targetManagement.generateTarget(targetId)); list.put(new JSONObject().put("id", Long.valueOf(targetId))); } @@ -840,8 +853,9 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); for (int index = 0; index < totalMetadata; index++) { - distributionSetManagement.createDistributionSetMetadata(new DistributionSetMetadata(knownKeyPrefix + index, - distributionSetManagement.findDistributionSetById(testDS.getId()), knownValuePrefix + index)); + distributionSetManagement.createDistributionSetMetadata(distributionSetManagement + .generateDistributionSetMetadata(distributionSetManagement.findDistributionSetById(testDS.getId()), + knownKeyPrefix + index, knownValuePrefix + index)); } final String rsqlSearchValue1 = "value==knownValue1"; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java index dcd78513b..005a7f51f 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java @@ -25,7 +25,6 @@ import java.util.List; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; -import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @@ -58,8 +57,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes GET requests.") public void getDistributionSetTypes() throws Exception { - DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123")); + DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); testType.setDescription("Desc1234"); testType = distributionSetManagement.updateDistributionSetType(testType); @@ -96,8 +95,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes GET requests with sorting by KEY.") public void getDistributionSetTypesSortedByKey() throws Exception { - DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("zzzzz", "TestName123", "Desc123")); + DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("zzzzz", "TestName123", "Desc123")); testType.setDescription("Desc1234"); testType = distributionSetManagement.updateDistributionSetType(testType); @@ -136,12 +135,12 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(3); final List types = new ArrayList<>(); - types.add(new DistributionSetType("test1", "TestName1", "Desc1").addMandatoryModuleType(osType) - .addOptionalModuleType(runtimeType)); - types.add(new DistributionSetType("test2", "TestName2", "Desc2").addOptionalModuleType(osType) - .addOptionalModuleType(runtimeType).addOptionalModuleType(appType)); - types.add(new DistributionSetType("test3", "TestName3", "Desc3").addMandatoryModuleType(osType) - .addMandatoryModuleType(runtimeType)); + types.add(distributionSetManagement.generateDistributionSetType("test1", "TestName1", "Desc1") + .addMandatoryModuleType(osType).addOptionalModuleType(runtimeType)); + types.add(distributionSetManagement.generateDistributionSetType("test2", "TestName2", "Desc2") + .addOptionalModuleType(osType).addOptionalModuleType(runtimeType).addOptionalModuleType(appType)); + types.add(distributionSetManagement.generateDistributionSetType("test3", "TestName3", "Desc3") + .addMandatoryModuleType(osType).addMandatoryModuleType(runtimeType)); final MvcResult mvcResult = mvc .perform(post("/rest/v1/distributionsettypes/").content(JsonBuilder.distributionSetTypes(types)) @@ -205,8 +204,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes POST requests.") public void addMandatoryModuleToDistributionSetType() throws JSONException, Exception { - DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123")); + DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); assertThat(testType.getOptLockRevision()).isEqualTo(1); mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType.getId()) @@ -224,8 +223,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes POST requests.") public void addOptionalModuleToDistributionSetType() throws JSONException, Exception { - DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123")); + DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); assertThat(testType.getOptLockRevision()).isEqualTo(1); mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId()) @@ -244,8 +243,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes GET requests.") public void getMandatoryModulesOfDistributionSetType() throws JSONException, Exception { - final DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123") + final DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -263,8 +262,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes GET requests.") public void getOptionalModulesOfDistributionSetType() throws JSONException, Exception { - final DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123") + final DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -283,8 +282,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes/{ID} GET requests.") public void getMandatoryModuleOfDistributionSetType() throws JSONException, Exception { - final DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123") + final DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -305,8 +304,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes/{ID} GET requests.") public void getOptionalModuleOfDistributionSetType() throws JSONException, Exception { - final DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123") + final DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -327,8 +326,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes/{ID} DELETE requests.") public void removeMandatoryModuleToDistributionSetType() throws JSONException, Exception { - DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123") + DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -349,8 +348,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes/{ID} DELETE requests.") public void removeOptionalModuleToDistributionSetType() throws JSONException, Exception { - DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123") + DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -372,8 +371,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID} GET requests.") public void getDistributionSetType() throws Exception { - DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123")); + DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); testType.setDescription("Desc1234"); testType = distributionSetManagement.updateDistributionSetType(testType); @@ -391,8 +390,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/DistributionSetTypes/{ID} DELETE requests (hard delete scenario).") public void deleteDistributionSetTypeUnused() throws Exception { - final DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123")); + final DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(4); @@ -406,10 +405,10 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/DistributionSetTypes/{ID} DELETE requests (soft delete scenario).") public void deleteDistributionSetTypeUsed() throws Exception { - final DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123")); - distributionSetManagement - .createDistributionSet(new DistributionSet("sdfsd", "dsfsdf", "sdfsdf", testType, null)); + final DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + distributionSetManagement.createDistributionSet( + distributionSetManagement.generateDistributionSet("sdfsd", "dsfsdf", "sdfsdf", testType, null)); assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(4); assertThat(distributionSetTypeRepository.count()).isEqualTo(4); @@ -424,8 +423,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Test @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID} PUT requests.") public void updateDistributionSetTypeOnlyDescriptionAndNameUntouched() throws Exception { - final DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123")); + final DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); final String body = new JSONObject().put("id", testType.getId()).put("description", "foobardesc") .put("name", "nameShouldNotBeChanged").toString(); @@ -479,11 +478,11 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Test @Description("Ensures that the server is behaving as expected on invalid requests (wrong media type, wrong ID etc.).") public void invalidRequestsOnDistributionSetTypesResource() throws Exception { - final DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123")); + final DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); - final SoftwareModuleType testSmType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test123", "TestName123", "Desc123", 5)); + final SoftwareModuleType testSmType = softwareManagement.createSoftwareModuleType( + softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); final List types = new ArrayList<>(); types.add(testType); @@ -526,8 +525,10 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration // Modules types at creation time invalid - final DistributionSetType testNewType = new DistributionSetType("test123", "TestName123", "Desc123"); - testNewType.addMandatoryModuleType(new SoftwareModuleType("foo", "bar", "test", Integer.MAX_VALUE)); + final DistributionSetType testNewType = distributionSetManagement.generateDistributionSetType("test123", + "TestName123", "Desc123"); + testNewType.addMandatoryModuleType( + softwareManagement.generateSoftwareModuleType("foo", "bar", "test", Integer.MAX_VALUE)); mvc.perform(post("/rest/v1/distributionsettypes") .content(JsonBuilder.distributionSetTypes(Lists.newArrayList(testNewType))) @@ -560,10 +561,10 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Test @Description("Search erquest of software module types.") public void searchDistributionSetTypeRsql() throws Exception { - final DistributionSetType testType = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test123", "TestName123", "Desc123")); - final DistributionSetType testType2 = distributionSetManagement - .createDistributionSetType(new DistributionSetType("test1234", "TestName1234", "Desc123")); + final DistributionSetType testType = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + final DistributionSetType testType2 = distributionSetManagement.createDistributionSetType( + distributionSetManagement.generateDistributionSetType("test1234", "TestName1234", "Desc123")); final String rsqlFindLikeDs1OrDs2 = "name==TestName123,name==TestName1234"; @@ -577,7 +578,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration char character = 'a'; for (int index = 0; index < amount; index++) { final String str = String.valueOf(character); - final SoftwareModule softwareModule = new SoftwareModule(osType, str, str, str, str); + final SoftwareModule softwareModule = softwareManagement.generateSoftwareModule(osType, str, str, str, str); softwareManagement.createSoftwareModule(softwareModule); character++; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index 09281721c..b1c843042 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -30,8 +30,8 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; @@ -577,7 +577,7 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { private Rollout createRollout(final String name, final int amountGroups, final long distributionSetId, final String targetFilterQuery) { - final Rollout rollout = new Rollout(); + final Rollout rollout = rolloutManagement.generateRollout(); rollout.setDistributionSet(distributionSetManagement.findDistributionSetById(distributionSetId)); rollout.setName(name); rollout.setTargetFilterQuery(targetFilterQuery); diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java index a63dd754f..379674f98 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java @@ -44,7 +44,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; -import org.eclipse.hawkbit.repository.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.eclipse.hawkbit.rest.util.JsonBuilder; @@ -92,11 +91,15 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final String updateVendor = "newVendor1"; final String updateDescription = "newDescription1"; - softwareManagement.createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - softwareManagement.createSoftwareModule(new SoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); - softwareManagement.createSoftwareModule(new SoftwareModule(osType, "poky", "3.0.2", null, "")); + softwareManagement.createSoftwareModule( + softwareManagement.generateSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + softwareManagement.createSoftwareModule( + softwareManagement.generateSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); + softwareManagement + .createSoftwareModule(softwareManagement.generateSoftwareModule(osType, "poky", "3.0.2", null, "")); - SoftwareModule sm = new SoftwareModule(osType, knownSWName, knownSWVersion, knownSWDescription, knownSWVendor); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, knownSWName, knownSWVersion, + knownSWDescription, knownSWVendor); sm = softwareManagement.createSoftwareModule(sm); assertThat(sm.getName()).as("Wrong name of the software module").isEqualTo(knownSWName); @@ -122,7 +125,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Tests the uppload of an artifact binary. The upload is executed and the content checked in the repository for completenes.") public void uploadArtifact() throws Exception { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); assertThat(artifactRepository.findAll()).hasSize(0); @@ -191,7 +194,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); assertThat(artifactRepository.findAll()).hasSize(0); - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final MockMultipartFile file = new MockMultipartFile("file", "orig", null, new byte[0]); @@ -204,7 +207,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Verfies that the system does not accept identical artifacts uploads for the same software module. Expected response: CONFLICT") public void duplicateUploadArtifact() throws Exception { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -226,7 +229,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("verfies that option to upload artifacts with a custom defined by metadata, i.e. not the file name of the binary itself.") public void uploadArtifactWithCustomName() throws Exception { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); assertThat(artifactRepository.findAll()).hasSize(0); @@ -253,7 +256,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Verfies that the system refuses upload of an artifact where the provided hash sums do not match. Expected result: BAD REQUEST") public void uploadArtifactWithHashCheck() throws Exception { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); assertThat(artifactRepository.findAll()).hasSize(0); @@ -297,7 +300,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Tests binary download of an artifact including verfication that the downloaded binary is consistent and that the etag header is as expected identical to the SHA1 hash of the file.") public void downloadArtifact() throws Exception { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -332,7 +335,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Description("Verifies the listing of one defined artifact assigned to a given software module. That includes the artifact metadata and download links.") public void getArtifact() throws Exception { // prepare data for test - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -358,7 +361,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Verifies the listing of all artifacts assigned to a software module. That includes the artifact metadata and download links.") public void getArtifacts() throws Exception { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -401,7 +404,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); final MockMultipartFile file = new MockMultipartFile("file", "orig", null, random); - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); // no artifact available @@ -434,7 +437,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Verfies that the system refuses unsupported request types and answers as defined to them, e.g. NOT FOUND on a non existing resource. Or a HTTP POST for updating a resource results in METHOD NOT ALLOWED etc.") public void invalidRequestsOnSoftwaremodulesResource() throws Exception { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final List modules = new ArrayList<>(); @@ -516,13 +519,16 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Test retrieval of all software modules the user has access to.") public void getSoftwareModules() throws Exception { - SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1"); + SoftwareModule os = softwareManagement.generateSoftwareModule(osType, "name1", "version1", "description1", + "vendor1"); os = softwareManagement.createSoftwareModule(os); - SoftwareModule jvm = new SoftwareModule(runtimeType, "name1", "version1", "description1", "vendor1"); + SoftwareModule jvm = softwareManagement.generateSoftwareModule(runtimeType, "name1", "version1", "description1", + "vendor1"); jvm = softwareManagement.createSoftwareModule(jvm); - SoftwareModule ah = new SoftwareModule(appType, "name1", "version1", "description1", "vendor1"); + SoftwareModule ah = softwareManagement.generateSoftwareModule(appType, "name1", "version1", "description1", + "vendor1"); ah = softwareManagement.createSoftwareModule(ah); mvc.perform(get("/rest/v1/softwaremodules").accept(MediaType.APPLICATION_JSON)) @@ -584,22 +590,28 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Test the various filter parameters, e.g. filter by name or type of the module.") public void getSoftwareModulesWithFilterParameters() throws Exception { - SoftwareModule os1 = new SoftwareModule(osType, "osName1", "1.0.0", "description1", "vendor1"); + SoftwareModule os1 = softwareManagement.generateSoftwareModule(osType, "osName1", "1.0.0", "description1", + "vendor1"); os1 = softwareManagement.createSoftwareModule(os1); - SoftwareModule jvm1 = new SoftwareModule(runtimeType, "runtimeName1", "2.0.0", "description1", "vendor1"); + SoftwareModule jvm1 = softwareManagement.generateSoftwareModule(runtimeType, "runtimeName1", "2.0.0", + "description1", "vendor1"); jvm1 = softwareManagement.createSoftwareModule(jvm1); - SoftwareModule ah1 = new SoftwareModule(appType, "appName1", "3.0.0", "description1", "vendor1"); + SoftwareModule ah1 = softwareManagement.generateSoftwareModule(appType, "appName1", "3.0.0", "description1", + "vendor1"); ah1 = softwareManagement.createSoftwareModule(ah1); - SoftwareModule os2 = new SoftwareModule(osType, "osName2", "1.0.1", "description2", "vendor2"); + SoftwareModule os2 = softwareManagement.generateSoftwareModule(osType, "osName2", "1.0.1", "description2", + "vendor2"); os2 = softwareManagement.createSoftwareModule(os2); - SoftwareModule jvm2 = new SoftwareModule(runtimeType, "runtimeName2", "2.0.1", "description2", "vendor2"); + SoftwareModule jvm2 = softwareManagement.generateSoftwareModule(runtimeType, "runtimeName2", "2.0.1", + "description2", "vendor2"); jvm2 = softwareManagement.createSoftwareModule(jvm2); - SoftwareModule ah2 = new SoftwareModule(appType, "appName2", "3.0.1", "description2", "vendor2"); + SoftwareModule ah2 = softwareManagement.generateSoftwareModule(appType, "appName2", "3.0.1", "description2", + "vendor2"); ah2 = softwareManagement.createSoftwareModule(ah2); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(6); @@ -676,7 +688,8 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Tests GET request on /rest/v1/softwaremodules/{smId}.") public void getSoftareModule() throws Exception { - SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1"); + SoftwareModule os = softwareManagement.generateSoftwareModule(osType, "name1", "version1", "description1", + "vendor1"); os = softwareManagement.createSoftwareModule(os); mvc.perform(get("/rest/v1/softwaremodules/{smId}", os.getId()).accept(MediaType.APPLICATION_JSON)) @@ -695,7 +708,8 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW .andExpect(jsonPath("$_links.artifacts.href", equalTo("http://localhost/rest/v1/softwaremodules/" + os.getId() + "/artifacts"))); - SoftwareModule jvm = new SoftwareModule(runtimeType, "name1", "version1", "description1", "vendor1"); + SoftwareModule jvm = softwareManagement.generateSoftwareModule(runtimeType, "name1", "version1", "description1", + "vendor1"); jvm = softwareManagement.createSoftwareModule(jvm); mvc.perform(get("/rest/v1/softwaremodules/{smId}", jvm.getId()).accept(MediaType.APPLICATION_JSON)) @@ -714,7 +728,8 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW .andExpect(jsonPath("$_links.artifacts.href", equalTo("http://localhost/rest/v1/softwaremodules/" + jvm.getId() + "/artifacts"))); - SoftwareModule ah = new SoftwareModule(appType, "name1", "version1", "description1", "vendor1"); + SoftwareModule ah = softwareManagement.generateSoftwareModule(appType, "name1", "version1", "description1", + "vendor1"); ah = softwareManagement.createSoftwareModule(ah); mvc.perform(get("/rest/v1/softwaremodules/{smId}", ah.getId()).accept(MediaType.APPLICATION_JSON)) @@ -740,9 +755,12 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Verfies that the create request actually results in the creation of the modules in the repository.") public void createSoftwareModules() throws JSONException, Exception { - final SoftwareModule os = new SoftwareModule(osType, "name1", "version1", "description1", "vendor1"); - final SoftwareModule jvm = new SoftwareModule(runtimeType, "name2", "version1", "description1", "vendor1"); - final SoftwareModule ah = new SoftwareModule(appType, "name3", "version1", "description1", "vendor1"); + final SoftwareModule os = softwareManagement.generateSoftwareModule(osType, "name1", "version1", "description1", + "vendor1"); + final SoftwareModule jvm = softwareManagement.generateSoftwareModule(runtimeType, "name2", "version1", + "description1", "vendor1"); + final SoftwareModule ah = softwareManagement.generateSoftwareModule(appType, "name3", "version1", + "description1", "vendor1"); final List modules = new ArrayList<>(); modules.add(os); @@ -823,7 +841,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Description("Verifies successfull deletion of software modules that are not in use, i.e. assigned to a DS.") public void deleteUnassignedSoftwareModule() throws Exception { - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -879,7 +897,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Description("Tests the deletion of an artifact including verfication that the artifact is actually erased in the repository and removed from the software module.") public void deleteArtifact() throws Exception { // Create 1 SM - SoftwareModule sm = new SoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -918,8 +936,8 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final String knownKey2 = "knownKey1"; final String knownValue2 = "knownValue1"; - final SoftwareModule sm = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "name 1", "version 1", null, null)); + final SoftwareModule sm = softwareManagement.createSoftwareModule( + softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null)); final JSONArray jsonArray = new JSONArray(); jsonArray.put(new JSONObject().put("key", knownKey1).put("value", knownValue1)); @@ -932,10 +950,8 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW .andExpect(jsonPath("[1]key", equalTo(knownKey2))) .andExpect(jsonPath("[1]value", equalTo(knownValue2))); - final SoftwareModuleMetadata metaKey1 = softwareManagement - .findSoftwareModuleMetadata(new SwMetadataCompositeKey(sm, knownKey1)); - final SoftwareModuleMetadata metaKey2 = softwareManagement - .findSoftwareModuleMetadata(new SwMetadataCompositeKey(sm, knownKey2)); + final SoftwareModuleMetadata metaKey1 = softwareManagement.findSoftwareModuleMetadata(sm, knownKey1); + final SoftwareModuleMetadata metaKey2 = softwareManagement.findSoftwareModuleMetadata(sm, knownKey2); assertThat(metaKey1.getValue()).as("Metadata key is wrong").isEqualTo(knownValue1); assertThat(metaKey2.getValue()).as("Metadata key is wrong").isEqualTo(knownValue2); @@ -949,9 +965,10 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final String knownValue = "knownValue"; final String updateValue = "valueForUpdate"; - final SoftwareModule sm = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "name 1", "version 1", null, null)); - softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey, sm, knownValue)); + final SoftwareModule sm = softwareManagement.createSoftwareModule( + softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null)); + softwareManagement.createSoftwareModuleMetadata( + softwareManagement.generateSoftwareModuleMetadata(sm, knownKey, knownValue)); final JSONObject jsonObject = new JSONObject().put("key", knownKey).put("value", updateValue); @@ -961,8 +978,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("key", equalTo(knownKey))).andExpect(jsonPath("value", equalTo(updateValue))); - final SoftwareModuleMetadata assertDS = softwareManagement - .findSoftwareModuleMetadata(new SwMetadataCompositeKey(sm, knownKey)); + final SoftwareModuleMetadata assertDS = softwareManagement.findSoftwareModuleMetadata(sm, knownKey); assertThat(assertDS.getValue()).as("Metadata is wrong").isEqualTo(updateValue); } @@ -973,15 +989,16 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final String knownKey = "knownKey"; final String knownValue = "knownValue"; - final SoftwareModule sm = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "name 1", "version 1", null, null)); - softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey, sm, knownValue)); + final SoftwareModule sm = softwareManagement.createSoftwareModule( + softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null)); + softwareManagement.createSoftwareModuleMetadata( + softwareManagement.generateSoftwareModuleMetadata(sm, knownKey, knownValue)); mvc.perform(delete("/rest/v1/softwaremodules/{swId}/metadata/{key}", sm.getId(), knownKey)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); try { - softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(sm, knownKey)); + softwareManagement.findSoftwareModuleMetadata(sm, knownKey); fail("expected EntityNotFoundException but didn't throw"); } catch (final EntityNotFoundException e) { // ok as expected @@ -994,12 +1011,13 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final int totalMetadata = 10; final String knownKeyPrefix = "knownKey"; final String knownValuePrefix = "knownValue"; - final SoftwareModule sm = softwareManagement - .createSoftwareModule(new SoftwareModule(osType, "name 1", "version 1", null, null)); + final SoftwareModule sm = softwareManagement.createSoftwareModule( + softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null)); for (int index = 0; index < totalMetadata; index++) { - softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKeyPrefix + index, - softwareManagement.findSoftwareModuleById(sm.getId()), knownValuePrefix + index)); + softwareManagement.createSoftwareModuleMetadata(softwareManagement.generateSoftwareModuleMetadata( + softwareManagement.findSoftwareModuleById(sm.getId()), knownKeyPrefix + index, + knownValuePrefix + index)); } final String rsqlSearchValue1 = "value==knownValue1"; @@ -1014,7 +1032,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW char character = 'a'; for (int index = 0; index < amount; index++) { final String str = String.valueOf(character); - final SoftwareModule softwareModule = new SoftwareModule(osType, str, str, str, str); + final SoftwareModule softwareModule = softwareManagement.generateSoftwareModule(osType, str, str, str, str); softwareManagement.createSoftwareModule(softwareModule); character++; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java index b69558e59..85df4fc70 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java @@ -54,8 +54,8 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes GET requests.") public void getSoftwareModuleTypes() throws Exception { - SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test123", "TestName123", "Desc123", 5)); + SoftwareModuleType testType = softwareManagement.createSoftwareModuleType( + softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); testType.setDescription("Desc1234"); testType = softwareManagement.updateSoftwareModuleType(testType); @@ -97,7 +97,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes GET requests with sorting by MAXASSIGNMENTS field.") public void getSoftwareModuleTypesSortedByMaxAssignments() throws Exception { SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test123", "TestName123", "Desc123", 5)); + .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); testType.setDescription("Desc1234"); testType = softwareManagement.updateSoftwareModuleType(testType); @@ -138,9 +138,9 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT public void createSoftwareModuleTypes() throws JSONException, Exception { final List types = new ArrayList<>(); - types.add(new SoftwareModuleType("test1", "TestName1", "Desc1", 1)); - types.add(new SoftwareModuleType("test2", "TestName2", "Desc2", 2)); - types.add(new SoftwareModuleType("test3", "TestName3", "Desc3", 3)); + types.add(softwareManagement.generateSoftwareModuleType("test1", "TestName1", "Desc1", 1)); + types.add(softwareManagement.generateSoftwareModuleType("test2", "TestName2", "Desc2", 2)); + types.add(softwareManagement.generateSoftwareModuleType("test3", "TestName3", "Desc3", 3)); final MvcResult mvcResult = mvc .perform(post("/rest/v1/softwaremoduletypes/").content(JsonBuilder.softwareModuleTypes(types)) @@ -183,7 +183,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes/{ID} GET requests.") public void getSoftwareModuleType() throws Exception { SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test123", "TestName123", "Desc123", 5)); + .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); testType.setDescription("Desc1234"); testType = softwareManagement.updateSoftwareModuleType(testType); @@ -204,7 +204,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes/{ID} DELETE requests (hard delete scenario).") public void deleteSoftwareModuleTypeUnused() throws Exception { final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test123", "TestName123", "Desc123", 5)); + .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); assertThat(softwareManagement.countSoftwareModuleTypesAll()).isEqualTo(4); @@ -219,9 +219,9 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes/{ID} DELETE requests (soft delete scenario).") public void deleteSoftwareModuleTypeUsed() throws Exception { final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test123", "TestName123", "Desc123", 5)); - softwareManagement - .createSoftwareModule(new SoftwareModule(testType, "name", "version", "description", "vendor")); + .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + softwareManagement.createSoftwareModule( + softwareManagement.generateSoftwareModule(testType, "name", "version", "description", "vendor")); assertThat(softwareManagement.countSoftwareModuleTypesAll()).isEqualTo(4); assertThat(softwareModuleTypeRepository.count()).isEqualTo(4); @@ -237,7 +237,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes/{ID} PUT requests.") public void updateSoftwareModuleTypeOnlyDescriptionAndNameUntouched() throws Exception { final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test123", "TestName123", "Desc123", 5)); + .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); final String body = new JSONObject().put("id", testType.getId()).put("description", "foobardesc") .put("name", "nameShouldNotBeChanged").toString(); @@ -293,7 +293,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Description("Ensures that the server is behaving as expected on invalid requests (wrong media type, wrong ID etc.).") public void invalidRequestsOnSoftwaremoduleTypesResource() throws Exception { final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test123", "TestName123", "Desc123", 5)); + .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); final List types = new ArrayList<>(); types.add(testType); @@ -332,9 +332,9 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Description("Search erquest of software module types.") public void searchSoftwareModuleTypeRsql() throws Exception { final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test123", "TestName123", "Desc123", 5)); + .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); final SoftwareModuleType testType2 = softwareManagement - .createSoftwareModuleType(new SoftwareModuleType("test1234", "TestName1234", "Desc123", 5)); + .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test1234", "TestName1234", "Desc123", 5)); final String rsqlFindLikeDs1OrDs2 = "name==TestName123,name==TestName1234"; @@ -349,7 +349,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT char character = 'a'; for (int index = 0; index < amount; index++) { final String str = String.valueOf(character); - final SoftwareModule softwareModule = new SoftwareModule(osType, str, str, str, str); + final SoftwareModule softwareModule = softwareManagement.generateSoftwareModule(osType, str, str, str, str); softwareManagement.createSoftwareModule(softwareModule); character++; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index c8d33edc9..bc0f1cb0d 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -37,6 +37,9 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; @@ -44,7 +47,6 @@ import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.exception.MessageNotReadableException; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; @@ -56,7 +58,6 @@ import org.json.JSONObject; import org.junit.Ignore; import org.junit.Test; import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort.Direction; import org.springframework.http.HttpStatus; @@ -110,9 +111,8 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final String knownTargetId = "targetId"; final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); actions.get(0).setStatus(Status.FINISHED); - controllerManagament.addUpdateActionStatus( - new ActionStatus(actions.get(0), Status.FINISHED, System.currentTimeMillis(), "testmessage"), - actions.get(0)); + controllerManagament.addUpdateActionStatus(controllerManagament.generateActionStatus(actions.get(0), + Status.FINISHED, System.currentTimeMillis(), "testmessage")); final PageRequest pageRequest = new PageRequest(0, 1000, Direction.ASC, ActionFields.ID.getFieldName()); final ActionStatus status = deploymentManagement @@ -141,7 +141,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { public void securityTokenIsNotInResponseIfMissingPermission() throws Exception { final String knownControllerId = "knownControllerId"; - targetManagement.createTarget(new Target(knownControllerId)); + targetManagement.createTarget(targetManagement.generateTarget(knownControllerId)); mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}", knownControllerId)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("securityToken").doesNotExist()); @@ -154,7 +154,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { public void securityTokenIsInResponseWithCorrectPermission() throws Exception { final String knownControllerId = "knownControllerId"; - final Target createTarget = targetManagement.createTarget(new Target(knownControllerId)); + final Target createTarget = targetManagement.createTarget(targetManagement.generateTarget(knownControllerId)); mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}", knownControllerId)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("securityToken", equalTo(createTarget.getSecurityToken()))); @@ -185,8 +185,8 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { } private void createTarget(final String controllerId) { - final Target target = new Target(controllerId); - final TargetInfo targetInfo = new TargetInfo(target); + final JpaTarget target = (JpaTarget) targetManagement.generateTarget(controllerId); + final JpaTargetInfo targetInfo = new JpaTargetInfo(target); targetInfo.setAddress(IpUtil.createHttpUri("127.0.0.1").toString()); target.setTargetInfo(targetInfo); targetManagement.createTarget(target); @@ -199,7 +199,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { // prepare test final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); - final Target createTarget = targetManagement.createTarget(new Target("knownTargetId")); + final Target createTarget = targetManagement.createTarget(targetManagement.generateTarget("knownTargetId")); deploymentManagement.assignDistributionSet(dsA, Lists.newArrayList(createTarget)); @@ -306,7 +306,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Description("Ensures that deletion is executed if permitted.") public void deleteTargetReturnsOK() throws Exception { final String knownControllerId = "knownControllerIdDelete"; - targetManagement.createTarget(new Target(knownControllerId)); + targetManagement.createTarget(targetManagement.generateTarget(knownControllerId)); mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId)) .andExpect(status().isOk()); @@ -342,7 +342,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final String body = new JSONObject().put("description", knownNewDescription).toString(); // prepare - final Target t = new Target(knownControllerId); + final Target t = targetManagement.generateTarget(knownControllerId); t.setDescription("old description"); t.setName(knownNameNotModiy); targetManagement.createTarget(t); @@ -599,9 +599,10 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); // assign ds to target - deploymentManagement.assignDistributionSet(ds.getId(), knownControllerId); + final Long actionId = deploymentManagement.assignDistributionSet(ds.getId(), knownControllerId).getActions() + .get(0); // give feedback, so installedDS is in SNYC - feedbackToByInSync(knownControllerId, ds); + feedbackToByInSync(actionId); // test final SoftwareModule os = ds.findFirstModuleByType(osType); @@ -683,13 +684,13 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void createTargetsListReturnsSuccessful() throws Exception { - final Target test1 = new Target("id1"); + final Target test1 = targetManagement.generateTarget("id1"); test1.setDescription("testid1"); test1.setName("testname1"); - final Target test2 = new Target("id2"); + final Target test2 = targetManagement.generateTarget("id2"); test2.setDescription("testid2"); test2.setName("testname2"); - final Target test3 = new Target("id3"); + final Target test3 = targetManagement.generateTarget("id3"); test3.setName("testname3"); test3.setDescription("testid3"); @@ -812,7 +813,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void getActionWithEmptyResult() throws Exception { final String knownTargetId = "targetId"; - final Target target = new Target(knownTargetId); + final Target target = targetManagement.generateTarget(knownTargetId); targetManagement.createTarget(target); mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" @@ -1027,12 +1028,12 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final PageRequest pageRequest = new PageRequest(0, 100, Direction.ASC, ActionStatusFields.ID.getFieldName()); - Target target = new Target(knownTargetId); + Target target = targetManagement.generateTarget(knownTargetId); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); - final Iterator sets = TestDataUtil + final Iterator sets = TestDataUtil .generateDistributionSets(2, softwareManagement, distributionSetManagement).iterator(); final DistributionSet one = sets.next(); final DistributionSet two = sets.next(); @@ -1045,8 +1046,8 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { Thread.sleep(10); deploymentManagement.assignDistributionSet(two, updatedTargets); - // two updates, one cancelation - final List actions = actionRepository.findAll(pageRequest).getContent(); + // two updates, one cancellation + final List actions = deploymentManagement.findActionsByTarget(target); assertThat(actions).hasSize(2); return actions; @@ -1073,7 +1074,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void assignDistributionSetToTarget() throws Exception { - final Target target = targetManagement.createTarget(new Target("fsdfsd")); + final Target target = targetManagement.createTarget(targetManagement.generateTarget("fsdfsd")); final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); @@ -1087,7 +1088,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void assignDistributionSetToTargetWithActionTimeForcedAndTime() throws Exception { - final Target target = targetManagement.createTarget(new Target("fsdfsd")); + final Target target = targetManagement.createTarget(targetManagement.generateTarget("fsdfsd")); final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, distributionSetManagement); @@ -1116,7 +1117,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { .content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); - targetManagement.createTarget(new Target("fsdfsd")); + targetManagement.createTarget(targetManagement.generateTarget("fsdfsd")); mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") .content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON)) @@ -1206,7 +1207,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final Map knownControllerAttrs = new HashMap<>(); knownControllerAttrs.put("a", "1"); knownControllerAttrs.put("b", "2"); - final Target target = new Target(knownTargetId); + final Target target = targetManagement.generateTarget(knownTargetId); targetManagement.createTarget(target); controllerManagament.updateControllerAttributes(knownTargetId, knownControllerAttrs); @@ -1220,7 +1221,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { public void getControllerEmptyAttributesReturnsNoContent() throws Exception { // create target with attributes final String knownTargetId = "targetIdWithAttributes"; - final Target target = new Target(knownTargetId); + final Target target = targetManagement.generateTarget(knownTargetId); targetManagement.createTarget(target); // test query target over rest resource @@ -1254,7 +1255,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { } private void createSingleTarget(final String controllerId, final String name) { - final Target target = new Target(controllerId); + final Target target = targetManagement.generateTarget(controllerId); target.setName(name); target.setDescription(TARGET_DESCRIPTION_TEST); targetManagement.createTarget(target); @@ -1271,7 +1272,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { char character = 'a'; for (int index = 0; index < amount; index++) { final String str = String.valueOf(character); - final Target target = new Target(str); + final Target target = targetManagement.generateTarget(str); target.setName(str); target.setDescription(str); final Target savedTarget = targetManagement.createTarget(target); @@ -1283,20 +1284,12 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { /** * helper method to give feedback mark an target IN_SNCY * - * @param controllerId - * the controller id to give feedback to - * @param savedSet - * the distribution set - * @throws Exception - * @throws JSONException */ - private void feedbackToByInSync(final String controllerId, final DistributionSet savedSet) - throws Exception, JSONException { - final Pageable pageReq = new PageRequest(0, 100); - final Action action = actionRepository.findByDistributionSet(pageReq, savedSet).getContent().get(0); + private void feedbackToByInSync(final Long actionId) { + final Action action = deploymentManagement.findAction(actionId); - final ActionStatus actionStatus = new ActionStatus(action, Status.FINISHED, 0l); - controllerManagement.addUpdateActionStatus(actionStatus, action); + final ActionStatus actionStatus = controllerManagement.generateActionStatus(action, Status.FINISHED, 0L); + controllerManagement.addUpdateActionStatus(actionStatus); } /** diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java index 15d22c703..dc5d5122d 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java @@ -49,7 +49,7 @@ public class SMRessourceMisingMongoDbConnectionTest extends AbstractIntegrationT assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); assertThat(artifactRepository.findAll()).hasSize(0); - SoftwareModule sm = new SoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", + SoftwareModule sm = softwareManagement.generateSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); assertThat(artifactRepository.findAll()).hasSize(0); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index f58af4ca6..42843b495 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -171,8 +171,8 @@ public interface DeploymentManagement { /** * counts all actions associated to a specific target. * - * @param spec - * the specification to filter the count result + * @param rsqlParam + * rsql query string * @param target * the target associated to the actions to count * @return the count value of found actions associated to the target @@ -271,8 +271,8 @@ public interface DeploymentManagement { * Retrieves all {@link Action}s assigned to a specific {@link Target} and a * given specification. * - * @param specifiction - * the specification to narrow down the search + * @param rsqlParam + * rsql query string * @param target * the target which must be assigned to the actions * @param pageable @@ -280,7 +280,6 @@ public interface DeploymentManagement { * @return a slice of actions assigned to the specific target and the * specification */ - // TODO fix this @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Slice findActionsByTarget(@NotNull String rsqlParam, @NotNull Target target, @NotNull Pageable pageable); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java index 1393504ab..f21763883 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java @@ -59,10 +59,9 @@ public class DistributionSetAssignmentResult extends AssignmentResult { return actions; } - @SuppressWarnings("unchecked") @Override public List getAssignedEntity() { - return (List) targetManagement.findTargetByControllerID(assignedTargets); + return targetManagement.findTargetByControllerID(assignedTargets); } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index 9b4dcb8c7..8316508d9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -86,6 +86,9 @@ public interface DistributionSetManagement { /** * Count all {@link DistributionSet}s in the repository that are not marked * as deleted. + * + * @param type + * to look for * * @return number of {@link DistributionSet}s */ @@ -289,8 +292,8 @@ public interface DistributionSetManagement { * * @param distributionSetId * the distribution set id to retrieve the meta data from - * @param spec - * the specification to filter the result + * @param rsqlParam + * rsql query string * @param pageable * the page request to page the result * @return a paged result of all meta data entries for a given distribution @@ -343,8 +346,8 @@ public interface DistributionSetManagement { /** * finds all {@link DistributionSet}s. * - * @param spec - * the specification to add for the search query. + * @param rsqlParam + * rsql query string * @param pageReq * the pagination parameter * @param deleted @@ -432,8 +435,8 @@ public interface DistributionSetManagement { /** * Generic predicate based query for {@link DistributionSetType}. * - * @param spec - * of the search + * @param rsqlParam + * rsql query string * @param pageable * parameter for paging * diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java index 786308e70..551e34dd9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java @@ -130,8 +130,8 @@ public interface TagManagement { /** * Retrieves all DistributionSet tags based on the given specification. * - * @param spec - * the specification for the query + * @param rsqlParam + * rsql query string * @param pageable * pagination parameter * @return the found {@link DistributionSetTag}s, never {@code null} @@ -159,8 +159,8 @@ public interface TagManagement { /** * Retrieves all target tags based on the given specification. * - * @param spec - * the specification for the query + * @param rsqlParam + * rsql query string * @param pageable * pagination parameter * @return the found {@link Target}s, never {@code null} @@ -245,12 +245,48 @@ public interface TagManagement { */ DistributionSetTag generateDistributionSetTag(); + /** + * Generates a {@link TargetTag} without persisting it. + * + * @param name + * of the tag + * @param description + * of the tag + * @param colour + * of the tag + * @return {@link TargetTag} object + */ TargetTag generateTargetTag(String name, String description, String colour); + /** + * Generates a {@link TargetTag} without persisting it. + * + * @param name + * of the tag + * @return {@link TargetTag} object + */ TargetTag generateTargetTag(String name); + /** + * Generates a {@link DistributionSetTag} without persisting it. + * + * @param name + * of the tag + * @param description + * of the tag + * @param colour + * of the tag + * @return {@link DistributionSetTag} object + */ DistributionSetTag generateDistributionSetTag(String name, String description, String colour); + /** + * Generates a {@link DistributionSetTag} without persisting it. + * + * @param name + * of the tag + * @return {@link DistributionSetTag} object + */ DistributionSetTag generateDistributionSetTag(String name); -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index 09283f67c..af7f6371d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -395,7 +395,7 @@ public class JpaControllerManagement implements ControllerManagement { // retrieves after the other we don't want to store to protect to // overflood action status in // case controller retrieves a action multiple times. - if (resultList.isEmpty() || resultList.get(0)[1] != Status.RETRIEVED) { + if (resultList.isEmpty() || !Status.RETRIEVED.equals(resultList.get(0)[1])) { // document that the status has been retrieved actionStatusRepository .save(new JpaActionStatus(action, Status.RETRIEVED, System.currentTimeMillis(), message)); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java index c9781a2a4..ec5f3e843 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java @@ -81,7 +81,7 @@ public class JpaTenantConfigurationManagement implements EnvironmentAware, Tenan final TenantConfigurationKey configurationKey, final Class propertyType, final TenantConfiguration tenantConfiguration) { if (tenantConfiguration != null) { - return TenantConfigurationValue. builder().isGlobal(false).createdBy(tenantConfiguration.getCreatedBy()) + return TenantConfigurationValue. builder().global(false).createdBy(tenantConfiguration.getCreatedBy()) .createdAt(tenantConfiguration.getCreatedAt()) .lastModifiedAt(tenantConfiguration.getLastModifiedAt()) .lastModifiedBy(tenantConfiguration.getLastModifiedBy()) @@ -89,7 +89,7 @@ public class JpaTenantConfigurationManagement implements EnvironmentAware, Tenan } else if (configurationKey.getDefaultKeyName() != null) { - return TenantConfigurationValue. builder().isGlobal(true).createdBy(null).createdAt(null) + return TenantConfigurationValue. builder().global(true).createdBy(null).createdAt(null) .lastModifiedAt(null).lastModifiedBy(null) .value(getGlobalConfigurationValue(configurationKey, propertyType)).build(); } @@ -149,8 +149,7 @@ public class JpaTenantConfigurationManagement implements EnvironmentAware, Tenan final Class clazzT = (Class) value.getClass(); - return TenantConfigurationValue. builder().isGlobal(false) - .createdBy(updatedTenantConfiguration.getCreatedBy()) + return TenantConfigurationValue. builder().global(false).createdBy(updatedTenantConfiguration.getCreatedBy()) .createdAt(updatedTenantConfiguration.getCreatedAt()) .lastModifiedAt(updatedTenantConfiguration.getLastModifiedAt()) .lastModifiedBy(updatedTenantConfiguration.getLastModifiedBy()) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java index c4b55fe03..1663fb620 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java @@ -59,8 +59,11 @@ public class JpaDistributionSetTag extends AbstractJpaTag implements Distributio super(name, description, colour); } + /** + * Default constructor for JPA. + */ public JpaDistributionSetTag() { - super(); + // Default constructor for JPA. } @Override diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java index 38dadc1c4..40622134f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java @@ -158,7 +158,6 @@ public class JpaRollout extends AbstractJpaNamedEntity implements Rollout { this.totalTargets = totalTargets; } - @Override public int getRolloutGroupsTotal() { return rolloutGroupsTotal; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java index a943b08a4..bb99eba3e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java @@ -32,10 +32,6 @@ public class JpaSoftwareModuleType extends AbstractJpaNamedEntity implements Sof @Column(name = "type_key", nullable = false, length = 64) private String key; - public void setMaxAssignments(final int maxAssignments) { - this.maxAssignments = maxAssignments; - } - @Column(name = "max_ds_assignments", nullable = false) private int maxAssignments; @@ -87,10 +83,15 @@ public class JpaSoftwareModuleType extends AbstractJpaNamedEntity implements Sof } /** - * Default Constructor. + * Default Constructor for JPA. */ public JpaSoftwareModuleType() { - super(); + // Default Constructor for JPA. + } + + @Override + public void setMaxAssignments(final int maxAssignments) { + this.maxAssignments = maxAssignments; } @Override @@ -108,7 +109,6 @@ public class JpaSoftwareModuleType extends AbstractJpaNamedEntity implements Sof return deleted; } - @Override public void setDeleted(final boolean deleted) { this.deleted = deleted; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java index 55aaec0fe..5ebb8e2bf 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java @@ -37,6 +37,14 @@ public class JpaTargetFilterQuery extends AbstractJpaTenantAwareBaseEntity imple // Default constructor for JPA. } + /** + * Public constructor. + * + * @param name + * of the {@link TargetFilterQuery}. + * @param query + * of the {@link TargetFilterQuery}. + */ public JpaTargetFilterQuery(final String name, final String query) { this.name = name; this.query = query; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java index 800fcc15e..96989f14a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java @@ -60,7 +60,7 @@ public class JpaTargetTag extends AbstractJpaTag implements TargetTag { } public JpaTargetTag() { - super(); + // Default constructor for JPA. } @Override diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetFilterQuerySpecification.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetFilterQuerySpecification.java index cb3b775ac..4b27c7fc7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetFilterQuerySpecification.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetFilterQuerySpecification.java @@ -18,11 +18,19 @@ import org.springframework.data.jpa.domain.Specification; * Spring Data JPQL Specifications. * */ -public class TargetFilterQuerySpecification { +public final class TargetFilterQuerySpecification { private TargetFilterQuerySpecification() { // utility class } + /** + * {@link Specification} for retrieving {@link JpaTargetFilterQuery}s based + * on is {@link JpaTargetFilterQuery#getName()}. + * + * @param searchText + * of the filter + * @return the {@link JpaTargetFilterQuery} {@link Specification} + */ public static Specification likeName(final String searchText) { return (targetFilterQueryRoot, query, cb) -> { final String searchTextToLower = searchText.toLowerCase(); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java index 74f921642..1bd3f8c35 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java @@ -189,12 +189,12 @@ public interface Action extends TenantAwareBaseEntity { CANCELING, /** - * Action has been presented to the target. + * Action has been send to the target. */ RETRIEVED, /** - * Action needs download by this target which has now started. + * Action requests download by this target which has now started. */ DOWNLOAD, diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/PollStatus.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/PollStatus.java new file mode 100644 index 000000000..876020dbd --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/PollStatus.java @@ -0,0 +1,68 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.model; + +import java.time.LocalDateTime; + +/** + * The poll time object which holds all the necessary information around the + * target poll time, e.g. the last poll time, the next poll time and the overdue + * poll time. + * + */ +public class PollStatus { + private final LocalDateTime lastPollDate; + private final LocalDateTime nextPollDate; + private final LocalDateTime overdueDate; + private final LocalDateTime currentDate; + + public PollStatus(final LocalDateTime lastPollDate, final LocalDateTime nextPollDate, + final LocalDateTime overdueDate, final LocalDateTime currentDate) { + this.lastPollDate = lastPollDate; + this.nextPollDate = nextPollDate; + this.overdueDate = overdueDate; + this.currentDate = currentDate; + } + + /** + * calculates if the target poll time is overdue and the target has not been + * polled in the configured poll time interval. + * + * @return {@code true} if the current time is after the poll time overdue + * date otherwise {@code false}. + */ + public boolean isOverdue() { + return currentDate.isAfter(overdueDate); + } + + /** + * @return the lastPollDate + */ + public LocalDateTime getLastPollDate() { + return lastPollDate; + } + + public LocalDateTime getNextPollDate() { + return nextPollDate; + } + + public LocalDateTime getOverdueDate() { + return overdueDate; + } + + public LocalDateTime getCurrentDate() { + return currentDate; + } + + @Override + public String toString() { + return "PollTime [lastPollDate=" + lastPollDate + ", nextPollDate=" + nextPollDate + ", overdueDate=" + + overdueDate + ", currentDate=" + currentDate + "]"; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java index f87b1067f..5094c1af8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java @@ -9,8 +9,10 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; +import java.util.concurrent.TimeUnit; import org.eclipse.hawkbit.repository.model.Action.ActionType; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; /** * Software update operations in large scale IoT scenarios with hundred of @@ -57,20 +59,46 @@ public interface Rollout extends NamedEntity { */ RolloutStatus getStatus(); + /** + * @return {@link ActionType} of the rollout. + */ ActionType getActionType(); + /** + * @param actionType + * of the rollout. + */ void setActionType(ActionType actionType); + /** + * @return time in {@link TimeUnit#MILLISECONDS} after which + * {@link #isForced()} switches to true in case of + * {@link ActionType#TIMEFORCED}. + */ long getForcedTime(); + /** + * @param forcedTime + * in {@link TimeUnit#MILLISECONDS} after which + * {@link #isForced()} switches to true in case of + * {@link ActionType#TIMEFORCED}. + */ void setForcedTime(long forcedTime); + /** + * @return number of {@link Target}s in this rollout. + */ long getTotalTargets(); - int getRolloutGroupsTotal(); - + /** + * @return number of {@link RolloutGroup}s. + */ int getRolloutGroupsCreated(); + /** + * @return all states with the respective target count in that + * {@link Status}. + */ TotalTargetCountStatus getTotalTargetCountStatus(); /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java index cd65c4d2f..3f383d605 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java @@ -182,4 +182,4 @@ public interface RolloutGroup extends NamedEntity { return beanName; } } -} \ No newline at end of file +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditionBuilder.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditionBuilder.java new file mode 100644 index 000000000..7ef8c8a19 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditionBuilder.java @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.model; + +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorAction; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; + +/** + * Builder to build easily the {@link RolloutGroupConditions}. + * + */ +public class RolloutGroupConditionBuilder { + private final RolloutGroupConditions conditions = new RolloutGroupConditions(); + + /** + * @return completed {@link RolloutGroupConditions}. + */ + public RolloutGroupConditions build() { + return conditions; + } + + /** + * Sets the finish condition and expression on the builder. + * + * @param condition + * the finish condition + * @param expression + * the finish expression + * @return the builder itself + */ + public RolloutGroupConditionBuilder successCondition(final RolloutGroupSuccessCondition condition, + final String expression) { + conditions.setSuccessCondition(condition); + conditions.setSuccessConditionExp(expression); + return this; + } + + /** + * Sets the success action and expression on the builder. + * + * @param action + * the success action + * @param expression + * the error expression + * @return the builder itself + */ + public RolloutGroupConditionBuilder successAction(final RolloutGroupSuccessAction action, final String expression) { + conditions.setSuccessAction(action); + conditions.setSuccessActionExp(expression); + return this; + } + + /** + * Sets the error condition and expression on the builder. + * + * @param condition + * the error condition + * @param expression + * the error expression + * @return the builder itself + */ + public RolloutGroupConditionBuilder errorCondition(final RolloutGroupErrorCondition condition, + final String expression) { + conditions.setErrorCondition(condition); + conditions.setErrorConditionExp(expression); + return this; + } + + /** + * Sets the error action and expression on the builder. + * + * @param action + * the error action + * @param expression + * the error expression + * @return the builder itself + */ + public RolloutGroupConditionBuilder errorAction(final RolloutGroupErrorAction action, final String expression) { + conditions.setErrorAction(action); + conditions.setErrorActionExp(expression); + return this; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditions.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditions.java new file mode 100644 index 000000000..618e93c4e --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditions.java @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.model; + +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorAction; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; + +/** + * Object which holds all {@link RolloutGroup} conditions together which can + * easily built. + */ +public class RolloutGroupConditions { + private RolloutGroupSuccessCondition successCondition; + private String successConditionExp; + private RolloutGroupSuccessAction successAction; + private String successActionExp; + private RolloutGroupErrorCondition errorCondition; + private String errorConditionExp; + private RolloutGroupErrorAction errorAction; + private String errorActionExp; + + public RolloutGroupSuccessCondition getSuccessCondition() { + return successCondition; + } + + public void setSuccessCondition(final RolloutGroupSuccessCondition finishCondition) { + successCondition = finishCondition; + } + + public String getSuccessConditionExp() { + return successConditionExp; + } + + public void setSuccessConditionExp(final String finishConditionExp) { + successConditionExp = finishConditionExp; + } + + public RolloutGroupSuccessAction getSuccessAction() { + return successAction; + } + + public void setSuccessAction(final RolloutGroupSuccessAction successAction) { + this.successAction = successAction; + } + + public String getSuccessActionExp() { + return successActionExp; + } + + public void setSuccessActionExp(final String successActionExp) { + this.successActionExp = successActionExp; + } + + public RolloutGroupErrorCondition getErrorCondition() { + return errorCondition; + } + + public void setErrorCondition(final RolloutGroupErrorCondition errorCondition) { + this.errorCondition = errorCondition; + } + + public String getErrorConditionExp() { + return errorConditionExp; + } + + public void setErrorConditionExp(final String errorConditionExp) { + this.errorConditionExp = errorConditionExp; + } + + public RolloutGroupErrorAction getErrorAction() { + return errorAction; + } + + public void setErrorAction(final RolloutGroupErrorAction errorAction) { + this.errorAction = errorAction; + } + + public String getErrorActionExp() { + return errorActionExp; + } + + public void setErrorActionExp(final String errorActionExp) { + this.errorActionExp = errorActionExp; + } +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java index 24417d3f8..313525199 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java @@ -8,22 +8,53 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * {@link SoftwareModuleType} is an abstract definition used in + * {@link DistributionSetType}s and includes additional {@link SoftwareModule} + * specific information. + * + */ public interface SoftwareModuleType extends NamedEntity { + /** + * @return business key of this {@link SoftwareModuleType}. + */ String getKey(); + /** + * @param key + * of this {@link SoftwareModuleType}. + */ void setKey(String key); + /** + * @return maximum assignments of an {@link SoftwareModule} of this type to + * a {@link DistributionSet}. + */ int getMaxAssignments(); + /** + * @param maxAssignments + * of an {@link SoftwareModule} of this type to a + * {@link DistributionSet}. + */ void setMaxAssignments(int maxAssignments); + /** + * @return true if the type is deleted and only kept for + * history purposes. + */ boolean isDeleted(); - void setDeleted(boolean deleted); - + /** + * @return get color code to by used in management UI views. + */ String getColour(); - void setColour(String colour); + /** + * @param colour + * code to by used in management UI views. + */ + void setColour(final String colour); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetIdName.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetIdName.java index 26a74e9bb..444874581 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetIdName.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetIdName.java @@ -60,6 +60,8 @@ public class TargetIdName implements Serializable { } @Override + // Exception squid:S864 - generated code + @SuppressWarnings("squid:S864") public int hashCode() { final int prime = 31; int result = 1; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfigurationValue.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfigurationValue.java index 37e00e247..a204ef506 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfigurationValue.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfigurationValue.java @@ -14,14 +14,14 @@ package org.eclipse.hawkbit.repository.model; * @param * type of the configuration value */ -public class TenantConfigurationValue { +public final class TenantConfigurationValue { private T value; private Long lastModifiedAt; private String lastModifiedBy; private Long createdAt; private String createdBy; - private boolean isGlobal = true; + private boolean global = true; private TenantConfigurationValue() { } @@ -41,7 +41,7 @@ public class TenantConfigurationValue { * @return true, if is global */ public boolean isGlobal() { - return isGlobal; + return global; } /** @@ -126,13 +126,13 @@ public class TenantConfigurationValue { /** * set the is global attribute. * - * @param isGlobal + * @param global * true when there is no tenant specific value, false * otherwise * @return the tenant configuration value builder */ - public TenantConfigurationValueBuilder isGlobal(final boolean isGlobal) { - this.configuration.isGlobal = isGlobal; + public TenantConfigurationValueBuilder global(final boolean global) { + this.configuration.global = global; return this; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountStatus.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountStatus.java index 13c41baf3..bcb0df3f4 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountStatus.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountStatus.java @@ -15,7 +15,8 @@ import java.util.Map; /** * - * Store all states with the target count of a rollout or rolloutgroup. + * Store target count of a {@link Rollout} or {@link RolloutGroup} for every + * {@link Status}. * */ public class TotalTargetCountStatus { @@ -24,7 +25,35 @@ public class TotalTargetCountStatus { * Status of the total target counts. */ public enum Status { - SCHEDULED, RUNNING, ERROR, FINISHED, CANCELLED, NOTSTARTED + /** + * Action is scheduled. + */ + SCHEDULED, + + /** + * Action is still running. + */ + RUNNING, + + /** + * Action failed. + */ + ERROR, + + /** + * Action is completed. + */ + FINISHED, + + /** + * Action is canceled. + */ + CANCELLED, + + /** + * Action is not started yet. + */ + NOTSTARTED } private final Map statusTotalCountMap = new EnumMap<>(Status.class); @@ -35,7 +64,7 @@ public class TotalTargetCountStatus { * * @param targetCountActionStatus * the action state map - * @param totalTargets + * @param totalTargetCount * the total target count */ public TotalTargetCountStatus(final List targetCountActionStatus, @@ -81,8 +110,7 @@ public class TotalTargetCountStatus { * @param statusTotalCountMap * the map * @param rolloutStatusCountItems - * all target statut with total count - * @return some state is populated nothing is happend + * all target {@link Status} with total count */ private final void mapActionStatusToTotalTargetCountStatus( final List targetCountActionStatus) { @@ -93,33 +121,40 @@ public class TotalTargetCountStatus { statusTotalCountMap.put(Status.RUNNING, 0L); Long notStartedTargetCount = totalTargetCount; for (final TotalTargetCountActionStatus item : targetCountActionStatus) { - switch (item.getStatus()) { - case SCHEDULED: - statusTotalCountMap.put(Status.SCHEDULED, item.getCount()); - break; - case ERROR: - statusTotalCountMap.put(Status.ERROR, item.getCount()); - break; - case FINISHED: - statusTotalCountMap.put(Status.FINISHED, item.getCount()); - break; - case RETRIEVED: - case RUNNING: - case WARNING: - case DOWNLOAD: - case CANCELING: - final Long runningItemsCount = statusTotalCountMap.get(Status.RUNNING) + item.getCount(); - statusTotalCountMap.put(Status.RUNNING, runningItemsCount); - break; - case CANCELED: - statusTotalCountMap.put(Status.CANCELLED, item.getCount()); - break; - default: - throw new IllegalArgumentException("State " + item.getStatus() + "is not valid"); - } + convertStatus(item); notStartedTargetCount -= item.getCount(); } statusTotalCountMap.put(TotalTargetCountStatus.Status.NOTSTARTED, notStartedTargetCount); } + // Exception squid:MethodCyclomaticComplexity - simple state conversion, not + // really complex. + @SuppressWarnings("squid:MethodCyclomaticComplexity") + private void convertStatus(final TotalTargetCountActionStatus item) { + switch (item.getStatus()) { + case SCHEDULED: + statusTotalCountMap.put(Status.SCHEDULED, item.getCount()); + break; + case ERROR: + statusTotalCountMap.put(Status.ERROR, item.getCount()); + break; + case FINISHED: + statusTotalCountMap.put(Status.FINISHED, item.getCount()); + break; + case RETRIEVED: + case RUNNING: + case WARNING: + case DOWNLOAD: + case CANCELING: + final Long runningItemsCount = statusTotalCountMap.get(Status.RUNNING) + item.getCount(); + statusTotalCountMap.put(Status.RUNNING, runningItemsCount); + break; + case CANCELED: + statusTotalCountMap.put(Status.CANCELLED, item.getCount()); + break; + default: + throw new IllegalArgumentException("State " + item.getStatus() + "is not valid"); + } + } + } From 57153b12441e11a4aac35a5a0fb7f84d5d94521d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 24 May 2016 10:45:07 +0200 Subject: [PATCH 138/371] Remove commons.lang 2.3 Signed-off-by: SirWayne --- pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pom.xml b/pom.xml index 851fa44d8..98227857c 100644 --- a/pom.xml +++ b/pom.xml @@ -105,7 +105,6 @@ 1.1 1.1.1 3.4 - 2.3 20141113 2.0.0 @@ -557,11 +556,6 @@ commons-lang3 ${commons-lang3.version} - - commons-lang - commons-lang - ${commons.lang} - org.springframework.boot spring-boot-starter-test From ee6566081b1e0db6aa7eb1a957f47d17eadfc252 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 24 May 2016 10:48:17 +0200 Subject: [PATCH 139/371] adding or fix javadoc Signed-off-by: Michael Hirsch --- .../hawkbit/feign/core/client/FeignClientConfiguration.java | 4 ++-- .../client/resource/MgmtDownloadArtifactClientResource.java | 3 ++- .../client/resource/MgmtSoftwareModuleTypeClientResource.java | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java index 2723a251e..1512b7f9e 100644 --- a/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java +++ b/examples/hawkbit-example-core-feign-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java @@ -18,8 +18,8 @@ import feign.Contract; import feign.Feign; /** - * - * + * Spring annotated java configuration class which defines necessary beans for + * configure the feign-client. */ @Configuration @ConditionalOnClass(Feign.class) 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 f32e448ac..d25a609b2 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 @@ -13,7 +13,8 @@ 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) public interface MgmtDownloadArtifactClientResource extends MgmtDownloadArtifactRestApi { 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 766ec215f..1e9462c47 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 @@ -13,7 +13,7 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; import org.springframework.cloud.netflix.feign.FeignClient; /** - * Client binding for the oftwareModuleType resource of the management API. + * Client binding for the SoftwareModuleType resource of the management API. */ @FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) public interface MgmtSoftwareModuleTypeClientResource extends MgmtSoftwareModuleTypeRestApi { From 693c6783772880df43041e89e9da59dbbce11de7 Mon Sep 17 00:00:00 2001 From: Asharani Date: Tue, 24 May 2016 14:38:06 +0530 Subject: [PATCH 140/371] Do not log the exception trace when upload fails by user abort action Signed-off-by: Asharani --- .../ui/artifacts/upload/UploadHandler.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index dc56ff325..28b6c5243 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -250,7 +250,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene // uploadStarted method if (!uploadInterrupted) { if (aborted) { - LOG.error("User aborted file upload"); + LOG.info("User aborted file upload for file : {}", fileName); failureReason = i18n.get("message.uploadedfile.aborted"); interruptFileUpload(); return; @@ -275,7 +275,7 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene @Override public void onProgress(final StreamingProgressEvent event) { if (aborted) { - LOG.error("User aborted the upload"); + LOG.info("User aborted the upload for file : {}", event.getFileName()); failureReason = i18n.get("message.uploadedfile.aborted"); interruptFileStreaming(); return; @@ -300,14 +300,16 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public void streamingFailed(final StreamingErrorEvent event) { - LOG.info("Streaming failed for file :{}", event.getFileName()); if (failureReason == null) { failureReason = event.getException().getMessage(); } eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STREAMING_FAILED, new UploadFileStatus(fileName, failureReason, selectedSw))); - LOG.info("Streaming failed due to :{}", event.getException()); + if (!aborted) { + LOG.info("Streaming failed for file :{}", event.getFileName()); + LOG.info("Streaming failed due to :{}", event.getException()); + } } /** @@ -317,13 +319,15 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public void uploadFailed(final FailedEvent event) { - LOG.info("Upload failed for file :{}", event.getFilename()); if (failureReason == null) { failureReason = event.getReason().getMessage(); } eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( fileName, failureReason, selectedSwForUpload))); - LOG.info("Upload failed for file :{}", event.getReason()); + if (!aborted) { + LOG.info("Upload failed for file :{}", event.getFilename()); + LOG.info("Upload failed for file :{}", event.getReason()); + } } /** From dc74ec8889564d31ea7052734d99bad676742ac4 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 24 May 2016 15:08:07 +0200 Subject: [PATCH 141/371] Some rework for the pull request Signed-off-by: SirWayne --- .../hawkbit-example-ddi-feign-client/pom.xml | 1 - .../rest/resource/DdiDeploymentBaseTest.java | 57 ++++++++----------- .../PropertyBasedArtifactUrlHandlerTest.java | 9 +-- .../mgmt/rest/api/MgmtSystemRestApi.java | 2 +- .../mgmt/rest/api/MgmtTargetRestApi.java | 2 +- .../rest/resource/MgmtSystemResource.java | 2 +- 6 files changed, 33 insertions(+), 40 deletions(-) diff --git a/examples/hawkbit-example-ddi-feign-client/pom.xml b/examples/hawkbit-example-ddi-feign-client/pom.xml index 8256b5b30..5388544db 100644 --- a/examples/hawkbit-example-ddi-feign-client/pom.xml +++ b/examples/hawkbit-example-ddi-feign-client/pom.xml @@ -55,7 +55,6 @@ com.netflix.feign feign-core - com.netflix.feign diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index df75bc6b3..eb3ed8844 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -57,6 +57,9 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Deployment Action Resource") public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoDB { + private static final String HTTP_LOCALHOST = "http://localhost:8080/"; + private static final String HTTPS_LOCALHOST = "https://localhost:8080/"; + @Test() @Description("Ensures that artifacts are not found, when softare module does not exists.") public void artifactsNotFound() throws Exception { @@ -171,24 +174,22 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0].hashes.sha1", equalTo(artifact.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) @@ -201,23 +202,21 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1].hashes.sha1", equalTo(artifactSignature.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==bApp)][0].version", @@ -316,12 +315,12 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0].hashes.sha1", equalTo(artifact.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) @@ -334,23 +333,21 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1].hashes.sha1", equalTo(artifactSignature.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==bApp)][0].version", @@ -446,23 +443,21 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD equalTo(artifact.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.download-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0]._links.md5sum-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1].size", equalTo(5 * 1024))) @@ -474,24 +469,22 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1].hashes.sha1", equalTo(artifactSignature.getSha1Hash()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum.href", - equalTo("https://localhost:8080/" + tenantAware.getCurrentTenant() + equalTo(HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.download-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1]._links.md5sum-http.href", - equalTo("http://localhost:8080/" + tenantAware.getCurrentTenant() - + "/controller/v1/4712/softwaremodules/" + equalTo(HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index 27021d265..f9a2ea316 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -39,6 +39,8 @@ import ru.yandex.qatools.allure.annotations.Stories; AmqpTestConfiguration.class }) public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTestWithMongoDB { + private static final String HTTPS_LOCALHOST = "https://localhost:8080/"; + private static final String HTTP_LOCALHOST = "http://localhost:8080/"; @Autowired private ArtifactUrlHandler urlHandlerProperties; @Autowired @@ -69,9 +71,8 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, UrlProtocol.HTTP); assertEquals("http is build incorrect", - "http://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId - + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" - + localArtifact.getFilename(), + HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + "/softwaremodules/" + + localArtifact.getSoftwareModule().getId() + "/artifacts/" + localArtifact.getFilename(), url); } @@ -81,7 +82,7 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, UrlProtocol.HTTPS); assertEquals("https is build incorrect", - "https://localhost:8080/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" + localArtifact.getFilename(), url); 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 92c732c96..d120759b2 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 @@ -85,4 +85,4 @@ public interface MgmtSystemRestApi { @PathVariable("keyName") final String keyName, @RequestBody final MgmtSystemTenantConfigurationValueRequest configurationValueRest); -} \ No newline at end of file +} 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 d44d473b1..bf4e169a0 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 @@ -260,4 +260,4 @@ public interface MgmtTargetRestApi { MediaType.APPLICATION_JSON_VALUE }) ResponseEntity getInstalledDistributionSet(@PathVariable("targetId") final String targetId); -} \ No newline at end of file +} diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemResource.java index 5aac17318..24a3f275e 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemResource.java @@ -122,4 +122,4 @@ public class MgmtSystemResource implements MgmtSystemRestApi { return new ResponseEntity<>(MgmtSystemMapper.toResponse(keyName, updatedValue), HttpStatus.OK); } -} \ No newline at end of file +} From 96baddeaeee78549bcc655f9d583f7eaebaec1a2 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 24 May 2016 17:21:51 +0200 Subject: [PATCH 142/371] optimize commonDialogWindow. Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 66 ++---- .../CreateUpdateSoftwareTypeLayout.java | 47 +---- .../ui/colorPicker/ColorPickerHelper.java | 3 + .../ui/colorPicker/ColorPickerLayout.java | 1 - .../hawkbit/ui/common/CommonDialogWindow.java | 6 - .../ui/decorators/SPUITextAreaDecorator.java | 2 +- .../CreateUpdateDistSetTypeLayout.java | 48 +---- .../ui/layouts/CreateUpdateTagLayout.java | 20 +- .../ui/layouts/CreateUpdateTypeLayout.java | 78 ++++---- .../DistributionAddUpdateWindowLayout.java | 49 ++--- ...eateUpdateDistributionTagLayoutWindow.java | 9 +- .../footer/ActionTypeOptionGroupLayout.java | 5 +- .../rollout/AddUpdateRolloutWindowLayout.java | 188 +++++++----------- .../hawkbit/customstyles/popup-window.scss | 2 +- .../src/main/resources/messages.properties | 2 +- .../src/main/resources/messages_de.properties | 2 +- .../src/main/resources/messages_en.properties | 2 +- 17 files changed, 181 insertions(+), 349 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index be9756478..7cf95e4b2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -15,7 +15,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; -import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -32,10 +31,9 @@ import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Alignment; import com.vaadin.ui.ComboBox; import com.vaadin.ui.CustomComponent; -import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.FormLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; @@ -70,7 +68,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se @Autowired private transient UiProperties uiProperties; - private Label madatoryLabel; + private Label mandatoryLabel; private TextField nameTextField; @@ -78,10 +76,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se private TextField vendorTextField; - // private Button saveSoftware; - // - // private Button closeWindow; - private ComboBox typeComboBox; private TextArea descTextArea; @@ -103,6 +97,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se * module. */ public CommonDialogWindow createAddSoftwareModuleWindow() { + editSwModule = Boolean.FALSE; createRequiredComponents(); createWindow(); @@ -118,6 +113,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se * module. */ public Window createUpdateSoftwareModuleWindow(final Long baseSwModuleId) { + editSwModule = Boolean.TRUE; this.baseSwModuleId = baseSwModuleId; createRequiredComponents(); @@ -155,9 +151,9 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se addVendorTextChangeListener(); /* Label for mandatory symbol */ - madatoryLabel = new Label(i18n.get("label.mandatory.field")); - madatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); - madatoryLabel.addStyleName(ValoTheme.LABEL_SMALL); + mandatoryLabel = new Label(i18n.get("label.mandatory.field")); + mandatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); + mandatoryLabel.addStyleName(ValoTheme.LABEL_SMALL); typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, false, null, i18n.get("upload.swmodule.type")); @@ -168,21 +164,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se populateTypeNameCombo(); - /* save or update button */ - // saveSoftware = - // SPUIComponentProvider.getButton(SPUIComponetIdProvider.SOFT_MODULE_SAVE, - // "", "", "", true, - // FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); - // saveSoftware.addClickListener(event -> save()); - // - // /* close button */ - // closeWindow = - // SPUIComponentProvider.getButton(SPUIComponetIdProvider.SOFT_MODULE_DISCARD, - // "", "", "", true, - // FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); - // /* Just close this window when this button is clicked */ - // closeWindow.addClickListener(event -> closeThisWindow()); - resetOldValues(); } @@ -207,25 +188,10 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se * @return */ private void createWindow() { - /* action button layout (save & dicard) */ - // final HorizontalLayout buttonsLayout = new HorizontalLayout(); - // buttonsLayout.setSizeFull(); - // buttonsLayout.addComponents(saveSoftware, closeWindow); - // buttonsLayout.setComponentAlignment(saveSoftware, - // Alignment.BOTTOM_LEFT); - // buttonsLayout.setComponentAlignment(closeWindow, - // Alignment.BOTTOM_RIGHT); - // buttonsLayout.addStyleName("window-style"); final Label madatoryStarLabel = new Label("*"); madatoryStarLabel.setStyleName("v-caption v-required-field-indicator"); madatoryStarLabel.setWidth(null); - final HorizontalLayout hLayout = new HorizontalLayout(); - hLayout.setSizeFull(); - hLayout.addComponents(typeComboBox, madatoryStarLabel); - hLayout.setComponentAlignment(typeComboBox, Alignment.TOP_LEFT); - hLayout.setComponentAlignment(madatoryStarLabel, Alignment.TOP_RIGHT); - hLayout.setExpandRatio(typeComboBox, 0.8f); /* * The main layout of the window contains mandatory info, textboxes @@ -235,22 +201,22 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se mainLayout.setSizeUndefined(); mainLayout.setSpacing(Boolean.TRUE); mainLayout.addStyleName("lay-color"); - mainLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); - mainLayout.addComponent(madatoryLabel); - mainLayout.setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); - mainLayout.addComponent(hLayout); - mainLayout.setComponentAlignment(hLayout, Alignment.MIDDLE_LEFT); - // mainLayout.addComponents(nameTextField, versionTextField, - // vendorTextField, descTextArea, buttonsLayout); - // TODO MR WINDOW - mainLayout.addComponents(nameTextField, versionTextField, vendorTextField, descTextArea); + final FormLayout formLayout = new FormLayout(); + formLayout.addComponent(typeComboBox); + formLayout.addComponent(mandatoryLabel); + formLayout.addComponent(nameTextField); + formLayout.addComponent(versionTextField); + formLayout.addComponent(vendorTextField); + formLayout.addComponent(descTextArea); + mainLayout.addComponents(formLayout); setCompositionRoot(mainLayout); /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(), event -> closeThisWindow()); + window.removeStyleName("actionButtonsMargin"); nameTextField.focus(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index f8615714c..8d34993c9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -13,7 +13,6 @@ import java.util.List; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; @@ -22,7 +21,6 @@ import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.slf4j.Logger; @@ -30,13 +28,11 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; -import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Alignment; -import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; @@ -59,9 +55,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout @Autowired private transient SoftwareManagement swTypeManagementService; - @Autowired - private transient UiProperties uiProperties; - private String singleAssignStr; private String multiAssignStr; private Label singleAssign; @@ -71,16 +64,12 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout @Override protected void createRequiredComponents() { - createTypeStr = i18n.get("label.create.type"); - updateTypeStr = i18n.get("label.update.type"); + super.createRequiredComponents(); + singleAssignStr = i18n.get("label.singleAssign.type"); multiAssignStr = i18n.get("label.multiAssign.type"); singleAssign = SPUIComponentProvider.getLabel(singleAssignStr, null); multiAssign = SPUIComponentProvider.getLabel(multiAssignStr, null); - comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); - madatoryLabel = getMandatoryLabel(); - colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null); - colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, true, "", i18n.get("textfield.name"), true, @@ -100,26 +89,14 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); - tagNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, - "", i18n.get("label.combobox.type")); - tagNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); - tagNameComboBox.setImmediate(true); - - tagColorPreviewBtn = new Button(); - tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); - getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); - tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); - - ColorPickerHelper.setRgbSliderValues(colorPickerLayout); - singleMultiOptionGroup(); - createOptionGroup(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission()); } @Override protected void buildLayout() { super.buildLayout(); + ColorPickerHelper.setRgbSliderValues(colorPickerLayout); getFormLayout().addComponent(typeKey, 4); getFormLayout().addComponent(assignOptiongroup); } @@ -226,24 +203,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout } } - @Override - protected Boolean mandatoryValuesPresent() { - if (Strings.isNullOrEmpty(tagName.getValue()) || Strings.isNullOrEmpty(typeKey.getValue())) { - if (optiongroup.getValue().equals(createTypeStr)) { - displayValidationError(SPUILabelDefinitions.MISSING_TYPE_NAME_KEY); - } - if (optiongroup.getValue().equals(updateTypeStr)) { - if (null == tagNameComboBox.getValue()) { - displayValidationError(i18n.get("message.error.missing.tagName")); - } else { - displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - } - return Boolean.FALSE; - } - return Boolean.TRUE; - } - /** * Create new tag. */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java index 01fd46977..90b39e5ca 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java @@ -17,6 +17,7 @@ public class ColorPickerHelper { * @return String of color picked value. */ public static String getColorPickedString(final SpColorPickerPreview preview) { + return "rgb(" + preview.getColor().getRed() + "," + preview.getColor().getGreen() + "," + preview.getColor().getBlue() + ")"; } @@ -29,6 +30,7 @@ public class ColorPickerHelper { * @return Color */ public static Color rgbToColorConverter(final String value) { + if (!value.startsWith("rgb")) { return null; } @@ -46,6 +48,7 @@ public class ColorPickerHelper { } public static void setRgbSliderValues(final ColorPickerLayout colorPickerLayout) { + try { final double redColorValue = colorPickerLayout.getSelectedColor().getRed(); colorPickerLayout.getRedSlider().setValue(new Double(redColorValue)); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java index db5c46ffb..51c09055a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java @@ -37,7 +37,6 @@ public class ColorPickerLayout extends GridLayout { setColumns(2); setRows(4); - setCaption("Choose Color"); init(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index c99a5a84b..58ce52e7e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -50,10 +50,6 @@ public class CommonDialogWindow extends Window { this.content = content; this.helpLink = helpLink; - if (null == content) { - // TODO - // throw Exception - } init(saveButtonClickListener, cancelButtonClickListener); } @@ -75,8 +71,6 @@ public class CommonDialogWindow extends Window { mainLayout.addComponent(buttonLayout); mainLayout.setComponentAlignment(buttonLayout, Alignment.MIDDLE_CENTER); - setHeight("60%"); - setWidth("50%"); setCaption(caption); setContent(mainLayout); setResizable(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java index 14b727c68..f7a368428 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITextAreaDecorator.java @@ -50,7 +50,7 @@ public final class SPUITextAreaDecorator { final TextArea spUITxtArea = new TextArea(); // Default settings spUITxtArea.setRequired(false); - spUITxtArea.addStyleName(ValoTheme.COMBOBOX_SMALL); + spUITxtArea.addStyleName(ValoTheme.TEXTAREA_SMALL); if (StringUtils.isNotEmpty(caption)) { spUITxtArea.setCaption(caption); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index dbebc6183..ebb30bb18 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -26,7 +26,6 @@ import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent.DistributionSetTypeEnum; import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.slf4j.Logger; @@ -36,7 +35,6 @@ import org.springframework.data.domain.PageRequest; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; -import com.google.common.base.Strings; import com.vaadin.data.Item; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.util.IndexedContainer; @@ -81,9 +79,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout @Autowired private transient DistributionSetRepository distributionSetRepository; - @Autowired - private transient UiProperties uiProperties; - private HorizontalLayout distTypeSelectLayout; private Table sourceTable; private Table selectedTable; @@ -93,10 +88,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout @Override protected void createRequiredComponents() { - createTypeStr = i18n.get("label.create.type"); - updateTypeStr = i18n.get("label.update.type"); - comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); - madatoryLabel = getMandatoryLabel(); + + super.createRequiredComponents(); tagName = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_NAME, true, "", @@ -115,30 +108,13 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout tagDesc.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); - - tagNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, - "", i18n.get("label.combobox.type")); - tagNameComboBox.setId(SPUIDefinitions.NEW_DISTRIBUTION_SET_TYPE_NAME_COMBO); - tagNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); - tagNameComboBox.setImmediate(true); - tagNameComboBox.setPageLength(SPUIDefinitions.DIST_TYPE_SIZE); - - colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag.color"), null); - colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); - tagColorPreviewBtn = new Button(); - tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); - getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); - tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); - - ColorPickerHelper.setRgbSliderValues(colorPickerLayout); - - createOptionGroup(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission()); } @Override protected void buildLayout() { super.buildLayout(); + ColorPickerHelper.setRgbSliderValues(colorPickerLayout); getFormLayout().addComponent(typeKey, 4); distTypeSelectLayout = createTwinColumnLayout(); @@ -651,24 +627,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event)); } - @Override - protected Boolean mandatoryValuesPresent() { - if (Strings.isNullOrEmpty(tagName.getValue()) || Strings.isNullOrEmpty(typeKey.getValue())) { - if (optiongroup.getValue().equals(createTypeStr)) { - displayValidationError(SPUILabelDefinitions.MISSING_TYPE_NAME_KEY); - } - if (optiongroup.getValue().equals(updateTypeStr)) { - if (null == tagNameComboBox.getValue()) { - displayValidationError(i18n.get("message.error.missing.tagName")); - } else { - displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - } - return Boolean.FALSE; - } - return Boolean.TRUE; - } - @Override protected void previewButtonClicked() { if (!tagPreviewBtnClicked) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java index 6162eb321..740a0917f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java @@ -93,13 +93,13 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C protected TextField tagName; protected TextArea tagDesc; protected Button tagColorPreviewBtn; - protected OptionGroup optiongroup = new OptionGroup(); + protected OptionGroup optiongroup; protected ComboBox tagNameComboBox; - protected final VerticalLayout comboLayout = new VerticalLayout(); - protected final ColorPickerLayout colorPickerLayout = new ColorPickerLayout(); - protected final GridLayout mainLayout = new GridLayout(4, 4); - protected final VerticalLayout contentLayout = new VerticalLayout(); + protected VerticalLayout comboLayout; + protected ColorPickerLayout colorPickerLayout; + protected GridLayout mainLayout; + protected VerticalLayout contentLayout; protected boolean tagPreviewBtnClicked = false; @@ -141,6 +141,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C */ public void init() { + setSizeUndefined(); createRequiredComponents(); buildLayout(); createWindow(); @@ -184,12 +185,17 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); - - ColorPickerHelper.setRgbSliderValues(colorPickerLayout); } protected void buildLayout() { + mainLayout = new GridLayout(3, 2); + mainLayout.setSpacing(true); + comboLayout = new VerticalLayout(); + colorPickerLayout = new ColorPickerLayout(); + ColorPickerHelper.setRgbSliderValues(colorPickerLayout); + contentLayout = new VerticalLayout(); + final HorizontalLayout colorLabelLayout = new HorizontalLayout(); colorLabelLayout.setMargin(false); colorLabelLayout.addComponents(colorLabel, tagColorPreviewBtn); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index c5d1c0387..f007b64ce 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -5,13 +5,17 @@ import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; +import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; +import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.server.Page; import com.vaadin.shared.ui.colorpicker.Color; +import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.TextArea; @@ -31,43 +35,29 @@ public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { public static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; - /** - * Value change listeners implementations of sliders. - */ - protected void slidersValueChangeListeners() { - getColorPickerLayout().getRedSlider().addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = -8336732883300920839L; + @Override + protected void createRequiredComponents() { - @Override - public void valueChange(final ValueChangeEvent event) { - final double red = (Double) event.getProperty().getValue(); - final Color newColor = new Color((int) red, getColorPickerLayout().getSelectedColor().getGreen(), - getColorPickerLayout().getSelectedColor().getBlue()); - setColorToComponents(newColor); - } - }); - getColorPickerLayout().getGreenSlider().addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = 1236358037711775663L; + createTypeStr = i18n.get("label.create.type"); + updateTypeStr = i18n.get("label.update.type"); + comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); + madatoryLabel = getMandatoryLabel(); + colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null); + colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); - @Override - public void valueChange(final ValueChangeEvent event) { - final double green = (Double) event.getProperty().getValue(); - final Color newColor = new Color(getColorPickerLayout().getSelectedColor().getRed(), (int) green, - getColorPickerLayout().getSelectedColor().getBlue()); - setColorToComponents(newColor); - } - }); - getColorPickerLayout().getBlueSlider().addValueChangeListener(new ValueChangeListener() { - private static final long serialVersionUID = 8466370744686043947L; + tagNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, null, false, + "", i18n.get("label.combobox.type")); + tagNameComboBox.setId(SPUIDefinitions.NEW_DISTRIBUTION_SET_TYPE_NAME_COMBO); + tagNameComboBox.addStyleName(SPUIDefinitions.FILTER_TYPE_COMBO_STYLE); + tagNameComboBox.setImmediate(true); + tagNameComboBox.setPageLength(SPUIDefinitions.DIST_TYPE_SIZE); - @Override - public void valueChange(final ValueChangeEvent event) { - final double blue = (Double) event.getProperty().getValue(); - final Color newColor = new Color(getColorPickerLayout().getSelectedColor().getRed(), - getColorPickerLayout().getSelectedColor().getGreen(), (int) blue); - setColorToComponents(newColor); - } - }); + tagColorPreviewBtn = new Button(); + tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); + getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); + + createOptionGroup(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission()); } @Override @@ -264,6 +254,24 @@ public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { return Boolean.FALSE; } + @Override + protected Boolean mandatoryValuesPresent() { + if (Strings.isNullOrEmpty(tagName.getValue()) || Strings.isNullOrEmpty(typeKey.getValue())) { + if (optiongroup.getValue().equals(createTypeStr)) { + displayValidationError(SPUILabelDefinitions.MISSING_TYPE_NAME_KEY); + } + if (optiongroup.getValue().equals(updateTypeStr)) { + if (null == tagNameComboBox.getValue()) { + displayValidationError(i18n.get("message.error.missing.tagName")); + } else { + displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); + } + } + return Boolean.FALSE; + } + return Boolean.TRUE; + } + @Override protected void save(final ClickEvent event) { // TODO Auto-generated method stub diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index c5a578fb5..94f56ba07 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -25,7 +25,6 @@ import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; -import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; @@ -51,10 +50,10 @@ import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Alignment; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; import com.vaadin.ui.Component; +import com.vaadin.ui.FormLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; @@ -95,8 +94,6 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { @Autowired private transient UiProperties uiProperties; - // private Button saveDistributionBtn; - // private Button discardDistributionBtn; private TextField distNameTextField; private TextField distVersionTextField; private Label madatoryLabel; @@ -118,6 +115,8 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { private TextChangeListener distVersionTextFieldListener; private ValueChangeListener distsetTypeNameComboBoxListener; + private FormLayout formLayout; + /** * Initialize Distribution Add and Edit Window. */ @@ -128,17 +127,6 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { } private void buildLayout() { - /* action button layout ( save & discard ) */ - // final HorizontalLayout buttonsLayout = new HorizontalLayout(); - // buttonsLayout.setSizeFull(); - // buttonsLayout.setStyleName("dist-buttons-horz-layout"); - // buttonsLayout.addComponents(saveDistributionBtn, - // discardDistributionBtn); - // buttonsLayout.setComponentAlignment(saveDistributionBtn, - // Alignment.BOTTOM_LEFT); - // buttonsLayout.setComponentAlignment(discardDistributionBtn, - // Alignment.BOTTOM_RIGHT); - // buttonsLayout.addStyleName("window-style"); /* * The main layout of the window contains mandatory info, textboxes @@ -147,13 +135,18 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { setSpacing(Boolean.TRUE); addStyleName("lay-color"); setSizeUndefined(); - addComponents(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot()), madatoryLabel, - distsetTypeNameComboBox, distNameTextField, distVersionTextField, descTextArea, reqMigStepCheckbox); - // addComponent(buttonsLayout); - setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); + formLayout = new FormLayout(); + formLayout.addComponent(madatoryLabel); + formLayout.addComponent(distsetTypeNameComboBox); + formLayout.addComponent(distNameTextField); + formLayout.addComponent(distVersionTextField); + formLayout.addComponent(descTextArea); + formLayout.addComponent(reqMigStepCheckbox); + + addComponents(formLayout); + distNameTextField.focus(); - } /** @@ -192,20 +185,6 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { reqMigStepCheckbox.addStyleName(ValoTheme.CHECKBOX_SMALL); reqMigStepCheckbox.setId(SPUIComponetIdProvider.DIST_ADD_MIGRATION_CHECK); - // /* save or update button */ - // saveDistributionBtn = - // SPUIComponentProvider.getButton(SPUIComponetIdProvider.DIST_ADD_SAVE, - // "", "", "", true, - // FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); - // saveDistributionBtn.addClickListener(event -> saveDistribution()); - // - // /* close button */ - // discardDistributionBtn = - // SPUIComponentProvider.getButton(SPUIComponetIdProvider.DIST_ADD_DISCARD, - // "", "", "", - // true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); - // discardDistributionBtn.addClickListener(event -> - // discardDistribution()); } /** @@ -539,6 +518,8 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { addDistributionWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution()); + addDistributionWindow.removeStyleName("actionButtonsMargin"); + return addDistributionWindow; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 44d9bc6bb..f3abbd5bb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -25,7 +25,7 @@ import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.spring.annotation.SpringComponent; -import com.vaadin.spring.annotation.VaadinSessionScope; +import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.UI; @@ -34,7 +34,7 @@ import com.vaadin.ui.UI; * */ @SpringComponent -@VaadinSessionScope +@ViewScope public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayout { private static final long serialVersionUID = 444276149954167545L; @@ -79,7 +79,7 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo final DistributionSetTag existingDistTag = tagManagement.findDistributionSetTag(tagName.getValue()); if (optiongroup.getValue().equals(createTagStr)) { if (!checkIsDuplicate(existingDistTag)) { - crateNewTag(); + createNewTag(); } } else { @@ -91,7 +91,8 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo /** * Create new tag. */ - protected void crateNewTag() { + @Override + protected void createNewTag() { super.createNewTag(); if (isNotEmpty(getTagNameValue())) { DistributionSetTag newDistTag = new DistributionSetTag(getTagNameValue()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java index 65d4cdf4a..de0938e7e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java @@ -56,6 +56,7 @@ public class ActionTypeOptionGroupLayout extends HorizontalLayout { createOptionGroup(); addValueChangeListener(); setStyleName("dist-window-actiontype-horz-layout"); + setSizeUndefined(); } private void addValueChangeListener() { @@ -127,8 +128,8 @@ public class ActionTypeOptionGroupLayout extends HorizontalLayout { forcedTimeDateField.setStyleName("dist-window-forcedtime"); final TimeZone tz = SPDateTimeUtil.getBrowserTimeZone(); - forcedTimeDateField.setValue(Date.from(LocalDateTime.now().plusWeeks(2) - .atZone(SPDateTimeUtil.getTimeZoneId(tz)).toInstant())); + forcedTimeDateField.setValue( + Date.from(LocalDateTime.now().plusWeeks(2).atZone(SPDateTimeUtil.getTimeZoneId(tz)).toInstant())); forcedTimeDateField.setImmediate(true); forcedTimeDateField.setTimeZone(tz); forcedTimeDateField.setLocale(i18n.getLocale()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 90a04ba2a..9a2e060db 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -27,8 +27,8 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondit import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery; import org.eclipse.hawkbit.ui.management.footer.ActionTypeOptionGroupLayout; import org.eclipse.hawkbit.ui.management.footer.ActionTypeOptionGroupLayout.ActionTypeOption; @@ -54,22 +54,17 @@ import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Validator; import com.vaadin.data.validator.IntegerRangeValidator; import com.vaadin.data.validator.RegexpValidator; -import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Alignment; -import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; -import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.GridLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; -import com.vaadin.ui.Link; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; -import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; /** @@ -79,7 +74,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class AddUpdateRolloutWindowLayout extends CustomComponent { +public class AddUpdateRolloutWindowLayout extends GridLayout { private static final long serialVersionUID = 2999293468801479916L; @@ -113,7 +108,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { @Autowired private transient EventBus.SessionEventBus eventBus; - private Label madatoryLabel; + private Label mandatoryLabel; private TextField rolloutName; @@ -131,15 +126,9 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private TextArea description; - private Button saveRolloutBtn; - - private Button discardRollloutBtn; - private OptionGroup errorThresholdOptionGroup; - private Link linkToHelp; - - private Window addUpdateRolloutWindow; + private CommonDialogWindow addUpdateRolloutWindow; private Boolean editRolloutEnabled; @@ -155,14 +144,16 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { * Create components and layout. */ public void init() { + + setSizeFull(); createRequiredComponents(); buildLayout(); } - public Window getWindow() { + public CommonDialogWindow getWindow() { + addUpdateRolloutWindow = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW); - addUpdateRolloutWindow.setContent(this); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard()); return addUpdateRolloutWindow; } @@ -200,39 +191,37 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private void buildLayout() { - final VerticalLayout mainLayout = new VerticalLayout(); - mainLayout.setSpacing(Boolean.TRUE); - mainLayout.setSizeUndefined(); - mainLayout.addComponents(madatoryLabel, rolloutName, distributionSet, getTargetFilterLayout(), - getGroupDetailsLayout(), getTriggerThresoldLayout(), getErrorThresholdLayout(), description, - actionTypeOptionGroupLayout, linkToHelp, getSaveDiscardButtonLayout()); - mainLayout.setComponentAlignment(linkToHelp, Alignment.BOTTOM_RIGHT); - setCompositionRoot(mainLayout); + setSpacing(Boolean.TRUE); + setSizeUndefined(); + setRows(9); + setColumns(3); + + addComponent(mandatoryLabel, 0, 0, 2, 0); + addComponent(getLabel("textfield.name"), 0, 1); + addComponent(rolloutName, 1, 1); + addComponent(getLabel("prompt.distribution.set"), 0, 2); + addComponent(distributionSet, 1, 2); + addComponent(getLabel("prompt.target.filter"), 0, 3); + addComponent(getTargetFilterLayout(), 1, 3); + addComponent(getLabel("prompt.number.of.groups"), 0, 4); + addComponent(getGroupDetailsLayout(), 1, 4); + addComponent(getLabel("prompt.tigger.threshold"), 0, 5); + addComponent(triggerThreshold, 1, 5); + addComponent(getPercentHintLabel(), 2, 5); + addComponent(getLabel("prompt.error.threshold"), 0, 6); + addComponent(errorThreshold, 1, 6); + addComponent(errorThresholdOptionGroup, 2, 6); + addComponent(getLabel("textfield.description"), 0, 7); + addComponent(description, 1, 7, 2, 7); + addComponent(actionTypeOptionGroupLayout, 0, 8, 2, 8); + rolloutName.focus(); } - private HorizontalLayout getGroupDetailsLayout() { - final HorizontalLayout groupLayout = new HorizontalLayout(); - groupLayout.setCaption(i18n.get("prompt.number.of.groups")); - groupLayout.setSizeFull(); - groupLayout.addComponents(noOfGroups, groupSizeLabel); - groupLayout.setExpandRatio(noOfGroups, 1.0F); - groupLayout.setComponentAlignment(groupSizeLabel, Alignment.MIDDLE_LEFT); - return groupLayout; - } - - private HorizontalLayout getErrorThresholdLayout() { - final HorizontalLayout errorThresoldLayout = new HorizontalLayout(); - errorThresoldLayout.setSizeFull(); - errorThresoldLayout.addComponents(errorThreshold, errorThresholdOptionGroup); - errorThresoldLayout.setExpandRatio(errorThreshold, 1.0F); - return errorThresoldLayout; - } - private HorizontalLayout getTargetFilterLayout() { final HorizontalLayout targetFilterLayout = new HorizontalLayout(); - targetFilterLayout.setSizeFull(); + targetFilterLayout.setSizeUndefined(); targetFilterLayout.addComponents(targetFilterQueryCombo, targetFilterQuery, totalTargetsLabel); targetFilterLayout.setExpandRatio(targetFilterQueryCombo, 0.71F); targetFilterLayout.setExpandRatio(targetFilterQuery, 0.70F); @@ -241,13 +230,22 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return targetFilterLayout; } - private HorizontalLayout getTriggerThresoldLayout() { - final HorizontalLayout triggerThresholdLayout = new HorizontalLayout(); - triggerThresholdLayout.setCaption(i18n.get("prompt.tigger.thresold")); - triggerThresholdLayout.setSizeFull(); - triggerThresholdLayout.addComponents(triggerThreshold, getPercentHintLabel()); - triggerThresholdLayout.setExpandRatio(triggerThreshold, 1.0F); - return triggerThresholdLayout; + private HorizontalLayout getGroupDetailsLayout() { + final HorizontalLayout groupLayout = new HorizontalLayout(); + groupLayout.setSizeUndefined(); + groupLayout.addComponents(noOfGroups, groupSizeLabel); + groupLayout.setExpandRatio(noOfGroups, 1.0F); + groupLayout.setComponentAlignment(groupSizeLabel, Alignment.MIDDLE_LEFT); + return groupLayout; + } + + private Label getLabel(final String key) { + return SPUIComponentProvider.getLabel(i18n.get(key), SPUILabelDefinitions.SP_LABEL_SIMPLE); + } + + private TextField getTextfield(final String key) { + return SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get(key), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); } private Label getPercentHintLabel() { @@ -257,18 +255,8 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return percentSymbol; } - private HorizontalLayout getSaveDiscardButtonLayout() { - final HorizontalLayout buttonsLayout = new HorizontalLayout(); - buttonsLayout.setSizeFull(); - buttonsLayout.addComponents(saveRolloutBtn, discardRollloutBtn); - buttonsLayout.setComponentAlignment(saveRolloutBtn, Alignment.BOTTOM_LEFT); - buttonsLayout.setComponentAlignment(discardRollloutBtn, Alignment.BOTTOM_RIGHT); - buttonsLayout.addStyleName("window-style"); - return buttonsLayout; - } - private void createRequiredComponents() { - madatoryLabel = createMandatoryLabel(); + mandatoryLabel = createMandatoryLabel(); rolloutName = createRolloutNameField(); distributionSet = createDistributionSetCombo(); populateDistributionSet(); @@ -279,20 +267,14 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { noOfGroups = createNoOfGroupsField(); groupSizeLabel = createGroupSizeLabel(); triggerThreshold = createTriggerThresold(); - errorThreshold = createErrorThresold(); + errorThreshold = createErrorThreshold(); description = createDescription(); errorThresholdOptionGroup = createErrorThresholdOptionGroup(); setDefaultSaveStartGroupOption(); - saveRolloutBtn = createSaveButton(); - discardRollloutBtn = createDiscardButton(); actionTypeOptionGroupLayout.selectDefaultOption(); - totalTargetsLabel = createTotalTargetsLabel(); targetFilterQuery = createTargetFilterQuery(); - - linkToHelp = SPUIComponentProvider.getHelpLink(uiProperties.getLinks().getDocumentation().getRolloutView()); actionTypeOptionGroupLayout.addStyleName(SPUIStyleDefinitions.ROLLOUT_ACTION_TYPE_LAYOUT); - } private Label createGroupSizeLabel() { @@ -312,7 +294,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { filterField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); filterField.setVisible(false); filterField.setEnabled(false); - filterField.setSizeFull(); + filterField.setSizeUndefined(); return filterField; } @@ -350,13 +332,13 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private ComboBox createTargetFilterQueryCombo() { - final ComboBox targetFilter = SPUIComponentProvider.getComboBox(null, "", "", null, null, true, "", - i18n.get("prompt.target.filter")); + final ComboBox targetFilter = SPUIComponentProvider.getComboBox(null, "", "", null, ValoTheme.COMBOBOX_SMALL, + true, "", i18n.get("prompt.target.filter")); targetFilter.setImmediate(true); targetFilter.setPageLength(7); targetFilter.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); targetFilter.setId(SPUIComponetIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID); - targetFilter.setSizeFull(); + targetFilter.setSizeUndefined(); targetFilter.addValueChangeListener(event -> onTargetFilterChange()); return targetFilter; } @@ -393,24 +375,6 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return new LazyQueryContainer( new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_NAME), targetFilterQF); - - } - - private Button createDiscardButton() { - final Button discardRollloutBtn = SPUIComponentProvider.getButton( - SPUIComponetIdProvider.ROLLOUT_CREATE_UPDATE_DISCARD_ID, "", "", "", true, FontAwesome.TIMES, - SPUIButtonStyleSmallNoBorder.class); - discardRollloutBtn.addClickListener(event -> onDiscard()); - return discardRollloutBtn; - } - - private Button createSaveButton() { - final Button saveRolloutBtn = SPUIComponentProvider.getButton( - SPUIComponetIdProvider.ROLLOUT_CREATE_UPDATE_SAVE_ID, "", "", "", true, FontAwesome.SAVE, - SPUIButtonStyleSmallNoBorder.class); - saveRolloutBtn.addClickListener(event -> onRolloutSave()); - saveRolloutBtn.setImmediate(true); - return saveRolloutBtn; } private void onDiscard() { @@ -589,44 +553,38 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private TextArea createDescription() { - final TextArea descriptionField = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), - "text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), + final TextArea descriptionField = SPUIComponentProvider.getTextArea(null, "text-area-style", + ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descriptionField.setId(SPUIComponetIdProvider.ROLLOUT_DESCRIPTION_ID); descriptionField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); - descriptionField.setSizeFull(); + descriptionField.setSizeUndefined(); return descriptionField; } - private TextField createErrorThresold() { - final TextField errorField = SPUIComponentProvider.getTextField(i18n.get("prompt.error.threshold"), "", - ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.error.threshold"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + private TextField createErrorThreshold() { + final TextField errorField = getTextfield("prompt.error.threshold"); errorField.addValidator(new ThresholdFieldValidator()); errorField.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_ID); errorField.setMaxLength(7); - errorField.setSizeFull(); + errorField.setSizeUndefined(); return errorField; } private TextField createTriggerThresold() { - final TextField thresholdField = SPUIComponentProvider.getTextField(i18n.get("prompt.tigger.thresold"), "", - ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.tigger.thresold"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField thresholdField = getTextfield("prompt.tigger.threshold"); thresholdField.setId(SPUIComponetIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); thresholdField.addValidator(new ThresholdFieldValidator()); - thresholdField.setSizeFull(); + thresholdField.setSizeUndefined(); thresholdField.setMaxLength(3); return thresholdField; } private TextField createNoOfGroupsField() { - final TextField noOfGroupsField = SPUIComponentProvider.getTextField(i18n.get("prompt.number.of.groups"), "", - ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.number.of.groups"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField noOfGroupsField = getTextfield("prompt.number.of.groups"); noOfGroupsField.setId(SPUIComponetIdProvider.ROLLOUT_NO_OF_GROUPS_ID); noOfGroupsField.addValidator(new GroupNumberValidator()); - noOfGroupsField.setSizeFull(); + noOfGroupsField.setSizeUndefined(); noOfGroupsField.setMaxLength(3); noOfGroupsField.addValueChangeListener(evevt -> onGroupNumberChange()); return noOfGroupsField; @@ -642,13 +600,13 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private ComboBox createDistributionSetCombo() { - final ComboBox dsSet = SPUIComponentProvider.getComboBox(i18n.get("prompt.distribution.set"), "", "", null, - null, true, "", i18n.get("prompt.distribution.set")); + final ComboBox dsSet = SPUIComponentProvider.getComboBox(null, "", "", null, ValoTheme.COMBOBOX_SMALL, true, "", + i18n.get("prompt.distribution.set")); dsSet.setImmediate(true); dsSet.setPageLength(7); dsSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); dsSet.setId(SPUIComponetIdProvider.ROLLOUT_DS_ID); - dsSet.setSizeFull(); + dsSet.setSizeUndefined(); return dsSet; } @@ -667,11 +625,9 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private TextField createRolloutNameField() { - final TextField rolloutNameField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", - ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, - SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + final TextField rolloutNameField = getTextfield("textfield.name"); rolloutNameField.setId(SPUIComponetIdProvider.ROLLOUT_NAME_FIELD_ID); - rolloutNameField.setSizeFull(); + rolloutNameField.setSizeUndefined(); return rolloutNameField; } diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss index e71504a3c..0a00f463c 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-window.scss @@ -163,6 +163,6 @@ } .actionButtonsMargin { - margin-top: 10px; + margin-top: 30px; } } diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 25dabd354..e84a612c6 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -462,7 +462,7 @@ rollout.group.label.target.truncated = {0} targets has been truncated in the lis prompt.number.of.groups = Number of groups -prompt.tigger.thresold = Trigger threshold +prompt.tigger.threshold = Trigger threshold prompt.error.threshold = Error threshold prompt.distribution.set = Distribution set caption.configure.rollout = Configure rollout diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 39661e3c9..b772d898a 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -452,7 +452,7 @@ menu.title = Software Provisioning #Rollout management prompt.number.of.groups = Number of groups -prompt.tigger.thresold = Trigger threshold +prompt.tigger.threshold = Trigger threshold prompt.error.threshold = Error threshold prompt.distribution.set = Distribution set caption.configure.rollout = Configure rollout diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 23df35ad2..e87b10d4b 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -443,7 +443,7 @@ menu.title = Software Provisioning #Rollout management prompt.number.of.groups = Number of groups -prompt.tigger.thresold = Trigger threshold +prompt.tigger.threshold = Trigger threshold prompt.error.threshold = Error threshold prompt.distribution.set = Distribution set caption.configure.rollout = Configure rollout From 1e91643b83556346c029dc7ca8ecdaa8e60f71a6 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 24 May 2016 18:04:09 +0200 Subject: [PATCH 143/371] Adapted repo scan --- .../org/eclipse/hawkbit/RepositoryApplicationConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index d5e8db96f..255561be3 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -42,7 +42,7 @@ import org.springframework.validation.beanvalidation.MethodValidationPostProcess * General configuration for the SP Repository. * */ -@EnableJpaRepositories(basePackages = { "org.eclipse.hawkbit.repository" }) +@EnableJpaRepositories(basePackages = { "org.eclipse.hawkbit.repository.jpa" }) @EnableTransactionManagement @EnableJpaAuditing @EnableAspectJAutoProxy From 6c7f0482b482529b2ac94e3ff1b915ad10dd6a84 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 25 May 2016 13:28:58 +0200 Subject: [PATCH 144/371] Insert helpLink next to the action buttons on the right side Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 2 +- .../CreateUpdateSoftwareTypeLayout.java | 2 +- .../hawkbit/ui/common/CommonDialogWindow.java | 43 +++++++----- .../hawkbit/ui/common/PopupWindowHelp.java | 69 ------------------- .../ui/components/SPUIComponentProvider.java | 4 +- .../ui/decorators/SPUIWindowDecorator.java | 4 +- .../CreateUpdateDistSetTypeLayout.java | 3 +- .../ui/layouts/CreateUpdateTagLayout.java | 2 +- .../DistributionAddUpdateWindowLayout.java | 6 +- .../TargetAddUpdateWindowLayout.java | 37 +--------- .../rollout/AddUpdateRolloutWindowLayout.java | 5 +- 11 files changed, 42 insertions(+), 135 deletions(-) delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/PopupWindowHelp.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 7cf95e4b2..70bbd68c8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -215,7 +215,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(), event -> closeThisWindow()); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(), event -> closeThisWindow(), null); window.removeStyleName("actionButtonsMargin"); nameTextField.focus(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 8d34993c9..c122688d8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -105,7 +105,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event)); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event), null); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 58ce52e7e..e15fe2ea4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -38,6 +38,8 @@ public class CommonDialogWindow extends Window { private Button cancelButton; + private HorizontalLayout buttonsLayout; + public CommonDialogWindow() { init(null, null); @@ -60,16 +62,13 @@ public class CommonDialogWindow extends Window { ((AbstractOrderedLayout) content).setMargin(true); } - if (StringUtils.isNotEmpty(helpLink)) { - mainLayout.addComponent(createLinkToHelp(helpLink)); - } if (null != content) { mainLayout.addComponent(content); } final HorizontalLayout buttonLayout = createActionButtonsLayout(saveButtonClickListener, cancelButtonClickListener); mainLayout.addComponent(buttonLayout); - mainLayout.setComponentAlignment(buttonLayout, Alignment.MIDDLE_CENTER); + mainLayout.setComponentAlignment(buttonLayout, Alignment.TOP_CENTER); setCaption(caption); setContent(mainLayout); @@ -81,31 +80,47 @@ public class CommonDialogWindow extends Window { private HorizontalLayout createActionButtonsLayout(final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener) { - final HorizontalLayout hlayout = new HorizontalLayout(); - hlayout.setSpacing(true); + buttonsLayout = new HorizontalLayout(); + buttonsLayout.setSizeFull(); + buttonsLayout.setSpacing(true); saveButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_SAVE, "save", "", "", true, FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); + saveButton.setSizeUndefined(); if (null != saveButtonClickListener) { saveButton.addClickListener(saveButtonClickListener); } else { LOG.warn("No ClickListener for saveButton specified"); } - hlayout.addComponent(saveButton); - hlayout.setComponentAlignment(saveButton, Alignment.MIDDLE_LEFT); + buttonsLayout.addComponent(saveButton); + buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); + buttonsLayout.setExpandRatio(saveButton, 1.0F); cancelButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_CANCEL, "cancel", "", "", true, FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); + cancelButton.setSizeUndefined(); if (null != cancelButtonClickListener) { cancelButton.addClickListener(cancelButtonClickListener); } else { LOG.warn("No ClickListener for cancelButton specified"); } - hlayout.addComponent(cancelButton); - hlayout.setComponentAlignment(cancelButton, Alignment.MIDDLE_RIGHT); - hlayout.addStyleName("actionButtonsMargin"); + buttonsLayout.addComponent(cancelButton); + buttonsLayout.setComponentAlignment(cancelButton, Alignment.MIDDLE_LEFT); + buttonsLayout.setExpandRatio(cancelButton, 1.0F); + buttonsLayout.addStyleName("actionButtonsMargin"); - return hlayout; + addHelpLink(); + + return buttonsLayout; + } + + private void addHelpLink() { + + if (StringUtils.isNotEmpty(helpLink)) { + final Link helpLinkComponent = SPUIComponentProvider.getHelpLink(helpLink); + buttonsLayout.addComponent(helpLinkComponent); + buttonsLayout.setComponentAlignment(helpLinkComponent, Alignment.MIDDLE_RIGHT); + } } public void setSaveButtonEnabled(final boolean enabled) { @@ -116,8 +131,4 @@ public class CommonDialogWindow extends Window { cancelButton.setEnabled(enabled); } - private Link createLinkToHelp(final String link) { - return SPUIComponentProvider.getHelpLink(link); - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/PopupWindowHelp.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/PopupWindowHelp.java deleted file mode 100644 index 1ee505dec..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/PopupWindowHelp.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.common; - -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; - -import com.vaadin.ui.Alignment; -import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Link; - -/** - * - * Helper class that provides the help icon layout in the right upper corner of - * a popup window - * - */ -public class PopupWindowHelp extends HorizontalLayout { - - private static final long serialVersionUID = 5377482512908004826L; - - private Link linkToHelp; - - /** - * Provides a horizontalLayout with a help icon in the right corner. The - * layout is shown by default. - * - * @param link - * link to the help page in the wiki or on github - */ - public PopupWindowHelp(final String link) { - createLinkToHelp(link); - init(); - } - - /** - * Provides a horizontalLayout with a help icon in the right corner. The - * layout is shown by default. The visibility of the layout can be set. If - * visibility is false the layout is not shown and the space is not - * reserved. - * - * @param link - * link to the help page in the wiki or on github - * @param visible - * false == layout is not shown - */ - public PopupWindowHelp(final String link, final boolean visible) { - createLinkToHelp(link); - init(); - setVisible(visible); - } - - public void init() { - setSizeFull(); - addComponent(linkToHelp); - setComponentAlignment(linkToHelp, Alignment.MIDDLE_RIGHT); - addStyleName("window-style"); - } - - private void createLinkToHelp(final String link) { - linkToHelp = SPUIComponentProvider.getHelpLink(link); - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 6aa0f9837..170ea8dcc 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -153,9 +153,9 @@ public final class SPUIComponentProvider { */ public static CommonDialogWindow getWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, - final ClickListener cancelButtonClickListener) { + final ClickListener cancelButtonClickListener, final String helpLink) { return SPUIWindowDecorator.getDeocratedWindow(caption, id, type, content, saveButtonClickListener, - cancelButtonClickListener); + cancelButtonClickListener, helpLink); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java index 539215c7d..f5af72abd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java @@ -44,9 +44,9 @@ public final class SPUIWindowDecorator { */ public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, - final ClickListener CancelButtonClickListener) { + final ClickListener CancelButtonClickListener, final String helpLink) { // TODO helpLink - final CommonDialogWindow window = new CommonDialogWindow(caption, content, null, saveButtonClickListener, + final CommonDialogWindow window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, CancelButtonClickListener); if (null != id) { window.setId(id); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index ebb30bb18..addf4736f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -16,7 +16,6 @@ import org.eclipse.hawkbit.repository.DistributionSetRepository; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; @@ -624,7 +623,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event)); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event), null); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java index 740a0917f..cebce7105 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java @@ -110,7 +110,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C protected void createWindow() { reset(); setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event))); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event), null)); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 94f56ba07..122411376 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -133,6 +133,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { * (controller Id, name & description) and action buttons layout */ setSpacing(Boolean.TRUE); + setMargin(Boolean.FALSE); addStyleName("lay-color"); setSizeUndefined(); @@ -184,7 +185,6 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { "dist-checkbox-style", null, false, ""); reqMigStepCheckbox.addStyleName(ValoTheme.CHECKBOX_SMALL); reqMigStepCheckbox.setId(SPUIComponetIdProvider.DIST_ADD_MIGRATION_CHECK); - } /** @@ -516,8 +516,8 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { populateRequiredComponents(); resetComponents(); addDistributionWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), - event -> discardDistribution()); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), + null); addDistributionWindow.removeStyleName("actionButtonsMargin"); return addDistributionWindow; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 1fed8fe22..87c9abfc9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -14,12 +14,9 @@ import java.util.Set; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; -import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; -import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -35,15 +32,10 @@ import org.vaadin.spring.events.EventBus; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; -import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.VaadinSessionScope; -import com.vaadin.ui.AbstractOrderedLayout; -import com.vaadin.ui.Alignment; -import com.vaadin.ui.Button; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; -import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; @@ -75,15 +67,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { @Autowired private transient UINotification uINotification; - @Autowired - private transient UiProperties uiProperties; - private TextField controllerIDTextField; private TextField nameTextField; private TextArea descTextArea; private Label madatoryLabel; -// private Button saveTarget; -// private Button discardTarget; private boolean editTarget = Boolean.FALSE; private String controllerId; private VerticalLayout mainLayout; @@ -125,26 +112,9 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { /* Label for mandatory symbol */ madatoryLabel = new Label(i18n.get("label.mandatory.field")); madatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); - -// /* save or update button */ -// saveTarget = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_SAVE, "", "", "", true, -// FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); -// saveTarget.addClickListener(event -> saveTargetListner()); - -// /* close button */ -// discardTarget = SPUIComponentProvider.getButton(SPUIDefinitions.NEW_TARGET_DISCARD, "", "", "", true, -// FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); -// discardTarget.addClickListener(event -> discardTargetListner()); } private void buildLayout() { - /* action button layout (save & dicard) */ -// final HorizontalLayout buttonsLayout = new HorizontalLayout(); -// buttonsLayout.setSizeFull(); -// buttonsLayout.addComponents(saveTarget, discardTarget); -// buttonsLayout.setComponentAlignment(saveTarget, Alignment.BOTTOM_LEFT); -// buttonsLayout.setComponentAlignment(discardTarget, Alignment.BOTTOM_RIGHT); -// buttonsLayout.addStyleName("window-style"); /* * The main layout of the window contains mandatory info, textboxes @@ -154,9 +124,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { mainLayout.setSpacing(Boolean.TRUE); mainLayout.addStyleName("lay-color"); mainLayout.setSizeUndefined(); -// mainLayout.addComponent(new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRoot())); -// mainLayout.addComponent(madatoryLabel); -// mainLayout.setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); FormLayout formLayout = new FormLayout(); formLayout.addComponent(madatoryLabel); @@ -168,7 +135,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { if (Boolean.TRUE.equals(editTarget)) { madatoryLabel.setVisible(Boolean.FALSE); } -// mainLayout.addComponents(madatoryLabel, controllerIDTextField, nameTextField, descTextArea, buttonsLayout); nameTextField.focus(); } @@ -197,7 +163,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { } }); - } private void addTargetDescChangeListner() { @@ -282,7 +247,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); addTargetWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(),event -> discardTargetListner()); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(),event -> discardTargetListner(), null); return addTargetWindow; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 9a2e060db..fc5965756 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -145,7 +145,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { */ public void init() { - setSizeFull(); + setSizeUndefined(); createRequiredComponents(); buildLayout(); } @@ -153,7 +153,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { public CommonDialogWindow getWindow() { addUpdateRolloutWindow = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard()); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), + uiProperties.getLinks().getDocumentation().getRolloutView()); return addUpdateRolloutWindow; } From f2e13b8d22805e3ac73b4f1f84ec578ce0c70856 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 25 May 2016 17:43:57 +0200 Subject: [PATCH 145/371] Split into separate maven modules. Signed-off-by: Kai Zimmermann --- hawkbit-autoconfigure/pom.xml | 2 +- hawkbit-ddi-resource/pom.xml | 4 +- hawkbit-dmf-amqp/pom.xml | 4 +- hawkbit-http-security/pom.xml | 2 +- hawkbit-mgmt-resource/pom.xml | 4 +- .../resource/MgmtDistributionSetResource.java | 11 +- .../resource/MgmtSoftwareModuleResource.java | 3 +- .../MgmtDistributionSetResourceTest.java | 12 +- .../hawkbit-repository-api/pom.xml | 40 +++ .../event/AbstractBaseEntityEvent.java | 0 .../event/AbstractEntityBulkEvent.java | 0 .../event/AbstractPropertyChangeEvent.java | 0 .../eventbus/event/ActionCreatedEvent.java | 0 .../event/ActionPropertyChangeEvent.java | 0 ...istributionSetTagAssigmentResultEvent.java | 0 .../DistributionSetTagCreatedBulkEvent.java | 0 .../event/DistributionSetTagDeletedEvent.java | 0 .../event/DistributionSetTagUpdateEvent.java | 0 .../eventbus/event/EntityBulkEvent.java | 0 .../eventbus/event/RolloutChangeEvent.java | 0 .../event/RolloutGroupChangeEvent.java | 0 .../event/RolloutGroupCreatedEvent.java | 0 .../RolloutGroupPropertyChangeEvent.java | 0 .../event/RolloutPropertyChangeEvent.java | 0 .../TargetAssignDistributionSetEvent.java | 0 .../eventbus/event/TargetCreatedEvent.java | 0 .../eventbus/event/TargetInfoUpdateEvent.java | 0 .../event/TargetTagAssigmentResultEvent.java | 0 .../event/TargetTagCreatedBulkEvent.java | 0 .../eventbus/event/TargetTagDeletedEvent.java | 0 .../eventbus/event/TargetTagUpdateEvent.java | 0 .../report/model/AbstractReportSeries.java | 0 .../report/model/DataReportSeries.java | 0 .../report/model/DataReportSeriesItem.java | 0 .../model/InnerOuterDataReportSeries.java | 0 .../report/model/ListReportSeries.java | 0 .../hawkbit/report/model/SeriesTime.java | 0 .../report/model/SystemUsageReport.java | 0 .../hawkbit/report/model/TenantUsage.java | 0 .../repository/ArtifactManagement.java | 0 .../repository/ControllerManagement.java | 0 .../repository/DeploymentManagement.java | 9 +- .../DistributionSetAssignmentResult.java | 0 .../repository/DistributionSetFilter.java | 0 .../repository/DistributionSetManagement.java | 10 +- .../repository/OffsetBasedPageRequest.java | 0 .../hawkbit/repository/ReportManagement.java | 7 +- .../repository/RolloutGroupManagement.java | 10 +- .../hawkbit/repository/RolloutManagement.java | 0 .../hawkbit/repository/RolloutProperties.java | 0 .../hawkbit/repository/RolloutScheduler.java | 0 .../repository/SoftwareManagement.java | 8 +- .../hawkbit/repository/SystemManagement.java | 0 .../hawkbit/repository/TagManagement.java | 0 .../TargetFilterQueryManagement.java | 0 .../hawkbit/repository/TargetManagement.java | 1 - .../repository}/TargetWithActionType.java | 6 +- .../TenantConfigurationManagement.java | 0 .../repository/TenantStatsManagement.java | 0 .../ArtifactDeleteFailedException.java | 0 .../ArtifactUploadFailedException.java | 0 .../CancelActionNotAllowedException.java | 0 .../ConcurrentModificationException.java | 0 ...FailedMissingMandatoryModuleException.java | 0 ...DistributionSetTypeUndefinedException.java | 0 .../EntityAlreadyExistsException.java | 0 .../exception/EntityLockedException.java | 0 .../exception/EntityNotFoundException.java | 0 .../exception/EntityReadOnlyException.java | 0 .../ForceQuitActionNotAllowedException.java | 0 .../GridFSDBFileNotFoundException.java | 0 .../IncompleteDistributionSetException.java | 0 .../InsufficientPermissionException.java | 0 .../exception/InvalidMD5HashException.java | 0 .../exception/InvalidSHA1HashException.java | 0 .../RSQLParameterSyntaxException.java | 2 +- ...SQLParameterUnsupportedFieldException.java | 2 +- .../RolloutIllegalStateException.java | 0 .../exception/TenantNotExistException.java | 0 .../ToManyAttributeEntriesException.java | 0 .../ToManyStatusEntriesException.java | 0 ...ModuleForThisDistributionSetException.java | 0 .../hawkbit/repository/model/Action.java | 0 .../repository/model/ActionStatus.java | 0 .../model/ActionWithStatusCount.java | 48 ++++ .../hawkbit/repository/model/Artifact.java | 0 .../model/AssignedSoftwareModule.java} | 16 +- .../repository/model/AssignmentResult.java | 28 +- .../hawkbit/repository/model/BaseEntity.java | 0 .../repository/model/DistributionSet.java | 0 .../model/DistributionSetIdName.java | 0 .../model/DistributionSetMetadata.java | 0 .../repository/model/DistributionSetTag.java | 0 .../DistributionSetTagAssignmentResult.java | 0 .../repository/model/DistributionSetType.java | 2 - .../repository/model/ExternalArtifact.java | 0 .../model/ExternalArtifactProvider.java | 0 .../repository/model/LocalArtifact.java | 0 .../hawkbit/repository/model/MetaData.java | 0 .../hawkbit/repository/model/NamedEntity.java | 0 .../model/NamedVersionedEntity.java | 0 .../hawkbit/repository/model/PollStatus.java | 0 .../hawkbit/repository/model/Rollout.java | 0 .../repository/model/RolloutGroup.java | 14 +- .../model/RolloutGroupConditionBuilder.java | 0 .../model/RolloutGroupConditions.java | 0 .../repository/model/SoftwareModule.java | 0 .../model/SoftwareModuleIdName.java | 0 .../model/SoftwareModuleMetadata.java | 0 .../repository/model/SoftwareModuleType.java | 0 .../eclipse/hawkbit/repository/model/Tag.java | 0 .../hawkbit/repository/model/Target.java | 61 +++++ .../repository/model/TargetFilterQuery.java | 0 .../repository/model/TargetIdName.java | 0 .../hawkbit/repository/model/TargetInfo.java | 0 .../hawkbit/repository/model/TargetTag.java | 0 .../model/TargetTagAssignmentResult.java | 0 .../repository/model/TargetUpdateStatus.java | 0 .../model/TargetWithActionStatus.java | 2 +- .../model/TenantAwareBaseEntity.java | 7 + .../repository/model/TenantConfiguration.java | 0 .../model/TenantConfigurationValue.java | 0 .../repository/model/TenantMetaData.java | 15 ++ .../model/TotalTargetCountActionStatus.java | 0 .../model/TotalTargetCountStatus.java | 0 .../{ => hawkbit-repository-jpa}/README.md | 0 .../hawkbit-repository-jpa/pom.xml | 238 +++++++++++++++++ .../src/fbExcludeFilter.xml | 0 .../java/org/eclipse/hawkbit/Constants.java | 0 .../MultiTenantJpaTransactionManager.java | 0 .../RepositoryApplicationConfiguration.java | 0 .../ExceptionMappingAspectHandler.java | 0 .../org/eclipse/hawkbit/cache/CacheField.java | 0 .../org/eclipse/hawkbit/cache/CacheKeys.java | 0 .../hawkbit/cache/CacheWriteNotify.java | 0 .../eventbus/CacheFieldEntityListener.java | 0 .../eventbus/EntityChangeEventListener.java | 0 .../EntityPropertyChangeListener.java | 0 .../hawkbit/eventbus}/EventMerger.java | 10 +- ...ansactionCommitDefaultServiceExecutor.java | 0 .../AfterTransactionCommitExecutor.java | 0 .../repository/jpa/ActionRepository.java | 0 .../jpa/ActionStatusRepository.java | 0 .../repository/jpa/BaseEntityRepository.java | 0 .../repository/jpa/DeploymentHelper.java | 0 .../DistributionSetMetadataRepository.java | 0 .../jpa/DistributionSetRepository.java | 0 .../jpa/DistributionSetTagRepository.java | 0 .../jpa/DistributionSetTypeRepository.java | 0 .../jpa/EclipseLinkTargetInfoRepository.java | 0 .../ExternalArtifactProviderRepository.java | 0 .../jpa/ExternalArtifactRepository.java | 0 .../repository/jpa/JpaArtifactManagement.java | 0 .../jpa/JpaControllerManagement.java | 2 +- .../jpa/JpaDeploymentManagement.java | 10 +- .../jpa/JpaDistributionSetManagement.java | 13 +- .../repository/jpa/JpaReportManagement.java | 0 .../jpa/JpaRolloutGroupManagement.java | 0 .../repository/jpa/JpaRolloutManagement.java | 3 +- .../repository/jpa/JpaSoftwareManagement.java | 14 +- .../repository/jpa/JpaSystemManagement.java | 0 .../repository/jpa/JpaTagManagement.java | 0 .../jpa/JpaTargetFilterQueryManagement.java | 0 .../repository/jpa/JpaTargetManagement.java | 0 .../jpa/JpaTenantConfigurationManagement.java | 0 .../jpa/JpaTenantStatsManagement.java | 0 .../jpa/LocalArtifactRepository.java | 0 .../jpa/NoCountPagingRepository.java | 0 .../jpa/RolloutGroupRepository.java | 0 .../repository/jpa/RolloutRepository.java | 0 .../jpa/RolloutTargetGroupRepository.java | 0 .../jpa/SoftwareModuleMetadataRepository.java | 0 .../jpa/SoftwareModuleRepository.java | 0 .../jpa/SoftwareModuleTypeRepository.java | 0 .../jpa/TargetFilterQueryRepository.java | 0 .../repository/jpa/TargetInfoRepository.java | 0 .../repository/jpa/TargetRepository.java | 0 .../repository/jpa/TargetTagRepository.java | 0 .../jpa/TenantConfigurationRepository.java | 0 .../repository/jpa/TenantKeyGenerator.java | 0 .../jpa/TenantMetaDataRepository.java | 0 .../jpa/model/AbstractJpaArtifact.java | 0 .../jpa/model/AbstractJpaBaseEntity.java | 0 .../jpa/model/AbstractJpaMetaData.java | 0 .../jpa/model/AbstractJpaNamedEntity.java | 0 .../AbstractJpaNamedVersionedEntity.java | 0 .../repository/jpa/model/AbstractJpaTag.java | 0 .../AbstractJpaTenantAwareBaseEntity.java | 0 .../jpa/model/DistributionSetTypeElement.java | 0 ...istributionSetTypeElementCompositeKey.java | 0 .../jpa/model/DsMetadataCompositeKey.java | 0 .../repository/jpa/model/JpaAction.java | 0 .../repository/jpa/model/JpaActionStatus.java | 0 .../jpa/model/JpaActionWithStatusCount.java} | 49 ++-- .../jpa/model/JpaDistributionSet.java | 0 .../jpa/model/JpaDistributionSetMetadata.java | 0 .../jpa/model/JpaDistributionSetTag.java | 0 .../jpa/model/JpaDistributionSetType.java | 0 .../jpa/model/JpaExternalArtifact.java | 0 .../model/JpaExternalArtifactProvider.java | 0 .../jpa/model/JpaLocalArtifact.java | 0 .../repository/jpa/model/JpaRollout.java | 0 .../repository/jpa/model/JpaRolloutGroup.java | 4 - .../jpa/model/JpaSoftwareModule.java | 0 .../jpa/model/JpaSoftwareModuleMetadata.java | 0 .../jpa/model/JpaSoftwareModuleType.java | 0 .../repository/jpa/model/JpaTarget.java | 25 +- .../jpa/model/JpaTargetFilterQuery.java | 0 .../repository/jpa/model/JpaTargetInfo.java | 0 .../repository/jpa/model/JpaTargetTag.java | 0 .../jpa/model/JpaTenantConfiguration.java | 0 .../jpa/model/JpaTenantMetaData.java | 0 .../jpa/model/RolloutTargetGroup.java | 0 .../jpa/model/RolloutTargetGroupId.java | 0 .../jpa/model/SwMetadataCompositeKey.java | 0 .../specifications/ActionSpecifications.java | 0 .../DistributionSetSpecification.java | 0 .../DistributionSetTypeSpecification.java | 0 .../SoftwareModuleSpecification.java | 0 .../specifications/SpecificationsBuilder.java | 0 .../TargetFilterQuerySpecification.java | 0 .../specifications/TargetSpecifications.java | 0 .../AfterTransactionCommitExecutorHolder.java | 0 .../model/helper/CacheManagerHolder.java | 0 .../model/helper/EventBusHolder.java | 0 .../model/helper/SecurityChecker.java | 0 .../helper/SecurityTokenGeneratorHolder.java | 0 .../model/helper/SystemManagementHolder.java | 0 .../helper/SystemSecurityContextHolder.java | 0 .../model/helper/TenantAwareHolder.java | 0 .../TenantConfigurationManagementHolder.java | 0 .../repository/rsql/PropertyMapper.java | 0 .../hawkbit/repository/rsql/RSQLUtility.java | 2 + .../condition/PauseRolloutGroupAction.java | 0 .../RolloutGroupActionEvaluator.java | 0 .../RolloutGroupConditionEvaluator.java | 0 ...artNextGroupRolloutGroupSuccessAction.java | 0 .../ThresholdRolloutGroupErrorCondition.java | 0 ...ThresholdRolloutGroupSuccessCondition.java | 0 .../db/migration/H2/V1_0_1__init___H2.sql | 0 ...0__update_target_info_for_message___H2.sql | 0 .../H2/V1_4_0__cascade_delete___H2.sql | 0 .../H2/V1_4_1__cascade_delete___H2.sql | 0 .../H2/V1_5_0__target_filter_query___H2.sql | 0 .../H2/V1_6_0__rollout_management___H2.sql | 0 .../migration/MYSQL/V1_0_1__init___MYSQL.sql | 0 ...update_target_info_for_message___MYSQL.sql | 0 .../MYSQL/V1_4_0__cascade_delete___MYSQL.sql | 0 .../MYSQL/V1_4_1__cascade_delete___MYSQL.sql | 0 .../V1_5_0__target_filter_query___MYSQL.sql | 0 .../V1_6_0__rollout_management___MYSQL.sql | 0 .../hawkbit/AbstractIntegrationTest.java | 0 .../AbstractIntegrationTestWithMongoDB.java | 0 .../eclipse/hawkbit/CIMySqlTestDatabase.java | 0 .../eclipse/hawkbit/FreePortFileWriter.java | 0 .../eclipse/hawkbit/HashGeneratorUtils.java | 0 .../eclipse/hawkbit/LocalH2TestDatabase.java | 0 .../eclipse/hawkbit/MethodSecurityUtil.java | 0 .../hawkbit/RandomGeneratedInputStream.java | 0 .../eclipse/hawkbit/TestConfiguration.java | 0 .../org/eclipse/hawkbit/TestDataUtil.java | 0 .../org/eclipse/hawkbit/Testdatabase.java | 0 .../hawkbit/WithSpringAuthorityRule.java | 0 .../java/org/eclipse/hawkbit/WithUser.java | 0 .../eclipse/hawkbit/cache/CacheKeysTest.java | 0 .../hawkbit/cache/CacheWriteNotifyTest.java | 0 .../CacheFieldEntityListenerTest.java | 0 .../hawkbit/repository/ActionTest.java | 0 .../ArtifactManagementNoMongoDbTest.java | 0 .../repository/ArtifactManagementTest.java | 0 .../repository/ControllerManagementTest.java | 0 .../repository/DeploymentManagementTest.java | 0 .../DistributionSetManagementTest.java | 0 .../repository/ReportManagementTest.java | 0 .../repository/RolloutManagementTest.java | 0 .../repository/SoftwareManagementTest.java | 19 +- .../repository/SystemManagementTest.java | 0 .../hawkbit/repository/TagManagementTest.java | 0 .../TargetFilterQueryManagenmentTest.java | 0 .../TargetManagementSearchTest.java | 0 .../repository/TargetManagementTest.java | 0 .../TenantConfigurationManagementTest.java | 0 .../model/ModelEqualsHashcodeTest.java | 0 .../repository/rsql/RSQLActionFieldsTest.java | 1 + .../rsql/RSQLDistributionSetFieldTest.java | 1 + ...RSQLDistributionSetMetadataFieldsTest.java | 0 .../rsql/RSQLRolloutGroupFields.java | 0 .../rsql/RSQLSoftwareModuleFieldTest.java | 0 .../RSQLSoftwareModuleMetadataFieldsTest.java | 0 .../RSQLSoftwareModuleTypeFieldsTest.java | 0 .../repository/rsql/RSQLTagFieldsTest.java | 0 .../repository/rsql/RSQLTargetFieldTest.java | 1 + .../repository/rsql/RSQLUtilityTest.java | 2 + .../utils/MultipleInvokeHelper.java | 0 .../utils/RepositoryDataGenerator.java | 0 .../repository/utils/SuccessCondition.java | 0 .../tenancy/MultiTenancyEntityTest.java | 0 .../resources/application-test.properties | 0 hawkbit-repository/pom.xml | 239 +----------------- .../hawkbit/repository/model/Target.java | 54 ---- hawkbit-rest-core/pom.xml | 4 +- hawkbit-security-core/pom.xml | 2 +- .../im/authentication/SpPermission.java | 9 + hawkbit-security-integration/pom.xml | 2 +- hawkbit-ui/pom.xml | 7 +- .../hawkbit/ui/components/ProxyTarget.java | 69 ++++- .../smtable/SwModuleBeanQuery.java | 8 +- .../FilterQueryValidation.java | 4 +- .../actionhistory/ActionHistoryTable.java | 6 +- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 1 - 310 files changed, 647 insertions(+), 482 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-api/pom.xml rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionCreatedEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionPropertyChangeEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagCreatedBulkEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagDeletedEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagUpdateEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupChangeEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupCreatedEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupPropertyChangeEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutPropertyChangeEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetCreatedEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetInfoUpdateEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagCreatedBulkEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagDeletedEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagUpdateEvent.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/report/model/AbstractReportSeries.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeries.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeriesItem.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/report/model/InnerOuterDataReportSeries.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/report/model/SeriesTime.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/report/model/SystemUsageReport.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/report/model/TenantUsage.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java (97%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java (97%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java (99%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java (96%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/RolloutProperties.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java (98%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java (99%) rename hawkbit-repository/{src/main/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository}/TargetWithActionType.java (88%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactDeleteFailedException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactUploadFailedException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/CancelActionNotAllowedException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/ConcurrentModificationException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetCreationFailedMissingMandatoryModuleException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetTypeUndefinedException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/EntityAlreadyExistsException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/EntityLockedException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/EntityNotFoundException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/EntityReadOnlyException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/ForceQuitActionNotAllowedException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/GridFSDBFileNotFoundException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/IncompleteDistributionSetException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/InsufficientPermissionException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidMD5HashException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidSHA1HashException.java (100%) rename hawkbit-repository/{src/main/java/org/eclipse/hawkbit/repository/rsql => hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception}/RSQLParameterSyntaxException.java (97%) rename hawkbit-repository/{src/main/java/org/eclipse/hawkbit/repository/rsql => hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception}/RSQLParameterUnsupportedFieldException.java (97%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/RolloutIllegalStateException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/TenantNotExistException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyAttributeEntriesException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/exception/UnsupportedSoftwareModuleForThisDistributionSetException.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/Action.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java (100%) create mode 100644 hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java (100%) rename hawkbit-repository/{src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java => hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignedSoftwareModule.java} (79%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java (83%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java (98%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/PollStatus.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java (95%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditionBuilder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditions.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleIdName.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java (100%) create mode 100644 hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TargetIdName.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TargetUpdateStatus.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java (96%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java (80%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfigurationValue.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java (64%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountActionStatus.java (100%) rename hawkbit-repository/{ => hawkbit-repository-api}/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountStatus.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/README.md (100%) create mode 100644 hawkbit-repository/hawkbit-repository-jpa/pom.xml rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/fbExcludeFilter.xml (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/Constants.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/cache/CacheField.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/cache/CacheKeys.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/cache/CacheWriteNotify.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListener.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java (100%) rename hawkbit-repository/{src/main/java/org/eclipse/hawkbit/eventbus/event => hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus}/EventMerger.java (92%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitExecutor.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java (99%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java (98%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java (98%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java (99%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java (98%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/NoCountPagingRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantKeyGenerator.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaMetaData.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElementCompositeKey.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DsMetadataCompositeKey.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java (100%) rename hawkbit-repository/{src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java => hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionWithStatusCount.java} (73%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java (99%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java (90%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroup.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/RolloutTargetGroupId.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/SwMetadataCompositeKey.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/ActionSpecifications.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetSpecification.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/DistributionSetTypeSpecification.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SoftwareModuleSpecification.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SpecificationsBuilder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetFilterQuerySpecification.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetSpecifications.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/model/helper/AfterTransactionCommitExecutorHolder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/model/helper/CacheManagerHolder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/model/helper/EventBusHolder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/model/helper/SecurityChecker.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/model/helper/SecurityTokenGeneratorHolder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemSecurityContextHolder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantAwareHolder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantConfigurationManagementHolder.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/rsql/PropertyMapper.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java (99%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/rollout/condition/RolloutGroupActionEvaluator.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/rollout/condition/RolloutGroupConditionEvaluator.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupSuccessCondition.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/H2/V1_0_1__init___H2.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/H2/V1_2_0__update_target_info_for_message___H2.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/H2/V1_4_0__cascade_delete___H2.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/H2/V1_4_1__cascade_delete___H2.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/H2/V1_5_0__target_filter_query___H2.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/H2/V1_6_0__rollout_management___H2.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/MYSQL/V1_0_1__init___MYSQL.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/MYSQL/V1_2_0__update_target_info_for_message___MYSQL.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/MYSQL/V1_4_0__cascade_delete___MYSQL.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/MYSQL/V1_4_1__cascade_delete___MYSQL.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/MYSQL/V1_5_0__target_filter_query___MYSQL.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/main/resources/db/migration/MYSQL/V1_6_0__rollout_management___MYSQL.sql (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTestWithMongoDB.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/CIMySqlTestDatabase.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/FreePortFileWriter.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/HashGeneratorUtils.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/LocalH2TestDatabase.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/MethodSecurityUtil.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/RandomGeneratedInputStream.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/TestConfiguration.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/TestDataUtil.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/Testdatabase.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/WithSpringAuthorityRule.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/WithUser.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/cache/CacheKeysTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/cache/CacheWriteNotifyTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListenerTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementNoMongoDbTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java (98%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/SystemManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/TenantConfigurationManagementTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java (97%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java (98%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleFieldTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleMetadataFieldsTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTagFieldsTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java (98%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLUtilityTest.java (98%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/utils/MultipleInvokeHelper.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/repository/utils/SuccessCondition.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java (100%) rename hawkbit-repository/{ => hawkbit-repository-jpa}/src/test/resources/application-test.properties (100%) delete mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java diff --git a/hawkbit-autoconfigure/pom.xml b/hawkbit-autoconfigure/pom.xml index 7ad0e0911..044e6aece 100644 --- a/hawkbit-autoconfigure/pom.xml +++ b/hawkbit-autoconfigure/pom.xml @@ -46,7 +46,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} true diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index f3eb5c2c7..177494912 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -38,7 +38,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} @@ -93,7 +93,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} tests test diff --git a/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf-amqp/pom.xml index 127103b91..d1cb0cb30 100644 --- a/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf-amqp/pom.xml @@ -23,7 +23,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} @@ -90,7 +90,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} tests diff --git a/hawkbit-http-security/pom.xml b/hawkbit-http-security/pom.xml index a9b8a4080..03a9b6678 100644 --- a/hawkbit-http-security/pom.xml +++ b/hawkbit-http-security/pom.xml @@ -22,7 +22,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index 160299651..2279172e9 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -23,7 +23,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} @@ -92,7 +92,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} tests test diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java index a048226ec..ae4972610 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java @@ -32,9 +32,8 @@ import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.TargetWithActionType; -import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -94,7 +93,8 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { if (rsqlParam != null) { findDsPage = this.distributionSetManagement.findDistributionSetsAll(rsqlParam, pageable, false); } else { - findDsPage = this.distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageable, false, null); + findDsPage = this.distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageable, false, + null); } final List rest = MgmtDistributionSetMapper.toResponseFromDsList(findDsPage.getContent()); @@ -273,8 +273,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); - final DistributionSetMetadata findOne = this.distributionSetManagement - .findOne(new DsMetadataCompositeKey(ds, metadataKey)); + final DistributionSetMetadata findOne = this.distributionSetManagement.findOne(ds, metadataKey); return ResponseEntity. ok(MgmtDistributionSetMapper.toResponseDsMetadata(findOne)); } @@ -295,7 +294,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { // check if distribution set exists otherwise throw exception // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); - this.distributionSetManagement.deleteDistributionSetMetadata(new DsMetadataCompositeKey(ds, metadataKey)); + this.distributionSetManagement.deleteDistributionSetMetadata(ds, metadataKey); return ResponseEntity.ok().build(); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java index c01295828..aeaffa013 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java @@ -23,7 +23,6 @@ import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; @@ -246,7 +245,7 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { public ResponseEntity deleteMetadata(@PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("metadataKey") final String metadataKey) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); - softwareManagement.deleteSoftwareModuleMetadata(new SwMetadataCompositeKey(sw, metadataKey)); + softwareManagement.deleteSoftwareModuleMetadata(sw, metadataKey); return ResponseEntity.ok().build(); } diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index daa010166..63e09fb98 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -30,7 +30,6 @@ import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; @@ -685,10 +684,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest .andExpect(jsonPath("[1]key", equalTo(knownKey2))) .andExpect(jsonPath("[1]value", equalTo(knownValue2))); - final DistributionSetMetadata metaKey1 = distributionSetManagement - .findOne(new DsMetadataCompositeKey(testDS, knownKey1)); - final DistributionSetMetadata metaKey2 = distributionSetManagement - .findOne(new DsMetadataCompositeKey(testDS, knownKey2)); + final DistributionSetMetadata metaKey1 = distributionSetManagement.findOne(testDS, knownKey1); + final DistributionSetMetadata metaKey2 = distributionSetManagement.findOne(testDS, knownKey2); assertThat(metaKey1.getValue()).isEqualTo(knownValue1); assertThat(metaKey2.getValue()).isEqualTo(knownValue2); @@ -715,8 +712,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("key", equalTo(knownKey))).andExpect(jsonPath("value", equalTo(updateValue))); - final DistributionSetMetadata assertDS = distributionSetManagement - .findOne(new DsMetadataCompositeKey(testDS, knownKey)); + final DistributionSetMetadata assertDS = distributionSetManagement.findOne(testDS, knownKey); assertThat(assertDS.getValue()).isEqualTo(updateValue); } @@ -737,7 +733,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); try { - distributionSetManagement.findOne(new DsMetadataCompositeKey(testDS, knownKey)); + distributionSetManagement.findOne(testDS, knownKey); fail("expected EntityNotFoundException but didn't throw"); } catch (final EntityNotFoundException e) { // ok as expected diff --git a/hawkbit-repository/hawkbit-repository-api/pom.xml b/hawkbit-repository/hawkbit-repository-api/pom.xml new file mode 100644 index 000000000..ab8ab75db --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-repository + 0.2.0-SNAPSHOT + + hawkbit-repository-api + hawkBit :: Repository API + + + + org.eclipse.hawkbit + hawkbit-security-core + ${project.version} + + + javax.validation + validation-api + + + org.hibernate + hibernate-validator + + + org.springframework.hateoas + spring-hateoas + + + \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionCreatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionCreatedEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionCreatedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionCreatedEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionPropertyChangeEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionPropertyChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionPropertyChangeEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagCreatedBulkEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagCreatedBulkEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagCreatedBulkEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagCreatedBulkEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagDeletedEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagDeletedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagDeletedEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagUpdateEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagUpdateEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagUpdateEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagUpdateEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupChangeEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupChangeEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupCreatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupCreatedEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupCreatedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupCreatedEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupPropertyChangeEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupPropertyChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupPropertyChangeEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutPropertyChangeEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutPropertyChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutPropertyChangeEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetCreatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetCreatedEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetCreatedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetCreatedEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetInfoUpdateEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetInfoUpdateEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetInfoUpdateEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetInfoUpdateEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagCreatedBulkEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagCreatedBulkEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagCreatedBulkEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagCreatedBulkEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagDeletedEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagDeletedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagDeletedEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagUpdateEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagUpdateEvent.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagUpdateEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagUpdateEvent.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/AbstractReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/AbstractReportSeries.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/AbstractReportSeries.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/AbstractReportSeries.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeries.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeries.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeries.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeriesItem.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeriesItem.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeriesItem.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeriesItem.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/InnerOuterDataReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/InnerOuterDataReportSeries.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/InnerOuterDataReportSeries.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/InnerOuterDataReportSeries.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/SeriesTime.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SeriesTime.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/SeriesTime.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SeriesTime.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/SystemUsageReport.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SystemUsageReport.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/SystemUsageReport.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SystemUsageReport.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/TenantUsage.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/TenantUsage.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/report/model/TenantUsage.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/TenantUsage.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 42843b495..b6efec9b0 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -16,7 +16,6 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.TargetWithActionType; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -101,8 +100,6 @@ public interface DeploymentManagement { DistributionSetAssignmentResult assignDistributionSet(@NotNull Long dsID, @NotEmpty Collection targets); - // TODO document: why are rollouts in the signature ? can all the parameters - // be null or the list empty? /** * method assigns the {@link DistributionSet} to all {@link Target}s by * their IDs with a specific {@link ActionType} and {@code forcetime}. @@ -190,7 +187,6 @@ public interface DeploymentManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Long countActionsByTarget(@NotNull Target target); - // TODO: validate parameters /** * Creates an action entry into the action repository. In case of existing * scheduled actions the scheduled actions gets canceled. A scheduled action @@ -210,8 +206,9 @@ public interface DeploymentManagement { * the roll out group for this action */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - void createScheduledAction(Collection targets, DistributionSet distributionSet, ActionType actionType, - long forcedTime, Rollout rollout, RolloutGroup rolloutGroup); + void createScheduledAction(@NotEmpty Collection targets, @NotNull DistributionSet distributionSet, + @NotNull ActionType actionType, Long forcedTime, @NotNull Rollout rollout, + @NotNull RolloutGroup rolloutGroup); /** * Get the {@link Action} entity for given actionId. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index 8316508d9..dcb135e62 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -12,7 +12,6 @@ import java.util.Collection; import java.util.List; import java.util.Set; -import javax.persistence.Entity; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; @@ -21,8 +20,6 @@ import org.eclipse.hawkbit.repository.exception.DistributionSetCreationFailedMis import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException; -import org.eclipse.hawkbit.repository.jpa.model.DistributionSetTypeElement; -import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; @@ -37,8 +34,6 @@ import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Transactional; /** * Management service for {@link DistributionSet}s. @@ -176,7 +171,6 @@ public interface DistributionSetManagement { * @return created {@link Entity} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - @Transactional(isolation = Isolation.READ_UNCOMMITTED) List createDistributionSetTypes(@NotNull Collection types); /** @@ -215,7 +209,7 @@ public interface DistributionSetManagement { * the ID of the distribution set meta data to delete */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - void deleteDistributionSetMetadata(@NotNull DsMetadataCompositeKey id); + void deleteDistributionSetMetadata(@NotNull final DistributionSet distributionSet, @NotNull final String key); /** * Deletes or mark as delete in case the type is in use. @@ -456,7 +450,7 @@ public interface DistributionSetManagement { * in case the meta data does not exists for the given key */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - DistributionSetMetadata findOne(@NotNull DsMetadataCompositeKey id); + DistributionSetMetadata findOne(@NotNull DistributionSet distributionSet, @NotNull String key); /** * Generates an empty {@link DistributionSet} without persisting it. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java index 933f2ad9e..fca145908 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java @@ -67,6 +67,10 @@ public interface ReportManagement { private static final long serialVersionUID = 1L; private static final PerMonth PER_MONTH = new PerMonth(); + private DateTypes() { + // Utility class + } + /** * @return PerMonth */ @@ -74,9 +78,6 @@ public interface ReportManagement { return PER_MONTH; } - private DateTypes() { - - } } /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java similarity index 96% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index bf58e3053..ae1cc5882 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -18,7 +18,6 @@ import org.eclipse.hawkbit.repository.model.TargetWithActionStatus; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; /** @@ -40,7 +39,6 @@ public interface RolloutGroupManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) Page findAllRolloutGroupsWithDetailedStatus(@NotNull Long rolloutId, @NotNull Pageable pageable); - // TODO discuss: target read perm missing? /** * * Find all targets with action status by rollout group id. The action @@ -55,7 +53,7 @@ public interface RolloutGroupManagement { * rollout group * @return {@link TargetWithActionStatus} target with action status */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ_AND_TARGET_READ) Page findAllTargetsWithActionStatus(@NotNull PageRequest pageRequest, @NotNull RolloutGroup rolloutGroup); @@ -100,7 +98,6 @@ public interface RolloutGroupManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) Page findRolloutGroupsByRolloutId(@NotNull Long rolloutId, @NotNull Pageable pageable); - // TODO discuss: target read perm missing? /** * Get targets of specified rollout group. * @@ -111,10 +108,9 @@ public interface RolloutGroupManagement { * * @return Page list of targets of a rollout group */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ_AND_TARGET_READ) Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, @NotNull Pageable page); - // TODO discuss: target read perm missing? /** * Get targets of specified rollout group. * @@ -127,7 +123,7 @@ public interface RolloutGroupManagement { * * @return Page list of targets of a rollout group */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ_AND_TARGET_READ) Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, @NotNull String rsqlParam, @NotNull Pageable pageable); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutProperties.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutProperties.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutProperties.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutProperties.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java index a586c0bfb..465cb50ea 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java @@ -11,14 +11,12 @@ package org.eclipse.hawkbit.repository; import java.util.Collection; import java.util.List; -import javax.persistence.Entity; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; -import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; +import org.eclipse.hawkbit.repository.model.AssignedSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; @@ -159,7 +157,7 @@ public interface SoftwareManagement { * the ID of the software module meta data to delete */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - void deleteSoftwareModuleMetadata(@NotNull SwMetadataCompositeKey id); + void deleteSoftwareModuleMetadata(@NotNull SoftwareModule softwareModule, @NotNull String key); /** * Deletes {@link SoftwareModule}s which is any if the given ids. @@ -312,7 +310,7 @@ public interface SoftwareManagement { * @return the page of found {@link SoftwareModule} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( + Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( @NotNull Pageable pageable, @NotNull Long orderByDistributionId, String searchText, SoftwareModuleType type); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index f8e5e8a91..ccf8c6712 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -12,7 +12,6 @@ import java.net.URI; import java.util.Collection; import java.util.List; -import javax.persistence.Entity; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetWithActionType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetWithActionType.java similarity index 88% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetWithActionType.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetWithActionType.java index a2c0a7d8f..579b4ef0d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetWithActionType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetWithActionType.java @@ -6,14 +6,14 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; +import org.eclipse.hawkbit.repository.model.Target; /** - * A custom JPA database return value object with the proper constructor so JPA - * is able to parse the result-set directly into this object. + * A custom view on {@link Target} with {@link ActionType}. * * * diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactDeleteFailedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactDeleteFailedException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactDeleteFailedException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactDeleteFailedException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactUploadFailedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactUploadFailedException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactUploadFailedException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ArtifactUploadFailedException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/CancelActionNotAllowedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/CancelActionNotAllowedException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/CancelActionNotAllowedException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/CancelActionNotAllowedException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ConcurrentModificationException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ConcurrentModificationException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ConcurrentModificationException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ConcurrentModificationException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetCreationFailedMissingMandatoryModuleException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetCreationFailedMissingMandatoryModuleException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetCreationFailedMissingMandatoryModuleException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetCreationFailedMissingMandatoryModuleException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetTypeUndefinedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetTypeUndefinedException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetTypeUndefinedException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/DistributionSetTypeUndefinedException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/EntityAlreadyExistsException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityAlreadyExistsException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/EntityAlreadyExistsException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityAlreadyExistsException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/EntityLockedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityLockedException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/EntityLockedException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityLockedException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/EntityNotFoundException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityNotFoundException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/EntityNotFoundException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityNotFoundException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/EntityReadOnlyException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityReadOnlyException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/EntityReadOnlyException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/EntityReadOnlyException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ForceQuitActionNotAllowedException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ForceQuitActionNotAllowedException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ForceQuitActionNotAllowedException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ForceQuitActionNotAllowedException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/GridFSDBFileNotFoundException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/GridFSDBFileNotFoundException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/GridFSDBFileNotFoundException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/GridFSDBFileNotFoundException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/IncompleteDistributionSetException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/IncompleteDistributionSetException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/IncompleteDistributionSetException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/IncompleteDistributionSetException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/InsufficientPermissionException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InsufficientPermissionException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/InsufficientPermissionException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InsufficientPermissionException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidMD5HashException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidMD5HashException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidMD5HashException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidMD5HashException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidSHA1HashException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidSHA1HashException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidSHA1HashException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidSHA1HashException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLParameterSyntaxException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterSyntaxException.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLParameterSyntaxException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterSyntaxException.java index aa43f1bbb..268ab02ba 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLParameterSyntaxException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterSyntaxException.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLParameterUnsupportedFieldException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterUnsupportedFieldException.java similarity index 97% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLParameterUnsupportedFieldException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterUnsupportedFieldException.java index e95368acb..df58ecc8b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLParameterUnsupportedFieldException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RSQLParameterUnsupportedFieldException.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.exception; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/RolloutIllegalStateException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RolloutIllegalStateException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/RolloutIllegalStateException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/RolloutIllegalStateException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/TenantNotExistException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/TenantNotExistException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/TenantNotExistException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/TenantNotExistException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyAttributeEntriesException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyAttributeEntriesException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyAttributeEntriesException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyAttributeEntriesException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/ToManyStatusEntriesException.java similarity index 100% rename from hawkbit-repository/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/ToManyStatusEntriesException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/UnsupportedSoftwareModuleForThisDistributionSetException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/UnsupportedSoftwareModuleForThisDistributionSetException.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/exception/UnsupportedSoftwareModuleForThisDistributionSetException.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/UnsupportedSoftwareModuleForThisDistributionSetException.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Action.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java new file mode 100644 index 000000000..c497783e2 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.model; + +/** + * View for querying {@link Action} include the count of the action's + * {@link ActionStatus} entries. + * + */ +public interface ActionWithStatusCount { + + /** + * @return {@link Action} + */ + Action getAction(); + + /** + * @return {@link DistributionSet} ID. + */ + Long getDsId(); + + /** + * @return {@link DistributionSet} name. + */ + String getDsName(); + + /** + * @return {@link DistributionSet} version. + */ + String getDsVersion(); + + /** + * @return number of {@link ActionStatus} entries + */ + Long getActionStatusCount(); + + /** + * @return name of the {@link Rollout}. + */ + String getRolloutName(); + +} \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignedSoftwareModule.java similarity index 79% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignedSoftwareModule.java index 34aa8345a..b23b3f0fe 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignedSoftwareModule.java @@ -14,7 +14,7 @@ import java.io.Serializable; * Use to display software modules for the selected distribution. * */ -public class CustomSoftwareModule implements Serializable { +public class AssignedSoftwareModule implements Serializable { private static final long serialVersionUID = 6144585781451168439L; @@ -31,22 +31,28 @@ public class CustomSoftwareModule implements Serializable { * as true if the software module is assigned and false if not * assigned. */ - public CustomSoftwareModule(final SoftwareModule softwareModule, final boolean assigned) { + public AssignedSoftwareModule(final SoftwareModule softwareModule, final boolean assigned) { this.softwareModule = softwareModule; this.assigned = assigned; } + /** + * @return {@link SoftwareModule} + */ public SoftwareModule getSoftwareModule() { return softwareModule; } + /** + * @return true if assigned + */ public boolean isAssigned() { return assigned; } @Override public String toString() { - return "CustomSoftwareModule [softwareModule=" + softwareModule + ", assigned=" + assigned + "]"; + return "AssignedSoftwareModule [softwareModule=" + softwareModule + ", assigned=" + assigned + "]"; } @Override @@ -66,10 +72,10 @@ public class CustomSoftwareModule implements Serializable { if (obj == null) { return false; } - if (!(obj instanceof CustomSoftwareModule)) { + if (!(obj instanceof AssignedSoftwareModule)) { return false; } - final CustomSoftwareModule other = (CustomSoftwareModule) obj; + final AssignedSoftwareModule other = (AssignedSoftwareModule) obj; if (assigned != other.assigned) { return false; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java similarity index 83% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java index 2dea94f33..043386ed1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java @@ -19,7 +19,6 @@ public class AssignmentResult { private final int total; private final int assigned; private final int alreadyAssigned; - private final int unassigned; private final List assignedEntity; private final List unassignedEntity; @@ -47,28 +46,45 @@ public class AssignmentResult { this.assignedEntity = assignedEntity; this.unassignedEntity = unassignedEntity; } - + + /** + * @return number of newly assigned elements. + */ public int getAssigned() { return assigned; } - + + /** + * @return total number (assigned and already assigned). + */ public int getTotal() { return total; } - + + /** + * @return number of already assigned/ignored elements. + */ public int getAlreadyAssigned() { return alreadyAssigned; } - + /** + * @return number of unsassigned elements + */ public int getUnassigned() { return unassigned; } + /** + * @return {@link List} of assigned entity. + */ public List getAssignedEntity() { return assignedEntity; } - + + /** + * @return {@link List} of unassigned entity. + */ public List getUnassignedEntity() { return unassignedEntity; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java index 07c63ee89..14683b1b1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java @@ -10,8 +10,6 @@ package org.eclipse.hawkbit.repository.model; import java.util.Set; -import org.eclipse.hawkbit.repository.jpa.model.DistributionSetTypeElement; - /** * A {@link DistributionSetType} is an abstract definition for * {@link DistributionSet} that defines what {@link SoftwareModule}s can be diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifactProvider.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/LocalArtifact.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/PollStatus.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/PollStatus.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/PollStatus.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/PollStatus.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java similarity index 95% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java index 3f383d605..e4d9f5bb7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java @@ -8,6 +8,12 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * The core functionality of a {@link Rollout} is the cascading processing of + * (sub) deployment groups. The group defines under which conditions the + * following group is processed. + * + */ public interface RolloutGroup extends NamedEntity { Rollout getRollout(); @@ -20,8 +26,6 @@ public interface RolloutGroup extends NamedEntity { RolloutGroup getParent(); - void setParent(RolloutGroup parent); - RolloutGroupSuccessCondition getSuccessCondition(); void setSuccessCondition(RolloutGroupSuccessCondition finishCondition); @@ -52,12 +56,6 @@ public interface RolloutGroup extends NamedEntity { long getTotalTargets(); - void setTotalTargets(long totalTargets); - - void setSuccessAction(RolloutGroupSuccessAction successAction); - - void setSuccessActionExp(String successActionExp); - /** * @return the totalTargetCountStatus */ diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditionBuilder.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditionBuilder.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditionBuilder.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditionBuilder.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditions.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditions.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditions.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroupConditions.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleIdName.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleIdName.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleIdName.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleIdName.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java new file mode 100644 index 000000000..56ab89ad3 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.model; + +import java.util.List; +import java.util.Set; + +/** + *

+ * The {@link Target} is the target of all provisioning operations. It contains + * the currently installed {@link DistributionSet} (i.e. current state). In + * addition it holds the target {@link DistributionSet} that has to be + * provisioned next (i.e. target state). + *

+ */ +public interface Target extends NamedEntity { + + /** + * @return currently assigned {@link DistributionSet}. + */ + DistributionSet getAssignedDistributionSet(); + + /** + * @return business identifier of the {@link Target} + */ + String getControllerId(); + + /** + * @return assigned {@link TargetTag}s. + */ + Set getTags(); + + /** + * @return {@link Action} history of the {@link Target}. + */ + List getActions(); + + /** + * @return {@link TargetIdName} view of the {@link Target}. + */ + default TargetIdName getTargetIdName() { + return new TargetIdName(getId(), getControllerId(), getName()); + } + + /** + * @return the targetInfo object + */ + TargetInfo getTargetInfo(); + + /** + * @return the securityToken + */ + String getSecurityToken(); + +} diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetIdName.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetIdName.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetIdName.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetIdName.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetUpdateStatus.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetUpdateStatus.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetUpdateStatus.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetUpdateStatus.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java similarity index 96% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java index 987b993e1..f775a3879 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java @@ -12,7 +12,7 @@ import org.eclipse.hawkbit.repository.model.Action.Status; /** * - * Rollout - Target with action status. + * Target with action status. * */ public class TargetWithActionStatus { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java similarity index 80% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java index 4b7bf861e..f79306d75 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java @@ -8,8 +8,15 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * {@link BaseEntity} that distinguishes between tenants. + * + */ public interface TenantAwareBaseEntity extends BaseEntity { + /** + * @return tenant name + */ String getTenant(); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfigurationValue.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfigurationValue.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfigurationValue.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfigurationValue.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java similarity index 64% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java index 38f9ddbb3..23f81ae6f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java @@ -8,12 +8,27 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * MetaData of a tenant account. + * + */ public interface TenantMetaData extends BaseEntity { + /** + * @return default {@link DistributionSetType}. + */ DistributionSetType getDefaultDsType(); + /** + * @param defaultDsType + * that is used of none is selected for a new + * {@link DistributionSet}. + */ void setDefaultDsType(DistributionSetType defaultDsType); + /** + * @return tenant name + */ String getTenant(); } \ No newline at end of file diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountActionStatus.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountActionStatus.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountActionStatus.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountActionStatus.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountStatus.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountStatus.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountStatus.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TotalTargetCountStatus.java diff --git a/hawkbit-repository/README.md b/hawkbit-repository/hawkbit-repository-jpa/README.md similarity index 100% rename from hawkbit-repository/README.md rename to hawkbit-repository/hawkbit-repository-jpa/README.md diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml new file mode 100644 index 000000000..d84b36778 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml @@ -0,0 +1,238 @@ + + + 4.0.0 + + org.eclipse.hawkbit + 0.2.0-SNAPSHOT + hawkbit-repository + + hawkbit-repository-jpa + hawkBit :: Repository JPA Implementation + + + + + com.ethlo.eclipselink.tools + http://ethlo.com/maven + + + + + + com.ethlo.eclipselink.tools + http://ethlo.com/maven + + + + + + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-databind + + + + + org.eclipse.hawkbit + hawkbit-repository-api + ${project.version} + + + org.eclipse.hawkbit + hawkbit-artifact-repository-mongo + ${project.version} + + + com.google.guava + guava + + + net._01001111 + jlorem + + + org.springframework.boot + spring-boot + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.eclipse.persistence + org.eclipse.persistence.jpa + + + org.springframework.security + spring-security-core + + + org.flywaydb + flyway-core + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + com.h2database + h2 + test + + + org.mariadb.jdbc + mariadb-java-client + test + + + javax.el + javax.el-api + test + + + org.springframework + spring-context-support + test + + + ru.yandex.qatools.allure + allure-junit-adaptor + test + + + org.springframework.data + spring-data-rest-webmvc + test + + + org.springframework.security + spring-security-aspects + test + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework + spring-test + test + + + org.easytesting + fest-assert-core + test + + + org.easytesting + fest-assert + test + + + de.flapdoodle.embed + de.flapdoodle.embed.mongo + test + + + org.springframework.security + spring-security-config + test + + + org.springframework.security + spring-security-web + test + + + cz.jirutka.rsql + rsql-parser + + + + + + + + org.bsc.maven + maven-processor-plugin + + + process + + process + + generate-sources + + + org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor + + + + + + + org.hibernate + hibernate-jpamodelgen + ${hibernate.version} + + + + + + com.ethlo.persistence.tools + eclipselink-maven-plugin + 2.6.2 + + + process-classes + + weave + + + + + + org.eclipse.persistence + org.eclipse.persistence.jpa + ${eclipselink.version} + + + org.javassist + javassist + 3.20.0-GA + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + + diff --git a/hawkbit-repository/src/fbExcludeFilter.xml b/hawkbit-repository/hawkbit-repository-jpa/src/fbExcludeFilter.xml similarity index 100% rename from hawkbit-repository/src/fbExcludeFilter.xml rename to hawkbit-repository/hawkbit-repository-jpa/src/fbExcludeFilter.xml diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/Constants.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/Constants.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/Constants.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/Constants.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/cache/CacheField.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheField.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/cache/CacheField.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheField.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/cache/CacheKeys.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheKeys.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/cache/CacheKeys.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheKeys.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/cache/CacheWriteNotify.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheWriteNotify.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/cache/CacheWriteNotify.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheWriteNotify.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListener.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListener.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListener.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/EventMerger.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EventMerger.java similarity index 92% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/EventMerger.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EventMerger.java index fe4cf4b34..b4ebdb743 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/EventMerger.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EventMerger.java @@ -6,13 +6,21 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.eventbus; import java.util.Iterator; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.eclipse.hawkbit.eventbus.EventSubscriber; +import org.eclipse.hawkbit.eventbus.event.ActionCreatedEvent; +import org.eclipse.hawkbit.eventbus.event.ActionPropertyChangeEvent; +import org.eclipse.hawkbit.eventbus.event.Event; +import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; +import org.eclipse.hawkbit.eventbus.event.RolloutGroupChangeEvent; +import org.eclipse.hawkbit.eventbus.event.RolloutGroupCreatedEvent; +import org.eclipse.hawkbit.eventbus.event.RolloutGroupPropertyChangeEvent; +import org.eclipse.hawkbit.eventbus.event.RolloutPropertyChangeEvent; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitExecutor.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitExecutor.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitExecutor.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitExecutor.java diff --git a/hawkbit-repository/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 similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ActionStatusRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DeploymentHelper.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetMetadataRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/EclipseLinkTargetInfoRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactProviderRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/ExternalArtifactRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java diff --git a/hawkbit-repository/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 similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index af7f6371d..9f692e5f6 100644 --- a/hawkbit-repository/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 @@ -287,7 +287,7 @@ public class JpaControllerManagement implements ControllerManagement { return actionRepository.save(mergedAction); } - private void handleErrorOnAction(final JpaAction mergedAction, final Target mergedTarget) { + private void handleErrorOnAction(final JpaAction mergedAction, final JpaTarget mergedTarget) { mergedAction.setActive(false); mergedAction.setStatus(Status.ERROR); mergedTarget.setAssignedDistributionSet(null); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index 999a5a5c9..d869dd758 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -37,12 +37,14 @@ import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.ForceQuitActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetException; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionWithStatusCount; import org.eclipse.hawkbit.repository.jpa.model.JpaAction_; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; @@ -479,7 +481,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Modifying @Transactional(isolation = Isolation.READ_COMMITTED) public void createScheduledAction(final Collection targets, final DistributionSet distributionSet, - final ActionType actionType, final long forcedTime, final Rollout rollout, + final ActionType actionType, final Long forcedTime, final Rollout rollout, final RolloutGroup rolloutGroup) { // cancel all current scheduled actions for this target. E.g. an action // is already scheduled and a next action is created then cancel the @@ -576,14 +578,14 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Override public List findActionsWithStatusCountByTargetOrderByIdDesc(final Target target) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - final CriteriaQuery query = cb.createQuery(ActionWithStatusCount.class); + final CriteriaQuery query = cb.createQuery(JpaActionWithStatusCount.class); final Root actionRoot = query.from(JpaAction.class); final ListJoin actionStatusJoin = actionRoot.join(JpaAction_.actionStatus, JoinType.LEFT); final Join actionDsJoin = actionRoot.join(JpaAction_.distributionSet); final Join actionRolloutJoin = actionRoot.join(JpaAction_.rollout, JoinType.LEFT); - final CriteriaQuery multiselect = query.distinct(true).multiselect( + final CriteriaQuery multiselect = query.distinct(true).multiselect( actionRoot.get(JpaAction_.id), actionRoot.get(JpaAction_.actionType), actionRoot.get(JpaAction_.active), actionRoot.get(JpaAction_.forcedTime), actionRoot.get(JpaAction_.status), actionRoot.get(JpaAction_.createdAt), actionRoot.get(JpaAction_.lastModifiedAt), @@ -593,7 +595,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { multiselect.where(cb.equal(actionRoot.get(JpaAction_.target), target)); multiselect.orderBy(cb.desc(actionRoot.get(JpaAction_.id))); multiselect.groupBy(actionRoot.get(JpaAction_.id)); - return entityManager.createQuery(multiselect).getResultList(); + return new ArrayList<>(entityManager.createQuery(multiselect).getResultList()); } @Override diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index e17c737e7..66bb9037d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -508,7 +508,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { final JpaDistributionSetMetadata metadata = (JpaDistributionSetMetadata) md; // check if exists otherwise throw entity not found exception - findOne(metadata.getId()); + findOne(metadata.getDistributionSet(), metadata.getKey()); // touch it to update the lock revision because we are modifying the // DS indirectly entityManager.merge((JpaDistributionSet) metadata.getDistributionSet()).setLastModifiedAt(0L); @@ -518,8 +518,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - public void deleteDistributionSetMetadata(final DsMetadataCompositeKey id) { - distributionSetMetadataRepository.delete(id); + public void deleteDistributionSetMetadata(final DistributionSet distributionSet, final String key) { + distributionSetMetadataRepository.delete(new DsMetadataCompositeKey(distributionSet, key)); } @Override @@ -555,10 +555,11 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { } @Override - public DistributionSetMetadata findOne(final DsMetadataCompositeKey id) { - final DistributionSetMetadata findOne = distributionSetMetadataRepository.findOne(id); + public DistributionSetMetadata findOne(final DistributionSet distributionSet, final String key) { + final DistributionSetMetadata findOne = distributionSetMetadataRepository + .findOne(new DsMetadataCompositeKey(distributionSet, key)); if (findOne == null) { - throw new EntityNotFoundException("Metadata with key '" + id.getKey() + "' does not exist"); + throw new EntityNotFoundException("Metadata with key '" + key + "' does not exist"); } return findOne; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index 744c863ba..6a5b534d1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -24,6 +24,7 @@ import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.RolloutFields; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; @@ -266,7 +267,7 @@ public class JpaRolloutManagement implements RolloutManagement { group.setErrorAction(conditions.getErrorAction()); group.setErrorActionExp(conditions.getErrorActionExp()); - final RolloutGroup savedGroup = rolloutGroupRepository.save(group); + final JpaRolloutGroup savedGroup = rolloutGroupRepository.save(group); final Slice targetGroup = targetManagement.findTargetsAll(savedRollout.getTargetFilterQuery(), new OffsetBasedPageRequest(pageIndex, groupSize, new Sort(Direction.ASC, "id"))); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java similarity index 98% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index b98ff0754..05a38d428 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -43,7 +43,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule_; import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; import org.eclipse.hawkbit.repository.jpa.specifications.SoftwareModuleSpecification; import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; -import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; +import org.eclipse.hawkbit.repository.model.AssignedSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -371,12 +371,12 @@ public class JpaSoftwareManagement implements SoftwareManagement { } @Override - public Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( + public Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( final Pageable pageable, final Long orderByDistributionId, final String searchText, final SoftwareModuleType ty) { final JpaSoftwareModuleType type = (JpaSoftwareModuleType) ty; - final List resultList = new ArrayList<>(); + final List resultList = new ArrayList<>(); final int pageSize = pageable.getPageSize(); final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); @@ -405,7 +405,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { if (pageable.getOffset() < assignedSoftwareModules.size()) { assignedSoftwareModules .subList(pageable.getOffset(), Math.min(assignedSoftwareModules.size(), pageable.getPageSize())) - .forEach(sw -> resultList.add(new CustomSoftwareModule(sw, true))); + .forEach(sw -> resultList.add(new AssignedSoftwareModule(sw, true))); } if (assignedSoftwareModules.size() >= pageSize) { @@ -434,7 +434,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { .setFirstResult(Math.max(0, pageable.getOffset() - assignedSoftwareModules.size())) .setMaxResults(pageSize).getResultList(); // map result - unassignedSoftwareModules.forEach(sw -> resultList.add(new CustomSoftwareModule(sw, false))); + unassignedSoftwareModules.forEach(sw -> resultList.add(new AssignedSoftwareModule(sw, false))); return new SliceImpl<>(resultList); } @@ -597,8 +597,8 @@ public class JpaSoftwareManagement implements SoftwareManagement { @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying - public void deleteSoftwareModuleMetadata(final SwMetadataCompositeKey id) { - softwareModuleMetadataRepository.delete(id); + public void deleteSoftwareModuleMetadata(final SoftwareModule softwareModule, final String key) { + softwareModuleMetadataRepository.delete(new SwMetadataCompositeKey(softwareModule, key)); } @Override diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/LocalArtifactRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/NoCountPagingRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/NoCountPagingRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/NoCountPagingRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/NoCountPagingRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutGroupRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutTargetGroupRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleMetadataRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetInfoRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantKeyGenerator.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantKeyGenerator.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantKeyGenerator.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantKeyGenerator.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantMetaDataRepository.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaMetaData.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaMetaData.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaMetaData.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaMetaData.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElementCompositeKey.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElementCompositeKey.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElementCompositeKey.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElementCompositeKey.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DsMetadataCompositeKey.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DsMetadataCompositeKey.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DsMetadataCompositeKey.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DsMetadataCompositeKey.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionWithStatusCount.java similarity index 73% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionWithStatusCount.java index 6bc1efa56..32b01cbe2 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionWithStatusCount.java @@ -6,25 +6,21 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model; +package org.eclipse.hawkbit.repository.jpa.model; -import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.ActionWithStatusCount; /** * Custom JPA Model for querying {@link Action} include the count of the * action's {@link ActionStatus}. * */ -// TODO: create interface -public class ActionWithStatusCount { +public class JpaActionWithStatusCount implements ActionWithStatusCount { private final Long actionStatusCount; - private final boolean actionActive; - private final long actionForceTime; - private final Status actionStatus; - private final Long actionCreatedAt; - private final Long actionLastModifiedAt; private final Long dsId; private final String dsName; private final String dsVersion; @@ -60,16 +56,12 @@ public class ActionWithStatusCount { * @param rolloutName * the rollout name */ - - public ActionWithStatusCount(final Long actionId, final ActionType actionType, final boolean active, + // Exception squid:S00107 - needed this way for JPA to fill the view + @SuppressWarnings("squid:S00107") + public JpaActionWithStatusCount(final Long actionId, final ActionType actionType, final boolean active, final long forcedTime, final Status status, final Long actionCreatedAt, final Long actionLastModifiedAt, final Long dsId, final String dsName, final String dsVersion, final Long actionStatusCount, final String rolloutName) { - actionActive = active; - actionForceTime = forcedTime; - actionStatus = status; - this.actionCreatedAt = actionCreatedAt; - this.actionLastModifiedAt = actionLastModifiedAt; this.dsId = dsId; this.dsName = dsName; this.dsVersion = dsVersion; @@ -78,42 +70,43 @@ public class ActionWithStatusCount { action = new JpaAction(); action.setActionType(actionType); - action.setActive(actionActive); - action.setForcedTime(actionForceTime); - action.setStatus(actionStatus); + action.setActive(active); + action.setForcedTime(forcedTime); + action.setStatus(status); action.setId(actionId); + action.setActionType(actionType); + action.setCreatedAt(actionCreatedAt); + action.setLastModifiedAt(actionLastModifiedAt); + } + @Override public Action getAction() { return action; } - public Long getActionCreatedAt() { - return actionCreatedAt; - } - - public Long getActionLastModifiedAt() { - return actionLastModifiedAt; - } - + @Override public Long getDsId() { return dsId; } + @Override public String getDsName() { return dsName; } + @Override public String getDsVersion() { return dsVersion; } + @Override public Long getActionStatusCount() { return actionStatusCount; } + @Override public String getRolloutName() { return rolloutName; } - } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java similarity index 99% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java index ed2620ae6..6be29bb9c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java @@ -114,7 +114,6 @@ public class JpaRolloutGroup extends AbstractJpaNamedEntity implements RolloutGr return parent; } - @Override public void setParent(final RolloutGroup parent) { this.parent = (JpaRolloutGroup) parent; } @@ -194,17 +193,14 @@ public class JpaRolloutGroup extends AbstractJpaNamedEntity implements RolloutGr return totalTargets; } - @Override public void setTotalTargets(final long totalTargets) { this.totalTargets = totalTargets; } - @Override public void setSuccessAction(final RolloutGroupSuccessAction successAction) { this.successAction = successAction; } - @Override public void setSuccessActionExp(final String successActionExp) { this.successActionExp = successActionExp; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java similarity index 100% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java similarity index 90% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java index 4540b68d3..f89eeb184 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -39,7 +39,6 @@ import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.helper.SecurityChecker; @@ -49,19 +48,7 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; import org.springframework.data.domain.Persistable; /** - *

- * The {@link Target} is the target of all provisioning operations. It contains - * the currently installed {@link DistributionSet} (i.e. current state). In - * addition it holds the target {@link DistributionSet} that has to be - * provisioned next (i.e. target state). - *

- * - *

- * {@link #getStatus()}s() shows if the {@link Target} is - * {@link TargetStatus#IN_SYNC} or a provisioning is - * {@link TargetStatus#PENDING} or the target is only - * {@link TargetStatus#REGISTERED}, i.e. a target {@link DistributionSet} . - *

+ * JPA implementation of {@link Target}. * */ @Entity @@ -154,17 +141,14 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Persistable tags) { this.tags = tags; } @@ -174,11 +158,6 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Persistable hawkbit-repository hawkBit :: Repository + pom + + + hawkbit-repository-jpa + hawkbit-repository-api + - - - - com.ethlo.eclipselink.tools - http://ethlo.com/maven - - - - - - com.ethlo.eclipselink.tools - http://ethlo.com/maven - - - - - - - - com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core - jackson-databind - - - - - org.eclipse.hawkbit - hawkbit-artifact-repository-mongo - ${project.version} - - - org.eclipse.hawkbit - hawkbit-core - ${project.version} - - - org.eclipse.hawkbit - hawkbit-security-core - ${project.version} - - - org.hibernate - hibernate-validator - - - javax.validation - validation-api - - - com.google.guava - guava - - - net._01001111 - jlorem - - - org.springframework.boot - spring-boot - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.eclipse.persistence - org.eclipse.persistence.jpa - - - org.springframework.security - spring-security-core - - - org.springframework.hateoas - spring-hateoas - - - org.flywaydb - flyway-core - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - - com.h2database - h2 - test - - - org.mariadb.jdbc - mariadb-java-client - test - - - javax.el - javax.el-api - test - - - org.springframework - spring-context-support - test - - - ru.yandex.qatools.allure - allure-junit-adaptor - test - - - org.springframework.data - spring-data-rest-webmvc - test - - - org.springframework.security - spring-security-aspects - test - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework - spring-test - test - - - org.easytesting - fest-assert-core - test - - - org.easytesting - fest-assert - test - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - test - - - org.springframework.security - spring-security-config - test - - - org.springframework.security - spring-security-web - test - - - cz.jirutka.rsql - rsql-parser - - - - - - - - org.bsc.maven - maven-processor-plugin - - - process - - process - - generate-sources - - - org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor - - - - - - - org.hibernate - hibernate-jpamodelgen - ${hibernate.version} - - - - - - com.ethlo.persistence.tools - eclipselink-maven-plugin - 2.6.2 - - - process-classes - - weave - - - - - - org.eclipse.persistence - org.eclipse.persistence.jpa - ${eclipselink.version} - - - org.javassist - javassist - 3.20.0-GA - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java deleted file mode 100644 index ba6f8c42c..000000000 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/Target.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.repository.model; - -import java.util.List; -import java.util.Set; - -public interface Target extends NamedEntity { - - DistributionSet getAssignedDistributionSet(); - - String getControllerId(); - - Set getTags(); - - void setAssignedDistributionSet(DistributionSet assignedDistributionSet); - - void setControllerId(String controllerId); - - void setTags(Set tags); - - List getActions(); - - TargetIdName getTargetIdName(); - - /** - * @return the targetInfo - */ - TargetInfo getTargetInfo(); - - /** - * @param targetInfo - * the targetInfo to set - */ - void setTargetInfo(TargetInfo targetInfo); - - /** - * @return the securityToken - */ - String getSecurityToken(); - - /** - * @param securityToken - * the securityToken to set - */ - void setSecurityToken(String securityToken); - -} \ No newline at end of file diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml index a4a421f0d..66fb1655a 100644 --- a/hawkbit-rest-core/pom.xml +++ b/hawkbit-rest-core/pom.xml @@ -23,7 +23,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} @@ -51,7 +51,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} tests diff --git a/hawkbit-security-core/pom.xml b/hawkbit-security-core/pom.xml index a3b262726..a9b2347b6 100644 --- a/hawkbit-security-core/pom.xml +++ b/hawkbit-security-core/pom.xml @@ -21,7 +21,7 @@ - + org.eclipse.hawkbit hawkbit-core ${project.version} diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java index 2e222d879..bcd44e510 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java @@ -314,6 +314,15 @@ public final class SpPermission { public static final String HAS_AUTH_ROLLOUT_MANAGEMENT_READ = HAS_AUTH_PREFIX + ROLLOUT_MANAGEMENT + HAS_AUTH_SUFFIX; + /** + * Spring security eval hasAuthority expression to check if spring + * context contains {@link SpPermission#ROLLOUT_MANAGEMENT} and + * {@link SpPermission#READ_TARGET} + */ + public static final String HAS_AUTH_ROLLOUT_MANAGEMENT_READ_AND_TARGET_READ = HAS_AUTH_PREFIX + + ROLLOUT_MANAGEMENT + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + READ_TARGET + + HAS_AUTH_SUFFIX;; + /** * Spring security eval hasAuthority expression to check if spring * context contains {@link SpPermission#ROLLOUT_MANAGEMENT} and diff --git a/hawkbit-security-integration/pom.xml b/hawkbit-security-integration/pom.xml index c17317b3d..194a5e3cb 100644 --- a/hawkbit-security-integration/pom.xml +++ b/hawkbit-security-integration/pom.xml @@ -23,7 +23,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} diff --git a/hawkbit-ui/pom.xml b/hawkbit-ui/pom.xml index e0bde576a..a9cd5aca3 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -151,7 +151,7 @@ org.eclipse.hawkbit - hawkbit-repository + hawkbit-repository-jpa ${project.version} @@ -254,5 +254,10 @@ allure-junit-adaptor test + + org.scala-lang + scala-library + 2.10.4 + \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java index d9d97f55d..3441198d9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTarget.java @@ -8,31 +8,33 @@ */ package org.eclipse.hawkbit.ui.components; +import java.io.Serializable; import java.net.URI; import java.security.SecureRandom; -import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; +import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; /** * Proxy for {@link Target}. * - * - * - * + */ +/** + * @author kaizimmerm * */ -public class ProxyTarget extends JpaTarget { +public class ProxyTarget implements Serializable { private static final long serialVersionUID = -8891449133620645310L; private String controllerId; private URI address = null; private Long lastTargetQuery = null; private Long installationDate; + private Long id; + private TargetUpdateStatus updateStatus = TargetUpdateStatus.UNKNOWN; private DistributionSet installedDistributionSet; @@ -57,11 +59,58 @@ public class ProxyTarget extends JpaTarget { private Status status; + private String name; + + private String description; + + private Long createdAt; + + private TargetInfo targetInfo; + + public Long getId() { + return id; + } + + public void setId(final Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(final String description) { + this.description = description; + } + + public Long getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(final Long createdAt) { + this.createdAt = createdAt; + } + + public TargetInfo getTargetInfo() { + return targetInfo; + } + + public void setTargetInfo(final TargetInfo targetInfo) { + this.targetInfo = targetInfo; + } + /** * @param controllerId */ public ProxyTarget() { - super(null); final Integer generatedId = new SecureRandom().nextInt(Integer.MAX_VALUE) - Integer.MAX_VALUE; targetIdName = new TargetIdName(generatedId, generatedId.toString(), generatedId.toString()); } @@ -161,7 +210,6 @@ public class ProxyTarget extends JpaTarget { * * @return String as ID. */ - @Override public String getControllerId() { return controllerId; } @@ -172,7 +220,6 @@ public class ProxyTarget extends JpaTarget { * @param controllerId * as ID */ - @Override public void setControllerId(final String controllerId) { this.controllerId = controllerId; } @@ -270,11 +317,7 @@ public class ProxyTarget extends JpaTarget { /** * @return the targetIdName */ - @Override public TargetIdName getTargetIdName() { - if (this.targetIdName == null) { - return super.getTargetIdName(); - } return this.targetIdName; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java index 21ce01347..16636e64b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java @@ -14,7 +14,7 @@ import java.util.Map; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; +import org.eclipse.hawkbit.repository.model.AssignedSoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; @@ -75,20 +75,20 @@ public class SwModuleBeanQuery extends AbstractBeanQuery @Override protected List loadBeans(final int startIndex, final int count) { - final Slice swModuleBeans; + final Slice swModuleBeans; final List proxyBeans = new ArrayList<>(); swModuleBeans = getSoftwareManagement().findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( new OffsetBasedPageRequest(startIndex, count), orderByDistId, searchText, type); - for (final CustomSoftwareModule swModule : swModuleBeans) { + for (final AssignedSoftwareModule swModule : swModuleBeans) { proxyBeans.add(getProxyBean(swModule)); } return proxyBeans; } - private ProxyBaseSwModuleItem getProxyBean(final CustomSoftwareModule customSoftwareModule) { + private ProxyBaseSwModuleItem getProxyBean(final AssignedSoftwareModule customSoftwareModule) { final SoftwareModule bean = customSoftwareModule.getSoftwareModule(); final ProxyBaseSwModuleItem proxyItem = new ProxyBaseSwModuleItem(); proxyItem.setSwId(bean.getId()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java index 4f528c74a..6d1f1a7ab 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/FilterQueryValidation.java @@ -17,8 +17,8 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.rsql.RSQLParameterSyntaxException; -import org.eclipse.hawkbit.repository.rsql.RSQLParameterUnsupportedFieldException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index 74f518d56..b571bb3df 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -304,9 +304,9 @@ public class ActionHistoryTable extends TreeTable implements Handler { ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getAction().getId(), false); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DATETIME) - .setValue(SPDateTimeUtil.getFormattedDate((actionWithStatusCount.getActionLastModifiedAt() != null) - ? actionWithStatusCount.getActionLastModifiedAt() - : actionWithStatusCount.getActionCreatedAt())); + .setValue(SPDateTimeUtil.getFormattedDate((actionWithStatusCount.getAction().getLastModifiedAt() != null) + ? actionWithStatusCount.getAction().getLastModifiedAt() + : actionWithStatusCount.getAction().getLastModifiedAt())); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME) .setValue(actionWithStatusCount.getRolloutName()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index 575b73b4d..7ed9c81dd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -19,7 +19,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.TimeZone; -import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.DistributionSet; From 3abfe388a433eaa89d5fc9b08a337340d02faedc Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 25 May 2016 18:55:43 +0200 Subject: [PATCH 146/371] optimize CommonDialogWindow Signed-off-by: Melanie Retter --- .../ui/decorators/SPUIWindowDecorator.java | 6 ++-- .../CreateUpdateDistSetTypeLayout.java | 4 +-- .../ui/layouts/CreateUpdateTagLayout.java | 2 -- .../TargetAddUpdateWindowLayout.java | 2 +- .../rollout/AddUpdateRolloutWindowLayout.java | 28 +++---------------- .../TenantConfigurationDashboardView.java | 6 ---- 6 files changed, 10 insertions(+), 38 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java index f5af72abd..9f436fd65 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java @@ -44,10 +44,10 @@ public final class SPUIWindowDecorator { */ public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, - final ClickListener CancelButtonClickListener, final String helpLink) { - // TODO helpLink + final ClickListener cancelButtonClickListener, final String helpLink) { + final CommonDialogWindow window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, - CancelButtonClickListener); + cancelButtonClickListener); if (null != id) { window.setId(id); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index addf4736f..ceb3f979c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -335,7 +335,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout * Create new DistSet Type tag. */ @SuppressWarnings("unchecked") - private void crateNewDistributionSetType() { + private void createNewDistributionSetType() { final String colorPicked = ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview()); final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); @@ -611,7 +611,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout .findDistributionSetTypeByName(tagName.getValue()); if (optiongroup.getValue().equals(createTypeStr)) { if (!checkIsDuplicateByKey(existingDistTypeByKey) && !checkIsDuplicate(existingDistTypeByName)) { - crateNewDistributionSetType(); + createNewDistributionSetType(); } } else { updateDistributionSetType(existingDistTypeByKey); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java index cebce7105..60d76ee14 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java @@ -327,8 +327,6 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); colorPickerLayout.getSelPreview() .setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - // remove the sliders and color picker layout - // fieldLayout.removeComponent(colorPickerLayout.getSliders()); mainLayout.removeComponent(colorPickerLayout); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 87c9abfc9..101bfa8a9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -247,7 +247,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); addTargetWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(),event -> discardTargetListner(), null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null); return addTargetWindow; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index fc5965756..9920fab74 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -56,10 +56,8 @@ import com.vaadin.data.validator.IntegerRangeValidator; import com.vaadin.data.validator.RegexpValidator; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Alignment; import com.vaadin.ui.ComboBox; import com.vaadin.ui.GridLayout; -import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.TextArea; @@ -204,9 +202,11 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { addComponent(getLabel("prompt.distribution.set"), 0, 2); addComponent(distributionSet, 1, 2); addComponent(getLabel("prompt.target.filter"), 0, 3); - addComponent(getTargetFilterLayout(), 1, 3); + addComponent(targetFilterQueryCombo, 1, 3); + addComponent(totalTargetsLabel, 2, 3); addComponent(getLabel("prompt.number.of.groups"), 0, 4); - addComponent(getGroupDetailsLayout(), 1, 4); + addComponent(noOfGroups, 1, 4); + addComponent(groupSizeLabel, 2, 4); addComponent(getLabel("prompt.tigger.threshold"), 0, 5); addComponent(triggerThreshold, 1, 5); addComponent(getPercentHintLabel(), 2, 5); @@ -220,26 +220,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { rolloutName.focus(); } - private HorizontalLayout getTargetFilterLayout() { - final HorizontalLayout targetFilterLayout = new HorizontalLayout(); - targetFilterLayout.setSizeUndefined(); - targetFilterLayout.addComponents(targetFilterQueryCombo, targetFilterQuery, totalTargetsLabel); - targetFilterLayout.setExpandRatio(targetFilterQueryCombo, 0.71F); - targetFilterLayout.setExpandRatio(targetFilterQuery, 0.70F); - targetFilterLayout.setExpandRatio(totalTargetsLabel, 0.29F); - targetFilterLayout.setComponentAlignment(totalTargetsLabel, Alignment.MIDDLE_LEFT); - return targetFilterLayout; - } - - private HorizontalLayout getGroupDetailsLayout() { - final HorizontalLayout groupLayout = new HorizontalLayout(); - groupLayout.setSizeUndefined(); - groupLayout.addComponents(noOfGroups, groupSizeLabel); - groupLayout.setExpandRatio(noOfGroups, 1.0F); - groupLayout.setComponentAlignment(groupSizeLabel, Alignment.MIDDLE_LEFT); - return groupLayout; - } - private Label getLabel(final String key) { return SPUIComponentProvider.getLabel(i18n.get(key), SPUILabelDefinitions.SP_LABEL_SIMPLE); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java index 3fa69dd1f..a6f1b8c32 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java @@ -15,7 +15,6 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.HawkbitUI; import org.eclipse.hawkbit.ui.UiProperties; -import org.eclipse.hawkbit.ui.common.PopupWindowHelp; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.tenantconfiguration.ConfigurationItem.ConfigurationItemChangeListener; @@ -90,11 +89,6 @@ public class TenantConfigurationDashboardView extends CustomComponent implements rootLayout.setMargin(true); rootLayout.setSpacing(true); - final PopupWindowHelp help = new PopupWindowHelp(uiProperties.getLinks().getDocumentation().getRolloutView()); - help.setSpacing(true); - rootLayout.addComponent(help); - rootLayout.setComponentAlignment(help, Alignment.BOTTOM_RIGHT); - configurationViews.forEach(view -> rootLayout.addComponent(view)); final HorizontalLayout buttonContent = saveConfigurationButtonsLayout(); From eeee57fbc4004f5440d86de3b2b0326c22c448f7 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 26 May 2016 14:03:14 +0200 Subject: [PATCH 147/371] Refactored package names. Signed-off-by: Kai Zimmermann --- .../hawkbit/repository/ReportManagement.java | 8 +++---- .../hawkbit/repository/RolloutManagement.java | 2 +- .../hawkbit/repository/SystemManagement.java | 2 +- .../repository/TenantStatsManagement.java | 2 +- .../event/AbstractBaseEntityEvent.java | 4 +++- .../event/AbstractEntityBulkEvent.java | 2 +- .../event/AbstractPropertyChangeEvent.java | 2 +- .../eventbus/event/ActionCreatedEvent.java | 2 +- .../event/ActionPropertyChangeEvent.java | 2 +- ...istributionSetTagAssigmentResultEvent.java | 2 +- .../DistributionSetTagCreatedBulkEvent.java | 2 +- .../event/DistributionSetTagDeletedEvent.java | 2 +- .../event/DistributionSetTagUpdateEvent.java | 2 +- .../eventbus/event/EntityBulkEvent.java | 3 ++- .../eventbus/event/RolloutChangeEvent.java | 4 +++- .../event/RolloutGroupChangeEvent.java | 4 +++- .../event/RolloutGroupCreatedEvent.java | 4 +++- .../RolloutGroupPropertyChangeEvent.java | 2 +- .../event/RolloutPropertyChangeEvent.java | 2 +- .../TargetAssignDistributionSetEvent.java | 3 ++- .../eventbus/event/TargetCreatedEvent.java | 2 +- .../eventbus/event/TargetInfoUpdateEvent.java | 3 ++- .../event/TargetTagAssigmentResultEvent.java | 2 +- .../event/TargetTagCreatedBulkEvent.java | 2 +- .../eventbus/event/TargetTagDeletedEvent.java | 2 +- .../eventbus/event/TargetTagUpdateEvent.java | 2 +- .../report/model/AbstractReportSeries.java | 2 +- .../report/model/DataReportSeries.java | 2 +- .../report/model/DataReportSeriesItem.java | 2 +- .../model/InnerOuterDataReportSeries.java | 2 +- .../report/model/ListReportSeries.java | 2 +- .../report/model/SeriesTime.java | 2 +- .../report/model/SystemUsageReport.java | 2 +- .../report/model/TenantUsage.java | 2 +- .../jpa/JpaDeploymentManagement.java | 10 ++++----- .../jpa/JpaDistributionSetManagement.java | 6 ++--- .../repository/jpa/JpaReportManagement.java | 8 +++---- .../jpa/JpaRolloutGroupManagement.java | 2 +- .../repository/jpa/JpaRolloutManagement.java | 8 +++---- .../repository/jpa/JpaSoftwareManagement.java | 2 +- .../repository/jpa/JpaSystemManagement.java | 2 +- .../repository/jpa/JpaTagManagement.java | 16 +++++++------- .../repository/jpa/JpaTargetManagement.java | 8 +++---- .../jpa/JpaTenantStatsManagement.java | 2 +- .../ExceptionMappingAspectHandler.java | 2 +- .../jpa}/cache/CacheField.java | 4 ++-- .../{ => repository/jpa}/cache/CacheKeys.java | 4 ++-- .../jpa}/cache/CacheWriteNotify.java | 4 ++-- .../jpa/configuration}/Constants.java | 2 +- .../MultiTenantJpaTransactionManager.java | 2 +- .../RepositoryApplicationConfiguration.java | 18 +++++++-------- .../eventbus/CacheFieldEntityListener.java | 8 +++---- .../eventbus/EntityChangeEventListener.java | 8 +++---- .../EntityPropertyChangeListener.java | 18 +++++++-------- .../jpa}/eventbus/EventMerger.java | 16 +++++++------- ...ansactionCommitDefaultServiceExecutor.java | 2 +- .../AfterTransactionCommitExecutor.java | 2 +- .../jpa/model/AbstractJpaBaseEntity.java | 4 ++-- .../AbstractJpaTenantAwareBaseEntity.java | 4 ++-- .../repository/jpa/model/JpaAction.java | 4 ++-- .../repository/jpa/model/JpaRollout.java | 4 ++-- .../repository/jpa/model/JpaTarget.java | 6 ++--- .../repository/jpa/model/JpaTargetInfo.java | 4 ++-- .../AfterTransactionCommitExecutorHolder.java | 6 ++--- .../model/helper/CacheManagerHolder.java | 4 ++-- .../model/helper/EventBusHolder.java | 4 ++-- .../model/helper/SecurityChecker.java | 2 +- .../helper/SecurityTokenGeneratorHolder.java | 2 +- .../model/helper/SystemManagementHolder.java | 2 +- .../helper/SystemSecurityContextHolder.java | 2 +- .../model/helper/TenantAwareHolder.java | 2 +- .../TenantConfigurationManagementHolder.java | 2 +- .../repository}/rsql/PropertyMapper.java | 2 +- .../repository}/rsql/RSQLUtility.java | 2 +- .../condition/PauseRolloutGroupAction.java | 2 +- .../RolloutGroupActionEvaluator.java | 2 +- .../RolloutGroupConditionEvaluator.java | 2 +- ...artNextGroupRolloutGroupSuccessAction.java | 2 +- .../ThresholdRolloutGroupErrorCondition.java | 2 +- ...ThresholdRolloutGroupSuccessCondition.java | 2 +- .../jpa}/AbstractIntegrationTest.java | 22 ++++--------------- .../AbstractIntegrationTestWithMongoDB.java | 2 +- .../repository/{ => jpa}/ActionTest.java | 2 +- .../ArtifactManagementNoMongoDbTest.java | 3 +-- .../{ => jpa}/ArtifactManagementTest.java | 7 ++---- .../jpa}/CIMySqlTestDatabase.java | 2 +- .../{ => jpa}/ControllerManagementTest.java | 4 +--- .../{ => jpa}/DeploymentManagementTest.java | 11 +++++----- .../DistributionSetManagementTest.java | 6 ++--- .../jpa}/FreePortFileWriter.java | 2 +- .../jpa}/HashGeneratorUtils.java | 2 +- .../jpa}/LocalH2TestDatabase.java | 2 +- .../jpa}/MethodSecurityUtil.java | 2 +- .../jpa}/RandomGeneratedInputStream.java | 2 +- .../{ => jpa}/ReportManagementTest.java | 16 ++++++-------- .../{ => jpa}/RolloutManagementTest.java | 11 +++++----- .../{ => jpa}/SoftwareManagementTest.java | 6 +---- .../{ => jpa}/SystemManagementTest.java | 7 ++---- .../{ => jpa}/TagManagementTest.java | 5 ++--- .../TargetFilterQueryManagenmentTest.java | 4 ++-- .../{ => jpa}/TargetManagementSearchTest.java | 4 +--- .../{ => jpa}/TargetManagementTest.java | 7 ++---- .../TenantConfigurationManagementTest.java | 3 +-- .../jpa}/TestConfiguration.java | 9 ++++---- .../{ => repository/jpa}/TestDataUtil.java | 3 +-- .../{ => repository/jpa}/Testdatabase.java | 2 +- .../jpa}/WithSpringAuthorityRule.java | 4 ++-- .../{ => repository/jpa}/WithUser.java | 2 +- .../jpa}/cache/CacheKeysTest.java | 2 +- .../jpa}/cache/CacheWriteNotifyTest.java | 2 +- .../CacheFieldEntityListenerTest.java | 8 +++---- .../model/ModelEqualsHashcodeTest.java | 11 +++------- .../{ => jpa}/rsql/RSQLActionFieldsTest.java | 4 ++-- .../rsql/RSQLDistributionSetFieldTest.java | 6 ++--- ...RSQLDistributionSetMetadataFieldsTest.java | 6 ++--- .../rsql/RSQLRolloutGroupFields.java | 6 ++--- .../rsql/RSQLSoftwareModuleFieldTest.java | 4 ++-- .../RSQLSoftwareModuleMetadataFieldsTest.java | 6 ++--- .../RSQLSoftwareModuleTypeFieldsTest.java | 4 ++-- .../{ => jpa}/rsql/RSQLTagFieldsTest.java | 4 ++-- .../{ => jpa}/rsql/RSQLTargetFieldTest.java | 6 ++--- .../{ => jpa}/rsql/RSQLUtilityTest.java | 3 ++- .../jpa}/tenancy/MultiTenancyEntityTest.java | 8 +++---- .../{ => jpa}/utils/MultipleInvokeHelper.java | 2 +- .../utils/RepositoryDataGenerator.java | 4 ++-- .../{ => jpa}/utils/SuccessCondition.java | 2 +- .../util/RestResourceConversionHelper.java | 2 +- .../rest/AbstractRestIntegrationTest.java | 2 +- ...bstractRestIntegrationTestWithMongoDB.java | 2 +- .../hawkbit/ui/HawkbitEventProvider.java | 20 ++++++++--------- .../tagdetails/AbstractTargetTagToken.java | 4 ++-- .../tagdetails/DistributionTagToken.java | 8 +++---- .../ui/common/tagdetails/TargetTagToken.java | 4 ++-- ...eateUpdateDistributionTagLayoutWindow.java | 6 ++--- .../dstag/DistributionTagButtons.java | 6 ++--- .../management/targettable/TargetTable.java | 4 ++-- .../CreateUpdateTargetTagLayout.java | 6 ++--- .../targettag/TargetTagFilterButtons.java | 6 ++--- .../ui/rollout/rollout/RolloutListGrid.java | 2 +- .../rolloutgroup/RolloutGroupListGrid.java | 2 +- 140 files changed, 295 insertions(+), 326 deletions(-) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/AbstractBaseEntityEvent.java (88%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/AbstractEntityBulkEvent.java (96%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/AbstractPropertyChangeEvent.java (97%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/ActionCreatedEvent.java (93%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/ActionPropertyChangeEvent.java (94%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/DistributionSetTagAssigmentResultEvent.java (94%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/DistributionSetTagCreatedBulkEvent.java (95%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/DistributionSetTagDeletedEvent.java (93%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/DistributionSetTagUpdateEvent.java (93%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/EntityBulkEvent.java (91%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/RolloutChangeEvent.java (89%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/RolloutGroupChangeEvent.java (92%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/RolloutGroupCreatedEvent.java (94%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/RolloutGroupPropertyChangeEvent.java (94%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/RolloutPropertyChangeEvent.java (94%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/TargetAssignDistributionSetEvent.java (95%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/TargetCreatedEvent.java (93%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/TargetInfoUpdateEvent.java (93%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/TargetTagAssigmentResultEvent.java (94%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/TargetTagCreatedBulkEvent.java (95%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/TargetTagDeletedEvent.java (93%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/eventbus/event/TargetTagUpdateEvent.java (93%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/report/model/AbstractReportSeries.java (94%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/report/model/DataReportSeries.java (97%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/report/model/DataReportSeriesItem.java (95%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/report/model/InnerOuterDataReportSeries.java (96%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/report/model/ListReportSeries.java (96%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/report/model/SeriesTime.java (93%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/report/model/SystemUsageReport.java (97%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/{ => repository}/report/model/TenantUsage.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/aspects/ExceptionMappingAspectHandler.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/cache/CacheField.java (89%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/cache/CacheKeys.java (92%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/cache/CacheWriteNotify.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa/configuration}/Constants.java (94%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa/configuration}/MultiTenantJpaTransactionManager.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa/configuration}/RepositoryApplicationConfiguration.java (88%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/eventbus/CacheFieldEntityListener.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/eventbus/EntityChangeEventListener.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/eventbus/EntityPropertyChangeListener.java (83%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/eventbus/EventMerger.java (92%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/executor/AfterTransactionCommitDefaultServiceExecutor.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/executor/AfterTransactionCommitExecutor.java (93%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/model/helper/AfterTransactionCommitExecutorHolder.java (86%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/model/helper/CacheManagerHolder.java (91%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/model/helper/EventBusHolder.java (89%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/model/helper/SecurityChecker.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/model/helper/SecurityTokenGeneratorHolder.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/model/helper/SystemManagementHolder.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/model/helper/SystemSecurityContextHolder.java (94%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/model/helper/TenantAwareHolder.java (94%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/model/helper/TenantConfigurationManagementHolder.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/rsql/PropertyMapper.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/{ => jpa/repository}/rsql/RSQLUtility.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/rollout/condition/PauseRolloutGroupAction.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/rollout/condition/RolloutGroupActionEvaluator.java (91%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/rollout/condition/RolloutGroupConditionEvaluator.java (94%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/rollout/condition/ThresholdRolloutGroupErrorCondition.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{ => repository/jpa}/rollout/condition/ThresholdRolloutGroupSuccessCondition.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/AbstractIntegrationTest.java (90%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/AbstractIntegrationTestWithMongoDB.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/ActionTest.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/ArtifactManagementNoMongoDbTest.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/ArtifactManagementTest.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/CIMySqlTestDatabase.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/ControllerManagementTest.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/DeploymentManagementTest.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/DistributionSetManagementTest.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/FreePortFileWriter.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/HashGeneratorUtils.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/LocalH2TestDatabase.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/MethodSecurityUtil.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/RandomGeneratedInputStream.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/ReportManagementTest.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/RolloutManagementTest.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/SoftwareManagementTest.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/SystemManagementTest.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/TagManagementTest.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetFilterQueryManagenmentTest.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetManagementSearchTest.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/TargetManagementTest.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/TenantConfigurationManagementTest.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/TestConfiguration.java (91%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/TestDataUtil.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/Testdatabase.java (91%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/WithSpringAuthorityRule.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/WithUser.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/cache/CacheKeysTest.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/cache/CacheWriteNotifyTest.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/eventbus/CacheFieldEntityListenerTest.java (93%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/model/ModelEqualsHashcodeTest.java (91%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLActionFieldsTest.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLDistributionSetFieldTest.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLDistributionSetMetadataFieldsTest.java (94%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLRolloutGroupFields.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLSoftwareModuleFieldTest.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLSoftwareModuleMetadataFieldsTest.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLSoftwareModuleTypeFieldsTest.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLTagFieldsTest.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLTargetFieldTest.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/rsql/RSQLUtilityTest.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/{ => repository/jpa}/tenancy/MultiTenancyEntityTest.java (97%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/utils/MultipleInvokeHelper.java (98%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/utils/RepositoryDataGenerator.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/{ => jpa}/utils/SuccessCondition.java (92%) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java index fca145908..49b0b505d 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java @@ -18,11 +18,11 @@ import java.util.List; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; -import org.eclipse.hawkbit.report.model.DataReportSeries; -import org.eclipse.hawkbit.report.model.InnerOuterDataReportSeries; -import org.eclipse.hawkbit.report.model.ListReportSeries; -import org.eclipse.hawkbit.report.model.SeriesTime; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.report.model.DataReportSeries; +import org.eclipse.hawkbit.repository.report.model.InnerOuterDataReportSeries; +import org.eclipse.hawkbit.repository.report.model.ListReportSeries; +import org.eclipse.hawkbit.repository.report.model.SeriesTime; import org.springframework.security.access.prepost.PreAuthorize; /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index f75ff545b..3ff6e0d4b 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -10,8 +10,8 @@ package org.eclipse.hawkbit.repository; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.eventbus.event.RolloutGroupCreatedEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupCreatedEvent; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java index b62ed0ad3..19138ae9b 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -13,8 +13,8 @@ import java.util.List; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; -import org.eclipse.hawkbit.report.model.SystemUsageReport; import org.eclipse.hawkbit.repository.model.TenantMetaData; +import org.eclipse.hawkbit.repository.report.model.SystemUsageReport; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java index bb4ca8ef0..32ecdcce4 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; -import org.eclipse.hawkbit.report.model.TenantUsage; +import org.eclipse.hawkbit.repository.report.model.TenantUsage; import org.springframework.security.access.prepost.PreAuthorize; /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractBaseEntityEvent.java similarity index 88% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractBaseEntityEvent.java index d27669ade..d13e89ee7 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractBaseEntityEvent.java @@ -6,8 +6,10 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; +import org.eclipse.hawkbit.eventbus.event.AbstractDistributedEvent; +import org.eclipse.hawkbit.eventbus.event.EntityEvent; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractEntityBulkEvent.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractEntityBulkEvent.java index 56f3e585a..f8d43d6cd 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractEntityBulkEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import java.util.Arrays; import java.util.List; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractPropertyChangeEvent.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractPropertyChangeEvent.java index 795f6ff88..97cf13b66 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/AbstractPropertyChangeEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import java.util.Map; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionCreatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionCreatedEvent.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionCreatedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionCreatedEvent.java index 5efdca2a9..73188b85e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionCreatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionCreatedEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import org.eclipse.hawkbit.repository.model.Action; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionPropertyChangeEvent.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionPropertyChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionPropertyChangeEvent.java index 822f9bbeb..84487547e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/ActionPropertyChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/ActionPropertyChangeEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import java.util.Map; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagAssigmentResultEvent.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagAssigmentResultEvent.java index e10b9a51f..d723251da 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagAssigmentResultEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagCreatedBulkEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagCreatedBulkEvent.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagCreatedBulkEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagCreatedBulkEvent.java index fb7c4a862..2fc08c272 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagCreatedBulkEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagCreatedBulkEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import java.util.List; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagDeletedEvent.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagDeletedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagDeletedEvent.java index b909390d1..f2f134a3a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagDeletedEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import org.eclipse.hawkbit.repository.model.DistributionSetTag; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagUpdateEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagUpdateEvent.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagUpdateEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagUpdateEvent.java index 2825322f9..d74872b01 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagUpdateEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DistributionSetTagUpdateEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import org.eclipse.hawkbit.repository.model.DistributionSetTag; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/EntityBulkEvent.java similarity index 91% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/EntityBulkEvent.java index eac1b6bb9..0102fda47 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/EntityBulkEvent.java @@ -6,11 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import java.io.Serializable; import java.util.List; +import org.eclipse.hawkbit.eventbus.event.Event; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutChangeEvent.java similarity index 89% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutChangeEvent.java index 576a6b99c..2ff739726 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutChangeEvent.java @@ -6,7 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; + +import org.eclipse.hawkbit.eventbus.event.AbstractEvent; /** * Event declaration for the UI to notify the UI that a rollout has been diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupChangeEvent.java similarity index 92% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupChangeEvent.java index cbda44ef5..5c36ab61f 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupChangeEvent.java @@ -6,7 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; + +import org.eclipse.hawkbit.eventbus.event.AbstractEvent; /** * Event declaration for the UI to notify the UI that a rollout has been diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupCreatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupCreatedEvent.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupCreatedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupCreatedEvent.java index 465ff6088..41f08c91d 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupCreatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupCreatedEvent.java @@ -6,7 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; + +import org.eclipse.hawkbit.eventbus.event.AbstractDistributedEvent; /** * Event definition which is been published in case a rollout group has been diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupPropertyChangeEvent.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupPropertyChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupPropertyChangeEvent.java index 6caa46547..887a1c2ff 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutGroupPropertyChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutGroupPropertyChangeEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import java.util.Map; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutPropertyChangeEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutPropertyChangeEvent.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutPropertyChangeEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutPropertyChangeEvent.java index 5f72307df..9287a0fb3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/RolloutPropertyChangeEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/RolloutPropertyChangeEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import java.util.Map; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetAssignDistributionSetEvent.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetAssignDistributionSetEvent.java index 68b3f1289..077e05462 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetAssignDistributionSetEvent.java @@ -6,11 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import java.net.URI; import java.util.Collection; +import org.eclipse.hawkbit.eventbus.event.AbstractEvent; import org.eclipse.hawkbit.repository.model.SoftwareModule; /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetCreatedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetCreatedEvent.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetCreatedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetCreatedEvent.java index 7e89565b1..446f21856 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetCreatedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetCreatedEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import org.eclipse.hawkbit.repository.model.Target; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetInfoUpdateEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetInfoUpdateEvent.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetInfoUpdateEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetInfoUpdateEvent.java index 563bb4bdc..1e7e29719 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetInfoUpdateEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetInfoUpdateEvent.java @@ -6,8 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; +import org.eclipse.hawkbit.eventbus.event.EntityEvent; import org.eclipse.hawkbit.repository.model.TargetInfo; /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagAssigmentResultEvent.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagAssigmentResultEvent.java index 6bdc3aebd..b846a80da 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagAssigmentResultEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagCreatedBulkEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagCreatedBulkEvent.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagCreatedBulkEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagCreatedBulkEvent.java index c66a5150e..950c351e0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagCreatedBulkEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagCreatedBulkEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import java.util.List; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagDeletedEvent.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagDeletedEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagDeletedEvent.java index 040fbc19a..ebf6c73c9 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagDeletedEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import org.eclipse.hawkbit.repository.model.TargetTag; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagUpdateEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagUpdateEvent.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagUpdateEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagUpdateEvent.java index 4562063aa..f87443235 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagUpdateEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/TargetTagUpdateEvent.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; import org.eclipse.hawkbit.repository.model.TargetTag; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/AbstractReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/AbstractReportSeries.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/AbstractReportSeries.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/AbstractReportSeries.java index 0542f68c9..747cd8279 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/AbstractReportSeries.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/AbstractReportSeries.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.report.model; +package org.eclipse.hawkbit.repository.report.model; import java.io.Serializable; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/DataReportSeries.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeries.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/DataReportSeries.java index 39c8f5723..e9fb032c3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeries.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/DataReportSeries.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.report.model; +package org.eclipse.hawkbit.repository.report.model; import java.io.Serializable; import java.util.ArrayList; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeriesItem.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/DataReportSeriesItem.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeriesItem.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/DataReportSeriesItem.java index 492e27e1e..7dba6c082 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/DataReportSeriesItem.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/DataReportSeriesItem.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.report.model; +package org.eclipse.hawkbit.repository.report.model; import java.io.Serializable; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/InnerOuterDataReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/InnerOuterDataReportSeries.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/InnerOuterDataReportSeries.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/InnerOuterDataReportSeries.java index b63935b39..357f9a554 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/InnerOuterDataReportSeries.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/InnerOuterDataReportSeries.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.report.model; +package org.eclipse.hawkbit.repository.report.model; import java.io.Serializable; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/ListReportSeries.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/ListReportSeries.java index 79c496480..18b011420 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/ListReportSeries.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/ListReportSeries.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.report.model; +package org.eclipse.hawkbit.repository.report.model; import java.util.ArrayList; import java.util.Collections; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SeriesTime.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SeriesTime.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SeriesTime.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SeriesTime.java index a50171479..0ab466acd 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SeriesTime.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SeriesTime.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.report.model; +package org.eclipse.hawkbit.repository.report.model; /** * A series time enum definition for {@link DataReportSeriesItem}s. diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SystemUsageReport.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReport.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SystemUsageReport.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReport.java index 45cc60cba..fe6c6bb96 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/SystemUsageReport.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReport.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.report.model; +package org.eclipse.hawkbit.repository.report.model; import java.util.ArrayList; import java.util.List; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/TenantUsage.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/TenantUsage.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java index d0ee7102c..5467099c4 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/report/model/TenantUsage.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.report.model; +package org.eclipse.hawkbit.repository.report.model; /** * System usage stats element for a tenant. diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index d869dd758..a3c717d98 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -28,20 +28,20 @@ import javax.persistence.criteria.ListJoin; import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.Constants; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; -import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; -import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; -import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TargetWithActionType; +import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.ForceQuitActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetException; +import org.eclipse.hawkbit.repository.jpa.configuration.Constants; +import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaActionWithStatusCount; @@ -54,6 +54,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaRollout_; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; +import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; @@ -68,7 +69,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.hibernate.validator.constraints.NotEmpty; import org.slf4j.Logger; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index 66bb9037d..8398832b6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -22,8 +22,6 @@ import java.util.stream.Collectors; import javax.persistence.EntityManager; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagAssigmentResultEvent; -import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.DistributionSetFields; import org.eclipse.hawkbit.repository.DistributionSetFilter; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; @@ -32,10 +30,12 @@ import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; import org.eclipse.hawkbit.repository.DistributionSetTypeFields; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagAssigmentResultEvent; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityLockedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException; +import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.jpa.model.DsMetadataCompositeKey; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; @@ -43,6 +43,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata_; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; +import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetSpecification; import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetTypeSpecification; import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; @@ -53,7 +54,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java index bada97a7b..76eb04a34 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java @@ -29,10 +29,6 @@ import javax.persistence.criteria.JoinType; import javax.persistence.criteria.ListJoin; import javax.persistence.criteria.Root; -import org.eclipse.hawkbit.report.model.DataReportSeries; -import org.eclipse.hawkbit.report.model.DataReportSeriesItem; -import org.eclipse.hawkbit.report.model.InnerOuterDataReportSeries; -import org.eclipse.hawkbit.report.model.SeriesTime; import org.eclipse.hawkbit.repository.ReportManagement; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; @@ -41,6 +37,10 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo_; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.report.model.DataReportSeries; +import org.eclipse.hawkbit.repository.report.model.DataReportSeriesItem; +import org.eclipse.hawkbit.repository.report.model.InnerOuterDataReportSeries; +import org.eclipse.hawkbit.repository.report.model.SeriesTime; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java index cde2a0a15..dce07dc79 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java @@ -32,6 +32,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup_; +import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; @@ -40,7 +41,6 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetWithActionStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index 6a5b534d1..e2f5ea8aa 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -18,7 +18,6 @@ import java.util.stream.Collectors; import javax.persistence.EntityManager; -import org.eclipse.hawkbit.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.RolloutFields; @@ -26,10 +25,14 @@ import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; +import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout_; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; +import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rollout.condition.RolloutGroupActionEvaluator; +import org.eclipse.hawkbit.repository.jpa.rollout.condition.RolloutGroupConditionEvaluator; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -43,9 +46,6 @@ import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; -import org.eclipse.hawkbit.rollout.condition.RolloutGroupActionEvaluator; -import org.eclipse.hawkbit.rollout.condition.RolloutGroupConditionEvaluator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index 05a38d428..ff3783783 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -41,6 +41,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata_; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule_; import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; +import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.specifications.SoftwareModuleSpecification; import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.model.AssignedSoftwareModule; @@ -49,7 +50,6 @@ import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.AuditorAware; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index 1acbd0f1b..05d5d486e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -16,7 +16,6 @@ import java.util.stream.Collectors; import javax.persistence.EntityManager; import org.eclipse.hawkbit.cache.TenancyCacheManager; -import org.eclipse.hawkbit.report.model.SystemUsageReport; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -26,6 +25,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTenantMetaData; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.TenantMetaData; +import org.eclipse.hawkbit.repository.report.model.SystemUsageReport; import org.eclipse.hawkbit.tenancy.TenantAware; import org.eclipse.persistence.config.PersistenceUnitProperties; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java index c8358b7ec..dd10ffce8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java @@ -15,23 +15,23 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; -import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.TagFields; import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagDeletedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagUpdateEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagDeletedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; +import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java index d73a9ae5f..e5be3d7c3 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java @@ -27,18 +27,19 @@ import javax.persistence.criteria.Order; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; -import org.eclipse.hawkbit.Constants; -import org.eclipse.hawkbit.eventbus.event.TargetTagAssigmentResultEvent; -import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagAssigmentResultEvent; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.jpa.configuration.Constants; +import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo_; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; +import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.model.Target; @@ -47,7 +48,6 @@ import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java index 5c9cb7223..e3866a8ad 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java @@ -10,8 +10,8 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.Optional; -import org.eclipse.hawkbit.report.model.TenantUsage; import org.eclipse.hawkbit.repository.TenantStatsManagement; +import org.eclipse.hawkbit.repository.report.model.TenantUsage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/aspects/ExceptionMappingAspectHandler.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/aspects/ExceptionMappingAspectHandler.java index c3da509aa..be21cdfe7 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/aspects/ExceptionMappingAspectHandler.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.aspects; +package org.eclipse.hawkbit.repository.jpa.aspects; import java.sql.SQLException; import java.util.ArrayList; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheField.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheField.java similarity index 89% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheField.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheField.java index 8909c1125..04627f920 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheField.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheField.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.cache; +package org.eclipse.hawkbit.repository.jpa.cache; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -14,7 +14,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; -import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; import org.springframework.cache.CacheManager; import org.springframework.data.annotation.Transient; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheKeys.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java similarity index 92% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheKeys.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java index 9cb53a317..9ba7cc763 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheKeys.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.cache; +package org.eclipse.hawkbit.repository.jpa.cache; -import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; /** * Constants for cache keys used in multiple classes. diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheWriteNotify.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheWriteNotify.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java index bf690e07e..fdaf868e8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/cache/CacheWriteNotify.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java @@ -6,10 +6,10 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.cache; +package org.eclipse.hawkbit.repository.jpa.cache; import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; -import org.eclipse.hawkbit.eventbus.event.RolloutGroupCreatedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupCreatedEvent; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.Rollout; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/Constants.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/Constants.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/Constants.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/Constants.java index ef0b70438..fb6a319f9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/Constants.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/Constants.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa.configuration; /** * A constant class which holds only static constants used within the SP server. diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/MultiTenantJpaTransactionManager.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/MultiTenantJpaTransactionManager.java index b3821e5f3..e8547c52b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/MultiTenantJpaTransactionManager.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa.configuration; import javax.persistence.EntityManager; import javax.transaction.Transaction; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/RepositoryApplicationConfiguration.java similarity index 88% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/RepositoryApplicationConfiguration.java index 255561be3..aaed3e64e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/RepositoryApplicationConfiguration.java @@ -6,21 +6,21 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa.configuration; import java.util.HashMap; import java.util.Map; -import org.eclipse.hawkbit.aspects.ExceptionMappingAspectHandler; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.model.helper.AfterTransactionCommitExecutorHolder; -import org.eclipse.hawkbit.repository.model.helper.CacheManagerHolder; -import org.eclipse.hawkbit.repository.model.helper.SecurityTokenGeneratorHolder; -import org.eclipse.hawkbit.repository.model.helper.SystemManagementHolder; -import org.eclipse.hawkbit.repository.model.helper.SystemSecurityContextHolder; -import org.eclipse.hawkbit.repository.model.helper.TenantAwareHolder; -import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder; +import org.eclipse.hawkbit.repository.jpa.aspects.ExceptionMappingAspectHandler; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.AfterTransactionCommitExecutorHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.CacheManagerHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SecurityTokenGeneratorHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemManagementHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemSecurityContextHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.TenantAwareHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListener.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java index 7275cb4ec..20c5b0caa 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus; +package org.eclipse.hawkbit.repository.jpa.eventbus; import java.io.Serializable; import java.lang.reflect.Field; @@ -15,9 +15,9 @@ import javax.persistence.PostLoad; import javax.persistence.PostRemove; import org.apache.commons.lang3.reflect.FieldUtils; -import org.eclipse.hawkbit.cache.CacheField; -import org.eclipse.hawkbit.cache.CacheKeys; -import org.eclipse.hawkbit.repository.model.helper.CacheManagerHolder; +import org.eclipse.hawkbit.repository.jpa.cache.CacheField; +import org.eclipse.hawkbit.repository.jpa.cache.CacheKeys; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.CacheManagerHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.Cache; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityChangeEventListener.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityChangeEventListener.java index 0c33435d2..5f41063d2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityChangeEventListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityChangeEventListener.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus; +package org.eclipse.hawkbit.repository.jpa.eventbus; import java.util.Collection; @@ -15,11 +15,11 @@ import javax.persistence.EntityManager; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.eclipse.hawkbit.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; -import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.eventbus.event.TargetCreatedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.repository.jpa.TargetRepository; +import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java similarity index 83% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java index 28b5e677c..35cfd9f5e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java @@ -6,23 +6,23 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus; +package org.eclipse.hawkbit.repository.jpa.eventbus; import java.util.Map; import java.util.stream.Collectors; -import org.eclipse.hawkbit.eventbus.event.AbstractPropertyChangeEvent; -import org.eclipse.hawkbit.eventbus.event.ActionCreatedEvent; -import org.eclipse.hawkbit.eventbus.event.ActionPropertyChangeEvent; -import org.eclipse.hawkbit.eventbus.event.RolloutGroupPropertyChangeEvent; -import org.eclipse.hawkbit.eventbus.event.RolloutPropertyChangeEvent; -import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.eventbus.event.AbstractPropertyChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.ActionCreatedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.ActionPropertyChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupPropertyChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutPropertyChangeEvent; +import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.AfterTransactionCommitExecutorHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.EventBusHolder; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; -import org.eclipse.hawkbit.repository.model.helper.AfterTransactionCommitExecutorHolder; -import org.eclipse.hawkbit.repository.model.helper.EventBusHolder; import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.descriptors.DescriptorEventAdapter; import org.eclipse.persistence.internal.sessions.ObjectChangeSet; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EventMerger.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EventMerger.java similarity index 92% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EventMerger.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EventMerger.java index b4ebdb743..702555be8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/eventbus/EventMerger.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EventMerger.java @@ -6,21 +6,21 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus; +package org.eclipse.hawkbit.repository.jpa.eventbus; import java.util.Iterator; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.eclipse.hawkbit.eventbus.EventSubscriber; -import org.eclipse.hawkbit.eventbus.event.ActionCreatedEvent; -import org.eclipse.hawkbit.eventbus.event.ActionPropertyChangeEvent; import org.eclipse.hawkbit.eventbus.event.Event; -import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; -import org.eclipse.hawkbit.eventbus.event.RolloutGroupChangeEvent; -import org.eclipse.hawkbit.eventbus.event.RolloutGroupCreatedEvent; -import org.eclipse.hawkbit.eventbus.event.RolloutGroupPropertyChangeEvent; -import org.eclipse.hawkbit.eventbus.event.RolloutPropertyChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.ActionCreatedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.ActionPropertyChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupCreatedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupPropertyChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutPropertyChangeEvent; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitDefaultServiceExecutor.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitDefaultServiceExecutor.java index 0d65b291e..687c1e3d4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitDefaultServiceExecutor.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.executor; +package org.eclipse.hawkbit.repository.jpa.executor; import java.util.ArrayList; import java.util.List; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitExecutor.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitExecutor.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitExecutor.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitExecutor.java index ab5c67bab..34b0e8d5f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitExecutor.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitExecutor.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.executor; +package org.eclipse.hawkbit.repository.jpa.executor; /** * diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java index b7e340085..c99993158 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java @@ -18,8 +18,8 @@ import javax.persistence.Id; import javax.persistence.MappedSuperclass; import javax.persistence.Version; -import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; -import org.eclipse.hawkbit.eventbus.EntityPropertyChangeListener; +import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.repository.jpa.eventbus.EntityPropertyChangeListener; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java index 134d0c788..235687d1f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java @@ -13,9 +13,9 @@ import javax.persistence.MappedSuperclass; import javax.persistence.PrePersist; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemManagementHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.TenantAwareHolder; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; -import org.eclipse.hawkbit.repository.model.helper.SystemManagementHolder; -import org.eclipse.hawkbit.repository.model.helper.TenantAwareHolder; import org.eclipse.persistence.annotations.Multitenant; import org.eclipse.persistence.annotations.MultitenantType; import org.eclipse.persistence.annotations.TenantDiscriminatorColumn; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java index 7ad7d7a60..e0cde5416 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java @@ -29,8 +29,8 @@ import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; -import org.eclipse.hawkbit.cache.CacheField; -import org.eclipse.hawkbit.cache.CacheKeys; +import org.eclipse.hawkbit.repository.jpa.cache.CacheField; +import org.eclipse.hawkbit.repository.jpa.cache.CacheKeys; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java index 40622134f..ae68fec03 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java @@ -25,8 +25,8 @@ import javax.persistence.Table; import javax.persistence.Transient; import javax.persistence.UniqueConstraint; -import org.eclipse.hawkbit.cache.CacheField; -import org.eclipse.hawkbit.cache.CacheKeys; +import org.eclipse.hawkbit.repository.jpa.cache.CacheField; +import org.eclipse.hawkbit.repository.jpa.cache.CacheKeys; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java index f89eeb184..24cabf7d4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -36,14 +36,14 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import org.eclipse.hawkbit.im.authentication.SpPermission; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SecurityChecker; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SecurityTokenGeneratorHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemSecurityContextHolder; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.repository.model.helper.SecurityChecker; -import org.eclipse.hawkbit.repository.model.helper.SecurityTokenGeneratorHolder; -import org.eclipse.hawkbit.repository.model.helper.SystemSecurityContextHolder; import org.eclipse.persistence.annotations.CascadeOnDelete; import org.springframework.data.domain.Persistable; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java index 80e3cd563..ce7074443 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java @@ -37,13 +37,13 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemSecurityContextHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.PollStatus; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.model.helper.SystemSecurityContextHolder; -import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.tenancy.configuration.DurationHelper; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.persistence.annotations.CascadeOnDelete; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/AfterTransactionCommitExecutorHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/AfterTransactionCommitExecutorHolder.java similarity index 86% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/AfterTransactionCommitExecutorHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/AfterTransactionCommitExecutorHolder.java index 1282bc99d..dcd02d30a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/AfterTransactionCommitExecutorHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/AfterTransactionCommitExecutorHolder.java @@ -6,10 +6,10 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.repository.model.helper; -import org.eclipse.hawkbit.eventbus.EntityPropertyChangeListener; -import org.eclipse.hawkbit.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.jpa.eventbus.EntityPropertyChangeListener; +import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; import org.springframework.beans.factory.annotation.Autowired; /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/CacheManagerHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/CacheManagerHolder.java similarity index 91% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/CacheManagerHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/CacheManagerHolder.java index c8c081d95..b380ced8f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/CacheManagerHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/CacheManagerHolder.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.repository.model.helper; -import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.CacheManager; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/EventBusHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/EventBusHolder.java similarity index 89% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/EventBusHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/EventBusHolder.java index 8111a1c28..0b0a54829 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/EventBusHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/EventBusHolder.java @@ -6,9 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.repository.model.helper; -import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.eventbus.EventBus; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SecurityChecker.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityChecker.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SecurityChecker.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityChecker.java index 7c9763e6d..54448cf2b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SecurityChecker.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityChecker.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.repository.model.helper; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SecurityTokenGeneratorHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityTokenGeneratorHolder.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SecurityTokenGeneratorHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityTokenGeneratorHolder.java index ffc1e308f..10191b9e1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SecurityTokenGeneratorHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityTokenGeneratorHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.repository.model.helper; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemManagementHolder.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemManagementHolder.java index d1327c690..7365fec90 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemManagementHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemManagementHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.repository.model.helper; import org.eclipse.hawkbit.repository.SystemManagement; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemSecurityContextHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemSecurityContextHolder.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemSecurityContextHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemSecurityContextHolder.java index 7d005e9bc..f6b20a3fd 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemSecurityContextHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemSecurityContextHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.repository.model.helper; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantAwareHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantAwareHolder.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantAwareHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantAwareHolder.java index 5b85745d7..c4ded314d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantAwareHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantAwareHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.repository.model.helper; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantConfigurationManagementHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantConfigurationManagementHolder.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantConfigurationManagementHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantConfigurationManagementHolder.java index 700511db6..8fbcb2411 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantConfigurationManagementHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantConfigurationManagementHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.repository.model.helper; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/rsql/PropertyMapper.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/PropertyMapper.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/rsql/PropertyMapper.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/PropertyMapper.java index ffa0e9212..85051d192 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/rsql/PropertyMapper.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/PropertyMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.repository.rsql; import java.util.HashMap; import java.util.Map; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/RSQLUtility.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/RSQLUtility.java index 87883f91f..c8b796e2d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/RSQLUtility.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.repository.rsql; import java.util.ArrayList; import java.util.Arrays; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/PauseRolloutGroupAction.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/PauseRolloutGroupAction.java index 43232ef2d..e20f632f8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/PauseRolloutGroupAction.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/PauseRolloutGroupAction.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rollout.condition; +package org.eclipse.hawkbit.repository.jpa.rollout.condition; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/RolloutGroupActionEvaluator.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupActionEvaluator.java similarity index 91% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/RolloutGroupActionEvaluator.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupActionEvaluator.java index 1e2c98707..d375e68c5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/RolloutGroupActionEvaluator.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupActionEvaluator.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rollout.condition; +package org.eclipse.hawkbit.repository.jpa.rollout.condition; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/RolloutGroupConditionEvaluator.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupConditionEvaluator.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/RolloutGroupConditionEvaluator.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupConditionEvaluator.java index 62c9050b1..642386c69 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/RolloutGroupConditionEvaluator.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupConditionEvaluator.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rollout.condition; +package org.eclipse.hawkbit.repository.jpa.rollout.condition; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java index 0f1d1376f..e12a26bac 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/StartNextGroupRolloutGroupSuccessAction.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rollout.condition; +package org.eclipse.hawkbit.repository.jpa.rollout.condition; import java.util.List; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/ThresholdRolloutGroupErrorCondition.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/ThresholdRolloutGroupErrorCondition.java index 32e9725f8..cba134402 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupErrorCondition.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/ThresholdRolloutGroupErrorCondition.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rollout.condition; +package org.eclipse.hawkbit.repository.jpa.rollout.condition; import org.eclipse.hawkbit.repository.jpa.ActionRepository; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupSuccessCondition.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/ThresholdRolloutGroupSuccessCondition.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupSuccessCondition.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/ThresholdRolloutGroupSuccessCondition.java index 5f9167931..3e098c701 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/rollout/condition/ThresholdRolloutGroupSuccessCondition.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/ThresholdRolloutGroupSuccessCondition.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.rollout.condition; +package org.eclipse.hawkbit.repository.jpa.rollout.condition; import org.eclipse.hawkbit.repository.jpa.ActionRepository; import org.eclipse.hawkbit.repository.model.Action; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java similarity index 90% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java index 96e4aced8..e951f736f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; @@ -15,6 +15,7 @@ import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import org.eclipse.hawkbit.ExcludePathAwareShallowETagFilter; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; @@ -28,25 +29,10 @@ import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.jpa.ActionRepository; -import org.eclipse.hawkbit.repository.jpa.ActionStatusRepository; -import org.eclipse.hawkbit.repository.jpa.DistributionSetRepository; -import org.eclipse.hawkbit.repository.jpa.DistributionSetTagRepository; -import org.eclipse.hawkbit.repository.jpa.DistributionSetTypeRepository; -import org.eclipse.hawkbit.repository.jpa.ExternalArtifactRepository; -import org.eclipse.hawkbit.repository.jpa.LocalArtifactRepository; -import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; -import org.eclipse.hawkbit.repository.jpa.RolloutRepository; -import org.eclipse.hawkbit.repository.jpa.SoftwareModuleMetadataRepository; -import org.eclipse.hawkbit.repository.jpa.SoftwareModuleRepository; -import org.eclipse.hawkbit.repository.jpa.SoftwareModuleTypeRepository; -import org.eclipse.hawkbit.repository.jpa.TargetInfoRepository; -import org.eclipse.hawkbit.repository.jpa.TargetRepository; -import org.eclipse.hawkbit.repository.jpa.TargetTagRepository; -import org.eclipse.hawkbit.repository.jpa.TenantMetaDataRepository; +import org.eclipse.hawkbit.repository.jpa.configuration.RepositoryApplicationConfiguration; +import org.eclipse.hawkbit.repository.jpa.utils.RepositoryDataGenerator.DatabaseCleanupUtil; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.utils.RepositoryDataGenerator.DatabaseCleanupUtil; import org.eclipse.hawkbit.security.DosFilter; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTestWithMongoDB.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTestWithMongoDB.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTestWithMongoDB.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTestWithMongoDB.java index 6d116c5f0..d83f2e5cf 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTestWithMongoDB.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTestWithMongoDB.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import java.io.IOException; import java.net.UnknownHostException; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ActionTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ActionTest.java index 0b8938808..9104f28cf 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ActionTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ActionTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementNoMongoDbTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementNoMongoDbTest.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementNoMongoDbTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementNoMongoDbTest.java index ee1cb3acd..fd91a2158 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementNoMongoDbTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementNoMongoDbTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.junit.Assert.fail; @@ -14,7 +14,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import org.apache.commons.lang3.RandomStringUtils; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.exception.ArtifactUploadFailedException; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.junit.BeforeClass; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java index 7b704af12..4c37c00e3 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ArtifactManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertNotNull; @@ -20,11 +20,8 @@ import java.security.NoSuchAlgorithmException; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.HashGeneratorUtils; -import org.eclipse.hawkbit.RandomGeneratedInputStream; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.im.authentication.SpPermission; +import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.exception.ArtifactDeleteFailedException; import org.eclipse.hawkbit.repository.exception.InsufficientPermissionException; import org.eclipse.hawkbit.repository.jpa.model.JpaExternalArtifact; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/CIMySqlTestDatabase.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/CIMySqlTestDatabase.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/CIMySqlTestDatabase.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/CIMySqlTestDatabase.java index 0a9b4b1b3..c0a8b161c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/CIMySqlTestDatabase.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/CIMySqlTestDatabase.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import java.sql.Connection; import java.sql.DriverManager; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java index 4b2a92169..c79c47af9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ControllerManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -17,8 +17,6 @@ import java.util.List; import javax.validation.ConstraintViolationException; import org.apache.commons.lang3.RandomStringUtils; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java index c1b0541f2..0016d4d7d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/DeploymentManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; @@ -21,14 +21,13 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.Constants; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; -import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; +import org.eclipse.hawkbit.repository.ActionStatusFields; +import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; +import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.exception.ForceQuitActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetException; -import org.eclipse.hawkbit.repository.jpa.TargetRepository; +import org.eclipse.hawkbit.repository.jpa.configuration.Constants; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index 5a5518cf3..a29a76086 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -16,10 +16,8 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; +import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.exception.DistributionSetTypeUndefinedException; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityLockedException; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/FreePortFileWriter.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/FreePortFileWriter.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/FreePortFileWriter.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/FreePortFileWriter.java index c67928910..8d900a593 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/FreePortFileWriter.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/FreePortFileWriter.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import java.io.File; import java.net.InetSocketAddress; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/HashGeneratorUtils.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/HashGeneratorUtils.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/HashGeneratorUtils.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/HashGeneratorUtils.java index 10f4ede4c..a94807958 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/HashGeneratorUtils.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/HashGeneratorUtils.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/LocalH2TestDatabase.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/LocalH2TestDatabase.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/LocalH2TestDatabase.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/LocalH2TestDatabase.java index a32c481fc..7812527c8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/LocalH2TestDatabase.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/LocalH2TestDatabase.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import java.io.IOException; import java.sql.Connection; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/MethodSecurityUtil.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/MethodSecurityUtil.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/MethodSecurityUtil.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/MethodSecurityUtil.java index 6633a27e5..032289e87 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/MethodSecurityUtil.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/MethodSecurityUtil.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.Assertions.assertThat; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/RandomGeneratedInputStream.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RandomGeneratedInputStream.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/RandomGeneratedInputStream.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RandomGeneratedInputStream.java index bd5be54f5..a7a1c0956 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/RandomGeneratedInputStream.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RandomGeneratedInputStream.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import java.io.IOException; import java.io.InputStream; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java index 0a18c0b03..57fc13379 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/ReportManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.Assertions.assertThat; import static org.fest.assertions.api.Assertions.fail; @@ -20,14 +20,8 @@ import java.util.Calendar; import java.util.List; import java.util.stream.Collectors; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithSpringAuthorityRule; -import org.eclipse.hawkbit.WithUser; -import org.eclipse.hawkbit.report.model.DataReportSeries; -import org.eclipse.hawkbit.report.model.DataReportSeriesItem; -import org.eclipse.hawkbit.report.model.InnerOuterDataReportSeries; -import org.eclipse.hawkbit.report.model.SeriesTime; +import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; +import org.eclipse.hawkbit.repository.ReportManagement; import org.eclipse.hawkbit.repository.ReportManagement.DateTypes; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; @@ -40,6 +34,10 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.report.model.DataReportSeries; +import org.eclipse.hawkbit.repository.report.model.DataReportSeriesItem; +import org.eclipse.hawkbit.repository.report.model.InnerOuterDataReportSeries; +import org.eclipse.hawkbit.repository.report.model.SeriesTime; import org.junit.After; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java index 576315b3a..28ece9239 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/RolloutManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; @@ -16,12 +16,15 @@ import java.util.List; import java.util.Map; import java.util.concurrent.Callable; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; +import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; +import org.eclipse.hawkbit.repository.RolloutGroupManagement; +import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.utils.MultipleInvokeHelper; +import org.eclipse.hawkbit.repository.jpa.utils.SuccessCondition; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -38,8 +41,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.repository.utils.MultipleInvokeHelper; -import org.eclipse.hawkbit.repository.utils.SuccessCondition; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Description; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java index f7943c78b..69e19ea3a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertTrue; @@ -20,10 +20,6 @@ import java.util.Iterator; import java.util.List; import org.apache.commons.lang3.RandomUtils; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.RandomGeneratedInputStream; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/SystemManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/SystemManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java index 261b921c8..185416984 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/SystemManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; @@ -14,13 +14,10 @@ import java.io.ByteArrayInputStream; import java.util.List; import java.util.Random; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithSpringAuthorityRule; -import org.eclipse.hawkbit.report.model.TenantUsage; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.report.model.TenantUsage; import org.junit.Test; import ru.yandex.qatools.allure.annotations.Description; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java index 66ea38e77..67c7de049 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TagManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; @@ -18,9 +18,8 @@ import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; +import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagenmentTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagenmentTest.java index 498364cf9..e2a06d5fc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagenmentTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagenmentTest.java @@ -6,12 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import org.eclipse.hawkbit.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementSearchTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementSearchTest.java index 4ff845e1a..7b128de3b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TargetManagementSearchTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementSearchTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; @@ -17,8 +17,6 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java index 0f01a5a43..10f614caa 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; @@ -28,11 +28,8 @@ import java.util.stream.Collectors; import javax.persistence.Query; import javax.validation.ConstraintViolationException; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithSpringAuthorityRule; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.im.authentication.SpPermission; +import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TenantConfigurationManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationManagementTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TenantConfigurationManagementTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationManagementTest.java index 1427df25b..0e0d50bbc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/TenantConfigurationManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationManagementTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -16,7 +16,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; import org.eclipse.hawkbit.tenancy.configuration.DurationHelper; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/TestConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java similarity index 91% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/TestConfiguration.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java index d96856557..22ae16d6f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/TestConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java @@ -6,17 +6,18 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import org.eclipse.hawkbit.HawkbitServerProperties; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.TenancyCacheManager; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; -import org.eclipse.hawkbit.repository.model.helper.EventBusHolder; -import org.eclipse.hawkbit.repository.utils.RepositoryDataGenerator; -import org.eclipse.hawkbit.repository.utils.RepositoryDataGenerator.DatabaseCleanupUtil; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.EventBusHolder; +import org.eclipse.hawkbit.repository.jpa.utils.RepositoryDataGenerator; +import org.eclipse.hawkbit.repository.jpa.utils.RepositoryDataGenerator.DatabaseCleanupUtil; import org.eclipse.hawkbit.security.DdiSecurityProperties; import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.SpringSecurityAuditorAware; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/TestDataUtil.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestDataUtil.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/TestDataUtil.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestDataUtil.java index 5992ed1fc..296fb98ea 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/TestDataUtil.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestDataUtil.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import static org.fest.assertions.api.Assertions.assertThat; @@ -23,7 +23,6 @@ import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.jpa.ActionRepository; import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaArtifact; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/Testdatabase.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/Testdatabase.java similarity index 91% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/Testdatabase.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/Testdatabase.java index a11984481..38133c800 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/Testdatabase.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/Testdatabase.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; /** * diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/WithSpringAuthorityRule.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/WithSpringAuthorityRule.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java index 40f6a64c2..aeacad509 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/WithSpringAuthorityRule.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import java.lang.annotation.Annotation; import java.lang.reflect.Field; @@ -17,7 +17,7 @@ import java.util.concurrent.Callable; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; -import org.eclipse.hawkbit.repository.model.helper.SystemManagementHolder; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemManagementHolder; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/WithUser.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithUser.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/WithUser.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithUser.java index 3b0412ff1..0a936f1c0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/WithUser.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithUser.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.repository.jpa; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/cache/CacheKeysTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeysTest.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/cache/CacheKeysTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeysTest.java index b0da78abd..921d1953a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/cache/CacheKeysTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeysTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.cache; +package org.eclipse.hawkbit.repository.jpa.cache; import static org.fest.assertions.api.Assertions.assertThat; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/cache/CacheWriteNotifyTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/cache/CacheWriteNotifyTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java index c88a3e717..603af17c9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/cache/CacheWriteNotifyTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.cache; +package org.eclipse.hawkbit.repository.jpa.cache; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListenerTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListenerTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java index 4943ea88a..4845e2ccc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/eventbus/CacheFieldEntityListenerTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus; +package org.eclipse.hawkbit.repository.jpa.eventbus; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Matchers.anyString; @@ -14,9 +14,9 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import org.eclipse.hawkbit.cache.CacheField; -import org.eclipse.hawkbit.cache.CacheKeys; -import org.eclipse.hawkbit.repository.model.helper.CacheManagerHolder; +import org.eclipse.hawkbit.repository.jpa.cache.CacheField; +import org.eclipse.hawkbit.repository.jpa.cache.CacheKeys; +import org.eclipse.hawkbit.repository.jpa.repository.model.helper.CacheManagerHolder; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/model/ModelEqualsHashcodeTest.java similarity index 91% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/model/ModelEqualsHashcodeTest.java index c8f34cd48..2114afc42 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/model/ModelEqualsHashcodeTest.java @@ -6,17 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model; +package org.eclipse.hawkbit.repository.jpa.model; import static org.fest.assertions.api.Assertions.assertThat; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.repository.jpa.model.JpaAction; -import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.junit.Test; import ru.yandex.qatools.allure.annotations.Description; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java index be6fd01b7..949e278ab 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLActionFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java @@ -6,14 +6,14 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.fail; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java index 1e9d5e1b8..2c3747586 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java @@ -6,17 +6,17 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.fail; import java.util.Arrays; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.DistributionSetFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetMetadataFieldsTest.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetMetadataFieldsTest.java index 09c1e8dd0..af96da86f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetMetadataFieldsTest.java @@ -6,16 +6,16 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java index 32c4d8641..408c1847e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLRolloutGroupFields.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java @@ -6,13 +6,13 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.RolloutGroupFields; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleFieldTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java index b049daa0c..6fb220880 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java @@ -6,12 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.SoftwareModuleFields; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleMetadataFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleMetadataFieldsTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java index 362428887..87f151873 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleMetadataFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java @@ -6,16 +6,16 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.SoftwareModuleMetadataFields; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java index e4988025e..3254ee4f6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLSoftwareModuleTypeFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java @@ -6,12 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.SoftwareModuleTypeFields; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.junit.Test; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTagFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTagFieldsTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java index 85474e70e..a60d17818 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTagFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java @@ -6,12 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.TagFields; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTag; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java index a50230503..2e4f0346f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLTargetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java @@ -6,17 +6,17 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.fail; import java.util.Arrays; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLUtilityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLUtilityTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java index dda0395da..9e0627178 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLUtilityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; @@ -32,6 +32,7 @@ import org.eclipse.hawkbit.repository.SoftwareModuleFields; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; +import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java index e5cbc18a0..1c0beeabf 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/tenancy/MultiTenancyEntityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java @@ -6,13 +6,13 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.tenancy; +package org.eclipse.hawkbit.repository.jpa.tenancy; import static org.fest.assertions.api.Assertions.assertThat; -import org.eclipse.hawkbit.AbstractIntegrationTest; -import org.eclipse.hawkbit.WithSpringAuthorityRule; -import org.eclipse.hawkbit.WithUser; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/utils/MultipleInvokeHelper.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/MultipleInvokeHelper.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/utils/MultipleInvokeHelper.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/MultipleInvokeHelper.java index d40fe1fd0..c4710ca4b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/utils/MultipleInvokeHelper.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/MultipleInvokeHelper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.utils; +package org.eclipse.hawkbit.repository.jpa.utils; import java.util.concurrent.Callable; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/RepositoryDataGenerator.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/RepositoryDataGenerator.java index 9cacd9a82..9d41ecb65 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/utils/RepositoryDataGenerator.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/RepositoryDataGenerator.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.utils; +package org.eclipse.hawkbit.repository.jpa.utils; import java.net.URI; import java.util.ArrayList; @@ -22,7 +22,6 @@ import javax.persistence.EntityManager; import javax.persistence.Query; import javax.transaction.Transactional; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; @@ -33,6 +32,7 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/utils/SuccessCondition.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/SuccessCondition.java similarity index 92% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/utils/SuccessCondition.java rename to hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/SuccessCondition.java index 6c9553dc8..b5e421107 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/utils/SuccessCondition.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/SuccessCondition.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.utils; +package org.eclipse.hawkbit.repository.jpa.utils; /** * SuccessCondition Interface. diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java index 181ccc1f8..baa18edb2 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java @@ -22,7 +22,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; -import org.eclipse.hawkbit.cache.CacheWriteNotify; +import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java index 38f36859b..e86f78d68 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rest; -import org.eclipse.hawkbit.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.eclipse.hawkbit.rest.util.FilterHttpResponse; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java index 9a25eb631..d3da40035 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rest; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.eclipse.hawkbit.rest.util.FilterHttpResponse; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java index 4358bb734..cca4bdd4c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java @@ -11,18 +11,18 @@ package org.eclipse.hawkbit.ui; import java.util.HashSet; import java.util.Set; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.eventbus.event.Event; -import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; -import org.eclipse.hawkbit.eventbus.event.RolloutGroupChangeEvent; -import org.eclipse.hawkbit.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagDeletedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagUpdateEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupChangeEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetCreatedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagDeletedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagUpdateEvent; /** * The default hawkbit event provider. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java index ce9f101f3..e74a331af 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/AbstractTargetTagToken.java @@ -8,9 +8,9 @@ */ package org.eclipse.hawkbit.ui.common.tagdetails; -import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.eclipse.hawkbit.repository.model.TargetTag; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java index 178610c23..88467d838 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/DistributionTagToken.java @@ -14,12 +14,12 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagAssigmentResultEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagAssigmentResultEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagDeletedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java index 6f03c5860..2cd4ec978 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tagdetails/TargetTagToken.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import org.eclipse.hawkbit.eventbus.event.TargetTagAssigmentResultEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagAssigmentResultEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index e540017c3..56ba4183b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -11,9 +11,9 @@ package org.eclipse.hawkbit.ui.management.dstag; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagDeletedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java index fbf882695..003700df5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java @@ -11,10 +11,10 @@ package org.eclipse.hawkbit.ui.management.dstag; import java.util.HashMap; import java.util.Map; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagDeletedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtonClickBehaviour; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtons; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 62ad96205..552349f0a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -18,12 +18,12 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import org.eclipse.hawkbit.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.eventbus.event.TargetCreatedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java index efd4084f5..e5990be49 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java @@ -11,9 +11,9 @@ package org.eclipse.hawkbit.ui.management.targettag; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagDeletedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.management.tag.CreateUpdateTagLayout; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java index 58721d77d..eeac79728 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java @@ -12,12 +12,12 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; -import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagDeletedEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 7f3877a9a..1e5c3b3c0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -21,9 +21,9 @@ import java.util.Locale; import java.util.Map; import java.util.Set; -import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutChangeEvent; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index f09b02cfc..e2a8194ed 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java @@ -15,10 +15,10 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import org.eclipse.hawkbit.eventbus.event.RolloutGroupChangeEvent; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupChangeEvent; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; From e6ff96dc5a81d4eda350180c03d22dbb5983e982 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 27 May 2016 13:30:18 +0200 Subject: [PATCH 148/371] Completed maven module split. Signed-off-by: Kai Zimmermann --- examples/hawkbit-device-simulator/pom.xml | 6 ------ .../eventbus/EventBusAutoConfiguration.java | 2 +- .../resource/DdiArtifactStoreController.java | 2 +- .../ddi/rest/resource/DdiRootController.java | 2 +- .../rest/resource/DdiArtifactDownloadTest.java | 4 ++-- .../ddi/rest/resource/DdiCancelActionTest.java | 2 +- .../ddi/rest/resource/DdiConfigDataTest.java | 2 +- .../rest/resource/DdiDeploymentBaseTest.java | 2 +- .../rest/resource/DdiRootControllerTest.java | 6 +++--- .../amqp/AmqpMessageDispatcherService.java | 2 +- .../amqp/AmqpMessageHandlerService.java | 2 +- .../amqp/AmqpMessageDispatcherServiceTest.java | 6 +++--- .../amqp/AmqpMessageHandlerServiceTest.java | 4 ++-- .../PropertyBasedArtifactUrlHandlerTest.java | 6 +++--- .../rest/resource/MgmtRolloutResource.java | 2 +- .../resource/MgmtSystemManagementResource.java | 4 ++-- .../MgmtDistributionSetResourceTest.java | 4 ++-- .../MgmtDistributionSetTypeResourceTest.java | 2 +- .../resource/MgmtDownloadResourceTest.java | 2 +- .../rest/resource/MgmtRolloutResourceTest.java | 4 ++-- .../MgmtSoftwareModuleResourceTest.java | 6 +++--- .../MgmtSoftwareModuleTypeResourceTest.java | 2 +- .../rest/resource/MgmtTargetResourceTest.java | 4 ++-- ...SMRessourceMisingMongoDbConnectionTest.java | 2 +- .../hawkbit-repository-jpa/pom.xml | 14 +++++++++----- .../RepositoryApplicationConfiguration.java | 18 ++++++++++-------- .../jpa/JpaDeploymentManagement.java | 2 +- .../jpa/JpaDistributionSetManagement.java | 2 +- .../jpa/JpaRolloutGroupManagement.java | 2 +- .../repository/jpa/JpaRolloutManagement.java | 2 +- .../repository/jpa/JpaSoftwareManagement.java | 2 +- .../repository/jpa/JpaTagManagement.java | 2 +- .../repository/jpa/JpaTargetManagement.java | 2 +- .../jpa/eventbus/CacheFieldEntityListener.java | 2 +- .../eventbus/EntityPropertyChangeListener.java | 4 ++-- .../AbstractJpaTenantAwareBaseEntity.java | 4 ++-- .../repository/jpa/model/JpaTarget.java | 6 +++--- .../repository/jpa/model/JpaTargetInfo.java | 4 ++-- .../AfterTransactionCommitExecutorHolder.java | 2 +- .../model/helper/CacheManagerHolder.java | 2 +- .../model/helper/EventBusHolder.java | 2 +- .../model/helper/SecurityChecker.java | 2 +- .../helper/SecurityTokenGeneratorHolder.java | 2 +- .../model/helper/SystemManagementHolder.java | 2 +- .../helper/SystemSecurityContextHolder.java | 2 +- .../model/helper/TenantAwareHolder.java | 2 +- .../TenantConfigurationManagementHolder.java | 2 +- .../{repository => }/rsql/PropertyMapper.java | 2 +- .../jpa/{repository => }/rsql/RSQLUtility.java | 2 +- .../jpa/AbstractIntegrationTest.java | 18 +++++++++++++++++- .../repository/jpa/TestConfiguration.java | 2 +- .../jpa/WithSpringAuthorityRule.java | 2 +- .../eventbus/CacheFieldEntityListenerTest.java | 2 +- .../repository/jpa/rsql/RSQLUtilityTest.java | 1 - .../rest/json/model/ExceptionInfoTest.java | 1 - 55 files changed, 104 insertions(+), 90 deletions(-) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/{repository/jpa/configuration => }/RepositoryApplicationConfiguration.java (88%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/model/helper/AfterTransactionCommitExecutorHolder.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/model/helper/CacheManagerHolder.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/model/helper/EventBusHolder.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/model/helper/SecurityChecker.java (96%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/model/helper/SecurityTokenGeneratorHolder.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/model/helper/SystemManagementHolder.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/model/helper/SystemSecurityContextHolder.java (94%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/model/helper/TenantAwareHolder.java (94%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/model/helper/TenantConfigurationManagementHolder.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/rsql/PropertyMapper.java (95%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{repository => }/rsql/RSQLUtility.java (99%) diff --git a/examples/hawkbit-device-simulator/pom.xml b/examples/hawkbit-device-simulator/pom.xml index 1b1bc5fdc..3c3df9486 100644 --- a/examples/hawkbit-device-simulator/pom.xml +++ b/examples/hawkbit-device-simulator/pom.xml @@ -116,10 +116,6 @@ org.springframework.boot spring-boot-autoconfigure
- - org.springframework.boot - spring-boot-autoconfigure - com.google.guava guava @@ -127,12 +123,10 @@ com.netflix.feign feign-jackson - 8.14.1 com.netflix.feign feign-core - 8.12.1 com.jayway.jsonpath diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/eventbus/EventBusAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/eventbus/EventBusAutoConfiguration.java index 37e72880c..d4cc32825 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/eventbus/EventBusAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/eventbus/EventBusAutoConfiguration.java @@ -12,7 +12,7 @@ import java.util.concurrent.Executor; import org.eclipse.hawkbit.eventbus.EventBusSubscriberProcessor; import org.eclipse.hawkbit.eventbus.EventSubscriber; -import org.eclipse.hawkbit.repository.model.helper.EventBusHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.EventBusHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 36fa926e8..6c133f03c 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -15,10 +15,10 @@ import java.util.List; import javax.servlet.http.HttpServletRequest; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; -import org.eclipse.hawkbit.cache.CacheWriteNotify; import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlArtifactStoreControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; 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 355a43b3c..09cb4c577 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 @@ -17,7 +17,6 @@ import javax.validation.Valid; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; -import org.eclipse.hawkbit.cache.CacheWriteNotify; import org.eclipse.hawkbit.ddi.json.model.DdiActionFeedback; import org.eclipse.hawkbit.ddi.json.model.DdiCancel; import org.eclipse.hawkbit.ddi.json.model.DdiCancelActionToStop; @@ -33,6 +32,7 @@ import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java index 25e4776c9..2e56ed840 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java @@ -26,9 +26,9 @@ import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.RandomUtils; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.Artifact; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java index b52d0fddc..8fd832b95 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java @@ -22,7 +22,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java index afb60043d..a216ce501 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java @@ -21,7 +21,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.HashMap; import java.util.Map; -import org.eclipse.hawkbit.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index 0790a6705..9d52a67f4 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -25,7 +25,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.RandomUtils; -import org.eclipse.hawkbit.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index ffeed1956..490e76161 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -22,11 +22,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithSpringAuthorityRule; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java index dbfded401..3b05c96a6 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java @@ -25,8 +25,8 @@ import org.eclipse.hawkbit.dmf.json.model.DownloadAndUpdateRequest; import org.eclipse.hawkbit.dmf.json.model.SoftwareModule; import org.eclipse.hawkbit.eventbus.EventSubscriber; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; -import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.util.IpUtil; import org.springframework.amqp.core.Message; 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 03b2c7514..90039d4ba 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 @@ -30,11 +30,11 @@ 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.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java index 9164e655d..132ddb650 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java @@ -25,8 +25,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.dmf.amqp.api.EventTopic; @@ -34,7 +32,9 @@ import org.eclipse.hawkbit.dmf.amqp.api.MessageHeaderKey; import org.eclipse.hawkbit.dmf.amqp.api.MessageType; import org.eclipse.hawkbit.dmf.json.model.DownloadAndUpdateRequest; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; -import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; +import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; 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 b0c5d777b..2ce6cd91c 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 @@ -36,19 +36,19 @@ import org.eclipse.hawkbit.dmf.json.model.ActionUpdateStatus; 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.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.helper.SecurityTokenGeneratorHolder; 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.SoftwareModule; -import org.eclipse.hawkbit.repository.model.helper.SecurityTokenGeneratorHolder; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.junit.Before; import org.junit.Test; diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index f9a2ea316..3d83fed69 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -10,13 +10,13 @@ package org.eclipse.hawkbit.util; import static org.junit.Assert.assertEquals; -import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.AmqpTestConfiguration; import org.eclipse.hawkbit.RepositoryApplicationConfiguration; -import org.eclipse.hawkbit.TestConfiguration; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.api.UrlProtocol; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.repository.jpa.TestConfiguration; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java index ae025e51b..0b3a77101 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java @@ -23,6 +23,7 @@ import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; @@ -33,7 +34,6 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCond import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java index 46e51f2ee..3392d2659 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java @@ -18,9 +18,9 @@ import org.eclipse.hawkbit.mgmt.json.model.systemmanagement.MgmtSystemCache; import org.eclipse.hawkbit.mgmt.json.model.systemmanagement.MgmtSystemStatisticsRest; import org.eclipse.hawkbit.mgmt.json.model.systemmanagement.MgmtSystemTenantServiceUsage; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSystemManagementRestApi; -import org.eclipse.hawkbit.report.model.SystemUsageReport; -import org.eclipse.hawkbit.report.model.TenantUsage; import org.eclipse.hawkbit.repository.SystemManagement; +import org.eclipse.hawkbit.repository.report.model.SystemUsageReport; +import org.eclipse.hawkbit.repository.report.model.TenantUsage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index 63e09fb98..700a2735c 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -26,10 +26,10 @@ import java.util.Iterator; import java.util.List; import java.util.Set; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java index 005a7f51f..d4596bde7 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java @@ -23,8 +23,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java index 17f23f888..fcdbfa918 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java @@ -11,11 +11,11 @@ package org.eclipse.hawkbit.mgmt.rest.resource; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import org.eclipse.hawkbit.TestDataUtil; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.DownloadArtifactCache; import org.eclipse.hawkbit.cache.DownloadType; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index b1c843042..fd171b7da 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -21,11 +21,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.List; import java.util.concurrent.Callable; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java index 379674f98..2e9f1a47b 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java @@ -32,13 +32,13 @@ import java.util.List; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; -import org.eclipse.hawkbit.HashGeneratorUtils; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.jpa.HashGeneratorUtils; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java index 85df4fc70..ae137e125 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java @@ -23,8 +23,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index bc0f1cb0d..b1ed0eb26 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -29,14 +29,14 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.WithUser; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java index dc5d5122d..9e698e0af 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java @@ -13,8 +13,8 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.apache.commons.lang3.RandomStringUtils; -import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.exception.SpServerError; +import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml index d84b36778..e61ad8325 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/pom.xml +++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml @@ -69,6 +69,10 @@ org.springframework.boot spring-boot + + org.springframework.boot + spring-boot-starter-logging + org.springframework.boot spring-boot-starter-data-jpa @@ -117,11 +121,11 @@ allure-junit-adaptor test - - org.springframework.data - spring-data-rest-webmvc - test - + + + + + org.springframework.security spring-security-aspects diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java similarity index 88% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/RepositoryApplicationConfiguration.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index aaed3e64e..afb6f4245 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/configuration/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.configuration; +package org.eclipse.hawkbit; import java.util.HashMap; import java.util.Map; @@ -14,13 +14,14 @@ import java.util.Map; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.jpa.aspects.ExceptionMappingAspectHandler; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.AfterTransactionCommitExecutorHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.CacheManagerHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SecurityTokenGeneratorHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemManagementHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemSecurityContextHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.TenantAwareHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.TenantConfigurationManagementHolder; +import org.eclipse.hawkbit.repository.jpa.configuration.MultiTenantJpaTransactionManager; +import org.eclipse.hawkbit.repository.jpa.model.helper.AfterTransactionCommitExecutorHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.CacheManagerHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.SecurityTokenGeneratorHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.SystemManagementHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.TenantAwareHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; @@ -157,6 +158,7 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { properties.put("eclipselink.ddl-generation", "none"); properties.put("eclipselink.persistence-context.flush-mode", "auto"); + properties.put("eclipselink.logging.logger", "JavaLogger"); return properties; } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index a3c717d98..8463f2d37 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -54,7 +54,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaRollout_; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; -import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index 8398832b6..52c140109 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -43,7 +43,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata_; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; -import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetSpecification; import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetTypeSpecification; import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java index dce07dc79..ea6214824 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java @@ -32,7 +32,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup_; -import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index e2f5ea8aa..f4523330d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -30,9 +30,9 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout_; import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup; -import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.rollout.condition.RolloutGroupActionEvaluator; import org.eclipse.hawkbit.repository.jpa.rollout.condition.RolloutGroupConditionEvaluator; +import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index ff3783783..eceec20d1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -41,7 +41,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata_; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule_; import org.eclipse.hawkbit.repository.jpa.model.SwMetadataCompositeKey; -import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.specifications.SoftwareModuleSpecification; import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.model.AssignedSoftwareModule; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java index dd10ffce8..9a44f1319 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; -import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.tenancy.TenantAware; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java index e5be3d7c3..8d2fabac7 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java @@ -39,7 +39,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo_; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; -import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; +import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications; import org.eclipse.hawkbit.repository.model.Target; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java index 20c5b0caa..3c0a46b14 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java @@ -17,7 +17,7 @@ import javax.persistence.PostRemove; import org.apache.commons.lang3.reflect.FieldUtils; import org.eclipse.hawkbit.repository.jpa.cache.CacheField; import org.eclipse.hawkbit.repository.jpa.cache.CacheKeys; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.CacheManagerHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.CacheManagerHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.Cache; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java index 35cfd9f5e..df9d600c1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java @@ -17,8 +17,8 @@ import org.eclipse.hawkbit.repository.eventbus.event.ActionPropertyChangeEvent; import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupPropertyChangeEvent; import org.eclipse.hawkbit.repository.eventbus.event.RolloutPropertyChangeEvent; import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.AfterTransactionCommitExecutorHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.EventBusHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.AfterTransactionCommitExecutorHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.EventBusHolder; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java index 235687d1f..880a51167 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java @@ -13,8 +13,8 @@ import javax.persistence.MappedSuperclass; import javax.persistence.PrePersist; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemManagementHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.TenantAwareHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.SystemManagementHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.TenantAwareHolder; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.persistence.annotations.Multitenant; import org.eclipse.persistence.annotations.MultitenantType; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java index 24cabf7d4..05c8bc229 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -36,9 +36,9 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import org.eclipse.hawkbit.im.authentication.SpPermission; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SecurityChecker; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SecurityTokenGeneratorHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemSecurityContextHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.SecurityChecker; +import org.eclipse.hawkbit.repository.jpa.model.helper.SecurityTokenGeneratorHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java index ce7074443..6b5a3d1af 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java @@ -37,8 +37,8 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemSecurityContextHolder; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.TenantConfigurationManagementHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.PollStatus; import org.eclipse.hawkbit.repository.model.Target; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/AfterTransactionCommitExecutorHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/AfterTransactionCommitExecutorHolder.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/AfterTransactionCommitExecutorHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/AfterTransactionCommitExecutorHolder.java index dcd02d30a..a1a4416c3 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/AfterTransactionCommitExecutorHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/AfterTransactionCommitExecutorHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.model.helper; import org.eclipse.hawkbit.repository.jpa.eventbus.EntityPropertyChangeListener; import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/CacheManagerHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/CacheManagerHolder.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/CacheManagerHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/CacheManagerHolder.java index b380ced8f..cdc834f08 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/CacheManagerHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/CacheManagerHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.model.helper; import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/EventBusHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/EventBusHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java index 0b0a54829..0bf29cbdb 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/EventBusHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.model.helper; import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityChecker.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SecurityChecker.java similarity index 96% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityChecker.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SecurityChecker.java index 54448cf2b..da4f223e6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityChecker.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SecurityChecker.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.model.helper; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityTokenGeneratorHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SecurityTokenGeneratorHolder.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityTokenGeneratorHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SecurityTokenGeneratorHolder.java index 10191b9e1..64c158c87 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SecurityTokenGeneratorHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SecurityTokenGeneratorHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.model.helper; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemManagementHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemManagementHolder.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemManagementHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemManagementHolder.java index 7365fec90..1b1fbb091 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemManagementHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemManagementHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.model.helper; import org.eclipse.hawkbit.repository.SystemManagement; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemSecurityContextHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemSecurityContextHolder.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemSecurityContextHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemSecurityContextHolder.java index f6b20a3fd..109c11280 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/SystemSecurityContextHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemSecurityContextHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.model.helper; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantAwareHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/TenantAwareHolder.java similarity index 94% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantAwareHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/TenantAwareHolder.java index c4ded314d..a034cd605 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantAwareHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/TenantAwareHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.model.helper; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantConfigurationManagementHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/TenantConfigurationManagementHolder.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantConfigurationManagementHolder.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/TenantConfigurationManagementHolder.java index 8fbcb2411..239274c45 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/model/helper/TenantConfigurationManagementHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/TenantConfigurationManagementHolder.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.model.helper; +package org.eclipse.hawkbit.repository.jpa.model.helper; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/PropertyMapper.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/PropertyMapper.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/PropertyMapper.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/PropertyMapper.java index 85051d192..db4417960 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/PropertyMapper.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/PropertyMapper.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import java.util.HashMap; import java.util.Map; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/RSQLUtility.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/RSQLUtility.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java index c8b796e2d..91e03342e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/repository/rsql/RSQLUtility.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.repository.rsql; +package org.eclipse.hawkbit.repository.jpa.rsql; import java.util.ArrayList; import java.util.Arrays; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java index e951f736f..a1eff3fae 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java @@ -16,6 +16,7 @@ import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.eclipse.hawkbit.ExcludePathAwareShallowETagFilter; +import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; @@ -29,7 +30,22 @@ import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.jpa.configuration.RepositoryApplicationConfiguration; +import org.eclipse.hawkbit.repository.jpa.ActionRepository; +import org.eclipse.hawkbit.repository.jpa.ActionStatusRepository; +import org.eclipse.hawkbit.repository.jpa.DistributionSetRepository; +import org.eclipse.hawkbit.repository.jpa.DistributionSetTagRepository; +import org.eclipse.hawkbit.repository.jpa.DistributionSetTypeRepository; +import org.eclipse.hawkbit.repository.jpa.ExternalArtifactRepository; +import org.eclipse.hawkbit.repository.jpa.LocalArtifactRepository; +import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; +import org.eclipse.hawkbit.repository.jpa.RolloutRepository; +import org.eclipse.hawkbit.repository.jpa.SoftwareModuleMetadataRepository; +import org.eclipse.hawkbit.repository.jpa.SoftwareModuleRepository; +import org.eclipse.hawkbit.repository.jpa.SoftwareModuleTypeRepository; +import org.eclipse.hawkbit.repository.jpa.TargetInfoRepository; +import org.eclipse.hawkbit.repository.jpa.TargetRepository; +import org.eclipse.hawkbit.repository.jpa.TargetTagRepository; +import org.eclipse.hawkbit.repository.jpa.TenantMetaDataRepository; import org.eclipse.hawkbit.repository.jpa.utils.RepositoryDataGenerator.DatabaseCleanupUtil; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java index 22ae16d6f..5339ceef2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.HawkbitServerProperties; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.TenancyCacheManager; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.EventBusHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.EventBusHolder; import org.eclipse.hawkbit.repository.jpa.utils.RepositoryDataGenerator; import org.eclipse.hawkbit.repository.jpa.utils.RepositoryDataGenerator.DatabaseCleanupUtil; import org.eclipse.hawkbit.security.DdiSecurityProperties; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java index aeacad509..e61215973 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java @@ -17,7 +17,7 @@ import java.util.concurrent.Callable; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.SystemManagementHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.SystemManagementHolder; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java index 4845e2ccc..9c5415bbb 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java @@ -16,7 +16,7 @@ import static org.mockito.Mockito.when; import org.eclipse.hawkbit.repository.jpa.cache.CacheField; import org.eclipse.hawkbit.repository.jpa.cache.CacheKeys; -import org.eclipse.hawkbit.repository.jpa.repository.model.helper.CacheManagerHolder; +import org.eclipse.hawkbit.repository.jpa.model.helper.CacheManagerHolder; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java index 9e0627178..04901d948 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java @@ -32,7 +32,6 @@ import org.eclipse.hawkbit.repository.SoftwareModuleFields; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; -import org.eclipse.hawkbit.repository.jpa.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfoTest.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfoTest.java index 263bb75c5..901702795 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfoTest.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/json/model/ExceptionInfoTest.java @@ -13,7 +13,6 @@ import static org.fest.assertions.Assertions.assertThat; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.junit.Test; import ru.yandex.qatools.allure.annotations.Description; From 53156cb16fdf8b503c9d3e26f4cd91a404a54289 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 27 May 2016 15:25:08 +0200 Subject: [PATCH 149/371] Javadoc, sonar issue, package cycles. Signed-off-by: Kai Zimmermann --- .../resource/DdiArtifactStoreController.java | 5 +- .../ddi/rest/resource/DdiRootController.java | 19 ++++---- .../rest/resource/DdiDeploymentBaseTest.java | 5 +- .../resource/MgmtDistributionSetResource.java | 2 +- .../hawkbit-repository-api/pom.xml | 7 ++- .../eclipse/hawkbit/repository/Constants.java | 31 ++++++++++++ .../repository/ControllerManagement.java | 48 +++++++++++++++++-- .../repository/DeploymentManagement.java | 43 +++++++++++++---- .../repository/DistributionSetManagement.java | 23 ++++++++- .../hawkbit/repository/ReportManagement.java | 3 +- .../repository/RolloutGroupManagement.java | 24 ++++++++-- .../hawkbit/repository/RolloutManagement.java | 10 +++- .../repository/SoftwareManagement.java | 20 ++++++++ .../hawkbit/repository/TagManagement.java | 14 ++++++ .../hawkbit/repository/TargetManagement.java | 20 ++++++-- .../hawkbit/repository/model/Action.java | 6 --- .../repository/model/AssignmentResult.java | 3 ++ .../hawkbit/repository/model/Constants.java | 27 +++++++++++ .../repository/model/DistributionSet.java | 5 -- .../{ => model}/DistributionSetFilter.java | 4 +- .../repository/model/DistributionSetType.java | 42 +++++++++------- .../model/SoftwareModuleMetadata.java | 11 +++++ .../eclipse/hawkbit/repository/model/Tag.java | 10 ++++ .../repository/model/TargetFilterQuery.java | 38 +++++++++++++++ .../hawkbit/repository/model/TargetInfo.java | 33 +++++++++++-- .../hawkbit/repository/model/TargetTag.java | 7 +++ .../{ => model}/TargetWithActionType.java | 6 +-- .../repository/model/TenantConfiguration.java | 19 ++++++++ .../jpa/JpaControllerManagement.java | 19 +++++--- .../jpa/JpaDeploymentManagement.java | 6 +-- .../jpa/JpaDistributionSetManagement.java | 6 +-- .../repository/jpa/JpaRolloutManagement.java | 2 +- .../repository/jpa/cache/CacheField.java | 2 +- .../repository/jpa/cache/CacheKeys.java | 2 +- .../repository/jpa/eventbus/EventMerger.java | 4 +- .../jpa/model/AbstractJpaArtifact.java | 3 ++ .../jpa/model/AbstractJpaBaseEntity.java | 5 +- .../jpa/model/AbstractJpaNamedEntity.java | 3 ++ .../AbstractJpaNamedVersionedEntity.java | 3 ++ .../repository/jpa/model/AbstractJpaTag.java | 3 ++ .../CacheFieldEntityListener.java | 2 +- .../EntityPropertyChangeListener.java | 2 +- .../repository/jpa/model/JpaAction.java | 3 ++ .../repository/jpa/model/JpaActionStatus.java | 3 ++ .../jpa/model/JpaDistributionSet.java | 9 ++-- .../jpa/model/JpaDistributionSetType.java | 42 ++-------------- .../jpa/model/JpaExternalArtifact.java | 3 ++ .../model/JpaExternalArtifactProvider.java | 3 ++ .../jpa/model/JpaLocalArtifact.java | 3 ++ .../repository/jpa/model/JpaRollout.java | 3 ++ .../repository/jpa/model/JpaRolloutGroup.java | 3 ++ .../jpa/model/JpaSoftwareModule.java | 3 ++ .../jpa/model/JpaSoftwareModuleType.java | 3 ++ .../repository/jpa/model/JpaTarget.java | 3 ++ .../jpa/model/JpaTargetFilterQuery.java | 3 ++ .../jpa/model/JpaTenantConfiguration.java | 3 ++ .../jpa/model/JpaTenantMetaData.java | 23 ++------- .../AfterTransactionCommitExecutorHolder.java | 2 +- .../jpa/model/helper/CacheManagerHolder.java | 2 +- .../jpa/model/helper/EventBusHolder.java | 2 +- .../jpa/rollout}/RolloutScheduler.java | 5 +- .../jpa/DeploymentManagementTest.java | 13 ++--- .../jpa/DistributionSetManagementTest.java | 2 +- .../repository/jpa/TagManagementTest.java | 2 +- .../CacheFieldEntityListenerTest.java | 1 + .../ui/common}/DistributionSetIdName.java | 10 +++- .../SoftwareModuleDetailsTable.java | 3 +- .../dstable/DistributionSetDetails.java | 2 +- .../dstable/DistributionSetTable.java | 4 +- .../dstable/ManageDistBeanQuery.java | 4 +- .../SoftwareModuleAssignmentDiscardEvent.java | 2 +- .../footer/DSDeleteActionsLayout.java | 2 +- ...DistributionsConfirmationWindowLayout.java | 2 +- .../state/ManageDistUIState.java | 2 +- .../dstable/DistributionBeanQuery.java | 4 +- .../management/dstable/DistributionTable.java | 2 +- .../event/DistributionTagDropEvent.java | 2 +- .../management/footer/CountMessageLabel.java | 2 +- .../footer/DeleteActionsLayout.java | 2 +- .../ManangementConfirmationWindowLayout.java | 6 +-- .../management/state/ManagementUIState.java | 2 +- .../ui/management/state/TargetBulkUpload.java | 2 +- .../management/state/TargetTableFilters.java | 2 +- .../targettable/BulkUploadHandler.java | 2 +- .../TargetBulkUpdateWindowLayout.java | 2 +- .../management/targettable/TargetTable.java | 2 +- .../targettable/TargetTableHeader.java | 2 +- .../rollout/AddUpdateRolloutWindowLayout.java | 8 ++-- .../rollout/DistributionBeanQuery.java | 4 +- 89 files changed, 548 insertions(+), 213 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java create mode 100644 hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/{ => model}/DistributionSetFilter.java (97%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/{ => model}/TargetWithActionType.java (88%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{eventbus => model}/CacheFieldEntityListener.java (99%) rename hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/{eventbus => model}/EntityPropertyChangeListener.java (98%) rename hawkbit-repository/{hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository => hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout}/RolloutScheduler.java (93%) rename {hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model => hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common}/DistributionSetIdName.java (86%) diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 6c133f03c..859b4c156 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -17,6 +17,7 @@ import javax.servlet.http.HttpServletRequest; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlArtifactStoreControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.Constants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.model.Action; @@ -144,11 +145,11 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR actionStatus.setStatus(Status.DOWNLOAD); if (range != null) { - actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + request.getRequestURI()); } else { actionStatus.addMessage( - ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); + Constants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(actionStatus); return 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 09cb4c577..881eee659 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 @@ -29,6 +29,7 @@ import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase; import org.eclipse.hawkbit.ddi.json.model.DdiResult.FinalResult; import org.eclipse.hawkbit.ddi.rest.api.DdiRootControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.Constants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -180,11 +181,11 @@ public class DdiRootController implements DdiRootControllerRestApi { statusMessage.setStatus(Status.DOWNLOAD); if (range != null) { - statusMessage.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + statusMessage.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + request.getRequestURI()); } else { statusMessage.addMessage( - ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); + Constants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(statusMessage); return action; @@ -247,7 +248,7 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Found an active UpdateAction for target {}. returning deyploment: {}", targetid, base); - controllerManagement.registerRetrieved(action, ControllerManagement.SERVER_MESSAGE_PREFIX + controllerManagement.registerRetrieved(action, Constants.SERVER_MESSAGE_PREFIX + "Target retrieved update action and should start now the download."); return new ResponseEntity<>(base, HttpStatus.OK); @@ -302,13 +303,13 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Controller confirmed cancel (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.CANCELED); - actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target confirmed cancelation."); + actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target confirmed cancelation."); break; case REJECTED: LOG.info("Controller reported internal error (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.WARNING); - actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target REJECTED update."); + actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target REJECTED update."); break; case CLOSED: handleClosedUpdateStatus(feedback, targetid, actionid, actionStatus); @@ -336,7 +337,7 @@ public class DdiRootController implements DdiRootControllerRestApi { targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.RUNNING); actionStatus.addMessage( - ControllerManagement.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); + Constants.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); } private static void handleClosedUpdateStatus(final DdiActionFeedback feedback, final String targetid, @@ -345,10 +346,10 @@ public class DdiRootController implements DdiRootControllerRestApi { feedback.getStatus().getExecution()); if (feedback.getStatus().getResult().getFinished() == FinalResult.FAILURE) { actionStatus.setStatus(Status.ERROR); - actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with ERROR!"); + actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with ERROR!"); } else { actionStatus.setStatus(Status.FINISHED); - actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with OK!"); + actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with OK!"); } } @@ -386,7 +387,7 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Found an active CancelAction for target {}. returning cancel: {}", targetid, cancel); - controllerManagement.registerRetrieved(action, ControllerManagement.SERVER_MESSAGE_PREFIX + controllerManagement.registerRetrieved(action, Constants.SERVER_MESSAGE_PREFIX + "Target retrieved cancel action and should start now the cancelation."); return new ResponseEntity<>(cancel, HttpStatus.OK); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index 9d52a67f4..cafe655e9 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -31,6 +31,7 @@ import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.Constants; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; @@ -117,7 +118,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(actionStatusRepository.findAll()).isEmpty(); List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.FORCED, - Action.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); + Constants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); @@ -256,7 +257,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(actionStatusRepository.findAll()).isEmpty(); List saved = deploymentManagement - .assignDistributionSet(ds.getId(), ActionType.SOFT, Action.NO_FORCE_TIME, savedTarget.getControllerId()) + .assignDistributionSet(ds.getId(), ActionType.SOFT, Constants.NO_FORCE_TIME, savedTarget.getControllerId()) .getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java index ae4972610..e9249f551 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java @@ -32,12 +32,12 @@ import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetWithActionType; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hawkbit-repository/hawkbit-repository-api/pom.xml b/hawkbit-repository/hawkbit-repository-api/pom.xml index ab8ab75db..076ae8cd8 100644 --- a/hawkbit-repository/hawkbit-repository-api/pom.xml +++ b/hawkbit-repository/hawkbit-repository-api/pom.xml @@ -36,5 +36,10 @@ org.springframework.hateoas spring-hateoas -
+ + org.springframework.boot + spring-boot-configuration-processor + true + +
\ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java new file mode 100644 index 000000000..114997fca --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository; + +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.Target; + +/** + * Repository constants. + * + */ +public final class Constants { + + /** + * Prefix that the server puts in front of + * {@link ActionStatus#getMessages()} is the comments was generated by it + * and not be thy {@link Target}. + */ + public static final String SERVER_MESSAGE_PREFIX = "Update Server: "; + + private Constants() { + // Utility class. + } + +} 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 dd91ee07a..cb325cbc9 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 @@ -12,6 +12,7 @@ import java.net.URI; import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import javax.validation.constraints.NotNull; @@ -40,8 +41,6 @@ import org.springframework.security.access.prepost.PreAuthorize; */ public interface ControllerManagement { - String SERVER_MESSAGE_PREFIX = "Update Server: "; - /** * Adds an {@link ActionStatus} for a cancel {@link Action} including * potential state changes for the target and the {@link Action} itself. @@ -270,17 +269,60 @@ public interface ControllerManagement { URI address); /** - * Generates an empty {@link ActionStatus} without persisting it. + * Generates an empty {@link ActionStatus} object without persisting it. * * @return {@link ActionStatus} object */ ActionStatus generateActionStatus(); + /** + * Generates an {@link ActionStatus} object without persisting it. + * + * @param action + * the {@link ActionStatus} belongs to. + * @param status + * as reflected by this {@link ActionStatus}. + * @param occurredAt + * time in {@link TimeUnit#MILLISECONDS} GMT when the status + * change happened. + * @param message + * optional comment + * + * @return {@link ActionStatus} object + */ ActionStatus generateActionStatus(Action action, Status status, Long occurredAt, final String message); + /** + * Generates an {@link ActionStatus} object without persisting it. + * + * @param action + * the {@link ActionStatus} belongs to. + * @param status + * as reflected by this {@link ActionStatus}. + * @param occurredAt + * time in {@link TimeUnit#MILLISECONDS} GMT when the status + * change happened. + * @param messages + * optional comments + * + * @return {@link ActionStatus} object + */ ActionStatus generateActionStatus(Action action, final Status status, Long occurredAt, final Collection messages); + /** + * Generates an {@link ActionStatus} object without persisting it. + * + * @param action + * the {@link ActionStatus} belongs to. + * @param status + * as reflected by this {@link ActionStatus}. + * @param occurredAt + * time in {@link TimeUnit#MILLISECONDS} GMT when the status + * change happened. + * + * @return {@link ActionStatus} object + */ ActionStatus generateActionStatus(Action action, Status status, Long occurredAt); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index b6efec9b0..6a6c7851d 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -16,8 +16,11 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; +import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.ActionWithStatusCount; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -26,6 +29,7 @@ import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetWithActionType; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -147,17 +151,17 @@ public interface DeploymentManagement { /** * Cancels given {@link Action} for given {@link Target}. The method will - * immediately add a {@link ActionStatus.Status#CANCELED} status to the - * action. However, it might be possible that the controller will continue - * to work on the cancellation. + * immediately add a {@link Status#CANCELED} status to the action. However, + * it might be possible that the controller will continue to work on the + * cancellation. * * @param action * to be canceled * @param target * for which the action needs cancellation * - * @return generated {@link CancelAction} or null if not in - * {@link Target#getActiveActions()}. + * @return generated {@link Action} or null if not active on + * given {@link Target}. * @throws CancelActionNotAllowedException * in case the given action is not active or is already a cancel * action @@ -173,6 +177,12 @@ public interface DeploymentManagement { * @param target * the target associated to the actions to count * @return the count value of found actions associated to the target + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Long countActionsByTarget(@NotNull String rsqlParam, @NotNull Target target); @@ -276,6 +286,12 @@ public interface DeploymentManagement { * the page request * @return a slice of actions assigned to the specific target and the * specification + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Slice findActionsByTarget(@NotNull String rsqlParam, @NotNull Target target, @NotNull Pageable pageable); @@ -404,8 +420,8 @@ public interface DeploymentManagement { * @param target * for which the action needs cancellation * - * @return generated {@link CancelAction} or null if not in - * {@link Target#getActiveActions()}. + * @return generated {@link Action} or null if not active on + * {@link Target}. * @throws CancelActionNotAllowedException * in case the given action is not active */ @@ -413,14 +429,14 @@ public interface DeploymentManagement { Action forceQuitAction(@NotNull Action action); /** - * Updates a {@link TargetAction} and forces the {@link TargetAction} if - * it's not already forced. + * Updates a {@link Action} and forces the {@link Action} if it's not + * already forced. * * @param targetId * the ID of the target * @param actionId * the ID of the action - * @return the updated or the found {@link TargetAction} + * @return the updated or the found {@link Action} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) Action forceTargetAction(@NotNull Long actionId); @@ -444,6 +460,13 @@ public interface DeploymentManagement { */ Action generateAction(); + /** + * All {@link ActionStatus} entries in the repository. + * + * @param pageable + * the pagination parameter + * @return {@link Page} of {@link ActionStatus} entries + */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Page findActionStatusAll(@NotNull Pageable pageable); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index dcb135e62..3e31a5a9c 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -15,13 +15,15 @@ import java.util.Set; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; -import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.exception.DistributionSetCreationFailedMissingMandatoryModuleException; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; @@ -30,6 +32,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -292,6 +295,12 @@ public interface DistributionSetManagement { * the page request to page the result * @return a paged result of all meta data entries for a given distribution * set id + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Page findDistributionSetMetadataByDistributionSetId(@NotNull Long distributionSetId, @@ -350,6 +359,12 @@ public interface DistributionSetManagement { * {@link DistributionSet#isDeleted()} == FALSE are returned. * null if both are to be returned * @return all found {@link DistributionSet}s + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Page findDistributionSetsAll(@NotNull String rsqlParam, @NotNull Pageable pageReq, @@ -435,6 +450,12 @@ public interface DistributionSetManagement { * parameter for paging * * @return the found {@link SoftwareModuleType}s + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Page findDistributionSetTypesAll(@NotNull String rsqlParam, @NotNull Pageable pageable); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java index 49b0b505d..a27154868 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java @@ -18,6 +18,7 @@ import java.util.List; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.report.model.DataReportSeries; import org.eclipse.hawkbit.repository.report.model.InnerOuterDataReportSeries; @@ -182,7 +183,7 @@ public interface ReportManagement { /** * Generates a report as a {@link ListReportSeries} targets polled based on - * the {@link TargetStatus#getLastTargetQuery()} within an hour, day, week, + * the {@link TargetInfo#getLastTargetQuery()} within an hour, day, week, * month, year, more than a year, never. * * The order of the numbers within the {@link DataReportSeries} is the order diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index ae1cc5882..d1d3678f5 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -11,6 +11,8 @@ package org.eclipse.hawkbit.repository; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.Target; @@ -70,16 +72,22 @@ public interface RolloutGroupManagement { /** * Retrieves a page of {@link RolloutGroup}s filtered by a given - * {@link Rollout} and the given {@link Specification}. + * {@link Rollout} and the an rsql filter. * - * @param rolloutId - * the ID of the rollout to filter the {@link RolloutGroup}s - * @param specification + * @param rollout + * the rollout to filter the {@link RolloutGroup}s + * @param rsqlParam * the specification to filter the result set based on attributes * of the {@link RolloutGroup} * @param pageable * the page request to sort and limit the result * @return a page of found {@link RolloutGroup}s + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) Page findRolloutGroupsAll(@NotNull Rollout rollout, @NotNull String rsqlParam, @@ -116,12 +124,18 @@ public interface RolloutGroupManagement { * * @param rolloutGroup * rollout group - * @param specification + * @param rsqlParam * the specification for filtering the targets of a rollout group * @param pageable * the page request to sort and limit the result * * @return Page list of targets of a rollout group + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ_AND_TARGET_READ) Page findRolloutGroupTargets(@NotNull RolloutGroup rolloutGroup, @NotNull String rsqlParam, diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index 3ff6e0d4b..4753e70ef 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -12,6 +12,8 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupCreatedEvent; +import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; @@ -171,11 +173,17 @@ public interface RolloutManagement { /** * Retrieves all rollouts found by the given specification. * - * @param specification + * @param rsqlParam * the specification to filter rollouts * @param pageable * the page request to sort and limit the result * @return a page of found rollouts + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) Page findAllWithDetailedStatusByPredicate(@NotNull String rsqlParam, @NotNull Pageable pageable); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java index 465cb50ea..9723dfd73 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java @@ -16,6 +16,8 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.model.AssignedSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -284,6 +286,12 @@ public interface SoftwareManagement { * the page request to page the result * @return a paged result of all meta data entries for a given software * module id + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Page findSoftwareModuleMetadataBySoftwareModuleId(@NotNull Long softwareModuleId, @@ -342,6 +350,12 @@ public interface SoftwareManagement { * @param pageable * pagination parameter * @return the found {@link SoftwareModule}s + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Page findSoftwareModulesByPredicate(@NotNull String rsqlParam, @NotNull Pageable pageable); @@ -405,6 +419,12 @@ public interface SoftwareManagement { * @param pageable * pagination parameter * @return the found {@link SoftwareModuleType}s + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Page findSoftwareModuleTypesAll(@NotNull String rsqlParam, @NotNull Pageable pageable); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java index 551e34dd9..85e5d0273 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java @@ -15,6 +15,8 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.Tag; @@ -135,6 +137,12 @@ public interface TagManagement { * @param pageable * pagination parameter * @return the found {@link DistributionSetTag}s, never {@code null} + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Page findAllDistributionSetTags(@NotNull String rsqlParam, @NotNull Pageable pageable); @@ -164,6 +172,12 @@ public interface TagManagement { * @param pageable * pagination parameter * @return the found {@link Target}s, never {@code null} + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Page findAllTargetTags(@NotNull String rsqlParam, @NotNull Pageable pageable); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index ccf8c6712..7ebb3e4b4 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -16,6 +16,8 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; @@ -281,11 +283,17 @@ public interface TargetManagement { * * @param distributionSetID * the ID of the {@link DistributionSet} - * @param spec + * @param rsqlParam * the specification to filter the result set * @param pageReq * page parameter * @return the found {@link Target}s, never {@code null} + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong + * */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) Page findTargetByAssignedDistributionSet(@NotNull Long distributionSetID, @NotNull String rsqlParam, @@ -381,11 +389,17 @@ public interface TargetManagement { * * @param distributionSetId * the ID of the {@link DistributionSet} - * @param spec + * @param rsqlParam * the specification to filter the result * @param pageable * page parameter * @return the found {@link Target}s, never {@code null} + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET) Page findTargetByInstalledDistributionSet(@NotNull Long distributionSetId, @NotNull String rsqlParam, @@ -531,7 +545,7 @@ public interface TargetManagement { TargetTagAssignmentResult toggleTagAssignment(@NotEmpty Collection targetIds, @NotEmpty String tagName); /** - * {@link Entity} based method call for + * {@link Target} based method call for * {@link #toggleTagAssignment(Collection, String)}. * * @param targets diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java index 1bd3f8c35..c2b96905e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java @@ -19,12 +19,6 @@ import java.util.concurrent.TimeUnit; */ public interface Action extends TenantAwareBaseEntity { - /** - * indicating that target action has no force time which is only needed in - * case of {@link ActionType#TIMEFORCED}. - */ - long NO_FORCE_TIME = 0L; - /** * @return the distributionSet */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java index 043386ed1..9468c8a88 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java @@ -12,6 +12,9 @@ import java.util.List; /** * Generic assignment result bean. + * + * @param + * type of the assigned and unassigned {@link BaseEntity}s. * */ public class AssignmentResult { diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java new file mode 100644 index 000000000..b43ec6f88 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.model; + +/** + * Repository model constants. + * + */ +public final class Constants { + + /** + * indicating that target action has no force time which is only needed in + * case of {@link Action.ActionType#TIMEFORCED}. + */ + public static final Long NO_FORCE_TIME = 0L; + + private Constants() { + // Utility class. + } + +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java index 1c23cec27..c6532b339 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java @@ -84,11 +84,6 @@ public interface DistributionSet extends NamedVersionedEntity { */ Set getModules(); - /** - * @return {@link DistributionSetIdName} view. - */ - DistributionSetIdName getDistributionSetIdName(); - /** * @param softwareModule * @return true if the module was added and false diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetFilter.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetFilter.java index 54f7eb8e5..c095d0f7e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFilter.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetFilter.java @@ -6,12 +6,10 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.model; import java.util.Collection; -import org.eclipse.hawkbit.repository.model.DistributionSetType; - /** * Holds distribution set filter parameters. */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java index 14683b1b1..5546a9f6d 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java @@ -47,51 +47,59 @@ public interface DistributionSetType extends NamedEntity { * search for * @return true if found */ - boolean containsModuleType(SoftwareModuleType softwareModuleType); + default boolean containsModuleType(final SoftwareModuleType softwareModuleType) { + return containsMandatoryModuleType(softwareModuleType) || containsOptionalModuleType(softwareModuleType); + } /** - * Checks if the given {@link SoftwareModuleType} is in this - * {@link DistributionSetType} and defined as - * {@link DistributionSetTypeElement#isMandatory()}. + * Checks if the given {@link SoftwareModuleType} is in + * {@link #getMandatoryModuleTypes()}. * * @param softwareModuleType * search for * @return true if found */ - boolean containsMandatoryModuleType(SoftwareModuleType softwareModuleType); + default boolean containsMandatoryModuleType(final SoftwareModuleType softwareModuleType) { + return containsMandatoryModuleType(softwareModuleType.getId()); + } /** - * Checks if the given {@link SoftwareModuleType} is in this - * {@link DistributionSetType} and defined as - * {@link DistributionSetTypeElement#isMandatory()}. + * Checks if the given {@link SoftwareModuleType} is in + * {@link #getMandatoryModuleTypes()}. * * @param softwareModuleTypeId * search for by {@link SoftwareModuleType#getId()} * @return true if found */ - boolean containsMandatoryModuleType(Long softwareModuleTypeId); + default boolean containsMandatoryModuleType(final Long softwareModuleTypeId) { + return getMandatoryModuleTypes().stream().filter(element -> element.getId().equals(softwareModuleTypeId)) + .findFirst().isPresent(); + } /** - * Checks if the given {@link SoftwareModuleType} is in this - * {@link DistributionSetType} and NOT defined as - * {@link DistributionSetTypeElement#isMandatory()}. + * Checks if the given {@link SoftwareModuleType} is in + * {@link #getOptionalModuleTypes()}. * * @param softwareModuleType * search for * @return true if found */ - boolean containsOptionalModuleType(SoftwareModuleType softwareModuleType); + default boolean containsOptionalModuleType(final SoftwareModuleType softwareModuleType) { + return containsOptionalModuleType(softwareModuleType.getId()); + } /** - * Checks if the given {@link SoftwareModuleType} is in this - * {@link DistributionSetType} and NOT defined as - * {@link DistributionSetTypeElement#isMandatory()}. + * Checks if the given {@link SoftwareModuleType} is in + * {@link #getOptionalModuleTypes()}. * * @param softwareModuleTypeId * search by {@link SoftwareModuleType#getId()} * @return true if found */ - boolean containsOptionalModuleType(Long softwareModuleTypeId); + default boolean containsOptionalModuleType(final Long softwareModuleTypeId) { + return getOptionalModuleTypes().stream().filter(element -> element.getId().equals(softwareModuleTypeId)) + .findFirst().isPresent(); + } /** * Compares the modules of this {@link DistributionSetType} and the given diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java index 8cece2a39..bb0f877ce 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java @@ -8,10 +8,21 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * {@link MetaData} element of a {@link SoftwareModule}. + * + */ public interface SoftwareModuleMetadata extends MetaData { + /** + * @return {@link SoftwareModule} this entry belongs to. + */ SoftwareModule getSoftwareModule(); + /** + * @param softwareModule + * this entry belongs to. + */ void setSoftwareModule(SoftwareModule softwareModule); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java index 236ff2d3d..e57763920 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java @@ -8,10 +8,20 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * {@link Tag} entry. + * + */ public interface Tag extends NamedEntity { + /** + * @return colour code of the tag used in Management UI. + */ String getColour(); + /** + * @param colour + */ void setColour(String colour); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java index 03508555a..9cc200d0d 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java @@ -8,14 +8,52 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * Managed filter entity. + * + * Supported operators. + *
    + *
  • Equal to : ==
  • + *
  • Not equal to : !=
  • + *
  • Less than : =lt= or <
  • + *
  • Less than or equal to : =le= or <=
  • + *
  • Greater than operator : =gt= or >
  • + *
  • Greater than or equal to : =ge= or >=
  • + *
+ * Examples of RSQL expressions in both FIQL-like and alternative notation: + *
    + *
  • version==2.0.0
  • + *
  • name==targetId1;description==plugAndPlay
  • + *
  • name==targetId1 and description==plugAndPlay
  • + *
  • name==targetId1;description==plugAndPlay
  • + *
  • name==targetId1 and description==plugAndPlay
  • + *
  • name==targetId1,description==plugAndPlay,updateStatus==UNKNOWN
  • + *
  • name==targetId1 or description==plugAndPlay or updateStatus==UNKNOWN
  • + *
+ * + */ public interface TargetFilterQuery extends TenantAwareBaseEntity { + /** + * @return name of the {@link TargetFilterQuery}. + */ String getName(); + /** + * @param name + * of the {@link TargetFilterQuery}. + */ void setName(String name); + /** + * @return RSQL query + */ String getQuery(); + /** + * @param query + * in RSQL notation. + */ void setQuery(String query); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java index e918d7376..d2e96664c 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java @@ -10,27 +10,48 @@ package org.eclipse.hawkbit.repository.model; import java.io.Serializable; import java.net.URI; +import java.text.AttributedCharacterIterator; import java.util.Map; +import java.util.concurrent.TimeUnit; public interface TargetInfo extends Serializable { - - Long getId(); - /** - * @return the ipAddress + * @return the address under whioch the target can be reached */ URI getAddress(); + /** + * @return {@link Target} this info element belongs to. + */ Target getTarget(); + /** + * @return time in {@link TimeUnit#MILLISECONDS} GMT when the {@link Target} + * polled the server the last time. + */ Long getLastTargetQuery(); + /** + * @return {@link AttributedCharacterIterator} that have been provided by + * the {@link Target} itself, e.g. hardware revision, serial number, + * mac address etc. + */ Map getControllerAttributes(); + /** + * @return time in {@link TimeUnit#MILLISECONDS} GMT when + * {@link #getInstalledDistributionSet()} was applied. + */ Long getInstallationDate(); + /** + * @return current status of the {@link Target}. + */ TargetUpdateStatus getUpdateStatus(); + /** + * @return currently installed {@link DistributionSet}. + */ DistributionSet getInstalledDistributionSet(); /** @@ -41,6 +62,10 @@ public interface TargetInfo extends Serializable { */ PollStatus getPollStatus(); + /** + * @return true if the {@link Target} has not jet provided + * {@link #getControllerAttributes()}. + */ boolean isRequestControllerAttributes(); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java index 3abe3cdd5..585bf8c12 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java @@ -10,8 +10,15 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; +/** + * Target tag element. + * + */ public interface TargetTag extends Tag { + /** + * @return {@link List} of targets assigned to this {@link Tag}. + */ List getAssignedToTargets(); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetWithActionType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java similarity index 88% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetWithActionType.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java index 579b4ef0d..c05f1ec3f 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetWithActionType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java @@ -6,11 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.model; -import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; -import org.eclipse.hawkbit.repository.model.Target; /** * A custom view on {@link Target} with {@link ActionType}. @@ -53,7 +51,7 @@ public class TargetWithActionType { if (actionType == ActionType.TIMEFORCED) { return forceTime; } - return Action.NO_FORCE_TIME; + return Constants.NO_FORCE_TIME; } /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java index 78201410b..fa9962eec 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java @@ -8,14 +8,33 @@ */ package org.eclipse.hawkbit.repository.model; +/** + * Unstructured tenant configuration elements. Can be used to store arbitrary + * tenant configuration elements. + * + */ public interface TenantConfiguration extends TenantAwareBaseEntity { + /** + * @return key of the entry + */ String getKey(); + /** + * @param key + * of the entry + */ void setKey(String key); + /** + * @return value of the entry + */ String getValue(); + /** + * @param value + * of the entry + */ void setValue(String value); } \ No newline at end of file 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 9f692e5f6..653d02870 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 @@ -20,6 +20,7 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; +import org.eclipse.hawkbit.repository.Constants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; @@ -214,17 +215,13 @@ public class JpaControllerManagement implements ControllerManagement { break; case CANCELED: case FINISHED: - // in case of successful cancellation we also report the success at - // the canceled action itself. - actionStatus.addMessage( - ControllerManagement.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); - DeploymentHelper.successCancellation(action, actionRepository, targetManagement, targetInfoRepository, - entityManager); + handleFinishedCancelation(actionStatus, action); break; case RETRIEVED: - actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Cancellation request retrieved."); + actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Cancellation request retrieved."); break; default: + // do nothing } actionRepository.save(action); actionStatusRepository.save((JpaActionStatus) actionStatus); @@ -232,6 +229,14 @@ public class JpaControllerManagement implements ControllerManagement { return action; } + private void handleFinishedCancelation(final ActionStatus actionStatus, final JpaAction action) { + // in case of successful cancellation we also report the success at + // the canceled action itself. + actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); + DeploymentHelper.successCancellation(action, actionRepository, targetManagement, targetInfoRepository, + entityManager); + } + @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index 8463f2d37..aa843d8fc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -33,7 +33,6 @@ import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException; @@ -69,6 +68,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.model.TargetWithActionType; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.hibernate.validator.constraints.NotEmpty; import org.slf4j.Logger; @@ -146,7 +146,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { return assignDistributionSetByTargetId((JpaDistributionSet) pset, targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), - ActionType.FORCED, Action.NO_FORCE_TIME); + ActionType.FORCED, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME); } @@ -155,7 +155,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Transactional(isolation = Isolation.READ_COMMITTED) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, final String... targetIDs) { - return assignDistributionSet(dsID, ActionType.FORCED, Action.NO_FORCE_TIME, targetIDs); + return assignDistributionSet(dsID, ActionType.FORCED, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, targetIDs); } @Override diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index 52c140109..426733bcc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -23,8 +23,6 @@ import java.util.stream.Collectors; import javax.persistence.EntityManager; import org.eclipse.hawkbit.repository.DistributionSetFields; -import org.eclipse.hawkbit.repository.DistributionSetFilter; -import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; import org.eclipse.hawkbit.repository.DistributionSetTypeFields; @@ -49,6 +47,8 @@ import org.eclipse.hawkbit.repository.jpa.specifications.DistributionSetTypeSpec import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; @@ -497,7 +497,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { } metadata.forEach(m -> entityManager.merge((JpaDistributionSet) m.getDistributionSet()).setLastModifiedAt(0L)); - return new ArrayList( + return new ArrayList<>( (Collection) distributionSetMetadataRepository.save(metadata)); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index f4523330d..b3e451932 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -23,7 +23,6 @@ import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.RolloutFields; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.TargetWithActionType; import org.eclipse.hawkbit.repository.exception.RolloutIllegalStateException; import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; @@ -44,6 +43,7 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetWithActionType; import org.eclipse.hawkbit.repository.model.TotalTargetCountActionStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.slf4j.Logger; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheField.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheField.java index 04627f920..b4e322c77 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheField.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheField.java @@ -14,7 +14,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; -import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.repository.jpa.model.CacheFieldEntityListener; import org.springframework.cache.CacheManager; import org.springframework.data.annotation.Transient; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java index 9ba7cc763..fdfe7a263 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa.cache; -import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.repository.jpa.model.CacheFieldEntityListener; /** * Constants for cache keys used in multiple classes. diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EventMerger.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EventMerger.java index 702555be8..6a4302c5b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EventMerger.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EventMerger.java @@ -36,10 +36,8 @@ import com.google.common.eventbus.Subscribe; * interested in all fine grained events, e.g. UI code. The UI code is not * interested in handling the flood of events, so collecting the events and * merge them to one event together and post them in a fixed interval is easier - * to consume e.g. for push notifcations on UI. + * to consume e.g. for push notifications on UI. * - * @author Michael Hirsch - * */ @EventSubscriber public class EventMerger { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java index 7a5bea6b7..6ead1df9e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaArtifact.java @@ -19,6 +19,9 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; * {@link SoftwareModule}. */ @MappedSuperclass +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public abstract class AbstractJpaArtifact extends AbstractJpaTenantAwareBaseEntity implements Artifact { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java index c99993158..257828c6f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaBaseEntity.java @@ -18,8 +18,6 @@ import javax.persistence.Id; import javax.persistence.MappedSuperclass; import javax.persistence.Version; -import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; -import org.eclipse.hawkbit.repository.jpa.eventbus.EntityPropertyChangeListener; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; @@ -156,8 +154,7 @@ public abstract class AbstractJpaBaseEntity implements BaseEntity { * @see java.lang.Object#equals(java.lang.Object) */ @Override - public boolean equals(final Object obj) { // NOSONAR - as this is generated - // code + public boolean equals(final Object obj) { if (this == obj) { return true; } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java index 196e636d9..ebf5eac3c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedEntity.java @@ -19,6 +19,9 @@ import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; * addition to their technical ID. */ @MappedSuperclass +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public abstract class AbstractJpaNamedEntity extends AbstractJpaTenantAwareBaseEntity implements NamedEntity { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java index 785666b67..ffdb1dfa6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaNamedVersionedEntity.java @@ -19,6 +19,9 @@ import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; * */ @MappedSuperclass +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public abstract class AbstractJpaNamedVersionedEntity extends AbstractJpaNamedEntity implements NamedVersionedEntity { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java index 653b678bc..b2e8163da 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTag.java @@ -19,6 +19,9 @@ import org.eclipse.hawkbit.repository.model.Tag; * */ @MappedSuperclass +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public abstract class AbstractJpaTag extends AbstractJpaNamedEntity implements Tag { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/CacheFieldEntityListener.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/CacheFieldEntityListener.java index 3c0a46b14..dddc01d91 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/CacheFieldEntityListener.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.eventbus; +package org.eclipse.hawkbit.repository.jpa.model; import java.io.Serializable; import java.lang.reflect.Field; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java index df9d600c1..cc0041646 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/eventbus/EntityPropertyChangeListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa.eventbus; +package org.eclipse.hawkbit.repository.jpa.model; import java.util.Map; import java.util.stream.Collectors; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java index e0cde5416..2b8744618 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java @@ -49,6 +49,9 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; @NamedEntityGraph(name = "Action.all", attributeNodes = { @NamedAttributeNode("distributionSet"), @NamedAttributeNode(value = "target", subgraph = "target.ds") }, subgraphs = @NamedSubgraph(name = "target.ds", attributeNodes = @NamedAttributeNode("assignedDistributionSet"))) }) @Entity +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Action { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java index cf146651d..ef1ad3d1e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java @@ -40,6 +40,9 @@ import com.google.common.base.Splitter; @Index(name = "sp_idx_action_status_prim", columnList = "tenant,id") }) @NamedEntityGraph(name = "ActionStatus.withMessages", attributeNodes = { @NamedAttributeNode("messages") }) @Entity +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements ActionStatus { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java index d01cf3f4c..676215424 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java @@ -37,7 +37,6 @@ import org.eclipse.hawkbit.repository.exception.DistributionSetTypeUndefinedExce import org.eclipse.hawkbit.repository.exception.UnsupportedSoftwareModuleForThisDistributionSetException; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -59,6 +58,9 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; @Index(name = "sp_idx_distribution_set_prim", columnList = "tenant,id") }) @NamedEntityGraph(name = "DistributionSet.detail", attributeNodes = { @NamedAttributeNode("modules"), @NamedAttributeNode("tags"), @NamedAttributeNode("type") }) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implements DistributionSet { private static final long serialVersionUID = 1L; @@ -198,11 +200,6 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen return Collections.unmodifiableSet(modules); } - @Override - public DistributionSetIdName getDistributionSetIdName() { - return new DistributionSetIdName(getId(), getName(), getVersion()); - } - @Override public boolean addModule(final SoftwareModule softwareModule) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java index fa5d57642..54aed44dd 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java @@ -38,6 +38,9 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @Index(name = "sp_idx_distribution_set_type_prim", columnList = "tenant,id") }, uniqueConstraints = { @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_dst_name"), @UniqueConstraint(columnNames = { "type_key", "tenant" }, name = "uk_dst_key") }) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaDistributionSetType extends AbstractJpaNamedEntity implements DistributionSetType { private static final long serialVersionUID = 1L; @@ -112,45 +115,6 @@ public class JpaDistributionSetType extends AbstractJpaNamedEntity implements Di .collect(Collectors.toSet()); } - @Override - public boolean containsModuleType(final SoftwareModuleType softwareModuleType) { - for (final DistributionSetTypeElement distributionSetTypeElement : elements) { - if (distributionSetTypeElement.getSmType().equals(softwareModuleType)) { - return true; - } - - } - return false; - } - - @Override - public boolean containsMandatoryModuleType(final SoftwareModuleType softwareModuleType) { - return elements.stream().filter(element -> element.isMandatory()) - .filter(element -> element.getSmType().equals(softwareModuleType)).findFirst().isPresent(); - - } - - @Override - public boolean containsMandatoryModuleType(final Long softwareModuleTypeId) { - return elements.stream().filter(element -> element.isMandatory()) - .filter(element -> element.getSmType().getId().equals(softwareModuleTypeId)).findFirst().isPresent(); - - } - - @Override - public boolean containsOptionalModuleType(final SoftwareModuleType softwareModuleType) { - return elements.stream().filter(element -> !element.isMandatory()) - .filter(element -> element.getSmType().equals(softwareModuleType)).findFirst().isPresent(); - - } - - @Override - public boolean containsOptionalModuleType(final Long softwareModuleTypeId) { - return elements.stream().filter(element -> !element.isMandatory()) - .filter(element -> element.getSmType().getId().equals(softwareModuleTypeId)).findFirst().isPresent(); - - } - @Override public boolean areModuleEntriesIdentical(final DistributionSetType dsType) { return new HashSet(((JpaDistributionSetType) dsType).elements).equals(elements); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java index 91f3df598..b8408cdcc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifact.java @@ -33,6 +33,9 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; @Table(name = "sp_external_artifact", indexes = { @Index(name = "sp_idx_external_artifact_prim", columnList = "id,tenant") }) @Entity +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaExternalArtifact extends AbstractJpaArtifact implements ExternalArtifact { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java index 06e572d57..7a4e2a067 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaExternalArtifactProvider.java @@ -23,6 +23,9 @@ import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; @Table(name = "sp_external_provider", indexes = { @Index(name = "sp_idx_external_provider_prim", columnList = "tenant,id") }) @Entity +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaExternalArtifactProvider extends AbstractJpaNamedEntity implements ExternalArtifactProvider { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java index 4348a3a7d..52cc01b20 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaLocalArtifact.java @@ -32,6 +32,9 @@ import com.mongodb.gridfs.GridFSFile; @Table(name = "sp_artifact", indexes = { @Index(name = "sp_idx_artifact_01", columnList = "tenant,software_module"), @Index(name = "sp_idx_artifact_prim", columnList = "tenant,id") }) @Entity +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaLocalArtifact extends AbstractJpaArtifact implements LocalArtifact { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java index ae68fec03..3cbe65717 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java @@ -41,6 +41,9 @@ import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; @Table(name = "sp_rollout", indexes = { @Index(name = "sp_idx_rollout_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_rollout")) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaRollout extends AbstractJpaNamedEntity implements Rollout { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java index 6be29bb9c..79da6630a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java @@ -37,6 +37,9 @@ import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; @Table(name = "sp_rolloutgroup", indexes = { @Index(name = "sp_idx_rolloutgroup_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { "name", "rollout", "tenant" }, name = "uk_rolloutgroup")) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaRolloutGroup extends AbstractJpaNamedEntity implements RolloutGroup { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java index 6465e135a..80156edb8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java @@ -50,6 +50,9 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; @Index(name = "sp_idx_base_sw_module_02", columnList = "tenant,deleted,module_type"), @Index(name = "sp_idx_base_sw_module_prim", columnList = "tenant,id") }) @NamedEntityGraph(name = "SoftwareModule.artifacts", attributeNodes = { @NamedAttributeNode("artifacts") }) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implements SoftwareModule { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java index bb99eba3e..f2a716c40 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleType.java @@ -26,6 +26,9 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @Index(name = "sp_idx_software_module_type_prim", columnList = "tenant,id") }, uniqueConstraints = { @UniqueConstraint(columnNames = { "type_key", "tenant" }, name = "uk_smt_type_key"), @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_smt_name") }) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaSoftwareModuleType extends AbstractJpaNamedEntity implements SoftwareModuleType { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java index 05c8bc229..94f50ff0d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -61,6 +61,9 @@ import org.springframework.data.domain.Persistable; "controller_id", "tenant" }, name = "uk_tenant_controller_id")) @NamedEntityGraph(name = "Target.detail", attributeNodes = { @NamedAttributeNode("tags"), @NamedAttributeNode(value = "assignedDistributionSet"), @NamedAttributeNode(value = "targetInfo") }) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaTarget extends AbstractJpaNamedEntity implements Persistable, Target { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java index 5ebb8e2bf..38275c71a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetFilterQuery.java @@ -24,6 +24,9 @@ import org.eclipse.hawkbit.repository.model.TargetFilterQuery; @Table(name = "sp_target_filter_query", indexes = { @Index(name = "sp_idx_target_filter_query_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { "name", "tenant" }, name = "uk_tenant_custom_filter_name")) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaTargetFilterQuery extends AbstractJpaTenantAwareBaseEntity implements TargetFilterQuery { private static final long serialVersionUID = 7493966984413479089L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java index 2b28aa55f..d6f9a7a97 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantConfiguration.java @@ -23,6 +23,9 @@ import org.eclipse.hawkbit.repository.model.TenantConfiguration; @Entity @Table(name = "sp_tenant_configuration", uniqueConstraints = @UniqueConstraint(columnNames = { "conf_key", "tenant" }, name = "uk_tenant_key")) +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaTenantConfiguration extends AbstractJpaTenantAwareBaseEntity implements TenantConfiguration { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java index 32b6b1082..9363a4db8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java @@ -36,6 +36,9 @@ import org.eclipse.hawkbit.repository.model.TenantMetaData; @Index(name = "sp_idx_tenant_prim", columnList = "tenant,id") }, uniqueConstraints = { @UniqueConstraint(columnNames = { "tenant" }, name = "uk_tenantmd_tenant") }) @Entity +// exception squid:S2160 - BaseEntity equals/hashcode is handling correctly for +// sub entities +@SuppressWarnings("squid:S2160") public class JpaTenantMetaData extends AbstractJpaBaseEntity implements TenantMetaData { private static final long serialVersionUID = 1L; @@ -84,24 +87,4 @@ public class JpaTenantMetaData extends AbstractJpaBaseEntity implements TenantMe public void setTenant(final String tenant) { this.tenant = tenant; } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + this.getClass().getName().hashCode(); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (!super.equals(obj)) { - return false; - } - if (!(obj instanceof TenantMetaData)) { - return false; - } - - return true; - } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/AfterTransactionCommitExecutorHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/AfterTransactionCommitExecutorHolder.java index a1a4416c3..a0e918585 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/AfterTransactionCommitExecutorHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/AfterTransactionCommitExecutorHolder.java @@ -8,8 +8,8 @@ */ package org.eclipse.hawkbit.repository.jpa.model.helper; -import org.eclipse.hawkbit.repository.jpa.eventbus.EntityPropertyChangeListener; import org.eclipse.hawkbit.repository.jpa.executor.AfterTransactionCommitExecutor; +import org.eclipse.hawkbit.repository.jpa.model.EntityPropertyChangeListener; import org.springframework.beans.factory.annotation.Autowired; /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/CacheManagerHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/CacheManagerHolder.java index cdc834f08..64417c7d6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/CacheManagerHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/CacheManagerHolder.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa.model.helper; -import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.repository.jpa.model.CacheFieldEntityListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.CacheManager; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java index 0bf29cbdb..5196283d1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.repository.jpa.model.helper; -import org.eclipse.hawkbit.repository.jpa.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.repository.jpa.model.CacheFieldEntityListener; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.eventbus.EventBus; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/RolloutScheduler.java similarity index 93% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java rename to hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/RolloutScheduler.java index bc8f25feb..7335c1cb6 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutScheduler.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/RolloutScheduler.java @@ -6,10 +6,13 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository; +package org.eclipse.hawkbit.repository.jpa.rollout; import java.util.List; +import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.RolloutProperties; +import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java index 0016d4d7d..0900973d0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java @@ -857,8 +857,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final DistributionSet ds = TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); // assign ds to create an action - final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement - .assignDistributionSet(ds.getId(), ActionType.SOFT, Action.NO_FORCE_TIME, target.getControllerId()); + final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet( + ds.getId(), ActionType.SOFT, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, + target.getControllerId()); final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify preparation Action findAction = deploymentManagement.findAction(action.getId()); @@ -880,8 +881,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final DistributionSet ds = TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); // assign ds to create an action - final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement - .assignDistributionSet(ds.getId(), ActionType.FORCED, Action.NO_FORCE_TIME, target.getControllerId()); + final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet( + ds.getId(), ActionType.FORCED, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, + target.getControllerId()); final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify perparation Action findAction = deploymentManagement.findAction(action.getId()); @@ -1060,8 +1062,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { public List getEvents(final long timeout, final TimeUnit unit) throws InterruptedException { latch.await(timeout, unit); - final List handledEvents = new LinkedList( - events); + final List handledEvents = new LinkedList<>(events); assertThat(handledEvents).as("Did not receive the expected amount of events (" + expectedNumberOfEvents + ") within timeout. Received events are " + handledEvents).hasSize(expectedNumberOfEvents); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index a29a76086..f102ac86c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -16,7 +16,6 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; -import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.exception.DistributionSetTypeUndefinedException; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; @@ -32,6 +31,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java index 67c7de049..25437b0ed 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java @@ -18,7 +18,6 @@ import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; @@ -30,6 +29,7 @@ import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; import org.junit.Before; import org.junit.Test; import org.slf4j.LoggerFactory; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java index 9c5415bbb..3479ed232 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/eventbus/CacheFieldEntityListenerTest.java @@ -16,6 +16,7 @@ import static org.mockito.Mockito.when; import org.eclipse.hawkbit.repository.jpa.cache.CacheField; import org.eclipse.hawkbit.repository.jpa.cache.CacheKeys; +import org.eclipse.hawkbit.repository.jpa.model.CacheFieldEntityListener; import org.eclipse.hawkbit.repository.jpa.model.helper.CacheManagerHolder; import org.junit.Before; import org.junit.Test; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetIdName.java similarity index 86% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetIdName.java index f8662567a..c499babcd 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetIdName.java @@ -6,10 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.model; +package org.eclipse.hawkbit.ui.common; import java.io.Serializable; +import org.eclipse.hawkbit.repository.model.DistributionSet; + /** * * @@ -21,6 +23,12 @@ public class DistributionSetIdName implements Serializable { private final String name; private final String version; + public static DistributionSetIdName generate(final DistributionSet distributionSet) { + return new DistributionSetIdName(distributionSet.getId(), distributionSet.getName(), + distributionSet.getVersion()); + + } + /** * @param id * the {@link DistributionSet#getId()} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java index c0ecf9869..6e4c7dddd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleDetailsTable.java @@ -16,6 +16,7 @@ import org.eclipse.hawkbit.repository.exception.EntityLockedException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -214,7 +215,7 @@ public class SoftwareModuleDetailsTable extends Table { .getItem(event.getButton().getId()).getItemProperty(SOFT_MODULE).getValue(), alreadyAssignedSwModules); final DistributionSet newDistributionSet = distributionSetManagement.unassignSoftwareModule(distributionSet, unAssignedSw); - manageDistUIState.setLastSelectedEntity(newDistributionSet.getDistributionSetIdName()); + manageDistUIState.setLastSelectedEntity(DistributionSetIdName.generate(newDistributionSet)); eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.SELECTED_ENTITY, newDistributionSet)); eventBus.publish(this, DistributionsUIEvent.ORDER_BY_DISTRIBUTION); uiNotification.displaySuccess(i18n.get("message.sw.unassigned", unAssignedSw.getName())); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java index a1d1ffcfe..3b93d4f93 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java @@ -16,11 +16,11 @@ import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleIdName; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable; import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index c1ee96146..e276ca5d2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -22,11 +22,11 @@ import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleIdName; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.table.AbstractNamedVersionTable; import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; @@ -453,7 +453,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable> saveAssignedList = new HashMap<>(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java index 653075735..e7ecfbfae 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/ManagementUIState.java @@ -17,8 +17,8 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.atomic.AtomicLong; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.TargetIdName; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.ManagmentEntityState; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java index d69f91b64..4d658516a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetBulkUpload.java @@ -12,7 +12,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; /** * Hold details for target bulk upload window. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java index 6d8297345..289927660 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/state/TargetTableFilters.java @@ -13,9 +13,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.VaadinSessionScope; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java index 9ef0b742c..23a82da0f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java @@ -29,8 +29,8 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action.ActionType; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.tagdetails.AbstractTagToken.TagData; import org.eclipse.hawkbit.ui.management.event.BulkUploadValidationMessageEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java index 657cd97af..b6bf5ebcd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java @@ -17,8 +17,8 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.dstable.DistributionBeanQuery; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 552349f0a..209f80429 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -24,13 +24,13 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.ManagmentEntityState; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.common.table.AbstractTable; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java index 09c9bf499..6aac4eace 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.ui.management.targettable; import java.util.Set; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index c6a2bdc4d..f0329e3fe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -15,9 +15,8 @@ import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; +import org.eclipse.hawkbit.repository.model.Constants; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; @@ -28,6 +27,7 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCond import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.ui.UiProperties; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery; @@ -461,7 +461,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return (((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout.getActionTypeOptionGroup() .getValue()) == ActionTypeOption.AUTO_FORCED) ? actionTypeOptionGroupLayout.getForcedTimeDateField().getValue().getTime() - : Action.NO_FORCE_TIME; + : Constants.NO_FORCE_TIME; } private ActionType getActionType() { @@ -752,7 +752,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { rolloutForEdit = rolloutManagement.findRolloutById(rolloutId); rolloutName.setValue(rolloutForEdit.getName()); description.setValue(rolloutForEdit.getDescription()); - distributionSet.setValue(rolloutForEdit.getDistributionSet().getDistributionSetIdName()); + distributionSet.setValue(DistributionSetIdName.generate(rolloutForEdit.getDistributionSet())); final List rolloutGroups = rolloutForEdit.getRolloutGroups(); setThresoldValues(rolloutGroups); setActionType(rolloutForEdit); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java index 75d2741af..e98fef512 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java @@ -14,10 +14,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.eclipse.hawkbit.repository.DistributionSetFilter; -import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyDistribution; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; From a4e0fc2457064a053098b0cd2022dcde02d6422a Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 27 May 2016 16:04:37 +0200 Subject: [PATCH 150/371] Fixed a broken query. Signed-off-by: Kai Zimmermann --- .../ui/components/ProxyDistribution.java | 5 +++++ .../dstable/ManageDistBeanQuery.java | 11 +++++------ .../dstable/DistributionBeanQuery.java | 17 ++++++++--------- .../rollout/rollout/DistributionBeanQuery.java | 1 - 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java index 91c9d7a62..a8e7fe9d1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.components; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.ui.common.DistributionSetIdName; /** * Proxy for {@link DistributionSet}. @@ -41,6 +42,10 @@ public class ProxyDistribution extends JpaDistributionSet { return nameVersion; } + public DistributionSetIdName getDistributionSetIdName() { + return DistributionSetIdName.generate(this); + } + /** * @param nameVersion * the nameVersion to set diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java index 4fb3efb03..a262f0d20 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ManageDistBeanQuery.java @@ -18,8 +18,8 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetFilter; -import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; +import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyDistribution; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -95,8 +95,8 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { distBeans = firstPageDistributionSets; } else if (Strings.isNullOrEmpty(searchText)) { // if no search filters available - distBeans = getDistributionSetManagement() - .findDistributionSetsByDeletedAndOrCompleted(new OffsetBasedPageRequest(startIndex, count, sort), false, null); + distBeans = getDistributionSetManagement().findDistributionSetsByDeletedAndOrCompleted( + new OffsetBasedPageRequest(startIndex, count, sort), false, null); } else { final DistributionSetFilter distributionSetFilter = new DistributionSetFilterBuilder().setIsDeleted(false) .setSearchText(searchText).setSelectDSWithNoTag(Boolean.FALSE).setType(distributionSetType).build(); @@ -113,7 +113,6 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { proxyDistribution.setVersion(distributionSet.getVersion()); proxyDistribution.setCreatedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getCreatedAt())); proxyDistribution.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getLastModifiedAt())); - proxyDistribution.setDescription(distributionSet.getDescription()); proxyDistribution.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(distributionSet)); proxyDistribution.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(distributionSet)); proxyDistribution.setIsComplete(distributionSet.isComplete()); @@ -132,8 +131,8 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { public int size() { if (Strings.isNullOrEmpty(searchText) && null == distributionSetType) { // if no search filters available - firstPageDistributionSets = getDistributionSetManagement() - .findDistributionSetsByDeletedAndOrCompleted(new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort), false, null); + firstPageDistributionSets = getDistributionSetManagement().findDistributionSetsByDeletedAndOrCompleted( + new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort), false, null); } else { final DistributionSetFilter distributionSetFilter = new DistributionSetFilterBuilder().setIsDeleted(false) .setSearchText(searchText).setSelectDSWithNoTag(Boolean.FALSE).setType(distributionSetType).build(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java index 70c560b9e..63ed91250 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionBeanQuery.java @@ -42,11 +42,11 @@ public class DistributionBeanQuery extends AbstractBeanQuery private static final long serialVersionUID = 5862679853949173536L; private Sort sort = new Sort(Direction.ASC, "name", "version"); - private Collection distributionTags = null; - private String searchText = null; - private String pinnedControllerId = null; + private Collection distributionTags; + private String searchText; + private String pinnedControllerId; private transient DistributionSetManagement distributionSetManagement; - private transient Page firstPageDistributionSets = null; + private transient Page firstPageDistributionSets; private Boolean noTagClicked = Boolean.FALSE; /** @@ -110,8 +110,8 @@ public class DistributionBeanQuery extends AbstractBeanQuery pinnedControllerId); } else if (distributionTags.isEmpty() && Strings.isNullOrEmpty(searchText) && !noTagClicked) { // if no search filters available - distBeans = getDistributionSetManagement() - .findDistributionSetsByDeletedAndOrCompleted(new OffsetBasedPageRequest(startIndex, count, sort), false, true); + distBeans = getDistributionSetManagement().findDistributionSetsByDeletedAndOrCompleted( + new OffsetBasedPageRequest(startIndex, count, sort), false, true); } else { final DistributionSetFilter distributionSetFilter = new DistributionSetFilterBuilder().setIsDeleted(false) .setIsComplete(true).setSearchText(searchText).setSelectDSWithNoTag(noTagClicked) @@ -129,7 +129,6 @@ public class DistributionBeanQuery extends AbstractBeanQuery proxyDistribution.setVersion(distributionSet.getVersion()); proxyDistribution.setCreatedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getCreatedAt())); proxyDistribution.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getLastModifiedAt())); - proxyDistribution.setDescription(distributionSet.getDescription()); proxyDistribution.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(distributionSet)); proxyDistribution.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(distributionSet)); proxyDistribution.setNameVersion( @@ -152,8 +151,8 @@ public class DistributionBeanQuery extends AbstractBeanQuery pinnedControllerId); } else if (distributionTags.isEmpty() && Strings.isNullOrEmpty(searchText) && !noTagClicked) { // if no search filters available - firstPageDistributionSets = getDistributionSetManagement() - .findDistributionSetsByDeletedAndOrCompleted(new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort), false, true); + firstPageDistributionSets = getDistributionSetManagement().findDistributionSetsByDeletedAndOrCompleted( + new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort), false, true); } else { final DistributionSetFilter distributionSetFilter = new DistributionSetFilterBuilder().setIsDeleted(false) .setIsComplete(true).setSearchText(searchText).setSelectDSWithNoTag(noTagClicked) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java index e98fef512..0a8ebd25d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java @@ -113,7 +113,6 @@ public class DistributionBeanQuery extends AbstractBeanQuery proxyDistribution.setVersion(distributionSet.getVersion()); proxyDistribution.setCreatedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getCreatedAt())); proxyDistribution.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getLastModifiedAt())); - proxyDistribution.setDescription(distributionSet.getDescription()); proxyDistribution.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(distributionSet)); proxyDistribution.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(distributionSet)); proxyDistribution.setIsComplete(distributionSet.isComplete()); From 6fd24416aebd20b273d775e51889d40ae0ba83d6 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 30 May 2016 12:37:39 +0200 Subject: [PATCH 151/371] substitute VerticalLayout for FormLayout Signed-off-by: Melanie Retter --- .../TargetAddUpdateWindowLayout.java | 43 ++++++------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 101bfa8a9..af0e055a7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -40,7 +40,6 @@ import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; -import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; @@ -73,8 +72,8 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private Label madatoryLabel; private boolean editTarget = Boolean.FALSE; private String controllerId; - private VerticalLayout mainLayout; - private CommonDialogWindow addTargetWindow; + private FormLayout formLayout; + private CommonDialogWindow window; private String oldTargetName; private String oldTargetDesc; @@ -89,7 +88,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { buildLayout(); /* register all listeners related to the Window */ addListeners(); - setCompositionRoot(mainLayout); + setCompositionRoot(formLayout); } private void createRequiredComponents() { @@ -120,17 +119,12 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { * The main layout of the window contains mandatory info, textboxes * (controller Id, name & description) and action buttons layout */ - mainLayout = new VerticalLayout(); - mainLayout.setSpacing(Boolean.TRUE); - mainLayout.addStyleName("lay-color"); - mainLayout.setSizeUndefined(); - FormLayout formLayout = new FormLayout(); + formLayout = new FormLayout(); formLayout.addComponent(madatoryLabel); formLayout.addComponent(controllerIDTextField); formLayout.addComponent(nameTextField); formLayout.addComponent(descTextArea); - mainLayout.addComponent(formLayout); if (Boolean.TRUE.equals(editTarget)) { madatoryLabel.setVisible(Boolean.FALSE); @@ -142,7 +136,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { addTargetNameChangeListner(); addTargetDescChangeListner(); - } private void addTargetNameChangeListner() { @@ -156,9 +149,9 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { @Override public void textChange(final TextChangeEvent event) { if (event.getText().equals(oldTargetName) && descTextArea.getValue().equals(oldTargetDesc)) { - addTargetWindow.setSaveButtonEnabled(false); + window.setSaveButtonEnabled(false); } else { - addTargetWindow.setSaveButtonEnabled(true); + window.setSaveButtonEnabled(true); } } @@ -176,9 +169,9 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { @Override public void textChange(final TextChangeEvent event) { if (event.getText().equals(oldTargetDesc) && nameTextField.getValue().equals(oldTargetName)) { - addTargetWindow.setSaveButtonEnabled(false); + window.setSaveButtonEnabled(false); } else { - addTargetWindow.setSaveButtonEnabled(true); + window.setSaveButtonEnabled(true); } } @@ -246,9 +239,9 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - addTargetWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, + window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null); - return addTargetWindow; + return window; } /** @@ -267,8 +260,8 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private void closeThisWindow() { editTarget = Boolean.FALSE; - addTargetWindow.close(); - UI.getCurrent().removeWindow(addTargetWindow); + window.close(); + UI.getCurrent().removeWindow(window); } private void setTargetValues(final Target target, final String name, final String description) { @@ -310,19 +303,11 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { if (target.getDescription() != null) { descTextArea.setValue(target.getDescription()); } - addTargetWindow.setSaveButtonEnabled(Boolean.FALSE); + window.setSaveButtonEnabled(Boolean.FALSE); oldTargetDesc = descTextArea.getValue(); oldTargetName = nameTextField.getValue(); - addTargetWindow.addStyleName("target-update-window"); - } - - public VerticalLayout getMainLayout() { - return mainLayout; - } - - public void setMainLayout(final VerticalLayout mainLayout) { - this.mainLayout = mainLayout; + window.addStyleName("target-update-window"); } } From 8e597203aec21613f387be24e34aec637e6918e4 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 30 May 2016 13:49:15 +0200 Subject: [PATCH 152/371] Correct Typo Signed-off-by: Melanie Retter --- .../details/ArtifactDetailsLayout.java | 8 +++--- .../event/UploadViewAcceptCriteria.java | 14 +++++----- .../footer/SMDeleteActionsLayout.java | 8 +++--- .../UploadViewConfirmationWindowLayout.java | 6 ++--- .../SoftwareModuleAddUpdateWindow.java | 16 ++++++------ .../smtable/SoftwareModuleDetails.java | 12 ++++----- .../smtable/SoftwareModuleTable.java | 4 +-- .../smtable/SoftwareModuleTableHeader.java | 10 +++---- .../CreateUpdateSoftwareTypeLayout.java | 4 +-- .../artifacts/smtype/SMTypeFilterButtons.java | 8 +++--- .../artifacts/smtype/SMTypeFilterHeader.java | 4 +-- .../upload/UploadConfirmationwindow.java | 18 ++++++------- .../ui/artifacts/upload/UploadLayout.java | 8 +++--- .../artifacts/upload/UploadResultWindow.java | 12 ++++----- .../hawkbit/ui/common/ConfirmationDialog.java | 4 +-- .../AbstractConfirmationWindowLayout.java | 4 +-- .../AbstractTableDetailsLayout.java | 4 +-- .../footer/AbstractDeleteActionsLayout.java | 10 +++---- .../ui/common/grid/AbstractGridLayout.java | 4 +-- .../CreateUpdateDistSetTypeLayout.java | 4 +-- .../disttype/DSTypeFilterButtons.java | 6 ++--- .../dstable/DistributionSetDetails.java | 8 +++--- .../dstable/DistributionSetTable.java | 6 ++--- .../dstable/DistributionSetTableHeader.java | 10 +++---- .../DistributionsViewAcceptCriteria.java | 16 ++++++------ .../footer/DSDeleteActionsLayout.java | 8 +++--- ...DistributionsConfirmationWindowLayout.java | 18 ++++++------- .../smtable/SwModuleDetails.java | 12 ++++----- .../distributions/smtable/SwModuleTable.java | 6 ++--- .../smtable/SwModuleTableHeader.java | 10 +++---- .../smtype/DistSMTypeFilterButtons.java | 6 ++--- .../smtype/DistSMTypeFilterHeader.java | 4 +-- .../CreateOrUpdateFilterHeader.java | 16 ++++++------ .../CreateOrUpdateFilterTable.java | 4 +-- .../filtermanagement/TargetFilterHeader.java | 6 ++--- .../filtermanagement/TargetFilterTable.java | 8 +++--- .../footer/TargetFilterCountMessageLabel.java | 4 +-- .../eclipse/hawkbit/ui/login/LoginView.java | 10 +++---- .../actionhistory/ActionHistoryTable.java | 4 +-- .../DistributionAddUpdateWindowLayout.java | 16 ++++++------ .../dstable/DistributionDetails.java | 10 +++---- .../management/dstable/DistributionTable.java | 8 +++--- .../dstable/DistributionTableHeader.java | 10 +++---- .../dstag/DistributionTagButtons.java | 4 +-- .../dstag/DistributionTagHeader.java | 4 +-- .../event/DistributionTagDropEvent.java | 6 ++--- .../event/ManagementViewAcceptCriteria.java | 26 +++++++++---------- .../management/footer/CountMessageLabel.java | 4 +-- .../footer/DeleteActionsLayout.java | 4 +-- .../footer/DeleteActionsLayoutHelper.java | 6 ++--- .../ManangementConfirmationWindowLayout.java | 10 +++---- .../management/tag/CreateUpdateTagLayout.java | 4 +-- .../TargetAddUpdateWindowLayout.java | 8 +++--- .../TargetBulkUpdateWindowLayout.java | 14 +++++----- .../management/targettable/TargetDetails.java | 16 ++++++------ .../management/targettable/TargetTable.java | 8 +++--- .../targettable/TargetTableHeader.java | 22 ++++++++-------- .../targettag/FilterByStatusLayout.java | 12 ++++----- .../targettag/MultipleTargetFilter.java | 4 +-- .../targettag/TargetFilterQueryButtons.java | 4 +-- .../targettag/TargetTagFilterButtons.java | 8 +++--- .../targettag/TargetTagFilterHeader.java | 4 +-- .../hawkbit/ui/menu/DashboardMenu.java | 8 +++--- .../rollout/AddUpdateRolloutWindowLayout.java | 24 ++++++++--------- .../ui/rollout/rollout/RolloutListGrid.java | 6 ++--- .../ui/rollout/rollout/RolloutListHeader.java | 8 +++--- .../rolloutgroup/RolloutGroupListGrid.java | 6 ++--- .../rolloutgroup/RolloutGroupsListHeader.java | 6 ++--- .../RolloutGroupTargetsCountLabelMessage.java | 4 +-- .../RolloutGroupTargetsListGrid.java | 4 +-- .../RolloutGroupTargetsListHeader.java | 4 +-- .../DefaultDistributionSetTypeLayout.java | 4 +-- .../TenantConfigurationDashboardView.java | 6 ++--- ...ider.java => SPUIComponentIdProvider.java} | 4 +-- 74 files changed, 310 insertions(+), 310 deletions(-) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/{SPUIComponetIdProvider.java => SPUIComponentIdProvider.java} (99%) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java index 7c5d4153f..c62637117 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactDetailsLayout.java @@ -31,7 +31,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; @@ -260,7 +260,7 @@ public class ArtifactDetailsLayout extends VerticalLayout { final String fileName = (String) table.getContainerDataSource().getItem(itemId) .getItemProperty(PROVIDED_FILE_NAME).getValue(); final Button deleteIcon = SPUIComponentProvider.getButton( - fileName + "-" + SPUIComponetIdProvider.UPLOAD_FILE_DELETE_ICON, "", + fileName + "-" + SPUIComponentIdProvider.UPLOAD_FILE_DELETE_ICON, "", SPUILabelDefinitions.DISCARD, ValoTheme.BUTTON_TINY + " " + "redicon", true, FontAwesome.TRASH_O, SPUIButtonStyleSmallNoBorder.class); deleteIcon.setData(itemId); @@ -344,7 +344,7 @@ public class ArtifactDetailsLayout extends VerticalLayout { detailsTable.setImmediate(true); detailsTable.setSizeFull(); - detailsTable.setId(SPUIComponetIdProvider.UPLOAD_ARTIFACT_DETAILS_TABLE); + detailsTable.setId(SPUIComponentIdProvider.UPLOAD_ARTIFACT_DETAILS_TABLE); detailsTable.addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); detailsTable.addStyleName(ValoTheme.TABLE_SMALL); return detailsTable; @@ -385,7 +385,7 @@ public class ArtifactDetailsLayout extends VerticalLayout { */ public void createMaxArtifactDetailsTable() { maxArtifactDetailsTable = createArtifactDetailsTable(); - maxArtifactDetailsTable.setId(SPUIComponetIdProvider.UPLOAD_ARTIFACT_DETAILS_TABLE_MAX); + maxArtifactDetailsTable.setId(SPUIComponentIdProvider.UPLOAD_ARTIFACT_DETAILS_TABLE_MAX); maxArtifactDetailsTable.setContainerDataSource(artifactDetailsTable.getContainerDataSource()); addGeneratedColumn(maxArtifactDetailsTable); if (!readOnly) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java index 060800fb8..8cfeaea81 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadViewAcceptCriteria.java @@ -14,7 +14,7 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.ui.common.AbstractAcceptCriteria; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -37,8 +37,8 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria { @Override protected String getComponentId(final Component component) { String id = component.getId(); - if (id != null && id.startsWith(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)) { - id = SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX; + if (id != null && id.startsWith(SPUIComponentIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)) { + id = SPUIComponentIdProvider.UPLOAD_TYPE_BUTTON_PREFIX; } return id; } @@ -56,16 +56,16 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria { private static Map> createDropConfigurations() { final Map> config = new HashMap<>(); // Delete drop area droppable components - config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, Arrays.asList( - SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)); + config.put(SPUIComponentIdProvider.DELETE_BUTTON_WRAPPER_ID, Arrays.asList( + SPUIComponentIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, SPUIComponentIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)); return config; } private static Map createDropHintConfigurations() { final Map config = new HashMap<>(); - config.put(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX, UploadArtifactUIEvent.SOFTWARE_TYPE_DRAG_START); - config.put(SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, UploadArtifactUIEvent.SOFTWARE_DRAG_START); + config.put(SPUIComponentIdProvider.UPLOAD_TYPE_BUTTON_PREFIX, UploadArtifactUIEvent.SOFTWARE_TYPE_DRAG_START); + config.put(SPUIComponentIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, UploadArtifactUIEvent.SOFTWARE_DRAG_START); return config; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java index 4cb28c2c3..49f232bd0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java @@ -16,7 +16,7 @@ import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout; import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.management.event.DragEvent; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; @@ -114,7 +114,7 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { @Override protected String getDeleteAreaId() { - return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID; + return SPUIComponentIdProvider.DELETE_BUTTON_WRAPPER_ID; } @Override @@ -130,10 +130,10 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { addToDeleteList(sourceTable, (TableTransferable) event.getTransferable()); updateSWActionCount(); } - if (sourceComponent.getId().startsWith(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)) { + if (sourceComponent.getId().startsWith(SPUIComponentIdProvider.UPLOAD_TYPE_BUTTON_PREFIX)) { final String swModuleTypeName = sourceComponent.getId() - .replace(SPUIComponetIdProvider.UPLOAD_TYPE_BUTTON_PREFIX, ""); + .replace(SPUIComponentIdProvider.UPLOAD_TYPE_BUTTON_PREFIX, ""); if (artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType().isPresent() && artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType().get().getName() .equalsIgnoreCase(swModuleTypeName)) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java index e6284d5d6..49b271b6b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/footer/UploadViewConfirmationWindowLayout.java @@ -21,7 +21,7 @@ import org.eclipse.hawkbit.ui.artifacts.state.CustomFile; import org.eclipse.hawkbit.ui.common.confirmwindow.layout.AbstractConfirmationWindowLayout; import org.eclipse.hawkbit.ui.common.confirmwindow.layout.ConfirmationTab; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -77,7 +77,7 @@ public class UploadViewConfirmationWindowLayout extends AbstractConfirmationWind private ConfirmationTab createSMDeleteConfirmationTab() { final ConfirmationTab tab = new ConfirmationTab(); - tab.getConfirmAll().setId(SPUIComponetIdProvider.SW_DELETE_ALL); + tab.getConfirmAll().setId(SPUIComponentIdProvider.SW_DELETE_ALL); tab.getConfirmAll().setIcon(FontAwesome.TRASH_O); tab.getConfirmAll().setCaption(i18n.get("button.delete.all")); tab.getConfirmAll().addClickListener(event -> deleteSMAll(tab)); @@ -181,7 +181,7 @@ public class UploadViewConfirmationWindowLayout extends AbstractConfirmationWind private ConfirmationTab createSMtypeDeleteConfirmationTab() { final ConfirmationTab tab = new ConfirmationTab(); - tab.getConfirmAll().setId(SPUIComponetIdProvider.SAVE_DELETE_SW_MODULE_TYPE); + tab.getConfirmAll().setId(SPUIComponentIdProvider.SAVE_DELETE_SW_MODULE_TYPE); tab.getConfirmAll().setIcon(FontAwesome.TRASH_O); tab.getConfirmAll().setCaption(i18n.get("button.delete.all")); tab.getConfirmAll().addClickListener(event -> deleteSMtypeAll(tab)); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 1e4029087..cada22fce 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -130,21 +130,21 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { /* name textfield */ nameTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - nameTextField.setId(SPUIComponetIdProvider.SOFT_MODULE_NAME); + nameTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_NAME); /* version text field */ versionTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - versionTextField.setId(SPUIComponetIdProvider.SOFT_MODULE_VERSION); + versionTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VERSION); /* Vendor text field */ vendorTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.vendor"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - vendorTextField.setId(SPUIComponetIdProvider.SOFT_MODULE_VENDOR); + vendorTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VENDOR); descTextArea = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - descTextArea.setId(SPUIComponetIdProvider.ADD_SW_MODULE_DESCRIPTION); + descTextArea.setId(SPUIComponentIdProvider.ADD_SW_MODULE_DESCRIPTION); addDescriptionTextChangeListener(); addVendorTextChangeListener(); @@ -155,7 +155,7 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { typeComboBox = SPUIComponentProvider.getComboBox("", "", null, null, false, null, i18n.get("upload.swmodule.type")); - typeComboBox.setId(SPUIComponetIdProvider.SW_MODULE_TYPE); + typeComboBox.setId(SPUIComponentIdProvider.SW_MODULE_TYPE); typeComboBox.setStyleName(SPUIDefinitions.COMBO_BOX_SPECIFIC_STYLE + " " + ValoTheme.COMBOBOX_TINY); typeComboBox.setNewItemsAllowed(Boolean.FALSE); typeComboBox.setImmediate(Boolean.TRUE); @@ -163,7 +163,7 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { populateTypeNameCombo(); /* save or update button */ - saveSoftware = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SOFT_MODULE_SAVE, "", "", "", true, + saveSoftware = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SOFT_MODULE_SAVE, "", "", "", true, FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); saveSoftware.addClickListener(event -> { if (editSwModule) { @@ -175,7 +175,7 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { }); /* close button */ - closeWindow = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SOFT_MODULE_DISCARD, "", "", "", true, + closeWindow = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SOFT_MODULE_DISCARD, "", "", "", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); /* Just close this window when this button is clicked */ closeWindow.addClickListener(event -> closeThisWindow()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java index 9d535f7f5..653994a17 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java @@ -14,7 +14,7 @@ import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -47,7 +47,7 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta @Override protected String getEditButtonId() { - return SPUIComponetIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON; + return SPUIComponentIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON; } @Override @@ -90,19 +90,19 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta final Label vendorLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.vendor"), HawkbitCommonUtil.trimAndNullIfEmpty(vendor) == null ? "" : vendor); - vendorLabel.setId(SPUIComponetIdProvider.DETAILS_VENDOR_LABEL_ID); + vendorLabel.setId(SPUIComponentIdProvider.DETAILS_VENDOR_LABEL_ID); detailsTabLayout.addComponent(vendorLabel); if (type != null) { final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.type"), type); - typeLabel.setId(SPUIComponetIdProvider.DETAILS_TYPE_LABEL_ID); + typeLabel.setId(SPUIComponentIdProvider.DETAILS_TYPE_LABEL_ID); detailsTabLayout.addComponent(typeLabel); } final Label assignLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.assigned.type"), HawkbitCommonUtil.trimAndNullIfEmpty(maxAssign) == null ? "" : maxAssign); - assignLabel.setId(SPUIComponetIdProvider.SWM_DTLS_MAX_ASSIGN); + assignLabel.setId(SPUIComponentIdProvider.SWM_DTLS_MAX_ASSIGN); detailsTabLayout.addComponent(assignLabel); } @@ -139,6 +139,6 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta @Override protected String getDetailsHeaderCaptionId() { - return SPUIComponetIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; + return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java index 478438891..6527a37be 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java @@ -22,7 +22,7 @@ import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.table.AbstractNamedVersionTable; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.TableColumn; @@ -75,7 +75,7 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable extends * it as we need full description. */ descLabel.removeStyleName("label-style"); - descLabel.setId(SPUIComponetIdProvider.DETAILS_DESCRIPTION_LABEL_ID); + descLabel.setId(SPUIComponentIdProvider.DETAILS_DESCRIPTION_LABEL_ID); descriptionLayout.addComponent(descLabel); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java index 75bd43447..079913d90 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java @@ -16,7 +16,7 @@ import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmall; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; @@ -154,7 +154,7 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme } private Button createActionsButton() { - final Button button = SPUIComponentProvider.getButton(SPUIComponetIdProvider.PENDING_ACTION_BUTTON, + final Button button = SPUIComponentProvider.getButton(SPUIComponentIdProvider.PENDING_ACTION_BUTTON, getNoActionsButtonLabel(), "", "", false, FontAwesome.BELL, SPUIButtonStyleSmall.class); button.setStyleName(SPUIStyleDefinitions.ACTION_BUTTON); button.addStyleName("del-action-button"); @@ -165,7 +165,7 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme } private Button createBulkUploadStatusButton() { - final Button button = SPUIComponentProvider.getButton(SPUIComponetIdProvider.BULK_UPLOAD_STATUS_BUTTON, "", "", + final Button button = SPUIComponentProvider.getButton(SPUIComponentIdProvider.BULK_UPLOAD_STATUS_BUTTON, "", "", "", false, null, SPUIButtonStyleSmall.class); button.setStyleName(SPUIStyleDefinitions.ACTION_BUTTON); button.addStyleName(SPUIStyleDefinitions.BULK_UPLOAD_PROGRESS_INDICATOR_STYLE); @@ -216,10 +216,10 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme return; } unsavedActionsWindow = SPUIComponentProvider.getWindow(getUnsavedActionsWindowCaption(), - SPUIComponetIdProvider.SAVE_ACTIONS_POPUP, SPUIDefinitions.CONFIRMATION_WINDOW); + SPUIComponentIdProvider.SAVE_ACTIONS_POPUP, SPUIDefinitions.CONFIRMATION_WINDOW); unsavedActionsWindow.addCloseListener(event -> unsavedActionsWindowClosed()); unsavedActionsWindow.setContent(getUnsavedActionsWindowContent()); - unsavedActionsWindow.setId(SPUIComponetIdProvider.CONFIRMATION_POPUP_ID); + unsavedActionsWindow.setId(SPUIComponentIdProvider.CONFIRMATION_POPUP_ID); UI.getCurrent().addWindow(unsavedActionsWindow); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java index 98c14e698..997dbdd96 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.ui.common.grid; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import com.vaadin.ui.Alignment; import com.vaadin.ui.HorizontalLayout; @@ -70,7 +70,7 @@ public abstract class AbstractGridLayout extends VerticalLayout { private HorizontalLayout createCountMessageComponent() { final HorizontalLayout rolloutGroupTargetsCountLayout = new HorizontalLayout(); final Label countMessageLabel = getCountMessageLabel(); - countMessageLabel.setId(SPUIComponetIdProvider.ROLLOUT_GROUP_TARGET_LABEL); + countMessageLabel.setId(SPUIComponentIdProvider.ROLLOUT_GROUP_TARGET_LABEL); rolloutGroupTargetsCountLayout.addComponent(getCountMessageLabel()); rolloutGroupTargetsCountLayout.setStyleName("footer-layout"); rolloutGroupTargetsCountLayout.setWidth("100%"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 64a06bd38..e9bc49675 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -28,7 +28,7 @@ import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent.Distr import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -205,7 +205,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); tagColorPreviewBtn = new Button(); - tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); + tagColorPreviewBtn.setId(SPUIComponentIdProvider.TAG_COLOR_PREVIEW_ID); getPreviewButtonColor(DEFAULT_COLOR); tagColorPreviewBtn.setStyleName("tag-color-preview"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java index 1abc32a3e..25e081fa0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteri import org.eclipse.hawkbit.ui.distributions.event.SaveActionWindowEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; @@ -50,7 +50,7 @@ public class DSTypeFilterButtons extends AbstractFilterButtons { @Override protected String getButtonsTableId() { - return SPUIComponetIdProvider.DISTRIBUTION_SET_TYPE_TABLE_ID; + return SPUIComponentIdProvider.DISTRIBUTION_SET_TYPE_TABLE_ID; } @Override @@ -68,7 +68,7 @@ public class DSTypeFilterButtons extends AbstractFilterButtons { @Override protected String createButtonId(final String name) { - return SPUIComponetIdProvider.DS_TYPE_FILTER_BTN_ID + name; + return SPUIComponentIdProvider.DS_TYPE_FILTER_BTN_ID + name; } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java index a1d1ffcfe..edb2122fb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java @@ -32,7 +32,7 @@ import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.management.dstable.DistributionAddUpdateWindowLayout; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -246,7 +246,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet if (type != null) { final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.type"), type); - typeLabel.setId(SPUIComponetIdProvider.DETAILS_TYPE_LABEL_ID); + typeLabel.setId(SPUIComponentIdProvider.DETAILS_TYPE_LABEL_ID); detailsTabLayout.addComponent(typeLabel); } @@ -268,7 +268,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet @Override protected String getEditButtonId() { - return SPUIComponetIdProvider.DS_EDIT_BUTTON; + return SPUIComponentIdProvider.DS_EDIT_BUTTON; } @Override @@ -358,7 +358,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet @Override protected String getDetailsHeaderCaptionId() { - return SPUIComponetIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID; + return SPUIComponentIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index 01c242247..216919047 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -39,7 +39,7 @@ import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableFilterEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -120,7 +120,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable> config = new HashMap<>(); // Delete drop area droppable components - config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, - Arrays.asList(SPUIDefinitions.DISTRIBUTION_TYPE_ID_PREFIXS, SPUIComponetIdProvider.DIST_TABLE_ID, - SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, + config.put(SPUIComponentIdProvider.DELETE_BUTTON_WRAPPER_ID, + Arrays.asList(SPUIDefinitions.DISTRIBUTION_TYPE_ID_PREFIXS, SPUIComponentIdProvider.DIST_TABLE_ID, + SPUIComponentIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, SPUIDefinitions.SOFTWARE_MODULE_TAG_ID_PREFIXS)); // Distribution table drop components - config.put(SPUIComponetIdProvider.DIST_TABLE_ID, - Arrays.asList(SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE)); + config.put(SPUIComponentIdProvider.DIST_TABLE_ID, + Arrays.asList(SPUIComponentIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE)); return config; } @@ -84,8 +84,8 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria { private static Map createDropHintConfigurations() { final Map config = new HashMap<>(); config.put(SPUIDefinitions.DISTRIBUTION_TYPE_ID_PREFIXS, DragEvent.DISTRIBUTION_TYPE_DRAG); - config.put(SPUIComponetIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG); - config.put(SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, DragEvent.SOFTWAREMODULE_DRAG); + config.put(SPUIComponentIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG); + config.put(SPUIComponentIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE, DragEvent.SOFTWAREMODULE_DRAG); config.put(SPUIDefinitions.SOFTWARE_MODULE_TAG_ID_PREFIXS, DragEvent.SOFTWAREMODULE_TYPE_DRAG); return config; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java index 5bc1627a9..fa941675f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java @@ -27,7 +27,7 @@ import org.eclipse.hawkbit.ui.distributions.event.DragEvent; import org.eclipse.hawkbit.ui.distributions.event.SaveActionWindowEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -115,7 +115,7 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { @Override protected String getDeleteAreaId() { - return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID; + return SPUIComponentIdProvider.DELETE_BUTTON_WRAPPER_ID; } @Override @@ -262,11 +262,11 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { } private boolean isDistributionTable(final Component source) { - return SPUIComponetIdProvider.DIST_TABLE_ID.equals(source.getId()); + return SPUIComponentIdProvider.DIST_TABLE_ID.equals(source.getId()); } private boolean isSoftwareModuleTable(final Component source) { - return SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE.equals(source.getId()); + return SPUIComponentIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE.equals(source.getId()); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java index a97c5786d..741cc8ce4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/footer/DistributionsConfirmationWindowLayout.java @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.distributions.event.SaveActionWindowEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -124,7 +124,7 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW private ConfirmationTab createSMDeleteConfirmationTab() { final ConfirmationTab tab = new ConfirmationTab(); - tab.getConfirmAll().setId(SPUIComponetIdProvider.SW_DELETE_ALL); + tab.getConfirmAll().setId(SPUIComponentIdProvider.SW_DELETE_ALL); tab.getConfirmAll().setIcon(FontAwesome.TRASH_O); tab.getConfirmAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DELETE_ALL)); tab.getConfirmAll().addClickListener(event -> deleteSMAll(tab)); @@ -232,13 +232,13 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW private ConfirmationTab createSMtypeDeleteConfirmationTab() { final ConfirmationTab tab = new ConfirmationTab(); - tab.getConfirmAll().setId(SPUIComponetIdProvider.SAVE_DELETE_SW_MODULE_TYPE); + tab.getConfirmAll().setId(SPUIComponentIdProvider.SAVE_DELETE_SW_MODULE_TYPE); tab.getConfirmAll().setIcon(FontAwesome.TRASH_O); tab.getConfirmAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DELETE_ALL)); tab.getConfirmAll().addClickListener(event -> deleteSMtypeAll(tab)); tab.getDiscardAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DISCARD_ALL)); - tab.getDiscardAll().setId(SPUIComponetIdProvider.DISCARD_SW_MODULE_TYPE); + tab.getDiscardAll().setId(SPUIComponentIdProvider.DISCARD_SW_MODULE_TYPE); tab.getDiscardAll().addClickListener(event -> discardSMtypeAll(tab)); // Add items container to the table. @@ -324,7 +324,7 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW private ConfirmationTab createDistDeleteConfirmationTab() { final ConfirmationTab tab = new ConfirmationTab(); - tab.getConfirmAll().setId(SPUIComponetIdProvider.DIST_DELETE_ALL); + tab.getConfirmAll().setId(SPUIComponentIdProvider.DIST_DELETE_ALL); tab.getConfirmAll().setIcon(FontAwesome.TRASH_O); tab.getConfirmAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DELETE_ALL)); tab.getConfirmAll().addClickListener(event -> deleteDistAll(tab)); @@ -423,13 +423,13 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW private ConfirmationTab createDistSetTypeDeleteConfirmationTab() { final ConfirmationTab tab = new ConfirmationTab(); - tab.getConfirmAll().setId(SPUIComponetIdProvider.SAVE_DELETE_DIST_SET_TYPE); + tab.getConfirmAll().setId(SPUIComponentIdProvider.SAVE_DELETE_DIST_SET_TYPE); tab.getConfirmAll().setIcon(FontAwesome.TRASH_O); tab.getConfirmAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DELETE_ALL)); tab.getConfirmAll().addClickListener(event -> deleteDistSetTypeAll(tab)); tab.getDiscardAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DISCARD_ALL)); - tab.getDiscardAll().setId(SPUIComponetIdProvider.DISCARD_DIST_SET_TYPE); + tab.getDiscardAll().setId(SPUIComponentIdProvider.DISCARD_DIST_SET_TYPE); tab.getDiscardAll().addClickListener(event -> discardDistSetTypeAll(tab)); // Add items container to the table. @@ -511,13 +511,13 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW assignmnetTab = new ConfirmationTab(); - assignmnetTab.getConfirmAll().setId(SPUIComponetIdProvider.SAVE_ASSIGNMENT); + assignmnetTab.getConfirmAll().setId(SPUIComponentIdProvider.SAVE_ASSIGNMENT); assignmnetTab.getConfirmAll().setIcon(FontAwesome.SAVE); assignmnetTab.getConfirmAll().setCaption(i18n.get("button.assign.all")); assignmnetTab.getConfirmAll().addClickListener(event -> saveAllAssignments(assignmnetTab)); assignmnetTab.getDiscardAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DISCARD_ALL)); - assignmnetTab.getDiscardAll().setId(SPUIComponetIdProvider.DISCARD_ASSIGNMENT); + assignmnetTab.getDiscardAll().setId(SPUIComponentIdProvider.DISCARD_ASSIGNMENT); assignmnetTab.getDiscardAll().addClickListener(event -> discardAllSWAssignments(assignmnetTab)); // Add items container to the table. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java index 8774c9e08..472ce8ce1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityT import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -61,7 +61,7 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay @Override protected String getEditButtonId() { - return SPUIComponetIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON; + return SPUIComponentIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON; } @Override @@ -119,19 +119,19 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay final Label vendorLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.vendor"), HawkbitCommonUtil.trimAndNullIfEmpty(vendor) == null ? "" : vendor); - vendorLabel.setId(SPUIComponetIdProvider.DETAILS_VENDOR_LABEL_ID); + vendorLabel.setId(SPUIComponentIdProvider.DETAILS_VENDOR_LABEL_ID); detailsTabLayout.addComponent(vendorLabel); if (type != null) { final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.type"), type); - typeLabel.setId(SPUIComponetIdProvider.DETAILS_TYPE_LABEL_ID); + typeLabel.setId(SPUIComponentIdProvider.DETAILS_TYPE_LABEL_ID); detailsTabLayout.addComponent(typeLabel); } final Label assignLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.assigned.type"), HawkbitCommonUtil.trimAndNullIfEmpty(maxAssign) == null ? "" : maxAssign); - assignLabel.setId(SPUIComponetIdProvider.SWM_DTLS_MAX_ASSIGN); + assignLabel.setId(SPUIComponentIdProvider.SWM_DTLS_MAX_ASSIGN); detailsTabLayout.addComponent(assignLabel); } @@ -143,7 +143,7 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay @Override protected String getDetailsHeaderCaptionId() { - return SPUIComponetIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; + return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java index eeea33723..4dd635b55 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTable.java @@ -28,7 +28,7 @@ import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteri import org.eclipse.hawkbit.ui.distributions.event.SaveActionWindowEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -126,7 +126,7 @@ public class SwModuleTable extends AbstractNamedVersionTable onFilterNameChange(event)); return nameField; @@ -294,7 +294,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button private void buildLayout() { captionLayout = new HorizontalLayout(); captionLayout.setDescription(i18n.get("tooltip.click.to.edit")); - captionLayout.setId(SPUIComponetIdProvider.TARGET_FILTER_QUERY_NAME_LAYOUT_ID); + captionLayout.setId(SPUIComponentIdProvider.TARGET_FILTER_QUERY_NAME_LAYOUT_ID); titleFilterIconsLayout = new HorizontalLayout(); titleFilterIconsLayout.addComponents(headerCaption, captionLayout); @@ -468,8 +468,8 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } private Button createSaveButton() { - saveButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.CUSTOM_FILTER_SAVE_ICON, - SPUIComponetIdProvider.CUSTOM_FILTER_SAVE_ICON, "Save", null, false, FontAwesome.SAVE, + saveButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.CUSTOM_FILTER_SAVE_ICON, + SPUIComponentIdProvider.CUSTOM_FILTER_SAVE_ICON, "Save", null, false, FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); saveButton.addClickListener(this); saveButton.setEnabled(false); @@ -484,7 +484,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button */ @Override public void buttonClick(final ClickEvent event) { - if (SPUIComponetIdProvider.CUSTOM_FILTER_SAVE_ICON.equals(event.getComponent().getId()) + if (SPUIComponentIdProvider.CUSTOM_FILTER_SAVE_ICON.equals(event.getComponent().getId()) && manadatoryFieldsPresent()) { if (filterManagementUIState.isCreateFilterViewDisplayed()) { if (!doesAlreadyExists()) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java index 11121c1a5..bb5707c40 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterTable.java @@ -24,7 +24,7 @@ import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; import org.eclipse.hawkbit.ui.utils.AssignInstalledDSTooltipGenerator; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.TableColumn; @@ -90,7 +90,7 @@ public class CreateOrUpdateFilterTable extends Table { addCustomGeneratedColumns(); restoreOnLoad(); populateTableData(); - setId(SPUIComponetIdProvider.CUSTOM_FILTER_TARGET_TABLE_ID); + setId(SPUIComponentIdProvider.CUSTOM_FILTER_TARGET_TABLE_ID); setSelectable(false); eventBus.subscribe(this); setItemDescriptionGenerator(new AssignInstalledDSTooltipGenerator()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java index 79877f299..f322181ab 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterHeader.java @@ -16,7 +16,7 @@ import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -108,7 +108,7 @@ public class TargetFilterHeader extends VerticalLayout { } private Button createAddButton() { - final Button button = SPUIComponentProvider.getButton(SPUIComponetIdProvider.TARGET_FILTER_ADD_ICON_ID, "", "", + final Button button = SPUIComponentProvider.getButton(SPUIComponentIdProvider.TARGET_FILTER_ADD_ICON_ID, "", "", null, false, FontAwesome.PLUS, SPUIButtonStyleSmallNoBorder.class); button.addClickListener(event -> addNewFilter()); return button; @@ -176,7 +176,7 @@ public class TargetFilterHeader extends VerticalLayout { } private String getSearchRestIconId() { - return SPUIComponetIdProvider.TARGET_FILTER_TBL_SEARCH_RESET_ID; + return SPUIComponentIdProvider.TARGET_FILTER_TBL_SEARCH_RESET_ID; } protected void resetSearchText() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java index 17bfefe56..e6d17e8db 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java @@ -25,7 +25,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.TableColumn; @@ -94,7 +94,7 @@ public class TargetFilterTable extends Table { populateTableData(); setColumnCollapsingAllowed(true); setColumnProperties(); - setId(SPUIComponetIdProvider.TAEGET_FILTER_TABLE_ID); + setId(SPUIComponentIdProvider.TAEGET_FILTER_TABLE_ID); eventBus.subscribe(this); } @@ -172,7 +172,7 @@ public class TargetFilterTable extends Table { } private String getDeleteIconId(final String targetFilterName) { - return new StringBuilder(SPUIComponetIdProvider.CUSTOM_FILTER_DELETE_ICON).append('.').append(targetFilterName) + return new StringBuilder(SPUIComponentIdProvider.CUSTOM_FILTER_DELETE_ICON).append('.').append(targetFilterName) .toString(); } @@ -241,7 +241,7 @@ public class TargetFilterTable extends Table { } private static String getDetailLinkId(final String filterName) { - return new StringBuilder(SPUIComponetIdProvider.CUSTOM_FILTER_DETAIL_LINK).append('.').append(filterName) + return new StringBuilder(SPUIComponentIdProvider.CUSTOM_FILTER_DETAIL_LINK).append('.').append(filterName) .toString(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java index 322d32a45..4700b48eb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/footer/TargetFilterCountMessageLabel.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -79,7 +79,7 @@ public class TargetFilterCountMessageLabel extends Label { private void applyStyle() { addStyleName(SPUILabelDefinitions.SP_LABEL_MESSAGE_STYLE); setContentMode(ContentMode.HTML); - setId(SPUIComponetIdProvider.COUNT_LABEL); + setId(SPUIComponentIdProvider.COUNT_LABEL); } private void displayTargetFilterMessage() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java index a6cc46708..e31409b1d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.im.authentication.TenantUserPasswordAuthenticationTok import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -225,7 +225,7 @@ public class LoginView extends VerticalLayout implements View { final String linkStyle = "v-link"; if (!uiProperties.getLinks().getDocumentation().getRoot().isEmpty()) { - final Link docuLink = SPUIComponentProvider.getLink(SPUIComponetIdProvider.LINK_DOCUMENTATION, + final Link docuLink = SPUIComponentProvider.getLink(SPUIComponentIdProvider.LINK_DOCUMENTATION, i18n.get("link.documentation.name"), uiProperties.getLinks().getDocumentation().getRoot(), FontAwesome.QUESTION_CIRCLE, "_blank", linkStyle, true); links.addComponent(docuLink); @@ -233,14 +233,14 @@ public class LoginView extends VerticalLayout implements View { } if (!uiProperties.getDemo().getUser().isEmpty()) { - final Link demoLink = SPUIComponentProvider.getLink(SPUIComponetIdProvider.LINK_DEMO, + final Link demoLink = SPUIComponentProvider.getLink(SPUIComponentIdProvider.LINK_DEMO, i18n.get("link.demo.name"), "?demo", FontAwesome.DESKTOP, "_top", linkStyle, true); links.addComponent(demoLink); demoLink.addStyleName(ValoTheme.LINK_SMALL); } if (!uiProperties.getLinks().getRequestAccount().isEmpty()) { - final Link requestAccountLink = SPUIComponentProvider.getLink(SPUIComponetIdProvider.LINK_REQUESTACCOUNT, + final Link requestAccountLink = SPUIComponentProvider.getLink(SPUIComponentIdProvider.LINK_REQUESTACCOUNT, i18n.get("link.requestaccount.name"), uiProperties.getLinks().getRequestAccount(), FontAwesome.SHOPPING_CART, "", linkStyle, true); links.addComponent(requestAccountLink); @@ -248,7 +248,7 @@ public class LoginView extends VerticalLayout implements View { } if (!uiProperties.getLinks().getUserManagement().isEmpty()) { - final Link userManagementLink = SPUIComponentProvider.getLink(SPUIComponetIdProvider.LINK_USERMANAGEMENT, + final Link userManagementLink = SPUIComponentProvider.getLink(SPUIComponentIdProvider.LINK_USERMANAGEMENT, i18n.get("link.usermanagement.name"), uiProperties.getLinks().getUserManagement(), FontAwesome.USERS, "_blank", linkStyle, true); links.addComponent(userManagementLink); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index be1a96c37..934fff07e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -34,7 +34,7 @@ import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; @@ -158,7 +158,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { private void initializeTableSettings() { - setId(SPUIComponetIdProvider.ACTION_HISTORY_TABLE_ID); + setId(SPUIComponentIdProvider.ACTION_HISTORY_TABLE_ID); setSelectable(false); setMultiSelect(false); setSortEnabled(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 5d9304191..aaf9ce7db 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -30,7 +30,7 @@ import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -158,23 +158,23 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { private void createRequiredComponents() { distNameTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - distNameTextField.setId(SPUIComponetIdProvider.DIST_ADD_NAME); + distNameTextField.setId(SPUIComponentIdProvider.DIST_ADD_NAME); distNameTextField.setNullRepresentation(""); distVersionTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - distVersionTextField.setId(SPUIComponetIdProvider.DIST_ADD_VERSION); + distVersionTextField.setId(SPUIComponentIdProvider.DIST_ADD_VERSION); distVersionTextField.setNullRepresentation(""); distsetTypeNameComboBox = SPUIComponentProvider.getComboBox("", "", null, "", false, "", i18n.get("label.combobox.type")); distsetTypeNameComboBox.setImmediate(true); distsetTypeNameComboBox.setNullSelectionAllowed(false); - distsetTypeNameComboBox.setId(SPUIComponetIdProvider.DIST_ADD_DISTSETTYPE); + distsetTypeNameComboBox.setId(SPUIComponentIdProvider.DIST_ADD_DISTSETTYPE); descTextArea = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - descTextArea.setId(SPUIComponetIdProvider.DIST_ADD_DESC); + descTextArea.setId(SPUIComponentIdProvider.DIST_ADD_DESC); descTextArea.setNullRepresentation(""); /* Label for mandatory symbol */ @@ -184,15 +184,15 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { reqMigStepCheckbox = SPUIComponentProvider.getCheckBox(i18n.get("checkbox.dist.required.migration.step"), "dist-checkbox-style", null, false, ""); reqMigStepCheckbox.addStyleName(ValoTheme.CHECKBOX_SMALL); - reqMigStepCheckbox.setId(SPUIComponetIdProvider.DIST_ADD_MIGRATION_CHECK); + reqMigStepCheckbox.setId(SPUIComponentIdProvider.DIST_ADD_MIGRATION_CHECK); /* save or update button */ - saveDistributionBtn = SPUIComponentProvider.getButton(SPUIComponetIdProvider.DIST_ADD_SAVE, "", "", "", true, + saveDistributionBtn = SPUIComponentProvider.getButton(SPUIComponentIdProvider.DIST_ADD_SAVE, "", "", "", true, FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); saveDistributionBtn.addClickListener(event -> saveDistribution()); /* close button */ - discardDistributionBtn = SPUIComponentProvider.getButton(SPUIComponetIdProvider.DIST_ADD_DISCARD, "", "", "", + discardDistributionBtn = SPUIComponentProvider.getButton(SPUIComponentIdProvider.DIST_ADD_DISCARD, "", "", "", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); discardDistributionBtn.addClickListener(event -> discardDistribution()); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java index 81151b076..dc7e347cd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -86,7 +86,7 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail @Override protected String getEditButtonId() { - return SPUIComponetIdProvider.DS_EDIT_BUTTON; + return SPUIComponentIdProvider.DS_EDIT_BUTTON; } @Override @@ -107,7 +107,7 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail @Override protected String getTabSheetId() { - return SPUIComponetIdProvider.DISTRIBUTION_DETAILS_TABSHEET; + return SPUIComponentIdProvider.DISTRIBUTION_DETAILS_TABSHEET; } @Override @@ -132,7 +132,7 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail if (type != null) { final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.type"), type); - typeLabel.setId(SPUIComponetIdProvider.DETAILS_TYPE_LABEL_ID); + typeLabel.setId(SPUIComponentIdProvider.DETAILS_TYPE_LABEL_ID); detailsTabLayout.addComponent(typeLabel); } @@ -158,7 +158,7 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail @Override protected String getDetailsHeaderCaptionId() { - return SPUIComponetIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID; + return SPUIComponentIdProvider.DISTRIBUTION_DETAILS_HEADER_LABEL_ID; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java index 0df1b0ea5..12af7de02 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTable.java @@ -38,7 +38,7 @@ import org.eclipse.hawkbit.ui.management.event.PinUnpinEvent; import org.eclipse.hawkbit.ui.management.event.SaveActionWindowEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -176,7 +176,7 @@ public class DistributionTable extends AbstractNamedVersionTable> config = new HashMap<>(); // Delete drop area acceptable components - config.put(SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID, - Arrays.asList(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, SPUIComponetIdProvider.TARGET_TABLE_ID, - SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS, SPUIComponetIdProvider.DIST_TABLE_ID)); + config.put(SPUIComponentIdProvider.DELETE_BUTTON_WRAPPER_ID, + Arrays.asList(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, SPUIComponentIdProvider.TARGET_TABLE_ID, + SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS, SPUIComponentIdProvider.DIST_TABLE_ID)); // Target Tag acceptable components - config.put(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, Arrays.asList(SPUIComponetIdProvider.TARGET_TABLE_ID)); + config.put(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, Arrays.asList(SPUIComponentIdProvider.TARGET_TABLE_ID)); // Target table acceptable components - config.put(SPUIComponetIdProvider.TARGET_TABLE_ID, - Arrays.asList(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, SPUIComponetIdProvider.DIST_TABLE_ID)); + config.put(SPUIComponentIdProvider.TARGET_TABLE_ID, + Arrays.asList(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, SPUIComponentIdProvider.DIST_TABLE_ID)); // Target table header acceptable components - config.put(SPUIComponetIdProvider.TARGET_DROP_FILTER_ICON, Arrays.asList(SPUIComponetIdProvider.DIST_TABLE_ID)); + config.put(SPUIComponentIdProvider.TARGET_DROP_FILTER_ICON, Arrays.asList(SPUIComponentIdProvider.DIST_TABLE_ID)); // Distribution table acceptable components - config.put(SPUIComponetIdProvider.DIST_TABLE_ID, Arrays.asList(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, - SPUIComponetIdProvider.TARGET_TABLE_ID, SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS)); + config.put(SPUIComponentIdProvider.DIST_TABLE_ID, Arrays.asList(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, + SPUIComponentIdProvider.TARGET_TABLE_ID, SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS)); // Distribution tag acceptable components. - config.put(SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS, Arrays.asList(SPUIComponetIdProvider.DIST_TABLE_ID)); + config.put(SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS, Arrays.asList(SPUIComponentIdProvider.DIST_TABLE_ID)); return config; } private static Map createDropHintConfigurations() { final Map config = new HashMap<>(); config.put(SPUIDefinitions.TARGET_TAG_ID_PREFIXS, DragEvent.TARGET_TAG_DRAG); - config.put(SPUIComponetIdProvider.TARGET_TABLE_ID, DragEvent.TARGET_DRAG); - config.put(SPUIComponetIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG); + config.put(SPUIComponentIdProvider.TARGET_TABLE_ID, DragEvent.TARGET_DRAG); + config.put(SPUIComponentIdProvider.DIST_TABLE_ID, DragEvent.DISTRIBUTION_DRAG); config.put(SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS, DragEvent.DISTRIBUTION_TAG_DRAG); return config; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java index ed002defb..a605a831d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java @@ -26,7 +26,7 @@ import org.eclipse.hawkbit.ui.management.state.TargetTableFilters; import org.eclipse.hawkbit.ui.management.targettable.TargetTable; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -125,7 +125,7 @@ public class CountMessageLabel extends Label { /* Create label for Targets count message displaying below the table */ addStyleName(SPUILabelDefinitions.SP_LABEL_MESSAGE_STYLE); setContentMode(ContentMode.HTML); - setId(SPUIComponetIdProvider.COUNT_LABEL); + setId(SPUIComponentIdProvider.COUNT_LABEL); } private void displayTargetCountStatus() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java index ad537e626..2eb64b13f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayout.java @@ -24,7 +24,7 @@ import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; @@ -152,7 +152,7 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { @Override protected String getDeleteAreaId() { - return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID; + return SPUIComponentIdProvider.DELETE_BUTTON_WRAPPER_ID; } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java index 55188efae..02d4c5a80 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/DeleteActionsLayoutHelper.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.ui.management.footer; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import com.vaadin.ui.Component; @@ -68,7 +68,7 @@ public final class DeleteActionsLayoutHelper { * @return true if it component is target table */ public static boolean isTargetTable(final Component source) { - return SPUIComponetIdProvider.TARGET_TABLE_ID.equalsIgnoreCase(source.getId()); + return SPUIComponentIdProvider.TARGET_TABLE_ID.equalsIgnoreCase(source.getId()); } /** @@ -79,7 +79,7 @@ public final class DeleteActionsLayoutHelper { * @return true if it component is distribution table */ public static boolean isDistributionTable(final Component source) { - return SPUIComponetIdProvider.DIST_TABLE_ID.equalsIgnoreCase(source.getId()); + return SPUIComponentIdProvider.DIST_TABLE_ID.equalsIgnoreCase(source.getId()); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java index 56e11a6fe..52cca5794 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java @@ -34,7 +34,7 @@ import org.eclipse.hawkbit.ui.management.event.SaveActionWindowEvent; import org.eclipse.hawkbit.ui.management.footer.ActionTypeOptionGroupLayout.ActionTypeOption; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -105,13 +105,13 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin private ConfirmationTab createAssignmentTab() { assignmnetTab = new ConfirmationTab(); - assignmnetTab.getConfirmAll().setId(SPUIComponetIdProvider.SAVE_ASSIGNMENT); + assignmnetTab.getConfirmAll().setId(SPUIComponentIdProvider.SAVE_ASSIGNMENT); assignmnetTab.getConfirmAll().setIcon(FontAwesome.SAVE); assignmnetTab.getConfirmAll().setCaption(i18n.get("button.assign.all")); assignmnetTab.getConfirmAll().addClickListener(event -> saveAllAssignments(assignmnetTab)); assignmnetTab.getDiscardAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DISCARD_ALL)); - assignmnetTab.getDiscardAll().setId(SPUIComponetIdProvider.DISCARD_ASSIGNMENT); + assignmnetTab.getDiscardAll().setId(SPUIComponentIdProvider.DISCARD_ASSIGNMENT); assignmnetTab.getDiscardAll().addClickListener(event -> discardAllAssignments(assignmnetTab)); // Add items container to the table. @@ -275,7 +275,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin final ConfirmationTab tab = new ConfirmationTab(); // TobeDone ? y to set caption every time?? - tab.getConfirmAll().setId(SPUIComponetIdProvider.TARGET_DELETE_ALL); + tab.getConfirmAll().setId(SPUIComponentIdProvider.TARGET_DELETE_ALL); tab.getConfirmAll().setIcon(FontAwesome.TRASH_O); tab.getConfirmAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DELETE_ALL)); tab.getConfirmAll().addClickListener(event -> deleteAllTargets(tab)); @@ -308,7 +308,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin final ConfirmationTab tab = new ConfirmationTab(); // TobeDone ? y to set caption every time?? - tab.getConfirmAll().setId(SPUIComponetIdProvider.DIST_DELETE_ALL); + tab.getConfirmAll().setId(SPUIComponentIdProvider.DIST_DELETE_ALL); tab.getConfirmAll().setIcon(FontAwesome.TRASH_O); tab.getConfirmAll().setCaption(i18n.get(SPUILabelDefinitions.BUTTON_DELETE_ALL)); tab.getConfirmAll().addClickListener(event -> deleteAllDistributions(tab)); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java index 6bed7dd4f..24f21875e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/CreateUpdateTagLayout.java @@ -22,7 +22,7 @@ import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -193,7 +193,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C discardTag.addStyleName(ValoTheme.BUTTON_BORDERLESS); tagColorPreviewBtn = new Button(); - tagColorPreviewBtn.setId(SPUIComponetIdProvider.TAG_COLOR_PREVIEW_ID); + tagColorPreviewBtn.setId(SPUIComponentIdProvider.TAG_COLOR_PREVIEW_ID); getPreviewButtonColor(DEFAULT_COLOR); tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index e54911d86..abc0fc10c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -21,7 +21,7 @@ import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -102,17 +102,17 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { /* Textfield for controller Id */ controllerIDTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.target.id"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - controllerIDTextField.setId(SPUIComponetIdProvider.TARGET_ADD_CONTROLLER_ID); + controllerIDTextField.setId(SPUIComponentIdProvider.TARGET_ADD_CONTROLLER_ID); /* Textfield for target name */ nameTextField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - nameTextField.setId(SPUIComponetIdProvider.TARGET_ADD_NAME); + nameTextField.setId(SPUIComponentIdProvider.TARGET_ADD_NAME); /* Textarea for target description */ descTextArea = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - descTextArea.setId(SPUIComponetIdProvider.TARGET_ADD_DESC); + descTextArea.setId(SPUIComponentIdProvider.TARGET_ADD_DESC); descTextArea.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); /* Label for mandatory symbol */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java index 657cd97af..69c0b7377 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java @@ -27,7 +27,7 @@ import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.management.state.TargetBulkUpload; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -159,7 +159,7 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { } private Button getCloseButton() { - final Button closeBtn = SPUIComponentProvider.getButton(SPUIComponetIdProvider.BULK_UPLOAD_CLOSE_BUTTON_ID, "", + final Button closeBtn = SPUIComponentProvider.getButton(SPUIComponentIdProvider.BULK_UPLOAD_CLOSE_BUTTON_ID, "", "", "", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); closeBtn.addStyleName(ValoTheme.BUTTON_BORDERLESS); closeBtn.addClickListener(event -> closePopup()); @@ -168,7 +168,7 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { private Button getMinimizeButton() { final Button minimizeBtn = SPUIComponentProvider.getButton( - SPUIComponetIdProvider.BULK_UPLOAD_MINIMIZE_BUTTON_ID, "", "", "", true, FontAwesome.MINUS, + SPUIComponentIdProvider.BULK_UPLOAD_MINIMIZE_BUTTON_ID, "", "", "", true, FontAwesome.MINUS, SPUIButtonStyleSmallNoBorder.class); minimizeBtn.addStyleName(ValoTheme.BUTTON_BORDERLESS); minimizeBtn.addClickListener(event -> minimizeWindow()); @@ -190,14 +190,14 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { countLabel.addStyleName("bulk-upload-label"); countLabel.setVisible(false); countLabel.setCaptionAsHtml(true); - countLabel.setId(SPUIComponetIdProvider.BULK_UPLOAD_COUNT); + countLabel.setId(SPUIComponentIdProvider.BULK_UPLOAD_COUNT); return countLabel; } private TextArea getDescriptionTextArea() { final TextArea description = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - description.setId(SPUIComponetIdProvider.BULK_UPLOAD_DESC); + description.setId(SPUIComponentIdProvider.BULK_UPLOAD_DESC); description.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); description.setWidth("100%"); return description; @@ -214,7 +214,7 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { dsComboBox.setPageLength(7); dsComboBox.setContainerDataSource(container); dsComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME_VERSION); - dsComboBox.setId(SPUIComponetIdProvider.BULK_UPLOAD_DS_COMBO); + dsComboBox.setId(SPUIComponentIdProvider.BULK_UPLOAD_DS_COMBO); dsComboBox.setWidth("100%"); return dsComboBox; } @@ -228,7 +228,7 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { tokenLayout.setMargin(false); tokenLayout.setSizeFull(); tokenLayout.setHeight("100px"); - tokenLayout.setId(SPUIComponetIdProvider.BULK_UPLOAD_TAG); + tokenLayout.setId(SPUIComponentIdProvider.BULK_UPLOAD_TAG); return tokenLayout; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java index 8ab4f8b0d..e7553eaba 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java @@ -21,7 +21,7 @@ import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; @@ -115,7 +115,7 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Override protected String getEditButtonId() { - return SPUIComponetIdProvider.TARGET_EDIT_ICON; + return SPUIComponentIdProvider.TARGET_EDIT_ICON; } @Override @@ -157,23 +157,23 @@ public class TargetDetails extends AbstractTableDetailsLayout { final Label controllerLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.target.id"), HawkbitCommonUtil.trimAndNullIfEmpty(controllerId) == null ? "" : controllerId); - controllerLabel.setId(SPUIComponetIdProvider.TARGET_CONTROLLER_ID); + controllerLabel.setId(SPUIComponentIdProvider.TARGET_CONTROLLER_ID); detailsTabLayout.addComponent(controllerLabel); final Label lastPollDtLabel = SPUIComponentProvider.createNameValueLabel( getI18n().get("label.target.lastpolldate"), HawkbitCommonUtil.trimAndNullIfEmpty(lastQueryDate) == null ? "" : lastQueryDate); - lastPollDtLabel.setId(SPUIComponetIdProvider.TARGET_LAST_QUERY_DT); + lastPollDtLabel.setId(SPUIComponentIdProvider.TARGET_LAST_QUERY_DT); detailsTabLayout.addComponent(lastPollDtLabel); final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.ip"), address == null ? StringUtils.EMPTY : address.toString()); - typeLabel.setId(SPUIComponetIdProvider.TARGET_IP_ADDRESS); + typeLabel.setId(SPUIComponentIdProvider.TARGET_IP_ADDRESS); detailsTabLayout.addComponent(typeLabel); if (securityToken != null) { final HorizontalLayout securityTokenLayout = getSecurityTokenLayout(securityToken); - controllerLabel.setId(SPUIComponetIdProvider.TARGET_SECURITY_TOKEN); + controllerLabel.setId(SPUIComponentIdProvider.TARGET_SECURITY_TOKEN); detailsTabLayout.addComponent(securityTokenLayout); } } @@ -240,12 +240,12 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Override protected String getTabSheetId() { - return SPUIComponetIdProvider.TARGET_DETAILS_TABSHEET; + return SPUIComponentIdProvider.TARGET_DETAILS_TABSHEET; } @Override protected String getDetailsHeaderCaptionId() { - return SPUIComponetIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; + return SPUIComponentIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 62ad96205..697166f5a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -55,7 +55,7 @@ import org.eclipse.hawkbit.ui.management.state.TargetTableFilters; import org.eclipse.hawkbit.ui.utils.AssignInstalledDSTooltipGenerator; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -230,7 +230,7 @@ public class TargetTable extends AbstractTable implements @Override protected String getTableId() { - return SPUIComponetIdProvider.TARGET_TABLE_ID; + return SPUIComponentIdProvider.TARGET_TABLE_ID; } @Override @@ -454,7 +454,7 @@ public class TargetTable extends AbstractTable implements pinBtn.setStyleName(pinBtnStyle.toString()); pinBtn.setHeightUndefined(); pinBtn.setData(itemId); - pinBtn.setId(SPUIComponetIdProvider.TARGET_PIN_ICON + "." + itemId); + pinBtn.setId(SPUIComponentIdProvider.TARGET_PIN_ICON + "." + itemId); pinBtn.addClickListener(event -> addPinClickListener(event)); if (isPinned(((TargetIdName) itemId).getControllerId())) { pinBtn.addStyleName(TARGET_PINNED); @@ -620,7 +620,7 @@ public class TargetTable extends AbstractTable implements private Boolean validateTable(final Component compsource, final TableTransferable transferable) { final Table source = (Table) compsource; - if (!(source.getId().equals(SPUIComponetIdProvider.DIST_TABLE_ID) + if (!(source.getId().equals(SPUIComponentIdProvider.DIST_TABLE_ID) || source.getId().startsWith(SPUIDefinitions.TARGET_TAG_ID_PREFIXS))) { notification.displayValidationError(i18n.get(ACTION_NOT_ALLOWED_MSG)); return false; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java index 09c9bf499..13db548d9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java @@ -26,7 +26,7 @@ import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUITargetDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; @@ -175,22 +175,22 @@ public class TargetTableHeader extends AbstractTableHeader { @Override protected String getSearchBoxId() { - return SPUIComponetIdProvider.TARGET_TEXT_FIELD; + return SPUIComponentIdProvider.TARGET_TEXT_FIELD; } @Override protected String getSearchRestIconId() { - return SPUIComponetIdProvider.TARGET_TBL_SEARCH_RESET_ID; + return SPUIComponentIdProvider.TARGET_TBL_SEARCH_RESET_ID; } @Override protected String getAddIconId() { - return SPUIComponetIdProvider.TARGET_TBL_ADD_ICON_ID; + return SPUIComponentIdProvider.TARGET_TBL_ADD_ICON_ID; } @Override protected String getBulkUploadIconId() { - return SPUIComponetIdProvider.TARGET_TBL_BULK_UPLOAD_ICON_ID; + return SPUIComponentIdProvider.TARGET_TBL_BULK_UPLOAD_ICON_ID; } @Override @@ -200,12 +200,12 @@ public class TargetTableHeader extends AbstractTableHeader { @Override protected String getDropFilterId() { - return SPUIComponetIdProvider.TARGET_DROP_FILTER_ICON; + return SPUIComponentIdProvider.TARGET_DROP_FILTER_ICON; } @Override protected String getDropFilterWrapperId() { - return SPUIComponetIdProvider.TARGET_FILTER_WRAPPER_ID; + return SPUIComponentIdProvider.TARGET_FILTER_WRAPPER_ID; } @Override @@ -225,7 +225,7 @@ public class TargetTableHeader extends AbstractTableHeader { @Override protected String getShowFilterButtonLayoutId() { - return SPUIComponetIdProvider.SHOW_TARGET_TAGS; + return SPUIComponentIdProvider.SHOW_TARGET_TAGS; } @Override @@ -249,7 +249,7 @@ public class TargetTableHeader extends AbstractTableHeader { @Override protected String getMaxMinIconId() { - return SPUIComponetIdProvider.TARGET_MAX_MIN_TABLE_ICON; + return SPUIComponentIdProvider.TARGET_MAX_MIN_TABLE_ICON; } @Override @@ -337,7 +337,7 @@ public class TargetTableHeader extends AbstractTableHeader { if (doValidations(event)) { final TableTransferable tableTransferable = (TableTransferable) event.getTransferable(); final Table source = tableTransferable.getSourceComponent(); - if (source.getId().equals(SPUIComponetIdProvider.DIST_TABLE_ID)) { + if (source.getId().equals(SPUIComponentIdProvider.DIST_TABLE_ID)) { final Set distributionIdSet = getDropppedDistributionDetails(tableTransferable); if (distributionIdSet != null && !distributionIdSet.isEmpty()) { final DistributionSetIdName distributionSetIdName = distributionIdSet.iterator().next(); @@ -361,7 +361,7 @@ public class TargetTableHeader extends AbstractTableHeader { final TableTransferable transferable = (TableTransferable) dragEvent.getTransferable(); final Table source = transferable.getSourceComponent(); - if (!source.getId().equals(SPUIComponetIdProvider.DIST_TABLE_ID)) { + if (!source.getId().equals(SPUIComponentIdProvider.DIST_TABLE_ID)) { notification.displayValidationError(i18n.get("message.action.not.allowed")); isValid = Boolean.FALSE; } else { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java index 32b6569aa..27a53bfed 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/FilterByStatusLayout.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.ui.management.event.TargetFilterEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIButtonDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -135,19 +135,19 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click * Get - status of FILTER. */ private void getTargetFilterStatuses() { - unknown = SPUIComponentProvider.getButton(SPUIComponetIdProvider.UNKNOWN_STATUS_ICON, + unknown = SPUIComponentProvider.getButton(SPUIComponentIdProvider.UNKNOWN_STATUS_ICON, TargetUpdateStatus.UNKNOWN.toString(), i18n.get("tooltip.status.unknown"), SPUIButtonDefinitions.SP_BUTTON_STATUS_STYLE, false, FontAwesome.SQUARE, SPUIButtonStyleSmall.class); - inSync = SPUIComponentProvider.getButton(SPUIComponetIdProvider.INSYNCH_STATUS_ICON, + inSync = SPUIComponentProvider.getButton(SPUIComponentIdProvider.INSYNCH_STATUS_ICON, TargetUpdateStatus.IN_SYNC.toString(), i18n.get("tooltip.status.insync"), SPUIButtonDefinitions.SP_BUTTON_STATUS_STYLE, false, FontAwesome.SQUARE, SPUIButtonStyleSmall.class); - pending = SPUIComponentProvider.getButton(SPUIComponetIdProvider.PENDING_STATUS_ICON, + pending = SPUIComponentProvider.getButton(SPUIComponentIdProvider.PENDING_STATUS_ICON, TargetUpdateStatus.PENDING.toString(), i18n.get("tooltip.status.pending"), SPUIButtonDefinitions.SP_BUTTON_STATUS_STYLE, false, FontAwesome.SQUARE, SPUIButtonStyleSmall.class); - error = SPUIComponentProvider.getButton(SPUIComponetIdProvider.ERROR_STATUS_ICON, + error = SPUIComponentProvider.getButton(SPUIComponentIdProvider.ERROR_STATUS_ICON, TargetUpdateStatus.ERROR.toString(), i18n.get("tooltip.status.error"), SPUIButtonDefinitions.SP_BUTTON_STATUS_STYLE, false, FontAwesome.SQUARE, SPUIButtonStyleSmall.class); - registered = SPUIComponentProvider.getButton(SPUIComponetIdProvider.REGISTERED_STATUS_ICON, + registered = SPUIComponentProvider.getButton(SPUIComponentIdProvider.REGISTERED_STATUS_ICON, TargetUpdateStatus.REGISTERED.toString(), i18n.get("tooltip.status.registered"), SPUIButtonDefinitions.SP_BUTTON_STATUS_STYLE, false, FontAwesome.SQUARE, SPUIButtonStyleSmall.class); applyStatusBtnStyle(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java index c4393e3aa..7c910fd39 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java @@ -16,7 +16,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -90,7 +90,7 @@ public class MultipleTargetFilter extends Accordion implements SelectedTabChange filterByButtons.addStyleName(SPUIStyleDefinitions.NO_TOP_BORDER); targetFilterQueryButtonsTab.init(customTargetTagFilterButtonClick); if (permChecker.hasCreateTargetPermission() || permChecker.hasUpdateTargetPermission()) { - config = SPUIComponentProvider.getButton(SPUIComponetIdProvider.ADD_TARGET_TAG, "", "", "", true, + config = SPUIComponentProvider.getButton(SPUIComponentIdProvider.ADD_TARGET_TAG, "", "", "", true, FontAwesome.COG, SPUIButtonStyleSmallNoBorder.class); config.addClickListener(event -> settingsIconClicked()); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java index 1e6ad800a..571656c64 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetFilterQueryButtons.java @@ -21,7 +21,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUITagButtonStyle; import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; @@ -88,7 +88,7 @@ public class TargetFilterQueryButtons extends Table { } protected String getButtonsTableId() { - return SPUIComponetIdProvider.CUSTOM_TARGET_TAG_TABLE_ID; + return SPUIComponentIdProvider.CUSTOM_TARGET_TAG_TABLE_ID; } private void setStyle() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java index 48447f112..33ed63b45 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.management.tag.TagIdName; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; @@ -110,7 +110,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { @Override protected String getButtonsTableId() { - return SPUIComponetIdProvider.TARGET_TAG_TABLE_ID; + return SPUIComponentIdProvider.TARGET_TAG_TABLE_ID; } @Override @@ -153,7 +153,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { if (validate(event) && isNoTagAssigned(event)) { final TableTransferable tbl = (TableTransferable) event.getTransferable(); final Table source = tbl.getSourceComponent(); - if (source.getId().equals(SPUIComponetIdProvider.TARGET_TABLE_ID)) { + if (source.getId().equals(SPUIComponentIdProvider.TARGET_TABLE_ID)) { processTargetDrop(event); } } @@ -253,7 +253,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { } private boolean validateIfSourceisTargetTable(final Table source) { - if (!source.getId().equals(SPUIComponetIdProvider.TARGET_TABLE_ID)) { + if (!source.getId().equals(SPUIComponentIdProvider.TARGET_TABLE_ID)) { notification.displayValidationError(i18n.get(SPUILabelDefinitions.ACTION_NOT_ALLOWED)); return false; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java index 6093843fd..5b851632c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterHeader.java @@ -14,7 +14,7 @@ import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -50,7 +50,7 @@ public class TargetTagFilterHeader extends AbstractFilterHeader { @Override protected String getHideButtonId() { - return SPUIComponetIdProvider.HIDE_TARGET_TAGS; + return SPUIComponentIdProvider.HIDE_TARGET_TAGS; } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java index 8699f8a87..1caafe307 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java @@ -26,7 +26,7 @@ import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.menu.DashboardEvent.PostViewChangeEvent; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.server.FontAwesome; @@ -148,7 +148,7 @@ public final class DashboardMenu extends CustomComponent { final String linkStyle = "v-link"; if (!uiProperties.getLinks().getDocumentation().getRoot().isEmpty()) { - final Link docuLink = SPUIComponentProvider.getLink(SPUIComponetIdProvider.LINK_DOCUMENTATION, + final Link docuLink = SPUIComponentProvider.getLink(SPUIComponentIdProvider.LINK_DOCUMENTATION, i18n.get("link.documentation.name"), uiProperties.getLinks().getDocumentation().getRoot(), FontAwesome.QUESTION_CIRCLE, "_blank", linkStyle, true); docuLink.setDescription(i18n.get("link.documentation.name")); @@ -158,7 +158,7 @@ public final class DashboardMenu extends CustomComponent { } if (!uiProperties.getLinks().getUserManagement().isEmpty()) { - final Link userManagementLink = SPUIComponentProvider.getLink(SPUIComponetIdProvider.LINK_USERMANAGEMENT, + final Link userManagementLink = SPUIComponentProvider.getLink(SPUIComponentIdProvider.LINK_USERMANAGEMENT, i18n.get("link.usermanagement.name"), uiProperties.getLinks().getUserManagement(), FontAwesome.USERS, "_blank", linkStyle, true); userManagementLink.setDescription(i18n.get("link.usermanagement.name")); @@ -168,7 +168,7 @@ public final class DashboardMenu extends CustomComponent { } if (!uiProperties.getLinks().getSupport().isEmpty()) { - final Link supportLink = SPUIComponentProvider.getLink(SPUIComponetIdProvider.LINK_SUPPORT, + final Link supportLink = SPUIComponentProvider.getLink(SPUIComponentIdProvider.LINK_SUPPORT, i18n.get("link.support.name"), uiProperties.getLinks().getSupport(), FontAwesome.ENVELOPE_O, "", linkStyle, true); supportLink.setDescription(i18n.get("link.support.name")); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 7e8d45e1b..8e671f6e6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -36,7 +36,7 @@ import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -305,7 +305,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private TextArea createTargetFilterQuery() { final TextArea filterField = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, null, SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH); - filterField.setId(SPUIComponetIdProvider.ROLLOUT_TARGET_FILTER_QUERY_FIELD); + filterField.setId(SPUIComponentIdProvider.ROLLOUT_TARGET_FILTER_QUERY_FIELD); filterField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); filterField.setVisible(false); filterField.setEnabled(false); @@ -327,7 +327,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { for (final ERRORTHRESOLDOPTIONS option : ERRORTHRESOLDOPTIONS.values()) { errorThresoldOptions.addItem(option.getValue()); } - errorThresoldOptions.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_OPTION_ID); + errorThresoldOptions.setId(SPUIComponentIdProvider.ROLLOUT_ERROR_THRESOLD_OPTION_ID); errorThresoldOptions.addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL); errorThresoldOptions.addStyleName(SPUIStyleDefinitions.ROLLOUT_OPTION_GROUP); errorThresoldOptions.setSizeUndefined(); @@ -352,7 +352,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { targetFilter.setImmediate(true); targetFilter.setPageLength(7); targetFilter.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); - targetFilter.setId(SPUIComponetIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID); + targetFilter.setId(SPUIComponentIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID); targetFilter.setSizeFull(); targetFilter.addValueChangeListener(event -> onTargetFilterChange()); return targetFilter; @@ -395,7 +395,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private Button createDiscardButton() { final Button discardRollloutBtn = SPUIComponentProvider.getButton( - SPUIComponetIdProvider.ROLLOUT_CREATE_UPDATE_DISCARD_ID, "", "", "", true, FontAwesome.TIMES, + SPUIComponentIdProvider.ROLLOUT_CREATE_UPDATE_DISCARD_ID, "", "", "", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); discardRollloutBtn.addClickListener(event -> onDiscard()); return discardRollloutBtn; @@ -403,7 +403,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private Button createSaveButton() { final Button saveRolloutBtn = SPUIComponentProvider.getButton( - SPUIComponetIdProvider.ROLLOUT_CREATE_UPDATE_SAVE_ID, "", "", "", true, FontAwesome.SAVE, + SPUIComponentIdProvider.ROLLOUT_CREATE_UPDATE_SAVE_ID, "", "", "", true, FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); saveRolloutBtn.addClickListener(event -> onRolloutSave()); saveRolloutBtn.setImmediate(true); @@ -588,7 +588,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private TextArea createDescription() { final TextArea descriptionField = SPUIComponentProvider.getTextArea("text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - descriptionField.setId(SPUIComponetIdProvider.ROLLOUT_DESCRIPTION_ID); + descriptionField.setId(SPUIComponentIdProvider.ROLLOUT_DESCRIPTION_ID); descriptionField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); descriptionField.setSizeFull(); return descriptionField; @@ -598,7 +598,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { final TextField errorField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.error.threshold"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); errorField.addValidator(new ThresoldFieldValidator()); - errorField.setId(SPUIComponetIdProvider.ROLLOUT_ERROR_THRESOLD_ID); + errorField.setId(SPUIComponentIdProvider.ROLLOUT_ERROR_THRESOLD_ID); errorField.setMaxLength(7); errorField.setSizeFull(); return errorField; @@ -607,7 +607,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private TextField createTriggerThresold() { final TextField thresholdField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.tigger.thresold"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - thresholdField.setId(SPUIComponetIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); + thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); thresholdField.addValidator(new ThresoldFieldValidator()); thresholdField.setSizeFull(); thresholdField.setMaxLength(3); @@ -617,7 +617,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private TextField createNoOfGroupsField() { final TextField noOfGroupsField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.number.of.groups"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - noOfGroupsField.setId(SPUIComponetIdProvider.ROLLOUT_NO_OF_GROUPS_ID); + noOfGroupsField.setId(SPUIComponentIdProvider.ROLLOUT_NO_OF_GROUPS_ID); noOfGroupsField.addValidator(new GroupNumberValidator()); noOfGroupsField.setSizeFull(); noOfGroupsField.setMaxLength(3); @@ -640,7 +640,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { dsSet.setImmediate(true); dsSet.setPageLength(7); dsSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); - dsSet.setId(SPUIComponetIdProvider.ROLLOUT_DS_ID); + dsSet.setId(SPUIComponentIdProvider.ROLLOUT_DS_ID); dsSet.setSizeFull(); return dsSet; } @@ -662,7 +662,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { private TextField createRolloutNameField() { final TextField rolloutNameField = SPUIComponentProvider.getTextField("", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); - rolloutNameField.setId(SPUIComponetIdProvider.ROLLOUT_NAME_FIELD_ID); + rolloutNameField.setId(SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID); rolloutNameField.setSizeFull(); return rolloutNameField; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 7f3877a9a..20fc14431 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -38,7 +38,7 @@ import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -251,7 +251,7 @@ public class RolloutListGrid extends AbstractGrid { @Override protected String getGridId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; + return SPUIComponentIdProvider.ROLLOUT_LIST_GRID_ID; } @Override @@ -617,7 +617,7 @@ public class RolloutListGrid extends AbstractGrid { final StatusFontIcon statusFontIcon = statusIconMap.get(value); final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + SPUIComponentIdProvider.ROLLOUT_STATUS_LABEL_ID); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index b3043eb4a..1a3d2d7a5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.ui.common.grid.AbstractGridHeader; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -70,12 +70,12 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected String getSearchBoxId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_SEARCH_BOX_ID; + return SPUIComponentIdProvider.ROLLOUT_LIST_SEARCH_BOX_ID; } @Override protected String getSearchRestIconId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_SEARCH_RESET_ICON_ID; + return SPUIComponentIdProvider.ROLLOUT_LIST_SEARCH_RESET_ICON_ID; } @Override @@ -86,7 +86,7 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected String getAddIconId() { - return SPUIComponetIdProvider.ROLLOUT_ADD_ICON_ID; + return SPUIComponentIdProvider.ROLLOUT_ADD_ICON_ID; } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index f09b02cfc..3706e685a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java @@ -31,7 +31,7 @@ import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -207,7 +207,7 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override protected String getGridId() { - return SPUIComponetIdProvider.ROLLOUT_GROUP_LIST_GRID_ID; + return SPUIComponentIdProvider.ROLLOUT_GROUP_LIST_GRID_ID; } @Override @@ -381,7 +381,7 @@ public class RolloutGroupListGrid extends AbstractGrid { final StatusFontIcon statusFontIcon = statusIconMap.get(value); final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + SPUIComponentIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java index e85d96d7a..9e4d18143 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java @@ -17,7 +17,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -124,7 +124,7 @@ public class RolloutGroupsListHeader extends AbstractGridHeader { @Override protected String getCloseButtonId() { - return SPUIComponetIdProvider.ROLLOUT_GROUP_CLOSE; + return SPUIComponentIdProvider.ROLLOUT_GROUP_CLOSE; } @Override @@ -150,7 +150,7 @@ public class RolloutGroupsListHeader extends AbstractGridHeader { @Override protected HorizontalLayout getHeaderCaptionLayout() { headerCaption = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_WIDGET_CAPTION); - headerCaption.setId(SPUIComponetIdProvider.ROLLOUT_GROUP_HEADER_CAPTION); + headerCaption.setId(SPUIComponentIdProvider.ROLLOUT_GROUP_HEADER_CAPTION); final Button rolloutsListViewLink = SPUIComponentProvider.getButton(null, "", "", null, false, null, SPUIButtonStyleSmallNoBorder.class); rolloutsListViewLink.setStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link rollout-caption-links"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java index 8631eb8c7..c791a0eb2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -85,7 +85,7 @@ public class RolloutGroupTargetsCountLabelMessage extends Label { /* Create label for Targets count message displaying below the table */ addStyleName(SPUILabelDefinitions.SP_LABEL_MESSAGE_STYLE); setContentMode(ContentMode.HTML); - setId(SPUIComponetIdProvider.COUNT_LABEL); + setId(SPUIComponentIdProvider.COUNT_LABEL); } private void displayRolloutGroupTargetMessage() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java index 2c1a701a1..e176beb7e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java @@ -23,7 +23,7 @@ import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -131,7 +131,7 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { @Override protected String getGridId() { - return SPUIComponetIdProvider.ROLLOUT_GROUP_TARGETS_LIST_GRID_ID; + return SPUIComponentIdProvider.ROLLOUT_GROUP_TARGETS_LIST_GRID_ID; } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java index a60b6c9e6..c22bed8dd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -135,7 +135,7 @@ public class RolloutGroupTargetsListHeader extends AbstractGridHeader { @Override protected String getCloseButtonId() { - return SPUIComponetIdProvider.ROLLOUT_TARGET_VIEW_CLOSE_BUTTON_ID; + return SPUIComponentIdProvider.ROLLOUT_TARGET_VIEW_CLOSE_BUTTON_ID; } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java index 0162f6ed8..e4b131608 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java @@ -16,7 +16,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -92,7 +92,7 @@ public class DefaultDistributionSetTypeLayout extends BaseConfigurationView impl .findDistributionSetTypesAll(pageReq); combobox = SPUIComponentProvider.getComboBox("", "330", null, null, false, "", "label.combobox.tag"); - combobox.setId(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_DEFAULTDIS_COMBOBOX); + combobox.setId(SPUIComponentIdProvider.SYSTEM_CONFIGURATION_DEFAULTDIS_COMBOBOX); combobox.setNullSelectionAllowed(false); for (final DistributionSetType distributionSetType : distributionSetTypeCollection) { combobox.addItem(distributionSetType.getId()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java index d021254bc..4d9e3ee2f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.tenantconfiguration.ConfigurationItem.ConfigurationItemChangeListener; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; @@ -105,14 +105,14 @@ public class TenantConfigurationDashboardView extends CustomComponent implements final HorizontalLayout hlayout = new HorizontalLayout(); hlayout.setSpacing(true); - saveConfigurationBtn = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_SAVE, "", "", + saveConfigurationBtn = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SYSTEM_CONFIGURATION_SAVE, "", "", "", true, FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); saveConfigurationBtn.setEnabled(false); saveConfigurationBtn.setDescription(i18n.get("configuration.savebutton.tooltip")); saveConfigurationBtn.addClickListener(event -> saveConfiguration()); hlayout.addComponent(saveConfigurationBtn); - undoConfigurationBtn = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_CANCEL, "", + undoConfigurationBtn = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SYSTEM_CONFIGURATION_CANCEL, "", "", "", true, FontAwesome.UNDO, SPUIButtonStyleSmallNoBorder.class); undoConfigurationBtn.setEnabled(false); undoConfigurationBtn.setDescription(i18n.get("configuration.cancellbutton.tooltip")); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java similarity index 99% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index fa1b6759d..80d40104a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -16,7 +16,7 @@ package org.eclipse.hawkbit.ui.utils; * * */ -public final class SPUIComponetIdProvider { +public final class SPUIComponentIdProvider { /** * ID-Target. */ @@ -891,7 +891,7 @@ public final class SPUIComponetIdProvider { /** * /* Private Constructor. */ - private SPUIComponetIdProvider() { + private SPUIComponentIdProvider() { } } From d3f7b9de9c5bb4bcbb66d2f0bdef5bd3d8de4318 Mon Sep 17 00:00:00 2001 From: venu1278 Date: Mon, 30 May 2016 17:57:40 +0530 Subject: [PATCH 153/371] Displaying Metadata details of DistributionSet & SoftwareModule Signed-off-by: venu1278 --- .../smtable/SoftwareModuleDetails.java | 12 +- .../AbstractTableDetailsLayout.java | 27 +++- .../DistributionSetMetadatadetailslayout.java | 148 +++++++++++++++++ .../SoftwareModuleMetadatadetailslayout.java | 151 ++++++++++++++++++ .../dstable/DistributionSetDetails.java | 34 +++- .../smtable/SwModuleDetails.java | 12 +- .../dstable/DistributionDetails.java | 22 +++ .../ui/utils/SPUIComponetIdProvider.java | 10 ++ .../src/main/resources/messages.properties | 2 + .../src/main/resources/messages_de.properties | 2 + .../src/main/resources/messages_en.properties | 2 + 11 files changed, 412 insertions(+), 10 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java index 9d535f7f5..f76c0692c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java @@ -12,6 +12,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; +import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleMetadatadetailslayout; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -44,7 +45,7 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta @Autowired private ArtifactUploadState artifactUploadState; - + @Override protected String getEditButtonId() { return SPUIComponetIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON; @@ -55,8 +56,9 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta detailsTab.addTab(createDetailsLayout(), getI18n().get("caption.tab.details"), null); detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null); detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); + detailsTab.addTab(createMetadataLayout(), getI18n().get("caption.metadata.tab"), null); } - + @Override protected void onEdit(final ClickEvent event) { final Window addSoftwareModule = softwareModuleAddUpdateWindow @@ -81,6 +83,8 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta updateSoftwareModuleDetailsLayout(HawkbitCommonUtil.SP_STRING_EMPTY, HawkbitCommonUtil.SP_STRING_EMPTY, maxAssign); } + + populateMetadataDetails(); } private void updateSoftwareModuleDetailsLayout(final String type, final String vendor, final String maxAssign) { @@ -141,4 +145,8 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta protected String getDetailsHeaderCaptionId() { return SPUIComponetIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } + + private void populateMetadataDetails(){ + swmMetadataTable.populateSMMetadata(getSelectedBaseEntity()); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java index 33fcf5af9..d7d9f131f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java @@ -72,8 +72,12 @@ public abstract class AbstractTableDetailsLayout extends private VerticalLayout logLayout; private VerticalLayout attributesLayout; - - /** + + private VerticalLayout metadataLayout; + + protected SoftwareModuleMetadatadetailslayout swmMetadataTable; + + /** * Initialize components. */ @PostConstruct @@ -145,8 +149,10 @@ public abstract class AbstractTableDetailsLayout extends detailsTab.setHeight(90, Unit.PERCENTAGE); detailsTab.addStyleName(SPUIStyleDefinitions.DETAILS_LAYOUT_STYLE); detailsTab.setId(getTabSheetId()); + swmMetadataTable = new SoftwareModuleMetadatadetailslayout(); + swmMetadataTable.init(getI18n(), getPermissionChecker()); addTabs(detailsTab); - } + } private void buildLayout() { final HorizontalLayout nameEditLayout = new HorizontalLayout(); @@ -209,8 +215,9 @@ public abstract class AbstractTableDetailsLayout extends populateLog(); populateDescription(); populateDetailsWidget(); + } - + protected void populateLog() { logLayout.removeAllComponents(); @@ -281,7 +288,15 @@ public abstract class AbstractTableDetailsLayout extends descriptionLayout = getTabLayout(); return descriptionLayout; } - + + protected VerticalLayout createMetadataLayout() { + metadataLayout = getTabLayout(); + metadataLayout.setSizeFull(); + metadataLayout.addComponent(swmMetadataTable); + return metadataLayout; + } + + /** * Default caption of header to be displayed when no data row selected in * table. @@ -317,7 +332,7 @@ public abstract class AbstractTableDetailsLayout extends public VerticalLayout getDetailsLayout() { return detailsLayout; } - + private void populateDescription() { if (selectedBaseEntity != null) { updateDescriptionLayout(i18n.get("label.description"), selectedBaseEntity.getDescription()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java new file mode 100644 index 000000000..f96349180 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java @@ -0,0 +1,148 @@ +package org.eclipse.hawkbit.ui.common.detailslayout; + +import java.util.ArrayList; +import java.util.List; +import org.eclipse.hawkbit.repository.SpPermissionChecker; + +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; +import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; +import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; +import org.eclipse.hawkbit.ui.utils.I18N; +import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.vaadin.spring.events.EventBus.SessionEventBus; + +import com.vaadin.data.Item; +import com.vaadin.data.util.IndexedContainer; +import com.vaadin.ui.Button; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; +import com.vaadin.ui.themes.ValoTheme; + +public class DistributionSetMetadatadetailslayout extends Table{ + + private static final long serialVersionUID = 2913758299611837718L; + + private static final Logger LOG = LoggerFactory.getLogger(DistributionSetMetadatadetailslayout.class); + + private static final String METADATA_KEY = "Key"; + + private static final String VIEW ="view"; + + private SpPermissionChecker permissionChecker; + + private I18N i18n; + + /** + * Initialize software module table- to be displayed in details layout. + * + * @param i18n + * I18N + * @param isUnassignSoftModAllowed + * boolean flag to check for unassign functionality allowed for + * the view. + * @param distributionSetManagement + * DistributionSetManagement + * @param permissionChecker + * SpPermissionChecker + * @param eventBus + * SessionEventBus + * @param manageDistUIState + * ManageDistUIState + */ + public void init(final I18N i18n, final SpPermissionChecker permissionChecker) { + this.i18n = i18n; + this.permissionChecker = permissionChecker; + createDSMetadataTable(); + addCustomGeneratedColumns(); + } + + private void createDSMetadataTable() { + addStyleName(ValoTheme.TABLE_NO_HORIZONTAL_LINES); + addStyleName(ValoTheme.TABLE_NO_STRIPES); + setSelectable(false); + setImmediate(true); + setContainerDataSource(getSwModuleContainer()); + setColumnHeaderMode(ColumnHeaderMode.EXPLICIT); + addDSMetadataTableHeader(); + setSizeFull(); // check if this style is required + addStyleName(SPUIStyleDefinitions.SW_MODULE_TABLE); + } + + private IndexedContainer getSwModuleContainer() { + final IndexedContainer container = new IndexedContainer(); + container.addContainerProperty(METADATA_KEY, String.class, ""); + setColumnExpandRatio(METADATA_KEY, 0.7f); + setColumnAlignment(METADATA_KEY, Align.LEFT); + + if (permissionChecker.hasUpdateDistributionPermission()) { + container.addContainerProperty(VIEW, Label.class, ""); + setColumnExpandRatio(VIEW, 0.2F); + setColumnAlignment(VIEW, Align.RIGHT); + } + return container; + } + + private void addDSMetadataTableHeader() { + setColumnHeader(METADATA_KEY, i18n.get("label.dist.details.key")); + } + + /** + * Populate software module table. + * + * @param distributionSet + */ + public void populateDSMetadata(final DistributionSet distributionSet) { + removeAllItems(); + List dsMetadtaList = new ArrayList<>(); + for(int i=1;i<=5;i++){ + DistributionSetMetadata dsMetadata = new DistributionSetMetadata(); + dsMetadata.setKey("ReleaseNote AAA" +i); + dsMetadata.setValue("ReleaseNote AAA sample data"+i); + dsMetadtaList.add(dsMetadata); + } + if (null != distributionSet) { + /* final List dsMetadataList = distributionSet.getMetadata();*/ + final List dsMetadataList = dsMetadtaList; + if (null != dsMetadataList && !dsMetadataList.isEmpty()) { + dsMetadataList.forEach(dsMetadata -> setDSMetadataProperties(dsMetadata)); + } + } + + } + + private void setDSMetadataProperties(final DistributionSetMetadata dsMetadata){ + final Item item = getContainerDataSource().addItem(dsMetadata.getKey()); + item.getItemProperty(METADATA_KEY).setValue(dsMetadata.getKey()); + if (permissionChecker.hasUpdateDistributionPermission()) { + item.getItemProperty(VIEW).setValue(HawkbitCommonUtil.getFormatedLabel("View")); + } + + } + + protected void addCustomGeneratedColumns() { + addGeneratedColumn(VIEW, + (source, itemId, columnId) -> customMetadataDetailButton((String) itemId)); + } + + private Button customMetadataDetailButton(final String itemId) { + final Item row1 = getItem(itemId); + final String metadataKey = (String) row1.getItemProperty(METADATA_KEY).getValue(); + + final Button viewIcon = SPUIComponentProvider.getButton(getDetailLinkId(metadataKey), VIEW, + "View DistributionSet Metadata details", null, false, null, SPUIButtonStyleSmallNoBorder.class); + viewIcon.setData(metadataKey); + viewIcon.addStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link"); + //viewIcon.addClickListener(event -> onClickOfDetailButton(event)); + return viewIcon; + } + + private static String getDetailLinkId(final String name) { + return new StringBuilder(SPUIComponetIdProvider.DS_METADATA_DETAIL_LINK).append('.').append(name) + .toString(); + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java new file mode 100644 index 000000000..90d0f6763 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java @@ -0,0 +1,151 @@ +package org.eclipse.hawkbit.ui.common.detailslayout; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; +import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; +import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; +import org.eclipse.hawkbit.ui.utils.I18N; +import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.vaadin.data.Item; +import com.vaadin.data.util.IndexedContainer; +import com.vaadin.ui.Button; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; +import com.vaadin.ui.Table.Align; +import com.vaadin.ui.Table.ColumnHeaderMode; +import com.vaadin.ui.themes.ValoTheme; + +public class SoftwareModuleMetadatadetailslayout extends Table { + + private static final long serialVersionUID = 2913758299611838818L; + + private static final Logger LOG = LoggerFactory.getLogger(SoftwareModuleMetadatadetailslayout.class); + + private static final String METADATA_KEY = "Key"; + + private static final String VIEW ="view"; + + private SpPermissionChecker permissionChecker; + + private I18N i18n; + + /** + * Initialize software module table- to be displayed in details layout. + * + * @param i18n + * I18N + * @param isUnassignSoftModAllowed + * boolean flag to check for unassign functionality allowed for + * the view. + * @param distributionSetManagement + * DistributionSetManagement + * @param permissionChecker + * SpPermissionChecker + * @param eventBus + * SessionEventBus + * @param manageDistUIState + * ManageDistUIState + */ + public void init(final I18N i18n, final SpPermissionChecker permissionChecker) { + this.i18n = i18n; + this.permissionChecker = permissionChecker; + createSWMMetadataTable(); + addCustomGeneratedColumns(); + } + + private void createSWMMetadataTable() { + addStyleName(ValoTheme.TABLE_NO_HORIZONTAL_LINES); + addStyleName(ValoTheme.TABLE_NO_STRIPES); + setSelectable(false); + setImmediate(true); + setContainerDataSource(getSwModuleMetadataContainer()); + setColumnHeaderMode(ColumnHeaderMode.EXPLICIT); + addSMMetadataTableHeader(); + setSizeFull(); // check if this style is required + addStyleName(SPUIStyleDefinitions.SW_MODULE_TABLE); + } + + private IndexedContainer getSwModuleMetadataContainer() { + final IndexedContainer container = new IndexedContainer(); + container.addContainerProperty(METADATA_KEY, String.class, ""); + setColumnExpandRatio(METADATA_KEY, 0.7f); + setColumnAlignment(METADATA_KEY, Align.LEFT); + + if (permissionChecker.hasUpdateDistributionPermission()) { + container.addContainerProperty(VIEW, Label.class, ""); + setColumnExpandRatio(VIEW, 0.2F); + setColumnAlignment(VIEW, Align.RIGHT); + } + return container; + } + + private void addSMMetadataTableHeader() { + setColumnHeader(METADATA_KEY, i18n.get("label.dist.details.key")); + } + + /** + * Populate software module table. + * + * @param distributionSet + */ + public void populateSMMetadata(final SoftwareModule swModule) { + removeAllItems(); + List swMetadtaList = new ArrayList<>(); + for(int i=1;i<=5;i++){ + SoftwareModuleMetadata swMetadata = new SoftwareModuleMetadata(); + swMetadata.setKey("ReleaseNote BBB" +i); + swMetadata.setValue("ReleaseNote BBB sample data"+i); + swMetadtaList.add(swMetadata); + } + if (null != swModule) { + /*final List swMetadataList = swModule.getMetadata();*/ + final List swMetadataList = swMetadtaList; + if (null != swMetadataList && !swMetadataList.isEmpty()) { + swMetadataList.forEach(swMetadata -> setSWMetadataProperties(swMetadata)); + } + } + + } + + private void setSWMetadataProperties(final SoftwareModuleMetadata swMetadata){ + final Item item = getContainerDataSource().addItem(swMetadata.getKey()); + item.getItemProperty(METADATA_KEY).setValue(swMetadata.getKey()); + if (permissionChecker.hasUpdateDistributionPermission()) { + item.getItemProperty(VIEW).setValue(HawkbitCommonUtil.getFormatedLabel("View")); + } + + } + + protected void addCustomGeneratedColumns() { + addGeneratedColumn(VIEW, + (source, itemId, columnId) -> customMetadataDetailButton((String) itemId)); + } + + private Button customMetadataDetailButton(final String itemId) { + final Item row1 = getItem(itemId); + final String metadataKey = (String) row1.getItemProperty(METADATA_KEY).getValue(); + + final Button viewIcon = SPUIComponentProvider.getButton(getDetailLinkId(metadataKey), VIEW, + "View Software Module Metadata details", null, false, null, SPUIButtonStyleSmallNoBorder.class); + viewIcon.setData(metadataKey); + viewIcon.addStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link"); + //viewIcon.addClickListener(event -> onClickOfDetailButton(event)); + return viewIcon; + } + + private static String getDetailLinkId(final String name) { + return new StringBuilder(SPUIComponetIdProvider.SW_METADATA_DETAIL_LINK).append('.').append(name) + .toString(); + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java index a1d1ffcfe..df6a1a2d1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java @@ -8,8 +8,10 @@ */ package org.eclipse.hawkbit.ui.distributions.dstable; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -17,11 +19,13 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; +import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleIdName; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; +import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetMetadatadetailslayout; import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable; import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -38,13 +42,18 @@ import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Item; +import com.vaadin.data.util.IndexedContainer; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Table.Align; +import com.vaadin.ui.themes.ValoTheme; +import com.vaadin.ui.Component; import com.vaadin.ui.Label; import com.vaadin.ui.TabSheet; +import com.vaadin.ui.Table; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; @@ -64,6 +73,10 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet private static final String SOFT_MODULE = "softwareModule"; private static final String UNASSIGN_SOFT_MODULE = "unassignSoftModule"; + + private static final String DS_METADA_KEY = "Key"; + + private static final String VIEW ="view"; @Autowired private ManageDistUIState manageDistUIState; @@ -81,8 +94,12 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet private transient DistributionSetManagement distributionSetManagement; private SoftwareModuleDetailsTable softwareModuleTable; + + private DistributionSetMetadatadetailslayout dsMetadataTable; private VerticalLayout tagsLayout; + + private VerticalLayout metadataLayout; Map assignedSWModule = new HashMap<>(); @@ -94,6 +111,8 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet softwareModuleTable = new SoftwareModuleDetailsTable(); softwareModuleTable.init(getI18n(), true, getPermissionChecker(), distributionSetManagement, getEventBus(), manageDistUIState); + dsMetadataTable = new DistributionSetMetadatadetailslayout(); + dsMetadataTable.init(getI18n(), getPermissionChecker()); super.init(); } @@ -107,6 +126,14 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet populateDetails(); populateModule(); populateTags(); + populateMetadataDetails(); + } + + protected VerticalLayout createMetadataLayout() { + metadataLayout = getTabLayout(); + metadataLayout.setSizeFull(); + metadataLayout.addComponent(dsMetadataTable); + return metadataLayout; } private void populateModule() { @@ -238,7 +265,11 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet updateDistributionSetDetailsLayout(null, null); } } - + + private void populateMetadataDetails(){ + dsMetadataTable.populateDSMetadata(getSelectedBaseEntity()); + } + private void updateDistributionSetDetailsLayout(final String type, final Boolean isMigrationRequired) { final VerticalLayout detailsTabLayout = getDetailsLayout(); detailsTabLayout.removeAllComponents(); @@ -294,6 +325,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet detailsTab.addTab(createSoftwareModuleTab(), getI18n().get("caption.softwares.distdetail.tab"), null); detailsTab.addTab(createTagsLayout(), getI18n().get("caption.tags.tab"), null); detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); + detailsTab.addTab(createMetadataLayout(), getI18n().get("caption.metadata.tab"), null); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java index 8774c9e08..512ef2190 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java @@ -12,6 +12,8 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; +import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetMetadatadetailslayout; +import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleMetadatadetailslayout; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -44,7 +46,7 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay @Autowired private ManageDistUIState manageDistUIState; - + @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent softwareModuleEvent) { onBaseEntityEvent(softwareModuleEvent); @@ -69,8 +71,11 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay detailsTab.addTab(createDetailsLayout(), getI18n().get("caption.tab.details"), null); detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null); detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); + detailsTab.addTab(createMetadataLayout(), getI18n().get("caption.metadata.tab"), null); } + + @Override protected String getDefaultCaption() { return getI18n().get("upload.swModuleTable.header"); @@ -139,11 +144,16 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay @Override protected void populateDetailsWidget() { populateDetails(); + populateMetadataDetails(); } @Override protected String getDetailsHeaderCaptionId() { return SPUIComponetIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } + + private void populateMetadataDetails(){ + swmMetadataTable.populateSMMetadata(getSelectedBaseEntity()); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java index 81151b076..fd5a67998 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.management.dstable; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; +import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetMetadatadetailslayout; import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable; import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -48,11 +49,19 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail private DistributionTagToken distributionTagToken; private SoftwareModuleDetailsTable softwareModuleTable; + + private VerticalLayout metadataLayout; + + private DistributionSetMetadatadetailslayout dsMetadataTable; @Override protected void init() { softwareModuleTable = new SoftwareModuleDetailsTable(); softwareModuleTable.init(getI18n(), false, getPermissionChecker(), null, null, null); + + dsMetadataTable = new DistributionSetMetadatadetailslayout(); + dsMetadataTable.init(getI18n(), getPermissionChecker()); + super.init(); } @@ -73,6 +82,14 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail detailsTab.addTab(createSoftwareModuleTab(), getI18n().get("caption.softwares.distdetail.tab"), null); detailsTab.addTab(createTagsLayout(), getI18n().get("caption.tags.tab"), null); detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); + detailsTab.addTab(createMetadataLayout(), getI18n().get("caption.metadata.tab"), null); + } + + protected VerticalLayout createMetadataLayout() { + metadataLayout = getTabLayout(); + metadataLayout.setSizeFull(); + metadataLayout.addComponent(dsMetadataTable); + return metadataLayout; } @Override @@ -109,11 +126,16 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail protected String getTabSheetId() { return SPUIComponetIdProvider.DISTRIBUTION_DETAILS_TABSHEET; } + + private void populateMetadataDetails(){ + dsMetadataTable.populateDSMetadata(getSelectedBaseEntity()); + } @Override protected void populateDetailsWidget() { softwareModuleTable.populateModule(getSelectedBaseEntity()); populateDetails(getSelectedBaseEntity()); + populateMetadataDetails(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java index fa1b6759d..c25926445 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java @@ -681,6 +681,16 @@ public final class SPUIComponetIdProvider { * custom filter - update button id. */ public static final String CUSTOM_FILTER_DETAIL_LINK = "custom.filter.detail.link"; + + /** + * DistributionSet - Metadata button id. + */ + public static final String DS_METADATA_DETAIL_LINK = "distributionset.metadata.detail.link"; + + /** + * Software Module - Metadata button id. + */ + public static final String SW_METADATA_DETAIL_LINK = "softwaremodule.metadata.detail.link"; /** * custom filter - save button id. diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 4fdbe7d02..7165a18a6 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -69,6 +69,7 @@ caption.bulk.upload.targets = Bulk Upload caption.softwares.distdetail.tab = Modules caption.tags.tab = Tags caption.logs.tab = Logs +caption.metadata.tab = Metadata caption.attributes.tab = Attributes caption.types.tab = Types caption.save.window = Action Details @@ -90,6 +91,7 @@ caption.force.action.confirmbox = Confirm Force Active Action caption.filter.delete.confirmbox = Confirm Filter Delete Action # Labels prefix with - label +label.dist.details.key = Key label.dist.details.type = Type : label.dist.details.name = Name : label.dist.details.version = Version : diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 3a75ba61f..ba4be0f5b 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -67,6 +67,7 @@ caption.bulk.upload.targets = Bulk Upload caption.softwares.distdetail.tab = Modules caption.tags.tab = Tags caption.logs.tab = Logs +caption.metadata.tab = Metadata caption.attributes.tab = Attributes caption.types.tab = Types caption.save.window = Action Details @@ -89,6 +90,7 @@ caption.filter.custom = Custom Filter caption.filter.delete.confirmbox = Confirm Filter Delete Action # Labels prefix with - label +label.dist.details.key = Key label.dist.details.type = Type : label.dist.details.name = Name : label.dist.details.version = Version : diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index d87ac238b..07b9fd799 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -69,6 +69,7 @@ caption.bulk.upload.targets = Bulk Upload caption.softwares.distdetail.tab = Modules caption.tags.tab = Tags caption.logs.tab = Logs +caption.metadata.tab = Metadata caption.attributes.tab = Attributes caption.types.tab = Types caption.save.window = Action Details @@ -89,6 +90,7 @@ caption.force.action.confirmbox = Confirm Force Active Action caption.filter.delete.confirmbox = Confirm Filter Delete Action # Labels prefix with - label +label.dist.details.key = Key label.dist.details.type = Type : label.dist.details.name = Name : label.dist.details.version = Version : From fc5a22302b985076da9ba532e1ce9d818a611f61 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Mon, 30 May 2016 15:00:11 +0200 Subject: [PATCH 154/371] read credentials from URL path to add to the textfield directly Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/ui/login/LoginView.java | 52 +++++++++++++++++-- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java index a6cc46708..27b7ae2f9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/login/LoginView.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ui.login; import java.net.URI; +import java.util.Map; import javax.annotation.PostConstruct; import javax.servlet.http.Cookie; @@ -25,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.CredentialsExpiredException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.AuthenticationException; +import org.springframework.util.AntPathMatcher; import org.vaadin.spring.security.VaadinSecurity; import com.vaadin.event.ShortcutAction.KeyCode; @@ -56,6 +58,12 @@ import com.vaadin.ui.themes.ValoTheme; @SpringView(name = "") @UIScope public class LoginView extends VerticalLayout implements View { + private static final String TENANT_PATTERN_PLACEHOLDER = "tenant"; + private static final String USER_PATTERN_PLACEHOLDER = "user"; + private static final String LOGIN_TENANT_USER_URL_PATTERN = "**/#/{" + TENANT_PATTERN_PLACEHOLDER + "}/{" + + USER_PATTERN_PLACEHOLDER + "}"; + private static final String LOGIN_USER_URL_PATTERN = "**/#/{" + USER_PATTERN_PLACEHOLDER + "}"; + private static final String LOGIN_TEXTFIELD = "login-textfield"; private static final long serialVersionUID = 1L; private static final Logger LOGGER = LoggerFactory.getLogger(LoginView.class); @@ -75,6 +83,9 @@ public class LoginView extends VerticalLayout implements View { @Autowired private transient MultitenancyIndicator multiTenancyIndicator; + private final transient AntPathMatcher matcher = new AntPathMatcher(); + private boolean useCookie = true; + private TextField username; private TextField tenant; private PasswordField password; @@ -106,17 +117,45 @@ public class LoginView extends VerticalLayout implements View { */ @PostConstruct public void render() { - final URI spURI = Page.getCurrent().getLocation(); - final String lookForDemoFragment = spURI.toString(); - if (lookForDemoFragment.contains("?demo")) { + final String uriPath = spURI.toString(); + if (uriPath.contains("?demo")) { login(uiProperties.getDemo().getTenant(), uiProperties.getDemo().getUser(), uiProperties.getDemo().getPassword(), false); } - final Component loginForm = buildLoginForm(); addComponent(loginForm); setComponentAlignment(loginForm, Alignment.MIDDLE_CENTER); + + readCredentialsFromUriPath(uriPath); + } + + private void readCredentialsFromUriPath(final String uriPath) { + String urlTenant = null; + String urlUser = null; + if (matcher.match(LOGIN_USER_URL_PATTERN, uriPath)) { + urlUser = matcher.extractUriTemplateVariables(LOGIN_USER_URL_PATTERN, uriPath) + .get(USER_PATTERN_PLACEHOLDER); + } else if (matcher.match(LOGIN_TENANT_USER_URL_PATTERN, uriPath)) { + final Map extractUriTemplateVariables = matcher + .extractUriTemplateVariables(LOGIN_TENANT_USER_URL_PATTERN, uriPath); + urlTenant = extractUriTemplateVariables.get(TENANT_PATTERN_PLACEHOLDER); + urlUser = extractUriTemplateVariables.get(USER_PATTERN_PLACEHOLDER); + } + + if (urlUser != null) { + useCookie = false; + filloutUsernameTenantFields(urlTenant, urlUser); + } + } + + private void filloutUsernameTenantFields(final String tenantValue, final String userValue) { + if (tenant != null && tenantValue != null) { + tenant.setValue(tenantValue); + } + if (userValue != null) { + username.setValue(userValue); + } } private Component buildLoginForm() { @@ -281,6 +320,9 @@ public class LoginView extends VerticalLayout implements View { */ @Override public void enter(final ViewChangeEvent event) { + if (!useCookie) { + return; + } final Cookie usernameCookie = getCookieByName(SP_LOGIN_USER); @@ -348,7 +390,7 @@ public class LoginView extends VerticalLayout implements View { vaadinSecurity.login(new UsernamePasswordAuthenticationToken(user, password)); } /* set success login cookies */ - if (setCookies) { + if (setCookies && useCookie) { setCookies(); } From 0b1782e94680bc0a246e2fe534321d4c54136402 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 30 May 2016 17:50:03 +0200 Subject: [PATCH 155/371] add default value for optionGroup; optimize UI Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 11 +++----- .../CreateUpdateSoftwareTypeLayout.java | 8 +++++- .../hawkbit/ui/common/CommonDialogWindow.java | 4 +++ .../CreateUpdateDistSetTypeLayout.java | 2 +- .../smtype/DistSMTypeFilterHeader.java | 7 +++-- .../ui/layouts/CreateUpdateTagLayout.java | 25 +++++++++++------- .../ui/layouts/CreateUpdateTypeLayout.java | 26 +++++++++++++++---- .../DistributionAddUpdateWindowLayout.java | 10 +++---- ...eateUpdateDistributionTagLayoutWindow.java | 13 ++++++++++ .../CreateUpdateTargetTagLayoutWindow.java | 13 ++++++++++ .../rollout/AddUpdateRolloutWindowLayout.java | 2 +- 11 files changed, 85 insertions(+), 36 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 70bbd68c8..f766af2d4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -38,7 +38,6 @@ import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; -import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; @@ -197,10 +196,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se * The main layout of the window contains mandatory info, textboxes * (controller Id, name & description) and action buttons layout */ - final VerticalLayout mainLayout = new VerticalLayout(); - mainLayout.setSizeUndefined(); - mainLayout.setSpacing(Boolean.TRUE); - mainLayout.addStyleName("lay-color"); + addStyleName("lay-color"); final FormLayout formLayout = new FormLayout(); formLayout.addComponent(typeComboBox); @@ -210,13 +206,12 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se formLayout.addComponent(vendorTextField); formLayout.addComponent(descTextArea); - mainLayout.addComponents(formLayout); - setCompositionRoot(mainLayout); + setCompositionRoot(formLayout); /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(), event -> closeThisWindow(), null); - window.removeStyleName("actionButtonsMargin"); + window.getButtonsLayout().removeStyleName("actionButtonsMargin"); nameTextField.focus(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index c122688d8..d23329f37 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -61,6 +61,12 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout private Label multiAssign; private OptionGroup assignOptiongroup; + @Override + protected void addListeners() { + super.addListeners(); + optiongroup.addValueChangeListener(event -> createOptionValueChanged(event)); + } + @Override protected void createRequiredComponents() { @@ -119,7 +125,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout super.createOptionValueChanged(event); - if ("Update Type".equals(event.getProperty().getValue())) { + if (updateTypeStr.equals(event.getProperty().getValue())) { assignOptiongroup.setEnabled(false); } else { assignOptiongroup.setEnabled(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index e15fe2ea4..b94869521 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -131,4 +131,8 @@ public class CommonDialogWindow extends Window { cancelButton.setEnabled(enabled); } + public HorizontalLayout getButtonsLayout() { + return buttonsLayout; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index ceb3f979c..266339050 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -486,7 +486,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout super.createOptionValueChanged(event); - if ("Update Type".equals(event.getProperty().getValue())) { + if (updateTypeStr.equals(event.getProperty().getValue())) { selectedTable.getContainerDataSource().removeAllItems(); getSourceTableData(); distTypeSelectLayout.setEnabled(false); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java index e328b45a4..9f757a7cb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/DistSMTypeFilterHeader.java @@ -66,10 +66,9 @@ public class DistSMTypeFilterHeader extends AbstractFilterHeader { @Override protected void settingsIconClicked(final ClickEvent event) { - final Window addUpdateWindow = createUpdateSWTypeLayout.getWindow(); - UI.getCurrent().addWindow(addUpdateWindow); - addUpdateWindow.setVisible(Boolean.TRUE); - + final Window window = createUpdateSWTypeLayout.getWindow(); + UI.getCurrent().addWindow(window); + window.setVisible(Boolean.TRUE); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java index 60d76ee14..efe629eb7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java @@ -221,11 +221,10 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C tagName.focus(); } - private void addListeners() { + protected void addListeners() { colorPickerLayout.getColorSelect().addColorChangeListener(this); colorPickerLayout.getSelPreview().addColorChangeListener(this); tagColorPreviewBtn.addClickListener(event -> previewButtonClicked()); - optiongroup.addValueChangeListener(event -> optionValueChanged(event)); tagNameComboBox.addValueChangeListener(event -> tagNameChosen(event)); slidersValueChangeListeners(); } @@ -302,9 +301,9 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C * @param event * ValueChangeEvent */ - private void optionValueChanged(final ValueChangeEvent event) { + protected void optionValueChanged(final ValueChangeEvent event) { - if ("Update Tag".equals(event.getProperty().getValue())) { + if (updateTagStr.equals(event.getProperty().getValue())) { tagName.clear(); tagDesc.clear(); tagName.setEnabled(false); @@ -344,8 +343,6 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C comboLayout.removeComponent(tagNameComboBox); mainLayout.removeComponent(colorPickerLayout); - optiongroup.select(createTagStr); - // Default green color colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); @@ -456,13 +453,21 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C if (hasCreatePermission) { optiongroup.addItem(createTagStr); - optiongroup.select(createTagStr); } if (hasUpdatePermission) { optiongroup.addItem(updateTagStr); - if (!hasCreatePermission) { - optiongroup.select(updateTagStr); - } + } + + setOptionGroupDefaultValue(hasCreatePermission, hasUpdatePermission); + } + + protected void setOptionGroupDefaultValue(final boolean hasCreatePermission, final boolean hasUpdatePermission) { + + if (hasCreatePermission) { + optiongroup.select(createTagStr); + } + if (hasUpdatePermission && !hasCreatePermission) { + optiongroup.select(updateTagStr); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index f007b64ce..f73718122 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -35,6 +35,12 @@ public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { public static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; + @Override + protected void addListeners() { + super.addListeners(); + optiongroup.addValueChangeListener(event -> createOptionValueChanged(event)); + } + @Override protected void createRequiredComponents() { @@ -107,6 +113,8 @@ public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { super.reset(); typeKey.clear(); restoreComponentStyles(); + setOptionGroupDefaultValue(permChecker.hasCreateDistributionPermission(), + permChecker.hasUpdateDistributionPermission()); } /** @@ -117,7 +125,7 @@ public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { */ protected void createOptionValueChanged(final ValueChangeEvent event) { - if ("Update Type".equals(event.getProperty().getValue())) { + if (updateTypeStr.equals(event.getProperty().getValue())) { tagName.clear(); tagDesc.clear(); typeKey.clear(); @@ -186,13 +194,21 @@ public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { if (hasCreatePermission) { optiongroup.addItem(createTypeStr); - optiongroup.select(createTypeStr); } if (hasUpdatePermission) { optiongroup.addItem(updateTypeStr); - if (!hasCreatePermission) { - optiongroup.select(updateTypeStr); - } + } + setOptionGroupDefaultValue(hasCreatePermission, hasUpdatePermission); + } + + @Override + protected void setOptionGroupDefaultValue(final boolean hasCreatePermission, final boolean hasUpdatePermission) { + + if (hasCreatePermission) { + optiongroup.select(createTypeStr); + } + if (hasUpdatePermission && !hasCreatePermission) { + optiongroup.select(updateTypeStr); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 122411376..2ce9f84f5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -53,12 +53,12 @@ import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; import com.vaadin.ui.Component; +import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; -import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; /** @@ -67,7 +67,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class DistributionAddUpdateWindowLayout extends VerticalLayout { +public class DistributionAddUpdateWindowLayout extends CustomComponent { private static final long serialVersionUID = -5602182034230568435L; @@ -132,8 +132,6 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { * The main layout of the window contains mandatory info, textboxes * (controller Id, name & description) and action buttons layout */ - setSpacing(Boolean.TRUE); - setMargin(Boolean.FALSE); addStyleName("lay-color"); setSizeUndefined(); @@ -145,7 +143,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { formLayout.addComponent(descTextArea); formLayout.addComponent(reqMigStepCheckbox); - addComponents(formLayout); + setCompositionRoot(formLayout); distNameTextField.focus(); } @@ -518,7 +516,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { addDistributionWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), null); - addDistributionWindow.removeStyleName("actionButtonsMargin"); + addDistributionWindow.getButtonsLayout().removeStyleName("actionButtonsMargin"); return addDistributionWindow; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index f3abbd5bb..1c6372033 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -70,6 +70,12 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo distTagNameList.forEach(value -> tagNameComboBox.addItem(value.getName())); } + @Override + protected void addListeners() { + super.addListeners(); + optiongroup.addValueChangeListener(event -> optionValueChanged(event)); + } + /** * Update DistributionTag. */ @@ -164,4 +170,11 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo createOptionGroup(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission()); } + @Override + protected void reset() { + + super.reset(); + setOptionGroupDefaultValue(permChecker.hasCreateDistributionPermission(), + permChecker.hasUpdateDistributionPermission()); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java index 4bffe172f..f3f78377a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java @@ -57,6 +57,12 @@ public class CreateUpdateTargetTagLayoutWindow extends CreateUpdateTagLayout { populateTagNameCombo(); } + @Override + protected void addListeners() { + super.addListeners(); + optiongroup.addValueChangeListener(event -> optionValueChanged(event)); + } + /** * Populate target name combo. */ @@ -132,4 +138,11 @@ public class CreateUpdateTargetTagLayoutWindow extends CreateUpdateTagLayout { createOptionGroup(permChecker.hasCreateTargetPermission(), permChecker.hasUpdateTargetPermission()); } + @Override + protected void reset() { + + super.reset(); + setOptionGroupDefaultValue(permChecker.hasCreateTargetPermission(), permChecker.hasUpdateTargetPermission()); + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 9920fab74..0f5b00f1a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -196,7 +196,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { setRows(9); setColumns(3); - addComponent(mandatoryLabel, 0, 0, 2, 0); + addComponent(mandatoryLabel, 1, 0, 2, 0); addComponent(getLabel("textfield.name"), 0, 1); addComponent(rolloutName, 1, 1); addComponent(getLabel("prompt.distribution.set"), 0, 2); From b4e1839b3dd662cf25697da74c7537e9684a24f3 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 30 May 2016 18:08:52 +0200 Subject: [PATCH 156/371] add license text Signed-off-by: Melanie Retter --- .../org/eclipse/hawkbit/ui/common/CommonDialogWindow.java | 8 ++++++++ .../hawkbit/ui/layouts/CreateUpdateTypeLayout.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index b94869521..a8bad0a08 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.common; import org.apache.commons.lang3.StringUtils; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index f73718122..ad2758a5f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.layouts; import org.eclipse.hawkbit.repository.model.DistributionSetType; From 2dfda701b53cc7c6efca6bfd649e6d2d0a49ae8c Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 30 May 2016 18:08:52 +0200 Subject: [PATCH 157/371] add license text Signed-off-by: Melanie Retter --- .../ui/colorPicker/ColorPickerConstants.java | 8 +++ .../ui/colorPicker/ColorPickerHelper.java | 8 +++ .../ui/colorPicker/ColorPickerLayout.java | 8 +++ .../hawkbit/ui/common/CommonDialogWindow.java | 8 +++ .../DistributionSetMetadatadetailslayout.java | 64 +++++++++++-------- .../SoftwareModuleMetadatadetailslayout.java | 61 ++++++++++-------- .../ui/layouts/CreateUpdateTypeLayout.java | 8 +++ 7 files changed, 109 insertions(+), 56 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java index 2c333a9f2..ddb4eb70c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.colorPicker; import com.vaadin.shared.ui.colorpicker.Color; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java index 90b39e5ca..815bb97b2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.colorPicker; import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java index 51c09055a..dba5ac8df 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.colorPicker; import java.util.HashSet; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index b94869521..a8bad0a08 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.common; import org.apache.commons.lang3.StringUtils; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java index f96349180..9f01c975f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java @@ -1,9 +1,17 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.common.detailslayout; import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -14,7 +22,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.vaadin.spring.events.EventBus.SessionEventBus; import com.vaadin.data.Item; import com.vaadin.data.util.IndexedContainer; @@ -23,21 +30,21 @@ import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.themes.ValoTheme; -public class DistributionSetMetadatadetailslayout extends Table{ - +public class DistributionSetMetadatadetailslayout extends Table { + private static final long serialVersionUID = 2913758299611837718L; private static final Logger LOG = LoggerFactory.getLogger(DistributionSetMetadatadetailslayout.class); private static final String METADATA_KEY = "Key"; - - private static final String VIEW ="view"; + + private static final String VIEW = "view"; private SpPermissionChecker permissionChecker; private I18N i18n; - /** + /** * Initialize software module table- to be displayed in details layout. * * @param i18n @@ -78,7 +85,7 @@ public class DistributionSetMetadatadetailslayout extends Table{ container.addContainerProperty(METADATA_KEY, String.class, ""); setColumnExpandRatio(METADATA_KEY, 0.7f); setColumnAlignment(METADATA_KEY, Align.LEFT); - + if (permissionChecker.hasUpdateDistributionPermission()) { container.addContainerProperty(VIEW, Label.class, ""); setColumnExpandRatio(VIEW, 0.2F); @@ -98,35 +105,37 @@ public class DistributionSetMetadatadetailslayout extends Table{ */ public void populateDSMetadata(final DistributionSet distributionSet) { removeAllItems(); - List dsMetadtaList = new ArrayList<>(); - for(int i=1;i<=5;i++){ - DistributionSetMetadata dsMetadata = new DistributionSetMetadata(); - dsMetadata.setKey("ReleaseNote AAA" +i); - dsMetadata.setValue("ReleaseNote AAA sample data"+i); + final List dsMetadtaList = new ArrayList<>(); + for (int i = 1; i <= 5; i++) { + final DistributionSetMetadata dsMetadata = new DistributionSetMetadata(); + dsMetadata.setKey("ReleaseNote AAA" + i); + dsMetadata.setValue("ReleaseNote AAA sample data" + i); dsMetadtaList.add(dsMetadata); - } - if (null != distributionSet) { - /* final List dsMetadataList = distributionSet.getMetadata();*/ + } + if (null != distributionSet) { + /* + * final List dsMetadataList = + * distributionSet.getMetadata(); + */ final List dsMetadataList = dsMetadtaList; if (null != dsMetadataList && !dsMetadataList.isEmpty()) { dsMetadataList.forEach(dsMetadata -> setDSMetadataProperties(dsMetadata)); } - } + } } - - private void setDSMetadataProperties(final DistributionSetMetadata dsMetadata){ + + private void setDSMetadataProperties(final DistributionSetMetadata dsMetadata) { final Item item = getContainerDataSource().addItem(dsMetadata.getKey()); item.getItemProperty(METADATA_KEY).setValue(dsMetadata.getKey()); if (permissionChecker.hasUpdateDistributionPermission()) { item.getItemProperty(VIEW).setValue(HawkbitCommonUtil.getFormatedLabel("View")); } - + } - - protected void addCustomGeneratedColumns() { - addGeneratedColumn(VIEW, - (source, itemId, columnId) -> customMetadataDetailButton((String) itemId)); + + protected void addCustomGeneratedColumns() { + addGeneratedColumn(VIEW, (source, itemId, columnId) -> customMetadataDetailButton((String) itemId)); } private Button customMetadataDetailButton(final String itemId) { @@ -137,12 +146,11 @@ public class DistributionSetMetadatadetailslayout extends Table{ "View DistributionSet Metadata details", null, false, null, SPUIButtonStyleSmallNoBorder.class); viewIcon.setData(metadataKey); viewIcon.addStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link"); - //viewIcon.addClickListener(event -> onClickOfDetailButton(event)); + // viewIcon.addClickListener(event -> onClickOfDetailButton(event)); return viewIcon; } - + private static String getDetailLinkId(final String name) { - return new StringBuilder(SPUIComponetIdProvider.DS_METADATA_DETAIL_LINK).append('.').append(name) - .toString(); + return new StringBuilder(SPUIComponetIdProvider.DS_METADATA_DETAIL_LINK).append('.').append(name).toString(); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java index 90d0f6763..83e1df6cd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java @@ -1,11 +1,17 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.common.detailslayout; import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -22,8 +28,6 @@ import com.vaadin.data.util.IndexedContainer; import com.vaadin.ui.Button; import com.vaadin.ui.Label; import com.vaadin.ui.Table; -import com.vaadin.ui.Table.Align; -import com.vaadin.ui.Table.ColumnHeaderMode; import com.vaadin.ui.themes.ValoTheme; public class SoftwareModuleMetadatadetailslayout extends Table { @@ -33,14 +37,14 @@ public class SoftwareModuleMetadatadetailslayout extends Table { private static final Logger LOG = LoggerFactory.getLogger(SoftwareModuleMetadatadetailslayout.class); private static final String METADATA_KEY = "Key"; - - private static final String VIEW ="view"; + + private static final String VIEW = "view"; private SpPermissionChecker permissionChecker; private I18N i18n; - /** + /** * Initialize software module table- to be displayed in details layout. * * @param i18n @@ -81,7 +85,7 @@ public class SoftwareModuleMetadatadetailslayout extends Table { container.addContainerProperty(METADATA_KEY, String.class, ""); setColumnExpandRatio(METADATA_KEY, 0.7f); setColumnAlignment(METADATA_KEY, Align.LEFT); - + if (permissionChecker.hasUpdateDistributionPermission()) { container.addContainerProperty(VIEW, Label.class, ""); setColumnExpandRatio(VIEW, 0.2F); @@ -101,35 +105,37 @@ public class SoftwareModuleMetadatadetailslayout extends Table { */ public void populateSMMetadata(final SoftwareModule swModule) { removeAllItems(); - List swMetadtaList = new ArrayList<>(); - for(int i=1;i<=5;i++){ - SoftwareModuleMetadata swMetadata = new SoftwareModuleMetadata(); - swMetadata.setKey("ReleaseNote BBB" +i); - swMetadata.setValue("ReleaseNote BBB sample data"+i); + final List swMetadtaList = new ArrayList<>(); + for (int i = 1; i <= 5; i++) { + final SoftwareModuleMetadata swMetadata = new SoftwareModuleMetadata(); + swMetadata.setKey("ReleaseNote BBB" + i); + swMetadata.setValue("ReleaseNote BBB sample data" + i); swMetadtaList.add(swMetadata); - } - if (null != swModule) { - /*final List swMetadataList = swModule.getMetadata();*/ + } + if (null != swModule) { + /* + * final List swMetadataList = + * swModule.getMetadata(); + */ final List swMetadataList = swMetadtaList; if (null != swMetadataList && !swMetadataList.isEmpty()) { swMetadataList.forEach(swMetadata -> setSWMetadataProperties(swMetadata)); } - } + } } - - private void setSWMetadataProperties(final SoftwareModuleMetadata swMetadata){ + + private void setSWMetadataProperties(final SoftwareModuleMetadata swMetadata) { final Item item = getContainerDataSource().addItem(swMetadata.getKey()); item.getItemProperty(METADATA_KEY).setValue(swMetadata.getKey()); if (permissionChecker.hasUpdateDistributionPermission()) { item.getItemProperty(VIEW).setValue(HawkbitCommonUtil.getFormatedLabel("View")); } - + } - - protected void addCustomGeneratedColumns() { - addGeneratedColumn(VIEW, - (source, itemId, columnId) -> customMetadataDetailButton((String) itemId)); + + protected void addCustomGeneratedColumns() { + addGeneratedColumn(VIEW, (source, itemId, columnId) -> customMetadataDetailButton((String) itemId)); } private Button customMetadataDetailButton(final String itemId) { @@ -140,12 +146,11 @@ public class SoftwareModuleMetadatadetailslayout extends Table { "View Software Module Metadata details", null, false, null, SPUIButtonStyleSmallNoBorder.class); viewIcon.setData(metadataKey); viewIcon.addStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link"); - //viewIcon.addClickListener(event -> onClickOfDetailButton(event)); + // viewIcon.addClickListener(event -> onClickOfDetailButton(event)); return viewIcon; } - + private static String getDetailLinkId(final String name) { - return new StringBuilder(SPUIComponetIdProvider.SW_METADATA_DETAIL_LINK).append('.').append(name) - .toString(); + return new StringBuilder(SPUIComponetIdProvider.SW_METADATA_DETAIL_LINK).append('.').append(name).toString(); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index f73718122..ad2758a5f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.layouts; import org.eclipse.hawkbit.repository.model.DistributionSetType; From 2d90900f3765519324030da287ca79e9e5a1a769 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 08:48:06 +0200 Subject: [PATCH 158/371] fix javadoc Signed-off-by: Michael Hirsch --- .../main/java/org/eclipse/hawkbit/repository/Constants.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java index 114997fca..385d59a63 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.Target; /** * Repository constants. @@ -19,8 +18,8 @@ public final class Constants { /** * Prefix that the server puts in front of - * {@link ActionStatus#getMessages()} is the comments was generated by it - * and not be thy {@link Target}. + * {@link ActionStatus#getMessages()} if the message is generated by the + * server. */ public static final String SERVER_MESSAGE_PREFIX = "Update Server: "; From 7a98c584075603f51ec79cba37405dc30263dbb3 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 31 May 2016 08:51:49 +0200 Subject: [PATCH 159/371] refactored test data generation. Refactored entity factor methods. Signed-off-by: Kai Zimmermann --- .../java/org/eclipse/hawkbit/app/Start.java | 3 - .../java/org/eclipse/hawkbit/app/Start.java | 3 - .../JpaRepositoryAutoConfiguration.java | 25 + hawkbit-ddi-resource/pom.xml | 6 + .../resource/DdiArtifactStoreController.java | 13 +- .../ddi/rest/resource/DdiRootController.java | 25 +- .../resource/DdiArtifactDownloadTest.java | 53 +- .../rest/resource/DdiCancelActionTest.java | 70 +- .../ddi/rest/resource/DdiConfigDataTest.java | 12 +- .../rest/resource/DdiDeploymentBaseTest.java | 186 ++--- .../rest/resource/DdiRootControllerTest.java | 30 +- hawkbit-dmf-amqp/pom.xml | 6 + .../amqp/AmqpMessageHandlerService.java | 10 +- .../hawkbit/AmqpTestConfiguration.java | 11 + .../AmqpMessageDispatcherServiceTest.java | 13 +- .../amqp/AmqpMessageHandlerServiceTest.java | 7 +- .../PropertyBasedArtifactUrlHandlerTest.java | 9 +- hawkbit-mgmt-resource/pom.xml | 6 + .../resource/MgmtDistributionSetMapper.java | 17 +- .../resource/MgmtDistributionSetResource.java | 13 +- .../MgmtDistributionSetTagResource.java | 6 +- .../MgmtDistributionSetTypeMapper.java | 10 +- .../MgmtDistributionSetTypeResource.java | 9 +- .../mgmt/rest/resource/MgmtRolloutMapper.java | 6 +- .../rest/resource/MgmtRolloutResource.java | 6 +- .../resource/MgmtSoftwareModuleMapper.java | 19 +- .../resource/MgmtSoftwareModuleResource.java | 12 +- .../MgmtSoftwareModuleTypeMapper.java | 10 +- .../MgmtSoftwareModuleTypeResource.java | 6 +- .../mgmt/rest/resource/MgmtTagMapper.java | 10 +- .../mgmt/rest/resource/MgmtTargetMapper.java | 10 +- .../rest/resource/MgmtTargetResource.java | 6 +- .../rest/resource/MgmtTargetTagResource.java | 6 +- .../MgmtDistributionSetResourceTest.java | 147 ++-- .../MgmtDistributionSetTypeResourceTest.java | 84 +- .../resource/MgmtDownloadResourceTest.java | 7 +- .../resource/MgmtRolloutResourceTest.java | 102 +-- .../MgmtSoftwareModuleResourceTest.java | 118 ++- .../MgmtSoftwareModuleTypeResourceTest.java | 87 +-- .../rest/resource/MgmtTargetResourceTest.java | 70 +- ...MRessourceMisingMongoDbConnectionTest.java | 14 +- .../src/test/resources/log4j2.xml | 26 - .../src/test/resources/logback.xml | 35 + .../repository/ArtifactManagement.java | 6 + .../eclipse/hawkbit/repository/Constants.java | 7 + .../repository/ControllerManagement.java | 59 -- .../repository/DeploymentManagement.java | 16 +- .../repository/DistributionSetManagement.java | 23 - .../hawkbit/repository/EntityFactory.java | 333 ++++++++ .../repository/OffsetBasedPageRequest.java | 27 + .../repository/RolloutGroupManagement.java | 7 - .../hawkbit/repository/RolloutManagement.java | 7 - .../repository/SoftwareManagement.java | 46 -- .../hawkbit/repository/SystemManagement.java | 10 +- .../hawkbit/repository/TagManagement.java | 58 -- .../TargetFilterQueryManagement.java | 7 - .../hawkbit/repository/TargetManagement.java | 10 - .../repository/TenantStatsManagement.java | 1 + .../hawkbit-repository-core/pom.xml | 29 + .../model/helper/SystemManagementHolder.java | 0 .../hawkbit-repository-jpa/pom.xml | 37 +- .../src/fbExcludeFilter.xml | 15 - .../eclipse/hawkbit/EnableJpaRepository.java | 33 + .../RepositoryApplicationConfiguration.java | 3 +- .../repository/jpa/JpaArtifactManagement.java | 10 + .../jpa/JpaControllerManagement.java | 31 - .../jpa/JpaDeploymentManagement.java | 25 +- .../jpa/JpaDistributionSetManagement.java | 40 - .../repository/jpa/JpaEntityFactory.java | 201 +++++ .../jpa/JpaRolloutGroupManagement.java | 6 - .../repository/jpa/JpaRolloutManagement.java | 5 - .../repository/jpa/JpaSoftwareManagement.java | 41 - .../repository/jpa/JpaSystemManagement.java | 36 +- .../repository/jpa/JpaTagManagement.java | 38 - .../jpa/JpaTargetFilterQueryManagement.java | 5 - .../repository/jpa/JpaTargetManagement.java | 7 - .../jpa/model/CacheFieldEntityListener.java | 26 +- .../RolloutGroupConditionEvaluator.java | 3 +- .../jpa/AbstractJpaIntegrationTest.java | 104 +++ ...AbstractJpaIntegrationTestWithMongoDB.java | 104 +++ .../jpa/ArtifactManagementNoMongoDbTest.java | 2 +- .../jpa/ArtifactManagementTest.java | 3 +- .../jpa/ControllerManagementTest.java | 8 +- .../jpa/DeploymentManagementTest.java | 121 ++- .../jpa/DistributionSetManagementTest.java | 62 +- .../jpa/JpaTestRepositoryManagement.java | 109 +++ .../repository/jpa/ReportManagementTest.java | 59 +- .../repository/jpa/RolloutManagementTest.java | 43 +- .../jpa/SoftwareManagementTest.java | 7 +- .../repository/jpa/SystemManagementTest.java | 12 +- .../repository/jpa/TagManagementTest.java | 45 +- .../jpa/TargetFilterQueryManagenmentTest.java | 2 +- .../jpa/TargetManagementSearchTest.java | 42 +- .../repository/jpa/TargetManagementTest.java | 60 +- .../TenantConfigurationManagementTest.java | 2 +- .../repository/jpa/TestConfiguration.java | 18 +- .../hawkbit/repository/jpa/TestDataUtil.java | 435 ----------- .../jpa/model/ModelEqualsHashcodeTest.java | 4 +- .../jpa/rsql/RSQLActionFieldsTest.java | 4 +- .../rsql/RSQLDistributionSetFieldTest.java | 27 +- ...RSQLDistributionSetMetadataFieldsTest.java | 8 +- .../jpa/rsql/RSQLRolloutGroupFields.java | 10 +- .../jpa/rsql/RSQLSoftwareModuleFieldTest.java | 4 +- .../RSQLSoftwareModuleMetadataFieldsTest.java | 12 +- .../RSQLSoftwareModuleTypeFieldsTest.java | 8 +- .../jpa/rsql/RSQLTagFieldsTest.java | 4 +- .../jpa/rsql/RSQLTargetFieldTest.java | 22 +- .../jpa/tenancy/MultiTenancyEntityTest.java | 8 +- .../jpa/utils/RepositoryDataGenerator.java | 485 ------------ .../hawkbit-repository-test/pom.xml | 59 ++ .../util}/AbstractIntegrationTest.java | 187 +---- .../AbstractIntegrationTestWithMongoDB.java | 14 +- .../repository/util}/FreePortFileWriter.java | 2 +- .../util/TestRepositoryManagement.java | 22 + .../repository/util/TestdataFactory.java | 737 ++++++++++++++++++ .../util}/WithSpringAuthorityRule.java | 2 +- .../hawkbit/repository/util}/WithUser.java | 2 +- hawkbit-repository/pom.xml | 2 + hawkbit-rest-core/pom.xml | 6 + .../rest/AbstractRestIntegrationTest.java | 5 +- ...bstractRestIntegrationTestWithMongoDB.java | 6 +- .../SoftwareModuleAddUpdateWindow.java | 8 +- .../CreateUpdateSoftwareTypeLayout.java | 8 +- .../common/DistributionSetTypeBeanQuery.java | 11 +- .../common/SoftwareModuleTypeBeanQuery.java | 11 +- .../CreateUpdateDistSetTypeLayout.java | 8 +- .../CreateOrUpdateFilterHeader.java | 6 +- .../DistributionAddUpdateWindowLayout.java | 12 +- ...eateUpdateDistributionTagLayoutWindow.java | 6 +- .../dstag/DistributionTagButtons.java | 10 +- .../targettable/BulkUploadHandler.java | 6 +- .../TargetAddUpdateWindowLayout.java | 6 +- .../CreateUpdateTargetTagLayout.java | 6 +- .../targettag/TargetTagFilterButtons.java | 8 +- .../rollout/AddUpdateRolloutWindowLayout.java | 6 +- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 7 +- pom.xml | 1 - 137 files changed, 2937 insertions(+), 2593 deletions(-) create mode 100644 hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/repository/JpaRepositoryAutoConfiguration.java delete mode 100644 hawkbit-mgmt-resource/src/test/resources/log4j2.xml create mode 100644 hawkbit-mgmt-resource/src/test/resources/logback.xml create mode 100644 hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java create mode 100644 hawkbit-repository/hawkbit-repository-core/pom.xml rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-core}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemManagementHolder.java (100%) delete mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/fbExcludeFilter.xml create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/EnableJpaRepository.java create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/JpaTestRepositoryManagement.java delete mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestDataUtil.java delete mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/RepositoryDataGenerator.java create mode 100644 hawkbit-repository/hawkbit-repository-test/pom.xml rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/AbstractIntegrationTest.java (51%) rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/AbstractIntegrationTestWithMongoDB.java (89%) rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/FreePortFileWriter.java (97%) create mode 100644 hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestRepositoryManagement.java create mode 100644 hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/WithSpringAuthorityRule.java (99%) rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/WithUser.java (97%) diff --git a/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java index abf2740fa..fdad8a999 100644 --- a/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -8,11 +8,9 @@ package org.eclipse.hawkbit.app; * http://www.eclipse.org/legal/epl-v10.html */ -import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Import; /** * A {@link SpringBootApplication} annotated class with a main method to start. @@ -20,7 +18,6 @@ import org.springframework.context.annotation.Import; * */ @SpringBootApplication -@Import({ RepositoryApplicationConfiguration.class }) @EnableHawkbitManagedSecurityConfiguration // Exception squid:S1118 - Spring boot standard behavior @SuppressWarnings({ "squid:S1118" }) diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java index 4a3e6028a..d22d6f4a1 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -8,13 +8,11 @@ */ package org.eclipse.hawkbit.app; -import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; import org.eclipse.hawkbit.ddi.EnableDdiApi; import org.eclipse.hawkbit.mgmt.EnableMgmtApi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Import; /** * A {@link SpringBootApplication} annotated class with a main method to start. @@ -22,7 +20,6 @@ import org.springframework.context.annotation.Import; * */ @SpringBootApplication -@Import({ RepositoryApplicationConfiguration.class }) @EnableHawkbitManagedSecurityConfiguration @EnableMgmtApi @EnableDdiApi diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/repository/JpaRepositoryAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/repository/JpaRepositoryAutoConfiguration.java new file mode 100644 index 000000000..dd6ead86b --- /dev/null +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/repository/JpaRepositoryAutoConfiguration.java @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.autoconfigure.repository; + +import org.eclipse.hawkbit.EnableJpaRepository; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * Auto-Configuration for enabling the REST-Resources. + * + */ +@Configuration +@ConditionalOnClass({ EnableJpaRepository.class }) +@Import({ EnableJpaRepository.class }) +public class JpaRepositoryAutoConfiguration { + +} diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index 177494912..35aff47f5 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -48,6 +48,12 @@ + + org.eclipse.hawkbit + hawkbit-repository-test + ${project.version} + test + org.eclipse.hawkbit hawkbit-rest-core diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 859b4c156..9d690f9d2 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlArtifactStoreControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.Constants; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; @@ -68,6 +69,9 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR @Autowired private RequestResponseContextHolder requestResponseContextHolder; + @Autowired + private EntityFactory entityFactory; + @Override public ResponseEntity downloadArtifactByFilename(@PathVariable("fileName") final String fileName, @AuthenticationPrincipal final String targetid) { @@ -139,17 +143,16 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR .getActionForDownloadByTargetAndSoftwareModule(target.getControllerId(), artifact.getSoftwareModule()); final String range = request.getHeader("Range"); - final ActionStatus actionStatus = controllerManagement.generateActionStatus(); + final ActionStatus actionStatus = entityFactory.generateActionStatus(); actionStatus.setAction(action); actionStatus.setOccurredAt(System.currentTimeMillis()); actionStatus.setStatus(Status.DOWNLOAD); if (range != null) { - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range - + " of: " + request.getRequestURI()); + actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + + request.getRequestURI()); } else { - actionStatus.addMessage( - Constants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); + actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(actionStatus); return 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 881eee659..656835e95 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 @@ -31,6 +31,7 @@ import org.eclipse.hawkbit.ddi.rest.api.DdiRootControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.Constants; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; @@ -97,6 +98,9 @@ public class DdiRootController implements DdiRootControllerRestApi { @Autowired private RequestResponseContextHolder requestResponseContextHolder; + @Autowired + private EntityFactory entityFactory; + @Override public ResponseEntity> getSoftwareModulesArtifacts( @PathVariable("targetid") final String targetid, @@ -175,17 +179,16 @@ public class DdiRootController implements DdiRootControllerRestApi { .getActionForDownloadByTargetAndSoftwareModule(target.getControllerId(), module); final String range = request.getHeader("Range"); - final ActionStatus statusMessage = controllerManagement.generateActionStatus(); + final ActionStatus statusMessage = entityFactory.generateActionStatus(); statusMessage.setAction(action); statusMessage.setOccurredAt(System.currentTimeMillis()); statusMessage.setStatus(Status.DOWNLOAD); if (range != null) { - statusMessage.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range - + " of: " + request.getRequestURI()); + statusMessage.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + + request.getRequestURI()); } else { - statusMessage.addMessage( - Constants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); + statusMessage.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(statusMessage); return action; @@ -294,7 +297,7 @@ public class DdiRootController implements DdiRootControllerRestApi { private ActionStatus generateUpdateStatus(final DdiActionFeedback feedback, final String targetid, final Long actionid, final Action action) { - final ActionStatus actionStatus = controllerManagement.generateActionStatus(); + final ActionStatus actionStatus = entityFactory.generateActionStatus(); actionStatus.setAction(action); actionStatus.setOccurredAt(System.currentTimeMillis()); @@ -336,8 +339,8 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Controller reported intermediate status (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.RUNNING); - actionStatus.addMessage( - Constants.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); + actionStatus + .addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); } private static void handleClosedUpdateStatus(final DdiActionFeedback feedback, final String targetid, @@ -420,14 +423,14 @@ public class DdiRootController implements DdiRootControllerRestApi { } controllerManagement.addCancelActionStatus( - generateActionCancelStatus(feedback, target, feedback.getId(), action, controllerManagement)); + generateActionCancelStatus(feedback, target, feedback.getId(), action, entityFactory)); return new ResponseEntity<>(HttpStatus.OK); } private static ActionStatus generateActionCancelStatus(final DdiActionFeedback feedback, final Target target, - final Long actionid, final Action action, final ControllerManagement controllerManagement) { + final Long actionid, final Action action, final EntityFactory entityFactory) { - final ActionStatus actionStatus = controllerManagement.generateActionStatus(); + final ActionStatus actionStatus = entityFactory.generateActionStatus(); actionStatus.setAction(action); actionStatus.setOccurredAt(System.currentTimeMillis()); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java index 2e56ed840..b3828582c 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java @@ -27,14 +27,13 @@ import java.util.List; import org.apache.commons.lang3.RandomUtils; import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.junit.Test; import org.slf4j.LoggerFactory; @@ -73,14 +72,13 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Tests non allowed requests on the artifact ressource, e.g. invalid URI, wrong if-match, wrong command.") public void invalidRequestsOnArtifactResource() throws Exception { // create target - Target target = targetManagement.generateTarget("4712"); + Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); // create ds - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); deploymentManagement.assignDistributionSet(ds, targets); // create artifact @@ -158,14 +156,13 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Tests non allowed requests on the artifact ressource, e.g. invalid URI, wrong if-match, wrong command.") public void invalidRequestsOnArtifactResourceByName() throws Exception { // create target - Target target = targetManagement.generateTarget("4712"); + Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); // create ds - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); deploymentManagement.assignDistributionSet(ds, targets); // create artifact @@ -241,17 +238,15 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong downLoadProgress = 1; eventBus.register(this); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); // create target - Target target = targetManagement.generateTarget("4712"); + Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList(); targets.add(target); // create ds - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); // create artifact final byte random[] = RandomUtils.nextBytes(5 * 1024 * 1024); @@ -287,12 +282,11 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Tests valid MD5SUm file downloads through the artifact resource by identifying the artifact by ID.") public void downloadMd5sumThroughControllerApi() throws Exception { // create target - Target target = targetManagement.generateTarget("4712"); + Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); // create ds - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); // create artifact final byte random[] = RandomUtils.nextBytes(5 * 1024); @@ -322,17 +316,15 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong eventBus.register(this); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); // create target - Target target = targetManagement.generateTarget("4712"); + Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList(); targets.add(target); // create ds - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); // create artifact final byte random[] = RandomUtils.nextBytes(5 * 1024); @@ -353,17 +345,15 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong eventBus.register(this); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); // create target - Target target = targetManagement.generateTarget("4712"); + Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); // create ds - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); // create artifact final byte random[] = RandomUtils.nextBytes(5 * 1024 * 1024); @@ -393,7 +383,6 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong final Action action = deploymentManagement.findActionsByTarget(target).get(0); // one status - download - assertThat(actionStatusRepository.findAll()).hasSize(2); assertThat(action.getActionStatus()).hasSize(2); assertThat(deploymentManagement.findActionStatusByAction(new PageRequest(0, 400, Direction.DESC, "id"), action) .getContent().get(0).getStatus()).isEqualTo(Status.DOWNLOAD); @@ -407,14 +396,13 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Test various HTTP range requests for artifact download, e.g. chunk download or download resume.") public void rangeDownloadArtifactByName() throws Exception { // create target - Target target = targetManagement.generateTarget("4712"); + Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); // create ds - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); final int resultLength = 5 * 1000 * 1024; @@ -512,17 +500,15 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Ensures that the download fails if te controller is not authenticated.") public void faildDownloadArtifactByNameIfAuthenticationMissing() throws Exception { assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); // create target - Target target = targetManagement.generateTarget("4712"); + Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); // create ds - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); // create artifact final byte random[] = RandomUtils.nextBytes(5 * 1024); @@ -538,12 +524,11 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Downloads an MD5SUM file by the related artifacts filename.") public void downloadMd5sumFileByName() throws Exception { // create target - Target target = targetManagement.generateTarget("4712"); + Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); // create ds - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); // create artifact final byte random[] = RandomUtils.nextBytes(5 * 1024); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java index 8fd832b95..821c8b8ad 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiCancelActionTest.java @@ -22,7 +22,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.ArrayList; import java.util.List; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -49,9 +48,8 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Description("Test of the controller can continue a started update even after a cancel command if it so desires.") public void rootRsCancelActionButContinueAnyway() throws Exception { // prepare test data - final Target target = targetManagement.generateTarget("4712"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final Target target = entityFactory.generateTarget("4712"); + final DistributionSet ds = testdataFactory.createDistributionSet(""); final Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList(); @@ -106,9 +104,8 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Test @Description("Test for cancel operation of a update action.") public void rootRsCancelAction() throws Exception { - final Target target = targetManagement.generateTarget("4712"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final Target target = entityFactory.generateTarget("4712"); + final DistributionSet ds = testdataFactory.createDistributionSet(""); final Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList(); @@ -224,9 +221,8 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { } private Action createCancelAction(final String targetid) { - final Target target = targetManagement.generateTarget(targetid); - final DistributionSet ds = TestDataUtil.generateDistributionSet(targetid, softwareManagement, - distributionSetManagement); + final Target target = entityFactory.generateTarget(targetid); + final DistributionSet ds = testdataFactory.createDistributionSet(targetid); final Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList(); toAssign.add(savedTarget); @@ -241,9 +237,8 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Description("Tests the feedback channel of the cancel operation.") public void rootRsCancelActionFeedback() throws Exception { - final Target target = targetManagement.generateTarget("4712"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final Target target = entityFactory.generateTarget("4712"); + final DistributionSet ds = testdataFactory.createDistributionSet(""); final Target savedTarget = targetManagement.createTarget(target); @@ -253,7 +248,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { // cancel action manually final Action cancelAction = deploymentManagement.cancelAction(updateAction, targetManagement.findTargetByControllerID(savedTarget.getControllerId())); - assertThat(actionStatusRepository.findAll()).hasSize(2); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(2); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); long current = System.currentTimeMillis(); @@ -266,7 +261,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .isGreaterThanOrEqualTo(current); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); - assertThat(actionStatusRepository.findAll()).hasSize(3); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(3); current = System.currentTimeMillis(); mvc.perform(post("/{tenant}/controller/v1/4712/cancelAction/" + cancelAction.getId() + "/feedback", @@ -277,7 +272,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getLastTargetQuery()) .isGreaterThanOrEqualTo(current); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); - assertThat(actionStatusRepository.findAll()).hasSize(4); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(4); current = System.currentTimeMillis(); mvc.perform(post("/{tenant}/controller/v1/4712/cancelAction/" + cancelAction.getId() + "/feedback", @@ -287,7 +282,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getLastTargetQuery()) .isGreaterThanOrEqualTo(current); - assertThat(actionStatusRepository.findAll()).hasSize(5); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(5); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); // cancelation canceled -> should remove the action from active @@ -300,7 +295,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getLastTargetQuery()) .isGreaterThanOrEqualTo(current); - assertThat(actionStatusRepository.findAll()).hasSize(6); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(6); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); // cancelation rejected -> action still active until controller close it @@ -315,7 +310,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getLastTargetQuery()) .isGreaterThanOrEqualTo(current); - assertThat(actionStatusRepository.findAll()).hasSize(7); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(7); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); // cancelaction closed -> should remove the action from active @@ -327,20 +322,17 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getLastTargetQuery()) .isGreaterThanOrEqualTo(current); - assertThat(actionStatusRepository.findAll()).hasSize(8); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(8); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(0); } @Test @Description("Tests the feeback chanel of for multiple open cancel operations on the same target.") public void multipleCancelActionFeedback() throws Exception { - final Target target = targetManagement.generateTarget("4712"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement, true); - final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, - distributionSetManagement, true); - final DistributionSet ds3 = TestDataUtil.generateDistributionSet("3", softwareManagement, - distributionSetManagement, true); + final Target target = entityFactory.generateTarget("4712"); + final DistributionSet ds = testdataFactory.createDistributionSet("", true); + final DistributionSet ds2 = testdataFactory.createDistributionSet("2", true); + final DistributionSet ds3 = testdataFactory.createDistributionSet("3", true); final Target savedTarget = targetManagement.createTarget(target); @@ -351,7 +343,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { final Action updateAction3 = deploymentManagement.findActionWithDetails( deploymentManagement.assignDistributionSet(ds3.getId(), new String[] { "4712" }).getActions().get(0)); - assertThat(actionStatusRepository.findAll()).hasSize(3); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(3); // 3 update actions, 0 cancel actions assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(3); @@ -370,7 +362,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$id", equalTo(String.valueOf(cancelAction.getId())))) .andExpect(jsonPath("$cancelAction.stopId", equalTo(String.valueOf(updateAction.getId())))); - assertThat(actionStatusRepository.findAll()).hasSize(6); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(6); mvc.perform(get("/{tenant}/controller/v1/4712", tenantAware.getCurrentTenant())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) @@ -386,7 +378,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .content(JsonBuilder.cancelActionFeedback(cancelAction.getId().toString(), "closed")) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - assertThat(actionStatusRepository.findAll()).hasSize(7); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(7); // 1 update actions, 1 cancel actions assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(2); @@ -396,7 +388,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$id", equalTo(String.valueOf(cancelAction2.getId())))) .andExpect(jsonPath("$cancelAction.stopId", equalTo(String.valueOf(updateAction2.getId())))); - assertThat(actionStatusRepository.findAll()).hasSize(8); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(8); mvc.perform(get("/{tenant}/controller/v1/4712", tenantAware.getCurrentTenant())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) @@ -412,17 +404,18 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .content(JsonBuilder.cancelActionFeedback(cancelAction2.getId().toString(), "closed")) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - assertThat(actionStatusRepository.findAll()).hasSize(9); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(9); assertThat(targetManagement.findTargetByControllerID("4712").getAssignedDistributionSet()).isEqualTo(ds3); mvc.perform(get("/{tenant}/controller/v1/4712/deploymentBase/" + updateAction3.getId(), tenantAware.getCurrentTenant())).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - assertThat(actionStatusRepository.findAll()).hasSize(10); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(10); // 1 update actions, 0 cancel actions assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); - final Action cancelAction3 = deploymentManagement.cancelAction(actionRepository.findOne(updateAction3.getId()), + final Action cancelAction3 = deploymentManagement.cancelAction( + deploymentManagement.findAction(updateAction3.getId()), targetManagement.findTargetByControllerID(savedTarget.getControllerId())); // action is in cancelling state @@ -435,7 +428,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$id", equalTo(String.valueOf(cancelAction3.getId())))) .andExpect(jsonPath("$cancelAction.stopId", equalTo(String.valueOf(updateAction3.getId())))); - assertThat(actionStatusRepository.findAll()).hasSize(12); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(12); // now lets return feedback for the third cancelation mvc.perform(post("/{tenant}/controller/v1/4712/cancelAction/" + cancelAction3.getId() + "/feedback", @@ -443,7 +436,7 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { .content(JsonBuilder.cancelActionFeedback(cancelAction3.getId().toString(), "closed")) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - assertThat(actionStatusRepository.findAll()).hasSize(13); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(13); // final status assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(0); @@ -453,9 +446,8 @@ public class DdiCancelActionTest extends AbstractRestIntegrationTest { @Test @Description("Tests the feeback channel closing for too many feedbacks, i.e. denial of service prevention.") public void tooMuchCancelActionFeedback() throws Exception { - final Target target = targetManagement.createTarget(targetManagement.generateTarget("4712")); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final Target target = targetManagement.createTarget(entityFactory.generateTarget("4712")); + final DistributionSet ds = testdataFactory.createDistributionSet(""); final List toAssign = new ArrayList(); toAssign.add(target); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java index a216ce501..395e2284c 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java @@ -21,8 +21,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.util.HashMap; import java.util.Map; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.Test; @@ -40,13 +40,13 @@ import ru.yandex.qatools.allure.annotations.Stories; @ActiveProfiles({ "im", "test" }) @Features("Component Tests - Direct Device Integration API") @Stories("Config Data Resource") -public class DdiConfigDataTest extends AbstractIntegrationTest { +public class DdiConfigDataTest extends AbstractRestIntegrationTest { @Test @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) " + "are requested only once from the device.") public void requestConfigDataIfEmpty() throws Exception { - final Target target = targetManagement.generateTarget("4712"); + final Target target = entityFactory.generateTarget("4712"); final Target savedTarget = targetManagement.createTarget(target); final long current = System.currentTimeMillis(); @@ -84,7 +84,7 @@ public class DdiConfigDataTest extends AbstractIntegrationTest { @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) " + "can be uploaded correctly by the controller.") public void putConfigData() throws Exception { - targetManagement.createTarget(targetManagement.generateTarget("4717")); + targetManagement.createTarget(entityFactory.generateTarget("4717")); // initial final Map attributes = new HashMap<>(); @@ -127,7 +127,7 @@ public class DdiConfigDataTest extends AbstractIntegrationTest { @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) " + "upload limitation is inplace which is meant to protect the server from malicious attempts.") public void putToMuchConfigData() throws Exception { - targetManagement.createTarget(targetManagement.generateTarget("4717")); + targetManagement.createTarget(entityFactory.generateTarget("4717")); // initial Map attributes = new HashMap<>(); @@ -150,7 +150,7 @@ public class DdiConfigDataTest extends AbstractIntegrationTest { @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) " + "resource behaves as exptected in cae of invalid request attempts.") public void badConfigData() throws Exception { - final Target target = targetManagement.generateTarget("4712"); + final Target target = entityFactory.generateTarget("4712"); final Target savedTarget = targetManagement.createTarget(target); // not allowed methods diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index cafe655e9..124d8e38d 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -25,8 +25,6 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.RandomUtils; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; @@ -63,7 +61,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test() @Description("Ensures that artifacts are not found, when softare module does not exists.") public void artifactsNotFound() throws Exception { - final Target target = TestDataUtil.createTarget(targetManagement); + final Target target = testdataFactory.createTarget(); final Long softwareModuleIdNotExist = 1l; mvc.perform(get("/{tenant}/controller/v1/{targetNotExist}/softwaremodules/{softwareModuleId}/artifacts", tenantAware.getCurrentTenant(), target.getName(), softwareModuleIdNotExist)) @@ -73,9 +71,8 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test() @Description("Ensures that artifacts are found, when software module exists.") public void artifactsExists() throws Exception { - final Target target = TestDataUtil.createTarget(targetManagement); - final DistributionSet distributionSet = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final Target target = testdataFactory.createTarget(); + final DistributionSet distributionSet = testdataFactory.createDistributionSet(""); deploymentManagement.assignDistributionSet(distributionSet.getId(), new String[] { target.getName() }); @@ -84,7 +81,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD tenantAware.getCurrentTenant(), target.getName(), softwareModuleId)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()).andExpect(jsonPath("$", hasSize(0))); - TestDataUtil.generateArtifacts(artifactManagement, softwareModuleId); + testdataFactory.createLocalArtifacts(softwareModuleId); mvc.perform(get("/{tenant}/controller/v1/{targetNotExist}/softwaremodules/{softwareModuleId}/artifacts", tenantAware.getCurrentTenant(), target.getName(), softwareModuleId)).andDo(MockMvcResultPrinter.print()) @@ -99,11 +96,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Description("Forced deployment to a controller. Checks if the resource reponse payload for a given deployment is as expected.") public void deplomentForceAction() throws Exception { // Prepare test data - final Target target = targetManagement.generateTarget("4712"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement, true); - final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, - distributionSetManagement, true); + final Target target = entityFactory.generateTarget("4712"); + final DistributionSet ds = testdataFactory.createDistributionSet("", true); + final DistributionSet ds2 = testdataFactory.createDistributionSet("2", true); final byte random[] = RandomUtils.nextBytes(5 * 1024); final LocalArtifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), @@ -114,18 +109,18 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD final Target savedTarget = targetManagement.createTarget(target); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).isEmpty(); - assertThat(actionRepository.findAll()).isEmpty(); - assertThat(actionStatusRepository.findAll()).isEmpty(); + assertThat(deploymentManagement.countActionsAll()).isEqualTo(0); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(0); List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.FORCED, Constants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); - assertThat(actionRepository.findAll()).hasSize(1); + assertThat(deploymentManagement.countActionsAll()).isEqualTo(1); saved = deploymentManagement.assignDistributionSet(ds2, saved).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(2); - assertThat(actionRepository.findAll()).hasSize(2); + assertThat(deploymentManagement.countActionsAll()).isEqualTo(2); final Action uaction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); assertThat(uaction.getDistributionSet()).isEqualTo(ds); @@ -143,7 +138,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD .isGreaterThanOrEqualTo(current); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getLastTargetQuery()) .isLessThanOrEqualTo(System.currentTimeMillis()); - assertThat(actionStatusRepository.findAll()).hasSize(2); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(2); current = System.currentTimeMillis(); @@ -238,11 +233,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Description("Attempt/soft deployment to a controller. Checks if the resource reponse payload for a given deployment is as expected.") public void deplomentAttemptAction() throws Exception { // Prepare test data - final Target target = targetManagement.generateTarget("4712"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement, true); - final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, - distributionSetManagement, true); + final Target target = entityFactory.generateTarget("4712"); + final DistributionSet ds = testdataFactory.createDistributionSet("", true); + final DistributionSet ds2 = testdataFactory.createDistributionSet("2", true); final byte random[] = RandomUtils.nextBytes(5 * 1024); final LocalArtifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), @@ -253,19 +246,18 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD final Target savedTarget = targetManagement.createTarget(target); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).isEmpty(); - assertThat(actionRepository.findAll()).isEmpty(); - assertThat(actionStatusRepository.findAll()).isEmpty(); + assertThat(deploymentManagement.countActionsAll()).isEqualTo(0); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(0); - List saved = deploymentManagement - .assignDistributionSet(ds.getId(), ActionType.SOFT, Constants.NO_FORCE_TIME, savedTarget.getControllerId()) - .getAssignedEntity(); + List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.SOFT, + Constants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); - assertThat(actionRepository.findAll()).hasSize(1); + assertThat(deploymentManagement.countActionsAll()).isEqualTo(1); saved = deploymentManagement.assignDistributionSet(ds2, saved).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(2); - assertThat(actionRepository.findAll()).hasSize(2); + assertThat(deploymentManagement.countActionsAll()).isEqualTo(2); final Action uaction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); assertThat(uaction.getDistributionSet()).isEqualTo(ds); @@ -284,7 +276,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD .isGreaterThanOrEqualTo(current); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getLastTargetQuery()) .isLessThanOrEqualTo(System.currentTimeMillis()); - assertThat(actionStatusRepository.findAll()).hasSize(2); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(2); current = System.currentTimeMillis(); @@ -369,11 +361,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Description("Attempt/soft deployment to a controller including automated switch to hard. Checks if the resource reponse payload for a given deployment is as expected.") public void deplomentAutoForceAction() throws Exception { // Prepare test data - final Target target = targetManagement.generateTarget("4712"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement, true); - final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, - distributionSetManagement, true); + final Target target = entityFactory.generateTarget("4712"); + final DistributionSet ds = testdataFactory.createDistributionSet("", true); + final DistributionSet ds2 = testdataFactory.createDistributionSet("2", true); final byte random[] = RandomUtils.nextBytes(5 * 1024); final LocalArtifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), @@ -384,18 +374,18 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD final Target savedTarget = targetManagement.createTarget(target); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).isEmpty(); - assertThat(actionRepository.findAll()).isEmpty(); - assertThat(actionStatusRepository.findAll()).isEmpty(); + assertThat(deploymentManagement.countActionsAll()).isEqualTo(0); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(0); List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.TIMEFORCED, System.currentTimeMillis(), savedTarget.getControllerId()).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); - assertThat(actionRepository.findAll()).hasSize(1); + assertThat(deploymentManagement.countActionsAll()).isEqualTo(1); saved = deploymentManagement.assignDistributionSet(ds2, saved).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(2); - assertThat(actionRepository.findAll()).hasSize(2); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(2); final Action uaction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); assertThat(uaction.getDistributionSet()).isEqualTo(ds); @@ -414,7 +404,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD .isGreaterThanOrEqualTo(current); assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getLastTargetQuery()) .isLessThanOrEqualTo(System.currentTimeMillis()); - assertThat(actionStatusRepository.findAll()).hasSize(2); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(2); current = System.currentTimeMillis(); @@ -506,7 +496,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test @Description("Test various invalid access attempts to the deployment resource und the expected behaviour of the server.") public void badDeploymentAction() throws Exception { - final Target target = targetManagement.createTarget(targetManagement.generateTarget("4712")); + final Target target = targetManagement.createTarget(entityFactory.generateTarget("4712")); // not allowed methods mvc.perform(post("/{tenant}/controller/v1/4712/deploymentBase/1", tenantAware.getCurrentTenant())) @@ -529,8 +519,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD // wrong media type final List toAssign = new ArrayList<>(); toAssign.add(target); - final DistributionSet savedSet = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet savedSet = testdataFactory.createDistributionSet(""); final Action action1 = deploymentManagement.findActionWithDetails( deploymentManagement.assignDistributionSet(savedSet, toAssign).getActions().get(0)); @@ -547,9 +536,8 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Description("The server protects itself against to many feedback upload attempts. The test verfies that " + "it is not possible to exceed the configured maximum number of feedback uplods.") public void toMuchDeplomentActionFeedback() throws Exception { - final Target target = targetManagement.createTarget(targetManagement.generateTarget("4712")); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final Target target = targetManagement.createTarget(entityFactory.generateTarget("4712")); + final DistributionSet ds = testdataFactory.createDistributionSet(""); final List toAssign = new ArrayList<>(); toAssign.add(target); @@ -575,19 +563,16 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test @Description("Multiple uploads of deployment status feedback to the server.") public void multipleDeplomentActionFeedback() throws Exception { - final Target target1 = targetManagement.generateTarget("4712"); - final Target target2 = targetManagement.generateTarget("4713"); - final Target target3 = targetManagement.generateTarget("4714"); + final Target target1 = entityFactory.generateTarget("4712"); + final Target target2 = entityFactory.generateTarget("4713"); + final Target target3 = entityFactory.generateTarget("4714"); final Target savedTarget1 = targetManagement.createTarget(target1); targetManagement.createTarget(target2); targetManagement.createTarget(target3); - final DistributionSet ds1 = TestDataUtil.generateDistributionSet("1", softwareManagement, - distributionSetManagement, true); - final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, - distributionSetManagement, true); - final DistributionSet ds3 = TestDataUtil.generateDistributionSet("3", softwareManagement, - distributionSetManagement, true); + final DistributionSet ds1 = testdataFactory.createDistributionSet("1", true); + final DistributionSet ds2 = testdataFactory.createDistributionSet("2", true); + final DistributionSet ds3 = testdataFactory.createDistributionSet("3", true); final List toAssign = new ArrayList<>(); toAssign.add(savedTarget1); @@ -680,8 +665,8 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test @Description("Verfies that an update action is correctly set to error if the controller provides error feedback.") public void rootRsSingleDeplomentActionWithErrorFeedback() throws Exception { - final Target target = targetManagement.generateTarget("4712"); - DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); + final Target target = entityFactory.generateTarget("4712"); + DistributionSet ds = testdataFactory.createDistributionSet(""); final Target savedTarget = targetManagement.createTarget(target); @@ -691,8 +676,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.UNKNOWN); deploymentManagement.assignDistributionSet(ds, toAssign); - final Action action = actionRepository.findByDistributionSet(pageReq, (JpaDistributionSet) ds).getContent() - .get(0); + final Action action = deploymentManagement.findActionsByDistributionSet(pageReq, ds).getContent().get(0); long current = System.currentTimeMillis(); long lastModified = targetManagement.findTargetByControllerID("4712").getLastModifiedAt(); @@ -747,7 +731,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD .hasSize(1); assertThat(deploymentManagement.findActiveActionsByTarget(myT)).hasSize(0); assertThat(deploymentManagement.findInActiveActionsByTarget(myT)).hasSize(2); - assertThat(actionStatusRepository.findAll()).hasSize(4); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(4); assertThat(deploymentManagement.findActionStatusByAction(pageReq, action).getContent()).haveAtLeast(1, new ActionStatusCondition(Status.ERROR)); assertThat(deploymentManagement.findActionStatusByAction(pageReq, action2).getContent()).haveAtLeast(1, @@ -758,9 +742,8 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD @Test @Description("Verfies that the controller can provided as much feedback entries as necessry as long as it is in the configured limites.") public void rootRsSingleDeplomentActionFeedback() throws Exception { - final Target target = targetManagement.generateTarget("4712"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final Target target = entityFactory.generateTarget("4712"); + final DistributionSet ds = testdataFactory.createDistributionSet(""); final Target savedTarget = targetManagement.createTarget(target); @@ -770,17 +753,12 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD Target myT = targetManagement.findTargetByControllerID("4712"); assertThat(myT.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.UNKNOWN); deploymentManagement.assignDistributionSet(ds, toAssign); - final Action action = actionRepository.findByDistributionSet(pageReq, (JpaDistributionSet) ds).getContent() - .get(0); + final Action action = deploymentManagement.findActionsByDistributionSet(pageReq, ds).getContent().get(0); myT = targetManagement.findTargetByControllerID("4712"); assertThat(myT.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING); - assertThat(targetRepository.findByTargetInfoInstalledDistributionSet(new PageRequest(0, 10), - (JpaDistributionSet) ds)).hasSize(0); - assertThat(targetRepository.findByAssignedDistributionSet(new PageRequest(0, 10), (JpaDistributionSet) ds)) - .hasSize(1); - assertThat(targetRepository.findByAssignedDistributionSetOrTargetInfoInstalledDistributionSet( - new PageRequest(0, 10), (JpaDistributionSet) ds, (JpaDistributionSet) ds)).hasSize(1); + assertThat(targetManagement.findTargetByInstalledDistributionSet(ds.getId(), pageReq)).hasSize(0); + assertThat(targetManagement.findTargetByAssignedDistributionSet(ds.getId(), pageReq)).hasSize(1); // Now valid Feedback @@ -804,8 +782,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(targetManagement.findTargetByUpdateStatus(new PageRequest(0, 10), TargetUpdateStatus.IN_SYNC)) .hasSize(0); assertThat(deploymentManagement.findActiveActionsByTarget(myT)).hasSize(1); - assertThat(actionStatusRepository.findAll()).hasSize(5); - assertThat(actionStatusRepository.findAll()).haveAtLeast(5, new ActionStatusCondition(Status.RUNNING)); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(5); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(5, + new ActionStatusCondition(Status.RUNNING)); current = System.currentTimeMillis(); mvc.perform(post("/{tenant}/controller/v1/4712/deploymentBase/" + action.getId() + "/feedback", @@ -823,8 +802,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(targetManagement.findTargetByUpdateStatus(new PageRequest(0, 10), TargetUpdateStatus.IN_SYNC)) .hasSize(0); assertThat(deploymentManagement.findActiveActionsByTarget(myT)).hasSize(1); - assertThat(actionStatusRepository.findAll()).hasSize(6); - assertThat(actionStatusRepository.findAll()).haveAtLeast(5, new ActionStatusCondition(Status.RUNNING)); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(6); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(5, + new ActionStatusCondition(Status.RUNNING)); current = System.currentTimeMillis(); mvc.perform(post("/{tenant}/controller/v1/4712/deploymentBase/" + action.getId() + "/feedback", @@ -842,8 +822,9 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(targetManagement.findTargetByUpdateStatus(new PageRequest(0, 10), TargetUpdateStatus.IN_SYNC)) .hasSize(0); assertThat(deploymentManagement.findActiveActionsByTarget(myT)).hasSize(1); - assertThat(actionStatusRepository.findAll()).hasSize(7); - assertThat(actionStatusRepository.findAll()).haveAtLeast(6, new ActionStatusCondition(Status.RUNNING)); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(7); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(6, + new ActionStatusCondition(Status.RUNNING)); current = System.currentTimeMillis(); mvc.perform(post("/{tenant}/controller/v1/4712/deploymentBase/" + action.getId() + "/feedback", @@ -862,9 +843,11 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(targetManagement.findTargetByUpdateStatus(new PageRequest(0, 10), TargetUpdateStatus.IN_SYNC)) .hasSize(0); - assertThat(actionStatusRepository.findAll()).hasSize(8); - assertThat(actionStatusRepository.findAll()).haveAtLeast(7, new ActionStatusCondition(Status.RUNNING)); - assertThat(actionStatusRepository.findAll()).haveAtLeast(1, new ActionStatusCondition(Status.CANCELED)); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(8); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(7, + new ActionStatusCondition(Status.RUNNING)); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(1, + new ActionStatusCondition(Status.CANCELED)); current = System.currentTimeMillis(); mvc.perform(post("/{tenant}/controller/v1/4712/deploymentBase/" + action.getId() + "/feedback", @@ -876,10 +859,13 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(myT.getTargetInfo().getLastTargetQuery()).isGreaterThanOrEqualTo(current); assertThat(myT.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING); assertThat(deploymentManagement.findActiveActionsByTarget(myT)).hasSize(1); - assertThat(actionStatusRepository.findAll()).hasSize(9); - assertThat(actionStatusRepository.findAll()).haveAtLeast(6, new ActionStatusCondition(Status.RUNNING)); - assertThat(actionStatusRepository.findAll()).haveAtLeast(1, new ActionStatusCondition(Status.WARNING)); - assertThat(actionStatusRepository.findAll()).haveAtLeast(1, new ActionStatusCondition(Status.CANCELED)); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(9); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(6, + new ActionStatusCondition(Status.RUNNING)); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(1, + new ActionStatusCondition(Status.WARNING)); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(1, + new ActionStatusCondition(Status.CANCELED)); current = System.currentTimeMillis(); mvc.perform(post("/{tenant}/controller/v1/4712/deploymentBase/" + action.getId() + "/feedback", @@ -896,29 +882,27 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(targetManagement.findTargetByUpdateStatus(new PageRequest(0, 10), TargetUpdateStatus.IN_SYNC)) .hasSize(1); - assertThat(actionStatusRepository.findAll()).hasSize(10); - assertThat(actionStatusRepository.findAll()).haveAtLeast(7, new ActionStatusCondition(Status.RUNNING)); - assertThat(actionStatusRepository.findAll()).haveAtLeast(1, new ActionStatusCondition(Status.WARNING)); - assertThat(actionStatusRepository.findAll()).haveAtLeast(1, new ActionStatusCondition(Status.CANCELED)); - assertThat(actionStatusRepository.findAll()).haveAtLeast(1, new ActionStatusCondition(Status.FINISHED)); + assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(10); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(7, + new ActionStatusCondition(Status.RUNNING)); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(1, + new ActionStatusCondition(Status.WARNING)); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(1, + new ActionStatusCondition(Status.CANCELED)); + assertThat(deploymentManagement.findActionStatusAll(pageReq).getContent()).haveAtLeast(1, + new ActionStatusCondition(Status.FINISHED)); - assertThat(targetRepository.findByTargetInfoInstalledDistributionSet(new PageRequest(0, 10), - (JpaDistributionSet) ds)).hasSize(1); - assertThat(targetRepository.findByAssignedDistributionSet(new PageRequest(0, 10), (JpaDistributionSet) ds)) - .hasSize(1); - assertThat(targetRepository.findByAssignedDistributionSetOrTargetInfoInstalledDistributionSet( - new PageRequest(0, 10), (JpaDistributionSet) ds, (JpaDistributionSet) ds)).hasSize(1); + assertThat(targetManagement.findTargetByInstalledDistributionSet(ds.getId(), pageReq)).hasSize(1); + assertThat(targetManagement.findTargetByAssignedDistributionSet(ds.getId(), pageReq)).hasSize(1); } @Test @Description("Various forbidden request appempts on the feedback resource. Ensures correct answering behaviour as expected to these kind of errors.") public void badDeplomentActionFeedback() throws Exception { - final Target target = targetManagement.generateTarget("4712"); - final Target target2 = targetManagement.generateTarget("4713"); - final DistributionSet savedSet = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); - final DistributionSet savedSet2 = TestDataUtil.generateDistributionSet("1", softwareManagement, - distributionSetManagement); + final Target target = entityFactory.generateTarget("4712"); + final Target target2 = entityFactory.generateTarget("4713"); + final DistributionSet savedSet = testdataFactory.createDistributionSet(""); + final DistributionSet savedSet2 = testdataFactory.createDistributionSet("1"); // target does not exist mvc.perform(post("/{tenant}/controller/v1/4712/deploymentBase/1234/feedback", tenantAware.getCurrentTenant()) diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index 490e76161..135754604 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -24,13 +24,12 @@ import java.util.List; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.WithSpringAuthorityRule; -import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; @@ -80,7 +79,7 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD // create target first with "knownPrincipal" user and audit data final String knownTargetControllerId = "target1"; final String knownCreatedBy = "knownPrincipal"; - targetManagement.createTarget(targetManagement.generateTarget(knownTargetControllerId)); + targetManagement.createTarget(entityFactory.generateTarget(knownTargetControllerId)); final Target findTargetByControllerID = targetManagement.findTargetByControllerID(knownTargetControllerId); assertThat(findTargetByControllerID.getCreatedBy()).isEqualTo(knownCreatedBy); assertThat(findTargetByControllerID.getCreatedAt()).isNotNull(); @@ -121,7 +120,7 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD assertThat(targetManagement.findTargetByControllerID("4711").getTargetInfo().getLastTargetQuery()) .isGreaterThanOrEqualTo(current); - assertThat(targetRepository.findByControllerId("4711").getTargetInfo().getUpdateStatus()) + assertThat(targetManagement.findTargetByControllerID("4711").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.REGISTERED); // not allowed methods @@ -169,9 +168,8 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD mvc.perform(get("/{tenant}/controller/v1/4711", tenantAware.getCurrentTenant()).header("If-None-Match", etag)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotModified()); - final Target target = targetRepository.findByControllerId("4711"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final Target target = targetManagement.findTargetByControllerID("4711"); + final DistributionSet ds = testdataFactory.createDistributionSet(""); deploymentManagement.assignDistributionSet(ds.getId(), new String[] { "4711" }); @@ -204,8 +202,7 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotModified()); // Now another deployment - final DistributionSet ds2 = TestDataUtil.generateDistributionSet("2", softwareManagement, - distributionSetManagement); + final DistributionSet ds2 = testdataFactory.createDistributionSet("2"); deploymentManagement.assignDistributionSet(ds2.getId(), new String[] { "4711" }); @@ -226,10 +223,10 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD @Description("Ensures that the target state machine of a precomissioned target switches from " + "UNKNOWN to REGISTERED when the target polls for the first time.") public void rootRsPrecommissioned() throws Exception { - final Target target = targetManagement.generateTarget("4711"); + final Target target = entityFactory.generateTarget("4711"); targetManagement.createTarget(target); - assertThat(targetRepository.findByControllerId("4711").getTargetInfo().getUpdateStatus()) + assertThat(targetManagement.findTargetByControllerID("4711").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.UNKNOWN); final long current = System.currentTimeMillis(); @@ -242,7 +239,7 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD assertThat(targetManagement.findTargetByControllerID("4711").getTargetInfo().getLastTargetQuery()) .isGreaterThanOrEqualTo(current); - assertThat(targetRepository.findByControllerId("4711").getTargetInfo().getUpdateStatus()) + assertThat(targetManagement.findTargetByControllerID("4711").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.REGISTERED); } @@ -265,11 +262,10 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD public void tryToFinishAnUpdateProcessAfterItHasBeenFinished() throws Exception { // mock - final Target target = targetManagement.generateTarget("911"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final Target target = entityFactory.generateTarget("911"); + final DistributionSet ds = testdataFactory.createDistributionSet(""); Target savedTarget = targetManagement.createTarget(target); - final List toAssign = new ArrayList(); + final List toAssign = new ArrayList<>(); toAssign.add(savedTarget); savedTarget = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedEntity().iterator().next(); final Action savedAction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); diff --git a/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf-amqp/pom.xml index d1cb0cb30..bcebc9628 100644 --- a/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf-amqp/pom.xml @@ -73,6 +73,12 @@ + + org.eclipse.hawkbit + hawkbit-repository-test + ${project.version} + test + com.h2database h2 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 90039d4ba..107850fc1 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 @@ -34,6 +34,7 @@ import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Action; @@ -97,6 +98,9 @@ public class AmqpMessageHandlerService extends BaseAmqpService { @Autowired private HostnameResolver hostnameResolver; + @Autowired + private EntityFactory entityFactory; + /** * Constructor. * @@ -336,7 +340,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final ActionUpdateStatus actionUpdateStatus = convertMessage(message, ActionUpdateStatus.class); final Action action = checkActionExist(message, actionUpdateStatus); - final ActionStatus actionStatus = controllerManagement.generateActionStatus(); + final ActionStatus actionStatus = entityFactory.generateActionStatus(); actionUpdateStatus.getMessage().forEach(actionStatus::addMessage); actionStatus.setAction(action); @@ -449,4 +453,8 @@ public class AmqpMessageHandlerService extends BaseAmqpService { this.eventBus = eventBus; } + void setEntityFactory(final EntityFactory entityFactory) { + this.entityFactory = entityFactory; + } + } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java index a1dd54710..c9be9ffa6 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java @@ -10,6 +10,8 @@ package org.eclipse.hawkbit; import org.eclipse.hawkbit.amqp.AmqpSenderService; import org.eclipse.hawkbit.amqp.DefaultAmqpSenderService; +import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder; +import org.eclipse.hawkbit.security.SystemSecurityContext; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; @@ -22,6 +24,15 @@ import org.springframework.context.annotation.Configuration; */ @Configuration public class AmqpTestConfiguration { + /** + * @return the {@link SystemSecurityContext} singleton bean which make it + * accessible in beans which cannot access the service directly, + * e.g. JPA entities. + */ + @Bean + public SystemSecurityContextHolder systemSecurityContextHolder() { + return SystemSecurityContextHolder.getInstance(); + } /** * Method to set the Jackson2JsonMessageConverter. diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java index 132ddb650..480948683 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java @@ -33,8 +33,7 @@ import org.eclipse.hawkbit.dmf.amqp.api.MessageType; import org.eclipse.hawkbit.dmf.json.model.DownloadAndUpdateRequest; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTestWithMongoDB; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; @@ -57,7 +56,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @ActiveProfiles({ "test" }) @Features("Component Tests - Device Management Federation API") @Stories("AmqpMessage Dispatcher Service Test") -public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWithMongoDB { +public class AmqpMessageDispatcherServiceTest extends AbstractJpaIntegrationTestWithMongoDB { private static final String TENANT = "default"; @@ -108,8 +107,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit @Test @Description("Verfies that download and install event with 3 software moduls and no artifacts works") public void testSendDownloadRequesWithSoftwareModulesAndNoArtifacts() { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( 1L, TENANT, CONTROLLER_ID, 1L, dsA.getModules(), AMQP_URI, TEST_TOKEN); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent); @@ -139,11 +137,10 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit @Test @Description("Verfies that download and install event with software moduls and artifacts works") public void testSendDownloadRequest() { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); final SoftwareModule module = dsA.getModules().iterator().next(); final List receivedList = new ArrayList<>(); - for (final Artifact artifact : TestDataUtil.generateArtifacts(artifactManagement, module.getId())) { + for (final Artifact artifact : testdataFactory.createLocalArtifacts(module.getId())) { module.addArtifact((LocalArtifact) artifact); receivedList.add(new DbArtifact()); } 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 2ce6cd91c..283b08eed 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 @@ -38,6 +38,7 @@ import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken.FileResource; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; @@ -85,6 +86,9 @@ public class AmqpMessageHandlerServiceTest { @Mock private ControllerManagement controllerManagementMock; + @Mock + private EntityFactory entityFactoryMock; + @Mock private ArtifactManagement artifactManagementMock; @@ -117,6 +121,7 @@ public class AmqpMessageHandlerServiceTest { amqpMessageHandlerService.setCache(cacheMock); amqpMessageHandlerService.setHostnameResolver(hostnameResolverMock); amqpMessageHandlerService.setEventBus(eventBus); + amqpMessageHandlerService.setEntityFactory(entityFactoryMock); } @@ -350,7 +355,7 @@ public class AmqpMessageHandlerServiceTest { final Action action = createActionWithTarget(22L, Status.FINISHED); when(controllerManagementMock.findActionWithDetails(Matchers.any())).thenReturn(action); when(controllerManagementMock.addUpdateActionStatus(Matchers.any())).thenReturn(action); - when(controllerManagementMock.generateActionStatus()).thenReturn(new JpaActionStatus()); + when(entityFactoryMock.generateActionStatus()).thenReturn(new JpaActionStatus()); // for the test the same action can be used final List actionList = new ArrayList<>(); actionList.add(action); diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index 3d83fed69..8f855da68 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -14,12 +14,11 @@ import org.eclipse.hawkbit.AmqpTestConfiguration; import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.api.UrlProtocol; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.repository.jpa.TestConfiguration; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.tenancy.TenantAware; import org.junit.Before; import org.junit.Test; @@ -53,11 +52,9 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest @Before public void setup() { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); final SoftwareModule module = dsA.getModules().iterator().next(); - localArtifact = (LocalArtifact) TestDataUtil.generateArtifacts(artifactManagement, module.getId()).stream() - .findAny().get(); + localArtifact = testdataFactory.createLocalArtifacts(module.getId()).stream().findAny().get(); softwareModuleId = localArtifact.getSoftwareModule().getId(); fileName = localArtifact.getFilename(); sha1Hash = localArtifact.getSha1Hash(); diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index 2279172e9..fb0167793 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -47,6 +47,12 @@ + + org.eclipse.hawkbit + hawkbit-repository-test + ${project.version} + test + org.eclipse.hawkbit hawkbit-rest-core diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java index d4780f71c..4a0f8d90e 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetMapper.java @@ -23,6 +23,7 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -75,11 +76,12 @@ public final class MgmtDistributionSetMapper { * @return converted list of {@link DistributionSet}s */ static List dsFromRequest(final Iterable sets, - final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { + final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement, + final EntityFactory entityFactory) { final List mappedList = new ArrayList<>(); for (final MgmtDistributionSetRequestBodyPost dsRest : sets) { - mappedList.add(fromRequest(dsRest, softwareManagement, distributionSetManagement)); + mappedList.add(fromRequest(dsRest, softwareManagement, distributionSetManagement, entityFactory)); } return mappedList; @@ -95,9 +97,10 @@ public final class MgmtDistributionSetMapper { * @return converted {@link DistributionSet} */ static DistributionSet fromRequest(final MgmtDistributionSetRequestBodyPost dsRest, - final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { + final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement, + final EntityFactory entityFactory) { - final DistributionSet result = distributionSetManagement.generateDistributionSet(); + final DistributionSet result = entityFactory.generateDistributionSet(); result.setDescription(dsRest.getDescription()); result.setName(dsRest.getName()); result.setType(findDistributionSetTypeWithExceptionIfNotFound(dsRest.getType(), distributionSetManagement)); @@ -135,14 +138,14 @@ public final class MgmtDistributionSetMapper { * @return */ static List fromRequestDsMetadata(final DistributionSet ds, - final List metadata, final DistributionSetManagement distributionSetManagement) { + final List metadata, final EntityFactory entityFactory) { final List mappedList = new ArrayList<>(metadata.size()); for (final MgmtMetadata metadataRest : metadata) { if (metadataRest.getKey() == null) { throw new IllegalArgumentException("the key of the metadata must be present"); } - mappedList.add(distributionSetManagement.generateDistributionSetMetadata(ds, metadataRest.getKey(), - metadataRest.getValue())); + mappedList.add( + entityFactory.generateDistributionSetMetadata(ds, metadataRest.getKey(), metadataRest.getValue())); } return mappedList; } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java index e9249f551..e99a33c5f 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResource.java @@ -28,6 +28,7 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SystemManagement; @@ -74,6 +75,9 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { @Autowired private TenantAware currentTenant; + @Autowired + private EntityFactory entityFactory; + @Autowired private DistributionSetManagement distributionSetManagement; @@ -118,8 +122,9 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { sets.stream().filter(ds -> ds.getType() == null).forEach(ds -> ds.setType(this.systemManagement .getTenantMetadata(this.currentTenant.getCurrentTenant()).getDefaultDsType().getKey())); - final Iterable createdDSets = this.distributionSetManagement.createDistributionSets( - MgmtDistributionSetMapper.dsFromRequest(sets, this.softwareManagement, this.distributionSetManagement)); + final Iterable createdDSets = this.distributionSetManagement + .createDistributionSets(MgmtDistributionSetMapper.dsFromRequest(sets, this.softwareManagement, + this.distributionSetManagement, entityFactory)); LOG.debug("{} distribution sets created, return status {}", sets.size(), HttpStatus.CREATED); return new ResponseEntity<>(MgmtDistributionSetMapper.toResponseDistributionSets(createdDSets), @@ -284,7 +289,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { // immediately final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); final DistributionSetMetadata updated = this.distributionSetManagement.updateDistributionSetMetadata( - distributionSetManagement.generateDistributionSetMetadata(ds, metadataKey, metadata.getValue())); + entityFactory.generateDistributionSetMetadata(ds, metadataKey, metadata.getValue())); return ResponseEntity.ok(MgmtDistributionSetMapper.toResponseDsMetadata(updated)); } @@ -307,7 +312,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi { final DistributionSet ds = findDistributionSetWithExceptionIfNotFound(distributionSetId); final List created = this.distributionSetManagement.createDistributionSetMetadata( - MgmtDistributionSetMapper.fromRequestDsMetadata(ds, metadataRest, distributionSetManagement)); + MgmtDistributionSetMapper.fromRequestDsMetadata(ds, metadataRest, entityFactory)); return new ResponseEntity<>(MgmtDistributionSetMapper.toResponseDsMetadata(created), HttpStatus.CREATED); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java index 69f6e044c..18ec162ca 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java @@ -20,6 +20,7 @@ import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -54,6 +55,9 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes @Autowired private DistributionSetManagement distributionSetManagement; + @Autowired + private EntityFactory entityFactory; + @Override public ResponseEntity> getDistributionSetTags( @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, @@ -97,7 +101,7 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes LOG.debug("creating {} ds tags", tags.size()); final List createdTags = this.tagManagement - .createDistributionSetTags(MgmtTagMapper.mapDistributionSetTagFromRequest(tagManagement, tags)); + .createDistributionSetTags(MgmtTagMapper.mapDistributionSetTagFromRequest(entityFactory, tags)); return new ResponseEntity<>(MgmtTagMapper.toResponseDistributionSetTag(createdTags), HttpStatus.CREATED); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java index a6dd6f32b..5c139027c 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionS import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; -import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -36,21 +36,21 @@ final class MgmtDistributionSetTypeMapper { } - static List smFromRequest(final DistributionSetManagement distributionSetManagement, + static List smFromRequest(final EntityFactory entityFactory, final SoftwareManagement softwareManagement, final Iterable smTypesRest) { final List mappedList = new ArrayList<>(); for (final MgmtDistributionSetTypeRequestBodyPost smRest : smTypesRest) { - mappedList.add(fromRequest(distributionSetManagement, softwareManagement, smRest)); + mappedList.add(fromRequest(entityFactory, softwareManagement, smRest)); } return mappedList; } - static DistributionSetType fromRequest(final DistributionSetManagement distributionSetManagement, + static DistributionSetType fromRequest(final EntityFactory entityFactory, final SoftwareManagement softwareManagement, final MgmtDistributionSetTypeRequestBodyPost smsRest) { - final DistributionSetType result = distributionSetManagement.generateDistributionSetType(smsRest.getKey(), + final DistributionSetType result = entityFactory.generateDistributionSetType(smsRest.getKey(), smsRest.getName(), smsRest.getDescription()); // Add mandatory diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java index 16cba384b..d69e4d8d4 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModule import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -53,6 +54,9 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR @Autowired private DistributionSetManagement distributionSetManagement; + @Autowired + private EntityFactory entityFactory; + @Override public ResponseEntity> getDistributionSetTypes( @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, @@ -121,9 +125,8 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR public ResponseEntity> createDistributionSetTypes( @RequestBody final List distributionSetTypes) { - final List createdSoftwareModules = distributionSetManagement - .createDistributionSetTypes(MgmtDistributionSetTypeMapper.smFromRequest(distributionSetManagement, - softwareManagement, distributionSetTypes)); + final List createdSoftwareModules = distributionSetManagement.createDistributionSetTypes( + MgmtDistributionSetTypeMapper.smFromRequest(entityFactory, softwareManagement, distributionSetTypes)); return new ResponseEntity<>(MgmtDistributionSetTypeMapper.toTypesResponse(createdSoftwareModules), HttpStatus.CREATED); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java index e80889508..7467a45b0 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutMapper.java @@ -22,7 +22,7 @@ import org.eclipse.hawkbit.mgmt.json.model.rollout.MgmtRolloutSuccessAction.Succ import org.eclipse.hawkbit.mgmt.json.model.rolloutgroup.MgmtRolloutGroupResponseBody; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRolloutRestApi; -import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; @@ -84,9 +84,9 @@ final class MgmtRolloutMapper { return body; } - static Rollout fromRequest(final RolloutManagement rolloutManagement, final MgmtRolloutRestRequestBody restRequest, + static Rollout fromRequest(final EntityFactory entityFactory, final MgmtRolloutRestRequestBody restRequest, final DistributionSet distributionSet, final String filterQuery) { - final Rollout rollout = rolloutManagement.generateRollout(); + final Rollout rollout = entityFactory.generateRollout(); rollout.setName(restRequest.getName()); rollout.setDescription(restRequest.getDescription()); rollout.setDistributionSet(distributionSet); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java index 0b3a77101..623241981 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRolloutRestApi; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; @@ -63,6 +64,9 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { @Autowired private DistributionSetManagement distributionSetManagement; + @Autowired + private EntityFactory entityFactory; + @Override public ResponseEntity> getRollouts( @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, @@ -138,7 +142,7 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { .successAction(successAction, successActionExpr).errorCondition(errorCondition, errorConditionExpr) .errorAction(errorAction, errorActionExpr).build(); final Rollout rollout = this.rolloutManagement.createRollout( - MgmtRolloutMapper.fromRequest(rolloutManagement, rolloutRequestBody, distributionSet, + MgmtRolloutMapper.fromRequest(entityFactory, rolloutRequestBody, distributionSet, rolloutRequestBody.getTargetFilterQuery()), rolloutRequestBody.getAmountGroups(), rolloutGroupConditions); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java index ff721dfbc..adc19df0a 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleMapper.java @@ -22,6 +22,7 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Artifact; @@ -52,31 +53,31 @@ public final class MgmtSoftwareModuleMapper { return smType; } - static SoftwareModule fromRequest(final MgmtSoftwareModuleRequestBodyPost smsRest, - final SoftwareManagement softwareManagement) { - return softwareManagement.generateSoftwareModule( + static SoftwareModule fromRequest(final EntityFactory entityFactory, + final MgmtSoftwareModuleRequestBodyPost smsRest, final SoftwareManagement softwareManagement) { + return entityFactory.generateSoftwareModule( getSoftwareModuleTypeFromKeyString(smsRest.getType(), softwareManagement), smsRest.getName(), smsRest.getVersion(), smsRest.getDescription(), smsRest.getVendor()); } - static List fromRequestSwMetadata(final SoftwareManagement softwareManagement, + static List fromRequestSwMetadata(final EntityFactory entityFactory, final SoftwareModule sw, final List metadata) { final List mappedList = new ArrayList<>(metadata.size()); for (final MgmtMetadata metadataRest : metadata) { if (metadataRest.getKey() == null) { throw new IllegalArgumentException("the key of the metadata must be present"); } - mappedList.add(softwareManagement.generateSoftwareModuleMetadata(sw, metadataRest.getKey(), - metadataRest.getValue())); + mappedList.add( + entityFactory.generateSoftwareModuleMetadata(sw, metadataRest.getKey(), metadataRest.getValue())); } return mappedList; } - static List smFromRequest(final Iterable smsRest, - final SoftwareManagement softwareManagement) { + static List smFromRequest(final EntityFactory entityFactory, + final Iterable smsRest, final SoftwareManagement softwareManagement) { final List mappedList = new ArrayList<>(); for (final MgmtSoftwareModuleRequestBodyPost smRest : smsRest) { - mappedList.add(fromRequest(smRest, softwareManagement)); + mappedList.add(fromRequest(entityFactory, smRest, softwareManagement)); } return mappedList; } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java index aeaffa013..b4f1e8adb 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java @@ -20,6 +20,7 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModuleRequ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -57,6 +58,9 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { @Autowired private SoftwareManagement softwareManagement; + @Autowired + private EntityFactory entityFactory; + @Override public ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @RequestParam("file") final MultipartFile file, @@ -158,8 +162,8 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { public ResponseEntity> createSoftwareModules( @RequestBody final List softwareModules) { LOG.debug("creating {} softwareModules", softwareModules.size()); - final Iterable createdSoftwareModules = softwareManagement - .createSoftwareModule(MgmtSoftwareModuleMapper.smFromRequest(softwareModules, softwareManagement)); + final Iterable createdSoftwareModules = softwareManagement.createSoftwareModule( + MgmtSoftwareModuleMapper.smFromRequest(entityFactory, softwareModules, softwareManagement)); LOG.debug("{} softwareModules created, return status {}", softwareModules.size(), HttpStatus.CREATED); return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponseSoftwareModules(createdSoftwareModules), @@ -237,7 +241,7 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { @PathVariable("metadataKey") final String metadataKey, @RequestBody final MgmtMetadata metadata) { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final SoftwareModuleMetadata updated = softwareManagement.updateSoftwareModuleMetadata( - softwareManagement.generateSoftwareModuleMetadata(sw, metadataKey, metadata.getValue())); + entityFactory.generateSoftwareModuleMetadata(sw, metadataKey, metadata.getValue())); return ResponseEntity.ok(MgmtSoftwareModuleMapper.toResponseSwMetadata(updated)); } @@ -256,7 +260,7 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); final List created = softwareManagement.createSoftwareModuleMetadata( - MgmtSoftwareModuleMapper.fromRequestSwMetadata(softwareManagement, sw, metadataRest)); + MgmtSoftwareModuleMapper.fromRequestSwMetadata(entityFactory, sw, metadataRest)); return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponseSwMetadata(created), HttpStatus.CREATED); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java index f52ea7f2a..565af7eb8 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeMapper.java @@ -18,7 +18,7 @@ import java.util.List; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; -import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; /** @@ -36,19 +36,19 @@ final class MgmtSoftwareModuleTypeMapper { } - static List smFromRequest(final SoftwareManagement softwareManagement, + static List smFromRequest(final EntityFactory entityFactory, final Iterable smTypesRest) { final List mappedList = new ArrayList<>(); for (final MgmtSoftwareModuleTypeRequestBodyPost smRest : smTypesRest) { - mappedList.add(fromRequest(softwareManagement, smRest)); + mappedList.add(fromRequest(entityFactory, smRest)); } return mappedList; } - static SoftwareModuleType fromRequest(final SoftwareManagement softwareManagement, + static SoftwareModuleType fromRequest(final EntityFactory entityFactory, final MgmtSoftwareModuleTypeRequestBodyPost smsRest) { - final SoftwareModuleType result = softwareManagement.generateSoftwareModuleType(); + final SoftwareModuleType result = entityFactory.generateSoftwareModuleType(); result.setName(smsRest.getName()); result.setKey(smsRest.getKey()); result.setDescription(smsRest.getDescription()); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java index bbb61571c..353cf16e5 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResource.java @@ -16,6 +16,7 @@ import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModule import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPut; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -44,6 +45,9 @@ public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRes @Autowired private SoftwareManagement softwareManagement; + @Autowired + private EntityFactory entityFactory; + @Override public ResponseEntity> getTypes( @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, @@ -110,7 +114,7 @@ public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRes @RequestBody final List softwareModuleTypes) { final List createdSoftwareModules = this.softwareManagement.createSoftwareModuleType( - MgmtSoftwareModuleTypeMapper.smFromRequest(softwareManagement, softwareModuleTypes)); + MgmtSoftwareModuleTypeMapper.smFromRequest(entityFactory, softwareModuleTypes)); return new ResponseEntity<>(MgmtSoftwareModuleTypeMapper.toTypesResponse(createdSoftwareModules), HttpStatus.CREATED); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java index 7ede69658..bac21c2a5 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTagMapper.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTag; import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTagRequestBodyPut; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; -import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.TargetTag; @@ -96,21 +96,21 @@ final class MgmtTagMapper { return response; } - static List mapTargeTagFromRequest(final TagManagement tagManagement, + static List mapTargeTagFromRequest(final EntityFactory entityFactory, final Iterable tags) { final List mappedList = new ArrayList<>(); for (final MgmtTagRequestBodyPut targetTagRest : tags) { - mappedList.add(tagManagement.generateTargetTag(targetTagRest.getName(), targetTagRest.getDescription(), + mappedList.add(entityFactory.generateTargetTag(targetTagRest.getName(), targetTagRest.getDescription(), targetTagRest.getColour())); } return mappedList; } - static List mapDistributionSetTagFromRequest(final TagManagement tagManagement, + static List mapDistributionSetTagFromRequest(final EntityFactory entityFactory, final Iterable tags) { final List mappedList = new ArrayList<>(); for (final MgmtTagRequestBodyPut targetTagRest : tags) { - mappedList.add(tagManagement.generateDistributionSetTag(targetTagRest.getName(), + mappedList.add(entityFactory.generateDistributionSetTag(targetTagRest.getName(), targetTagRest.getDescription(), targetTagRest.getColour())); } return mappedList; diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java index b377e95f7..f00998d29 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java @@ -25,7 +25,7 @@ import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTargetRequestBody; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetRestApi; import org.eclipse.hawkbit.repository.ActionFields; -import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.PollStatus; @@ -169,17 +169,17 @@ public final class MgmtTargetMapper { return targetRest; } - static List fromRequest(final TargetManagement targetManagement, + static List fromRequest(final EntityFactory entityFactory, final Iterable targetsRest) { final List mappedList = new ArrayList<>(); for (final MgmtTargetRequestBody targetRest : targetsRest) { - mappedList.add(fromRequest(targetManagement, targetRest)); + mappedList.add(fromRequest(entityFactory, targetRest)); } return mappedList; } - static Target fromRequest(final TargetManagement targetManagement, final MgmtTargetRequestBody targetRest) { - final Target target = targetManagement.generateTarget(targetRest.getControllerId()); + static Target fromRequest(final EntityFactory entityFactory, final MgmtTargetRequestBody targetRest) { + final Target target = entityFactory.generateTarget(targetRest.getControllerId()); target.setDescription(targetRest.getDescription()); target.setName(targetRest.getName()); return target; diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java index e02072238..cc7bbcde6 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java @@ -28,6 +28,7 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetRestApi; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.DeploymentManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -63,6 +64,9 @@ public class MgmtTargetResource implements MgmtTargetRestApi { @Autowired private DeploymentManagement deploymentManagement; + @Autowired + private EntityFactory entityFactory; + @Override public ResponseEntity getTarget(@PathVariable("targetId") final String targetId) { final Target findTarget = findTargetWithExceptionIfNotFound(targetId); @@ -105,7 +109,7 @@ public class MgmtTargetResource implements MgmtTargetRestApi { public ResponseEntity> createTargets(@RequestBody final List targets) { LOG.debug("creating {} targets", targets.size()); final Iterable createdTargets = this.targetManagement - .createTargets(MgmtTargetMapper.fromRequest(targetManagement, targets)); + .createTargets(MgmtTargetMapper.fromRequest(entityFactory, targets)); LOG.debug("{} targets created, return status {}", targets.size(), HttpStatus.CREATED); return new ResponseEntity<>(MgmtTargetMapper.toResponse(createdTargets), HttpStatus.CREATED); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java index 7d1ba3f7f..c765c18cd 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.mgmt.json.model.tag.MgmtTargetTagAssigmentResult; import org.eclipse.hawkbit.mgmt.json.model.target.MgmtTarget; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; @@ -54,6 +55,9 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { @Autowired private TargetManagement targetManagement; + @Autowired + private EntityFactory entityFactory; + @Override public ResponseEntity> getTargetTags( @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, @@ -93,7 +97,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { public ResponseEntity> createTargetTags(@RequestBody final List tags) { LOG.debug("creating {} target tags", tags.size()); final List createdTargetTags = this.tagManagement - .createTargetTags(MgmtTagMapper.mapTargeTagFromRequest(tagManagement, tags)); + .createTargetTags(MgmtTagMapper.mapTargeTagFromRequest(entityFactory, tags)); return new ResponseEntity<>(MgmtTagMapper.toResponse(createdTargetTags), HttpStatus.CREATED); } diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index 700a2735c..b4887c40c 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -28,13 +28,13 @@ import java.util.Set; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.util.TestdataFactory; +import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; @@ -60,8 +60,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @Description("This test verifies the call of all Software Modules that are assiged to a Distribution Set through the RESTful API.") public void getSoftwaremodules() throws Exception { // Create DistributionSet with three software modules - final DistributionSet set = TestDataUtil.generateDistributionSet("SMTest", softwareManagement, - distributionSetManagement); + final DistributionSet set = testdataFactory.createDistributionSet("SMTest"); mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("$.size", equalTo(set.getModules().size()))); @@ -72,10 +71,9 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest public void deleteFailureWhenDistributionSetInUse() throws Exception { // create DisSet - final DistributionSet disSet = TestDataUtil.generateDistributionSetWithNoSoftwareModules("Eris", "560a", - distributionSetManagement); - final List smIDs = new ArrayList(); - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "Dysnomia ", "15,772", null, null); + final DistributionSet disSet = testdataFactory.createDistributionSetWithNoSoftwareModules("Eris", "560a"); + final List smIDs = new ArrayList<>(); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "Dysnomia ", "15,772", null, null); sm = softwareManagement.createSoftwareModule(sm); smIDs.add(sm.getId()); final JSONArray smList = new JSONArray(); @@ -91,7 +89,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String[] knownTargetIds = new String[] { "1", "2" }; final JSONArray list = new JSONArray(); for (final String targetId : knownTargetIds) { - targetManagement.createTarget(targetManagement.generateTarget(targetId)); + targetManagement.createTarget(entityFactory.generateTarget(targetId)); list.put(new JSONObject().put("id", Long.valueOf(targetId))); } deploymentManagement.assignDistributionSet(disSet.getId(), knownTargetIds[0]); @@ -116,10 +114,9 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest public void assignmentFailureWhenAssigningToUsedDistributionSet() throws Exception { // create DisSet - final DistributionSet disSet = TestDataUtil.generateDistributionSetWithNoSoftwareModules("Mars", "686,980", - distributionSetManagement); + final DistributionSet disSet = testdataFactory.createDistributionSetWithNoSoftwareModules("Mars", "686,980"); final List smIDs = new ArrayList<>(); - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "Phobos", "0,3189", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "Phobos", "0,3189", null, null); sm = softwareManagement.createSoftwareModule(sm); smIDs.add(sm.getId()); final JSONArray smList = new JSONArray(); @@ -135,7 +132,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String[] knownTargetIds = new String[] { "1", "2" }; final JSONArray list = new JSONArray(); for (final String targetId : knownTargetIds) { - targetManagement.createTarget(targetManagement.generateTarget(targetId)); + targetManagement.createTarget(entityFactory.generateTarget(targetId)); list.put(new JSONObject().put("id", Long.valueOf(targetId))); } // assign DisSet to target and test assignment @@ -150,7 +147,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest // Create another SM and post assignment final List smID2s = new ArrayList<>(); - SoftwareModule sm2 = softwareManagement.generateSoftwareModule(appType, "Deimos", "1,262", null, null); + SoftwareModule sm2 = entityFactory.generateSoftwareModule(appType, "Deimos", "1,262", null, null); sm2 = softwareManagement.createSoftwareModule(sm2); smID2s.add(sm2.getId()); final JSONArray smList2 = new JSONArray(); @@ -169,21 +166,20 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest public void assignSoftwaremoduleToDistributionSet() throws Exception { // create DisSet - final DistributionSet disSet = TestDataUtil.generateDistributionSetWithNoSoftwareModules("Jupiter", "398,88", - distributionSetManagement); + final DistributionSet disSet = testdataFactory.createDistributionSetWithNoSoftwareModules("Jupiter", "398,88"); // Test if size is 0 mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("$.size", equalTo(disSet.getModules().size()))); // create Software Modules - final List smIDs = new ArrayList(); - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "Europa", "3,551", null, null); + final List smIDs = new ArrayList<>(); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "Europa", "3,551", null, null); sm = softwareManagement.createSoftwareModule(sm); smIDs.add(sm.getId()); - SoftwareModule sm2 = softwareManagement.generateSoftwareModule(appType, "Ganymed", "7,155", null, null); + SoftwareModule sm2 = entityFactory.generateSoftwareModule(appType, "Ganymed", "7,155", null, null); sm2 = softwareManagement.createSoftwareModule(sm2); smIDs.add(sm2.getId()); - SoftwareModule sm3 = softwareManagement.generateSoftwareModule(runtimeType, "Kallisto", "16,689", null, null); + SoftwareModule sm3 = entityFactory.generateSoftwareModule(runtimeType, "Kallisto", "16,689", null, null); sm3 = softwareManagement.createSoftwareModule(sm3); smIDs.add(sm3.getId()); final JSONArray list = new JSONArray(); @@ -205,8 +201,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest public void unassignSoftwaremoduleFromDistributionSet() throws Exception { // Create DistributionSet with three software modules - final DistributionSet set = TestDataUtil.generateDistributionSet("Venus", softwareManagement, - distributionSetManagement); + final DistributionSet set = testdataFactory.createDistributionSet("Venus"); int amountOfSM = set.getModules().size(); mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) @@ -233,7 +228,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String[] knownTargetIds = new String[] { "1", "2", "3", "4", "5" }; final JSONArray list = new JSONArray(); for (final String targetId : knownTargetIds) { - targetManagement.createTarget(targetManagement.generateTarget(targetId)); + targetManagement.createTarget(entityFactory.generateTarget(targetId)); list.put(new JSONObject().put("id", Long.valueOf(targetId))); } // assign already one target to DS @@ -257,7 +252,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String knownTargetId = "knownTargetId1"; final Set createDistributionSetsAlphabetical = createDistributionSetsAlphabetical(1); final DistributionSet createdDs = createDistributionSetsAlphabetical.iterator().next(); - targetManagement.createTarget(targetManagement.generateTarget(knownTargetId)); + targetManagement.createTarget(entityFactory.generateTarget(knownTargetId)); deploymentManagement.assignDistributionSet(createdDs.getId(), knownTargetId); mvc.perform(get( @@ -284,15 +279,15 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String knownTargetId = "knownTargetId1"; final Set createDistributionSetsAlphabetical = createDistributionSetsAlphabetical(1); final DistributionSet createdDs = createDistributionSetsAlphabetical.iterator().next(); - final Target createTarget = targetManagement.createTarget(targetManagement.generateTarget(knownTargetId)); + final Target createTarget = targetManagement.createTarget(entityFactory.generateTarget(knownTargetId)); // create some dummy targets which are not assigned or installed - targetManagement.createTarget(targetManagement.generateTarget("dummy1")); - targetManagement.createTarget(targetManagement.generateTarget("dummy2")); + targetManagement.createTarget(entityFactory.generateTarget("dummy1")); + targetManagement.createTarget(entityFactory.generateTarget("dummy2")); // assign knownTargetId to distribution set deploymentManagement.assignDistributionSet(createdDs.getId(), knownTargetId); // make it in install state - TestDataUtil.sendUpdateActionStatusToTargets(controllerManagament, targetManagement, actionRepository, - createdDs, Lists.newArrayList(createTarget), Status.FINISHED, "some message"); + testdataFactory.sendUpdateActionStatusToTargets(Lists.newArrayList(createTarget), Status.FINISHED, + "some message"); mvc.perform(get( MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/installedTargets")) @@ -350,8 +345,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) .hasSize(0); - DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + DistributionSet set = testdataFactory.createDistributionSet("one"); set.setRequiredMigrationStep(set.isRequiredMigrationStep()); set = distributionSetManagement.updateDistributionSet(set); @@ -393,8 +387,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Ensures that single DS requested by ID is listed with expected payload.") public void getDistributionSet() throws Exception { - final DistributionSet set = TestDataUtil.createTestDistributionSet(softwareManagement, - distributionSetManagement); + final DistributionSet set = testdataFactory.createTestDistributionSet(); // perform request mvc.perform(get("/rest/v1/distributionsets/{dsId}", set.getId()).accept(MediaType.APPLICATION_JSON)) @@ -429,16 +422,16 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) .hasSize(0); - final SoftwareModule ah = softwareManagement.createSoftwareModule( - softwareManagement.generateSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - final SoftwareModule jvm = softwareManagement.createSoftwareModule( - softwareManagement.generateSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); - final SoftwareModule os = softwareManagement - .createSoftwareModule(softwareManagement.generateSoftwareModule(osType, "poky", "3.0.2", null, "")); + final SoftwareModule ah = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_APP); + final SoftwareModule jvm = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_RT); + final SoftwareModule os = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_OS); - DistributionSet one = TestDataUtil.buildDistributionSet("one", "one", standardDsType, os, jvm, ah); - DistributionSet two = TestDataUtil.buildDistributionSet("two", "two", standardDsType, os, jvm, ah); - DistributionSet three = TestDataUtil.buildDistributionSet("three", "three", standardDsType, os, jvm, ah); + DistributionSet one = testdataFactory.generateDistributionSet("one", "one", standardDsType, + Lists.newArrayList(os, jvm, ah)); + DistributionSet two = testdataFactory.generateDistributionSet("two", "two", standardDsType, + Lists.newArrayList(os, jvm, ah)); + DistributionSet three = testdataFactory.generateDistributionSet("three", "three", standardDsType, + Lists.newArrayList(os, jvm, ah)); three.setRequiredMigrationStep(true); final List sets = new ArrayList<>(); @@ -547,8 +540,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) .hasSize(0); - final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet set = testdataFactory.createDistributionSet("one"); assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) .hasSize(1); @@ -560,7 +552,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest // check repository content assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) .isEmpty(); - assertThat(distributionSetRepository.findAll()).isEmpty(); + assertThat(distributionSetManagement.countDistributionSetsAll()).isEqualTo(0); } @Test @@ -570,9 +562,8 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) .hasSize(0); - final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); - targetManagement.createTarget(targetManagement.generateTarget("test")); + final DistributionSet set = testdataFactory.createDistributionSet("one"); + targetManagement.createTarget(entityFactory.generateTarget("test")); deploymentManagement.assignDistributionSet(set.getId(), "test"); assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) @@ -597,13 +588,12 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) .hasSize(0); - final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet set = testdataFactory.createDistributionSet("one"); assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) .hasSize(1); - final DistributionSet update = distributionSetManagement.generateDistributionSet(); + final DistributionSet update = entityFactory.generateDistributionSet(); update.setVersion("anotherVersion"); update.setName(null); update.setType(standardDsType); @@ -621,8 +611,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @Test @Description("Ensures that the server reacts properly to invalid requests (URI, Media Type, Methods) with correct reponses.") public void invalidRequestsOnDistributionSetsResource() throws Exception { - final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet set = testdataFactory.createDistributionSet("one"); final List sets = new ArrayList<>(); sets.add(set); @@ -663,8 +652,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @Test @Description("Ensures that the metadata creation through API is reflected by the repository.") public void createMetadata() throws Exception { - final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet testDS = testdataFactory.createDistributionSet("one"); final String knownKey1 = "knownKey1"; final String knownKey2 = "knownKey2"; @@ -699,10 +687,9 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String knownValue = "knownValue"; final String updateValue = "valueForUpdate"; - final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet testDS = testdataFactory.createDistributionSet("one"); distributionSetManagement.createDistributionSetMetadata( - distributionSetManagement.generateDistributionSetMetadata(testDS, knownKey, knownValue)); + entityFactory.generateDistributionSetMetadata(testDS, knownKey, knownValue)); final JSONObject jsonObject = new JSONObject().put("key", knownKey).put("value", updateValue); @@ -724,10 +711,9 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String knownKey = "knownKey"; final String knownValue = "knownValue"; - final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet testDS = testdataFactory.createDistributionSet("one"); distributionSetManagement.createDistributionSetMetadata( - distributionSetManagement.generateDistributionSetMetadata(testDS, knownKey, knownValue)); + entityFactory.generateDistributionSetMetadata(testDS, knownKey, knownValue)); mvc.perform(delete("/rest/v1/distributionsets/{dsId}/metadata/{key}", testDS.getId(), knownKey)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); @@ -746,10 +732,9 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest // prepare and create metadata final String knownKey = "knownKey"; final String knownValue = "knownValue"; - final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet testDS = testdataFactory.createDistributionSet("one"); distributionSetManagement.createDistributionSetMetadata( - distributionSetManagement.generateDistributionSetMetadata(testDS, knownKey, knownValue)); + entityFactory.generateDistributionSetMetadata(testDS, knownKey, knownValue)); mvc.perform(get("/rest/v1/distributionsets/{dsId}/metadata/{key}", testDS.getId(), knownKey)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) @@ -765,12 +750,11 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String offsetParam = "0"; final String knownKeyPrefix = "knownKey"; final String knownValuePrefix = "knownValue"; - final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet testDS = testdataFactory.createDistributionSet("one"); for (int index = 0; index < totalMetadata; index++) { - distributionSetManagement.createDistributionSetMetadata(distributionSetManagement - .generateDistributionSetMetadata(distributionSetManagement.findDistributionSetById(testDS.getId()), - knownKeyPrefix + index, knownValuePrefix + index)); + distributionSetManagement.createDistributionSetMetadata(entityFactory.generateDistributionSetMetadata( + distributionSetManagement.findDistributionSetById(testDS.getId()), knownKeyPrefix + index, + knownValuePrefix + index)); } mvc.perform(get("/rest/v1/distributionsets/{dsId}/metadata?offset=" + offsetParam + "&limit=" + limitParam, @@ -786,9 +770,9 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest public void searchDistributionSetRsql() throws Exception { final String dsSuffix = "test"; final int amount = 10; - TestDataUtil.generateDistributionSets(dsSuffix, amount, softwareManagement, distributionSetManagement); - TestDataUtil.generateDistributionSet("DS1test", softwareManagement, distributionSetManagement); - TestDataUtil.generateDistributionSet("DS2test", softwareManagement, distributionSetManagement); + testdataFactory.createDistributionSets(dsSuffix, amount); + testdataFactory.createDistributionSet("DS1test"); + testdataFactory.createDistributionSet("DS2test"); final String rsqlFindLikeDs1OrDs2 = "name==DS1test,name==DS2test"; @@ -803,9 +787,9 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @Description("Ensures that a DS search with complete==true parameter returns only DS that are actually completely filled with mandatory modules.") public void filterDistributionSetComplete() throws Exception { final int amount = 10; - TestDataUtil.generateDistributionSets(amount, softwareManagement, distributionSetManagement); - distributionSetManagement.createDistributionSet(distributionSetManagement.generateDistributionSet("incomplete", - "2", "incomplete", distributionSetManagement.findDistributionSetTypeByKey("ecl_os"), null)); + testdataFactory.createDistributionSets(amount); + distributionSetManagement.createDistributionSet(entityFactory.generateDistributionSet("incomplete", "2", + "incomplete", distributionSetManagement.findDistributionSetTypeByKey("ecl_os"), null)); final String rsqlFindLikeDs1OrDs2 = "complete==" + Boolean.TRUE; @@ -824,7 +808,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final String[] knownTargetIds = new String[] { "1", "2", "3", "4", "5" }; final JSONArray list = new JSONArray(); for (final String targetId : knownTargetIds) { - targetManagement.createTarget(targetManagement.generateTarget(targetId)); + targetManagement.createTarget(entityFactory.generateTarget(targetId)); list.put(new JSONObject().put("id", Long.valueOf(targetId))); } @@ -846,12 +830,11 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final int totalMetadata = 10; final String knownKeyPrefix = "knownKey"; final String knownValuePrefix = "knownValue"; - final DistributionSet testDS = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet testDS = testdataFactory.createDistributionSet("one"); for (int index = 0; index < totalMetadata; index++) { - distributionSetManagement.createDistributionSetMetadata(distributionSetManagement - .generateDistributionSetMetadata(distributionSetManagement.findDistributionSetById(testDS.getId()), - knownKeyPrefix + index, knownValuePrefix + index)); + distributionSetManagement.createDistributionSetMetadata(entityFactory.generateDistributionSetMetadata( + distributionSetManagement.findDistributionSetById(testDS.getId()), knownKeyPrefix + index, + knownValuePrefix + index)); } final String rsqlSearchValue1 = "value==knownValue1"; @@ -867,7 +850,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final Set created = new HashSet<>(); for (int index = 0; index < amount; index++) { final String str = String.valueOf(character); - created.add(TestDataUtil.generateDistributionSet(str, softwareManagement, distributionSetManagement)); + created.add(testdataFactory.createDistributionSet(str)); character++; } return created; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java index d4596bde7..ad6be0854 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java @@ -24,10 +24,10 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; -import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; @@ -58,10 +58,12 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration public void getDistributionSetTypes() throws Exception { DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123")); testType.setDescription("Desc1234"); testType = distributionSetManagement.updateDistributionSetType(testType); + // 4 types overall (2 hawkbit tenant default, 1 test default and 1 + // generated in this test) mvc.perform(get("/rest/v1/distributionsettypes").accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) @@ -96,7 +98,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration public void getDistributionSetTypesSortedByKey() throws Exception { DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("zzzzz", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("zzzzz", "TestName123", "Desc123")); testType.setDescription("Desc1234"); testType = distributionSetManagement.updateDistributionSetType(testType); @@ -111,7 +113,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration .andExpect(jsonPath("$content.[0].createdAt", equalTo(testType.getCreatedAt()))) .andExpect(jsonPath("$content.[0].lastModifiedBy", equalTo("uploadTester"))) .andExpect(jsonPath("$content.[0].lastModifiedAt", equalTo(testType.getLastModifiedAt()))) - .andExpect(jsonPath("$content.[0].key", equalTo("zzzzz"))).andExpect(jsonPath("$total", equalTo(4))); + .andExpect(jsonPath("$content.[0].key", equalTo("zzzzz"))) + .andExpect(jsonPath("$total", equalTo(DEFAULT_DS_TYPES + 1))); // ascending mvc.perform(get("/rest/v1/distributionsettypes").accept(MediaType.APPLICATION_JSON) @@ -124,7 +127,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration .andExpect(jsonPath("$content.[3].createdAt", equalTo(testType.getCreatedAt()))) .andExpect(jsonPath("$content.[3].lastModifiedBy", equalTo("uploadTester"))) .andExpect(jsonPath("$content.[3].lastModifiedAt", equalTo(testType.getLastModifiedAt()))) - .andExpect(jsonPath("$content.[3].key", equalTo("zzzzz"))).andExpect(jsonPath("$total", equalTo(4))); + .andExpect(jsonPath("$content.[3].key", equalTo("zzzzz"))) + .andExpect(jsonPath("$total", equalTo(DEFAULT_DS_TYPES + 1))); } @Test @@ -132,14 +136,14 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes POST requests.") public void createDistributionSetTypes() throws JSONException, Exception { - assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(3); + assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(DEFAULT_DS_TYPES); final List types = new ArrayList<>(); - types.add(distributionSetManagement.generateDistributionSetType("test1", "TestName1", "Desc1") + types.add(entityFactory.generateDistributionSetType("test1", "TestName1", "Desc1") .addMandatoryModuleType(osType).addOptionalModuleType(runtimeType)); - types.add(distributionSetManagement.generateDistributionSetType("test2", "TestName2", "Desc2") + types.add(entityFactory.generateDistributionSetType("test2", "TestName2", "Desc2") .addOptionalModuleType(osType).addOptionalModuleType(runtimeType).addOptionalModuleType(appType)); - types.add(distributionSetManagement.generateDistributionSetType("test3", "TestName3", "Desc3") + types.add(entityFactory.generateDistributionSetType("test3", "TestName3", "Desc3") .addMandatoryModuleType(osType).addMandatoryModuleType(runtimeType)); final MvcResult mvcResult = mvc @@ -205,7 +209,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes POST requests.") public void addMandatoryModuleToDistributionSetType() throws JSONException, Exception { DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123")); assertThat(testType.getOptLockRevision()).isEqualTo(1); mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType.getId()) @@ -224,7 +228,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes POST requests.") public void addOptionalModuleToDistributionSetType() throws JSONException, Exception { DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123")); assertThat(testType.getOptLockRevision()).isEqualTo(1); mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId()) @@ -244,7 +248,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes GET requests.") public void getMandatoryModulesOfDistributionSetType() throws JSONException, Exception { final DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -263,7 +267,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes GET requests.") public void getOptionalModulesOfDistributionSetType() throws JSONException, Exception { final DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -274,7 +278,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("[0].name", equalTo(appType.getName()))) .andExpect(jsonPath("[0].description", equalTo(appType.getDescription()))) - .andExpect(jsonPath("[0].maxAssignments", equalTo(1))) + .andExpect(jsonPath("[0].maxAssignments", equalTo(Integer.MAX_VALUE))) .andExpect(jsonPath("[0].key", equalTo("application"))); } @@ -283,7 +287,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes/{ID} GET requests.") public void getMandatoryModuleOfDistributionSetType() throws JSONException, Exception { final DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -305,7 +309,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes/{ID} GET requests.") public void getOptionalModuleOfDistributionSetType() throws JSONException, Exception { final DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -327,7 +331,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes/{ID} DELETE requests.") public void removeMandatoryModuleToDistributionSetType() throws JSONException, Exception { DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -349,7 +353,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes/{ID} DELETE requests.") public void removeOptionalModuleToDistributionSetType() throws JSONException, Exception { DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123") + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123") .addMandatoryModuleType(osType).addOptionalModuleType(appType)); assertThat(testType.getOptLockRevision()).isEqualTo(1); assertThat(testType.getOptionalModuleTypes()).containsExactly(appType); @@ -372,7 +376,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration public void getDistributionSetType() throws Exception { DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123")); testType.setDescription("Desc1234"); testType = distributionSetManagement.updateDistributionSetType(testType); @@ -391,14 +395,14 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/DistributionSetTypes/{ID} DELETE requests (hard delete scenario).") public void deleteDistributionSetTypeUnused() throws Exception { final DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123")); - assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(4); + assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(DEFAULT_DS_TYPES + 1); mvc.perform(delete("/rest/v1/distributionsettypes/{dsId}", testType.getId())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(3); + assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(DEFAULT_DS_TYPES); } @Test @@ -406,25 +410,25 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Checks the correct behaviour of /rest/v1/DistributionSetTypes/{ID} DELETE requests (soft delete scenario).") public void deleteDistributionSetTypeUsed() throws Exception { final DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123")); distributionSetManagement.createDistributionSet( - distributionSetManagement.generateDistributionSet("sdfsd", "dsfsdf", "sdfsdf", testType, null)); + entityFactory.generateDistributionSet("sdfsd", "dsfsdf", "sdfsdf", testType, null)); - assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(4); - assertThat(distributionSetTypeRepository.count()).isEqualTo(4); + assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(DEFAULT_DS_TYPES + 1); + assertThat(distributionSetManagement.countDistributionSetsAll()).isEqualTo(1); mvc.perform(delete("/rest/v1/distributionsettypes/{smId}", testType.getId())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); - assertThat(distributionSetTypeRepository.count()).isEqualTo(4); - assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(3); + assertThat(distributionSetManagement.countDistributionSetsAll()).isEqualTo(1); + assertThat(distributionSetManagement.countDistributionSetTypesAll()).isEqualTo(DEFAULT_DS_TYPES); } @Test @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID} PUT requests.") public void updateDistributionSetTypeOnlyDescriptionAndNameUntouched() throws Exception { final DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123")); final String body = new JSONObject().put("id", testType.getId()).put("description", "foobardesc") .put("name", "nameShouldNotBeChanged").toString(); @@ -439,6 +443,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Test @Description("Checks the correct behaviour of /rest/v1/distributionsettypes GET requests with paging.") public void getDistributionSetTypesWithoutAddtionalRequestParameters() throws Exception { + + // 3 types overall (2 hawkbit tenant default, 1 test default final int types = 3; mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) @@ -450,7 +456,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Test @Description("Checks the correct behaviour of /rest/v1/distributionsettypes GET requests with paging.") public void getDistributionSetTypesWithPagingLimitRequestParameter() throws Exception { - final int types = 3; + + final int types = DEFAULT_DS_TYPES; final int limitSize = 1; mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) .param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize))) @@ -463,7 +470,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Test @Description("Checks the correct behaviour of /rest/v1/distributionsettypes GET requests with paging.") public void getDistributionSetTypesWithPagingLimitAndOffsetRequestParameter() throws Exception { - final int types = 3; + + final int types = DEFAULT_DS_TYPES; final int offsetParam = 2; final int expectedSize = types - offsetParam; mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) @@ -479,10 +487,10 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Ensures that the server is behaving as expected on invalid requests (wrong media type, wrong ID etc.).") public void invalidRequestsOnDistributionSetTypesResource() throws Exception { final DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123")); final SoftwareModuleType testSmType = softwareManagement.createSoftwareModuleType( - softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + entityFactory.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); final List types = new ArrayList<>(); types.add(testType); @@ -525,10 +533,10 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration // Modules types at creation time invalid - final DistributionSetType testNewType = distributionSetManagement.generateDistributionSetType("test123", + final DistributionSetType testNewType = entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123"); testNewType.addMandatoryModuleType( - softwareManagement.generateSoftwareModuleType("foo", "bar", "test", Integer.MAX_VALUE)); + entityFactory.generateSoftwareModuleType("foo", "bar", "test", Integer.MAX_VALUE)); mvc.perform(post("/rest/v1/distributionsettypes") .content(JsonBuilder.distributionSetTypes(Lists.newArrayList(testNewType))) @@ -562,9 +570,9 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration @Description("Search erquest of software module types.") public void searchDistributionSetTypeRsql() throws Exception { final DistributionSetType testType = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test123", "TestName123", "Desc123")); + entityFactory.generateDistributionSetType("test123", "TestName123", "Desc123")); final DistributionSetType testType2 = distributionSetManagement.createDistributionSetType( - distributionSetManagement.generateDistributionSetType("test1234", "TestName1234", "Desc123")); + entityFactory.generateDistributionSetType("test1234", "TestName1234", "Desc123")); final String rsqlFindLikeDs1OrDs2 = "name==TestName123,name==TestName1234"; @@ -578,7 +586,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractRestIntegration char character = 'a'; for (int index = 0; index < amount; index++) { final String str = String.valueOf(character); - final SoftwareModule softwareModule = softwareManagement.generateSoftwareModule(osType, str, str, str, str); + final SoftwareModule softwareModule = entityFactory.generateSoftwareModule(osType, str, str, str, str); softwareManagement.createSoftwareModule(softwareModule); character++; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java index fcdbfa918..16cc82e75 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java @@ -15,7 +15,6 @@ import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.DownloadArtifactCache; import org.eclipse.hawkbit.cache.DownloadType; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -46,11 +45,9 @@ public class MgmtDownloadResourceTest extends AbstractRestIntegrationTestWithMon @Before public void setupCache() { - final DistributionSet distributionSet = TestDataUtil.generateDistributionSet("Test", softwareManagement, - distributionSetManagement); + final DistributionSet distributionSet = testdataFactory.createDistributionSet("Test"); final SoftwareModule softwareModule = distributionSet.getModules().stream().findFirst().get(); - final Artifact artifact = TestDataUtil.generateArtifacts(artifactManagement, softwareModule.getId()).stream() - .findFirst().get(); + final Artifact artifact = testdataFactory.createLocalArtifacts(softwareModule.getId()).stream().findFirst().get(); downloadIdCache.put(downloadIdSha1, new DownloadArtifactCache(DownloadType.BY_SHA1, artifact.getSha1Hash())); } diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index fd171b7da..ff49542ce 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -24,13 +24,12 @@ import java.util.concurrent.Callable; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; @@ -73,8 +72,7 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { @Description("Testing that creating rollout with insufficient permission returns forbidden") @WithUser(allSpPermissions = true, removeFromAllPermission = "ROLLOUT_MANAGEMENT") public void createRolloutWithInsufficientPermissionReturnsForbidden() throws Exception { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); mvc.perform(post("/rest/v1/rollouts") .content(JsonBuilder.rollout("name", "desc", 10, dsA.getId(), "name==test", null)) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) @@ -92,8 +90,7 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { @Test @Description("Testing that creating rollout with not valid formed target filter query returns bad request") public void createRolloutWithNotWellFormedFilterReturnsBadRequest() throws Exception { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); mvc.perform(post("/rest/v1/rollouts") .content(JsonBuilder.rollout("name", "desc", 10, dsA.getId(), "name=test", null)) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) @@ -107,8 +104,7 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { final String targetFilterQuery = null; - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); mvc.perform(post("/rest/v1/rollouts") .content(JsonBuilder.rollout("rollout1", "desc", 10, dsA.getId(), targetFilterQuery, null)) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) @@ -121,8 +117,7 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { @Test @Description("Testing that rollout can be created") public void createRollout() throws Exception { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); postRollout("rollout1", 10, dsA.getId(), "name==target1"); } @@ -137,8 +132,7 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { @Test @Description("Testing that rollout paged list contains rollouts") public void rolloutPagedListContainsAllRollouts() throws Exception { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // setup - create 2 rollouts postRollout("rollout1", 10, dsA.getId(), "name==target1"); postRollout("rollout2", 5, dsA.getId(), "name==target2"); @@ -159,8 +153,7 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { @Test @Description("Testing that rollout paged list is limited by the query param limit") public void rolloutPagedListIsLimitedToQueryParam() throws Exception { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // setup - create 2 rollouts postRollout("rollout1", 10, dsA.getId(), "name==target1"); postRollout("rollout2", 5, dsA.getId(), "name==target2"); @@ -175,9 +168,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void retrieveRolloutGroupsForSpecificRollout() throws Exception { // setup final int amountTargets = 20; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); @@ -198,9 +190,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void startingRolloutSwitchesIntoRunningState() throws Exception { // setup final int amountTargets = 20; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); @@ -221,9 +212,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void pausingRolloutSwitchesIntoPausedState() throws Exception { // setup final int amountTargets = 20; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); @@ -248,9 +238,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void resumingRolloutSwitchesIntoRunningState() throws Exception { // setup final int amountTargets = 20; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); @@ -279,9 +268,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void startingAlreadyStartedRolloutReturnsBadRequest() throws Exception { // setup final int amountTargets = 20; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); @@ -301,9 +289,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void resumingNotStartedRolloutReturnsBadRequest() throws Exception { // setup final int amountTargets = 20; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); @@ -319,9 +306,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void startingRolloutFirstRolloutGroupIsInRunningState() throws Exception { // setup final int amountTargets = 10; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 2, dsA.getId(), "controllerId==rollout*"); @@ -345,9 +331,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void retrieveSingleRolloutGroup() throws Exception { // setup final int amountTargets = 10; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); @@ -369,9 +354,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void retrieveTargetsFromRolloutGroup() throws Exception { // setup final int amountTargets = 10; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 2, dsA.getId(), "controllerId==rollout*"); @@ -393,9 +377,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { // setup final int amountTargets = 10; final List targets = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + .createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 2, dsA.getId(), "controllerId==rollout*"); @@ -418,9 +401,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void retrieveTargetsFromRolloutGroupAfterRolloutIsStarted() throws Exception { // setup final int amountTargets = 10; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 2, dsA.getId(), "controllerId==rollout*"); @@ -443,9 +425,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void startingRolloutSwitchesIntoRunningStateAsync() throws Exception { final int amountTargets = 1000; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); @@ -468,12 +449,14 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { final int amountTargetsRollout2 = 25; final int amountTargetsRollout3 = 25; final int amountTargetsOther = 25; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargetsRollout1, "rollout1", "rollout1")); - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargetsRollout2, "rollout2", "rollout2")); - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargetsRollout3, "rollout3", "rollout3")); - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargetsOther, "other1", "other1")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement + .createTargets(testdataFactory.generateTargets(amountTargetsRollout1, "rollout1", "rollout1")); + targetManagement + .createTargets(testdataFactory.generateTargets(amountTargetsRollout2, "rollout2", "rollout2")); + targetManagement + .createTargets(testdataFactory.generateTargets(amountTargetsRollout3, "rollout3", "rollout3")); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargetsOther, "other1", "other1")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); createRollout("rollout1", 5, dsA.getId(), "controllerId==rollout1*"); final Rollout rollout2 = createRollout("rollout2", 5, dsA.getId(), "controllerId==rollout2*"); @@ -503,9 +486,8 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { public void retrieveRolloutGroupsForSpecificRolloutWithRSQLParam() throws Exception { // setup final int amountTargets = 20; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); // create rollout including the created targets with prefix 'rollout' final Rollout rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); @@ -577,7 +559,7 @@ public class MgmtRolloutResourceTest extends AbstractRestIntegrationTest { private Rollout createRollout(final String name, final int amountGroups, final long distributionSetId, final String targetFilterQuery) { - final Rollout rollout = rolloutManagement.generateRollout(); + final Rollout rollout = entityFactory.generateRollout(); rollout.setDistributionSet(distributionSetManagement.findDistributionSetById(distributionSetId)); rollout.setName(name); rollout.setTargetFilterQuery(targetFilterQuery); diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java index 2e9f1a47b..a0bf416c9 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java @@ -37,13 +37,12 @@ import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.jpa.HashGeneratorUtils; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.eclipse.hawkbit.rest.util.JsonBuilder; @@ -76,7 +75,6 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW public void assertPreparationOfRepo() { assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("no softwaremodule should be founded") .hasSize(0); - assertThat(artifactRepository.findAll()).as("no artifacts should be founded").hasSize(0); } @Test @@ -92,13 +90,13 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final String updateDescription = "newDescription1"; softwareManagement.createSoftwareModule( - softwareManagement.generateSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + entityFactory.generateSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); softwareManagement.createSoftwareModule( - softwareManagement.generateSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); + entityFactory.generateSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); softwareManagement - .createSoftwareModule(softwareManagement.generateSoftwareModule(osType, "poky", "3.0.2", null, "")); + .createSoftwareModule(entityFactory.generateSoftwareModule(osType, "poky", "3.0.2", null, "")); - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, knownSWName, knownSWVersion, + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, knownSWName, knownSWVersion, knownSWDescription, knownSWVendor); sm = softwareManagement.createSoftwareModule(sm); @@ -125,9 +123,8 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Tests the uppload of an artifact binary. The upload is executed and the content checked in the repository for completenes.") public void uploadArtifact() throws Exception { - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); - assertThat(artifactRepository.findAll()).hasSize(0); // create test file final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -166,7 +163,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW private void assertArtifact(final SoftwareModule sm, final byte[] random) throws IOException { // check result in db... // repo - assertThat(artifactRepository.findAll()).as("Wrong artifact size").hasSize(1); + assertThat(artifactManagement.countLocalArtifactsAll()).as("Wrong artifact size").isEqualTo(1); // binary assertTrue("Wrong artifact content", @@ -192,9 +189,9 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Description("Verfies that the system does not accept empty artifact uploads. Expected response: BAD REQUEST") public void emptyUploadArtifact() throws Exception { assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(0); - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final MockMultipartFile file = new MockMultipartFile("file", "orig", null, new byte[0]); @@ -207,7 +204,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Verfies that the system does not accept identical artifacts uploads for the same software module. Expected response: CONFLICT") public void duplicateUploadArtifact() throws Exception { - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -229,9 +226,9 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("verfies that option to upload artifacts with a custom defined by metadata, i.e. not the file name of the binary itself.") public void uploadArtifactWithCustomName() throws Exception { - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); - assertThat(artifactRepository.findAll()).hasSize(0); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(0); // create test file final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -246,7 +243,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW // check result in db... // repo - assertThat(artifactRepository.findAll()).as("Artifact size is wring").hasSize(1); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(1); // hashes assertThat(artifactManagement.findLocalArtifactByFilename("customFilename")).as("Local artifact is wrong") @@ -256,9 +253,9 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Verfies that the system refuses upload of an artifact where the provided hash sums do not match. Expected result: BAD REQUEST") public void uploadArtifactWithHashCheck() throws Exception { - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); - assertThat(artifactRepository.findAll()).hasSize(0); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(0); // create test file final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -300,7 +297,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Tests binary download of an artifact including verfication that the downloaded binary is consistent and that the etag header is as expected identical to the SHA1 hash of the file.") public void downloadArtifact() throws Exception { - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -328,14 +325,14 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW Arrays.equals(result2.getResponse().getContentAsByteArray(), random)); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("Softwaremodule size is wrong").hasSize(1); - assertThat(artifactRepository.findAll()).as("Wrong artifact repostiory").hasSize(2); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(2); } @Test @Description("Verifies the listing of one defined artifact assigned to a given software module. That includes the artifact metadata and download links.") public void getArtifact() throws Exception { // prepare data for test - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -361,7 +358,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Verifies the listing of all artifacts assigned to a software module. That includes the artifact metadata and download links.") public void getArtifacts() throws Exception { - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -404,7 +401,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); final MockMultipartFile file = new MockMultipartFile("file", "orig", null, random); - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); // no artifact available @@ -437,7 +434,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Verfies that the system refuses unsupported request types and answers as defined to them, e.g. NOT FOUND on a non existing resource. Or a HTTP POST for updating a resource results in METHOD NOT ALLOWED etc.") public void invalidRequestsOnSoftwaremodulesResource() throws Exception { - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final List modules = new ArrayList<>(); @@ -519,15 +516,15 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Test retrieval of all software modules the user has access to.") public void getSoftwareModules() throws Exception { - SoftwareModule os = softwareManagement.generateSoftwareModule(osType, "name1", "version1", "description1", + SoftwareModule os = entityFactory.generateSoftwareModule(osType, "name1", "version1", "description1", "vendor1"); os = softwareManagement.createSoftwareModule(os); - SoftwareModule jvm = softwareManagement.generateSoftwareModule(runtimeType, "name1", "version1", "description1", + SoftwareModule jvm = entityFactory.generateSoftwareModule(runtimeType, "name1", "version1", "description1", "vendor1"); jvm = softwareManagement.createSoftwareModule(jvm); - SoftwareModule ah = softwareManagement.generateSoftwareModule(appType, "name1", "version1", "description1", + SoftwareModule ah = entityFactory.generateSoftwareModule(appType, "name1", "version1", "description1", "vendor1"); ah = softwareManagement.createSoftwareModule(ah); @@ -590,27 +587,27 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Test @Description("Test the various filter parameters, e.g. filter by name or type of the module.") public void getSoftwareModulesWithFilterParameters() throws Exception { - SoftwareModule os1 = softwareManagement.generateSoftwareModule(osType, "osName1", "1.0.0", "description1", + SoftwareModule os1 = entityFactory.generateSoftwareModule(osType, "osName1", "1.0.0", "description1", "vendor1"); os1 = softwareManagement.createSoftwareModule(os1); - SoftwareModule jvm1 = softwareManagement.generateSoftwareModule(runtimeType, "runtimeName1", "2.0.0", + SoftwareModule jvm1 = entityFactory.generateSoftwareModule(runtimeType, "runtimeName1", "2.0.0", "description1", "vendor1"); jvm1 = softwareManagement.createSoftwareModule(jvm1); - SoftwareModule ah1 = softwareManagement.generateSoftwareModule(appType, "appName1", "3.0.0", "description1", + SoftwareModule ah1 = entityFactory.generateSoftwareModule(appType, "appName1", "3.0.0", "description1", "vendor1"); ah1 = softwareManagement.createSoftwareModule(ah1); - SoftwareModule os2 = softwareManagement.generateSoftwareModule(osType, "osName2", "1.0.1", "description2", + SoftwareModule os2 = entityFactory.generateSoftwareModule(osType, "osName2", "1.0.1", "description2", "vendor2"); os2 = softwareManagement.createSoftwareModule(os2); - SoftwareModule jvm2 = softwareManagement.generateSoftwareModule(runtimeType, "runtimeName2", "2.0.1", + SoftwareModule jvm2 = entityFactory.generateSoftwareModule(runtimeType, "runtimeName2", "2.0.1", "description2", "vendor2"); jvm2 = softwareManagement.createSoftwareModule(jvm2); - SoftwareModule ah2 = softwareManagement.generateSoftwareModule(appType, "appName2", "3.0.1", "description2", + SoftwareModule ah2 = entityFactory.generateSoftwareModule(appType, "appName2", "3.0.1", "description2", "vendor2"); ah2 = softwareManagement.createSoftwareModule(ah2); @@ -688,7 +685,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Tests GET request on /rest/v1/softwaremodules/{smId}.") public void getSoftareModule() throws Exception { - SoftwareModule os = softwareManagement.generateSoftwareModule(osType, "name1", "version1", "description1", + SoftwareModule os = entityFactory.generateSoftwareModule(osType, "name1", "version1", "description1", "vendor1"); os = softwareManagement.createSoftwareModule(os); @@ -708,7 +705,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW .andExpect(jsonPath("$_links.artifacts.href", equalTo("http://localhost/rest/v1/softwaremodules/" + os.getId() + "/artifacts"))); - SoftwareModule jvm = softwareManagement.generateSoftwareModule(runtimeType, "name1", "version1", "description1", + SoftwareModule jvm = entityFactory.generateSoftwareModule(runtimeType, "name1", "version1", "description1", "vendor1"); jvm = softwareManagement.createSoftwareModule(jvm); @@ -728,7 +725,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW .andExpect(jsonPath("$_links.artifacts.href", equalTo("http://localhost/rest/v1/softwaremodules/" + jvm.getId() + "/artifacts"))); - SoftwareModule ah = softwareManagement.generateSoftwareModule(appType, "name1", "version1", "description1", + SoftwareModule ah = entityFactory.generateSoftwareModule(appType, "name1", "version1", "description1", "vendor1"); ah = softwareManagement.createSoftwareModule(ah); @@ -755,11 +752,11 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Verfies that the create request actually results in the creation of the modules in the repository.") public void createSoftwareModules() throws JSONException, Exception { - final SoftwareModule os = softwareManagement.generateSoftwareModule(osType, "name1", "version1", "description1", + final SoftwareModule os = entityFactory.generateSoftwareModule(osType, "name1", "version1", "description1", "vendor1"); - final SoftwareModule jvm = softwareManagement.generateSoftwareModule(runtimeType, "name2", "version1", + final SoftwareModule jvm = entityFactory.generateSoftwareModule(runtimeType, "name2", "version1", "description1", "vendor1"); - final SoftwareModule ah = softwareManagement.generateSoftwareModule(appType, "name3", "version1", + final SoftwareModule ah = entityFactory.generateSoftwareModule(appType, "name3", "version1", "description1", "vendor1"); final List modules = new ArrayList<>(); @@ -841,7 +838,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW @Description("Verifies successfull deletion of software modules that are not in use, i.e. assigned to a DS.") public void deleteUnassignedSoftwareModule() throws Exception { - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -849,24 +846,20 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file1", false); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("Softwaremoudle size is wrong").hasSize(1); - assertThat(artifactRepository.findAll()).as("artifact site is wrong").hasSize(1); - assertThat(softwareModuleRepository.findAll()).as("Softwaremoudle size is wrong").hasSize(1); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(1); mvc.perform(delete("/rest/v1/softwaremodules/{smId}", sm.getId())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)) .as("After delete no softwarmodule should be available").isEmpty(); - assertThat(softwareModuleRepository.findAll()).as("After delete no softwarmodule should be available") - .isEmpty(); - assertThat(artifactRepository.findAll()).as("After delete no artifact should be available").isEmpty(); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(0); } @Test @Description("Verifies successfull deletion of software modules that are in use, i.e. assigned to a DS which should result in movinf the module to the archive.") public void deleteAssignedSoftwareModule() throws Exception { - final DistributionSet ds1 = TestDataUtil.generateDistributionSet("a", softwareManagement, - distributionSetManagement); + final DistributionSet ds1 = testdataFactory.createDistributionSet("a"); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -874,8 +867,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW ds1.findFirstModuleByType(appType).getId(), "file1", false); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(3); - assertThat(artifactRepository.findAll()).hasSize(1); - assertThat(softwareModuleRepository.findAll()).hasSize(3); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(1); mvc.perform(delete("/rest/v1/softwaremodules/{smId}", ds1.findFirstModuleByType(appType).getId())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); @@ -887,17 +879,14 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW // all 3 are now marked as deleted assertThat(softwareManagement.findSoftwareModulesAll(pageReq).getNumber()) .as("After delete no softwarmodule should be available").isEqualTo(0); - assertThat(softwareModuleRepository.findAll()).as("After delete no softwarmodule should marked as deleted") - .hasSize(3); - assertThat(artifactRepository.findAll()).as("After delete artifact should available for marked as deleted sm's") - .hasSize(1); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(1); } @Test @Description("Tests the deletion of an artifact including verfication that the artifact is actually erased in the repository and removed from the software module.") public void deleteArtifact() throws Exception { // Create 1 SM - SoftwareModule sm = softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null); + SoftwareModule sm = entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -911,7 +900,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(1); assertThat(softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts()).hasSize(2); - assertThat(artifactRepository.findAll()).hasSize(2); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(2); // delete mvc.perform(delete("/rest/v1/softwaremodules/{smId}/artifacts/{artId}", sm.getId(), artifact.getId())) @@ -920,8 +909,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW // check that only one artifact is still alive and still assigned assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).as("After the sm should be marked as deleted") .hasSize(1); - assertThat(artifactRepository.findAll()).as("After delete artifact should available for marked as deleted sm's") - .hasSize(1); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(1); assertThat(softwareManagement.findSoftwareModuleWithDetails(sm.getId()).getArtifacts()) .as("After delete artifact should available for marked as deleted sm's").hasSize(1); @@ -937,7 +925,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final String knownValue2 = "knownValue1"; final SoftwareModule sm = softwareManagement.createSoftwareModule( - softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null)); + entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null)); final JSONArray jsonArray = new JSONArray(); jsonArray.put(new JSONObject().put("key", knownKey1).put("value", knownValue1)); @@ -966,9 +954,9 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final String updateValue = "valueForUpdate"; final SoftwareModule sm = softwareManagement.createSoftwareModule( - softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null)); + entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null)); softwareManagement.createSoftwareModuleMetadata( - softwareManagement.generateSoftwareModuleMetadata(sm, knownKey, knownValue)); + entityFactory.generateSoftwareModuleMetadata(sm, knownKey, knownValue)); final JSONObject jsonObject = new JSONObject().put("key", knownKey).put("value", updateValue); @@ -990,9 +978,9 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final String knownValue = "knownValue"; final SoftwareModule sm = softwareManagement.createSoftwareModule( - softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null)); + entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null)); softwareManagement.createSoftwareModuleMetadata( - softwareManagement.generateSoftwareModuleMetadata(sm, knownKey, knownValue)); + entityFactory.generateSoftwareModuleMetadata(sm, knownKey, knownValue)); mvc.perform(delete("/rest/v1/softwaremodules/{swId}/metadata/{key}", sm.getId(), knownKey)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); @@ -1012,10 +1000,10 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW final String knownKeyPrefix = "knownKey"; final String knownValuePrefix = "knownValue"; final SoftwareModule sm = softwareManagement.createSoftwareModule( - softwareManagement.generateSoftwareModule(osType, "name 1", "version 1", null, null)); + entityFactory.generateSoftwareModule(osType, "name 1", "version 1", null, null)); for (int index = 0; index < totalMetadata; index++) { - softwareManagement.createSoftwareModuleMetadata(softwareManagement.generateSoftwareModuleMetadata( + softwareManagement.createSoftwareModuleMetadata(entityFactory.generateSoftwareModuleMetadata( softwareManagement.findSoftwareModuleById(sm.getId()), knownKeyPrefix + index, knownValuePrefix + index)); } @@ -1032,7 +1020,7 @@ public class MgmtSoftwareModuleResourceTest extends AbstractRestIntegrationTestW char character = 'a'; for (int index = 0; index < amount; index++) { final String str = String.valueOf(character); - final SoftwareModule softwareModule = softwareManagement.generateSoftwareModule(osType, str, str, str, str); + final SoftwareModule softwareModule = entityFactory.generateSoftwareModule(osType, str, str, str, str); softwareManagement.createSoftwareModule(softwareModule); character++; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java index ae137e125..363b12cde 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java @@ -24,9 +24,9 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; -import org.eclipse.hawkbit.repository.jpa.WithUser; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; @@ -55,7 +55,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes GET requests.") public void getSoftwareModuleTypes() throws Exception { SoftwareModuleType testType = softwareManagement.createSoftwareModuleType( - softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + entityFactory.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); testType.setDescription("Desc1234"); testType = softwareManagement.updateSoftwareModuleType(testType); @@ -77,7 +77,8 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT jsonPath("$content.[?(@.key==" + appType.getKey() + ")][0].name", equalTo(appType.getName()))) .andExpect(jsonPath("$content.[?(@.key==" + appType.getKey() + ")][0].description", equalTo(appType.getDescription()))) - .andExpect(jsonPath("$content.[?(@.key==" + appType.getKey() + ")][0].maxAssignments", equalTo(1))) + .andExpect(jsonPath("$content.[?(@.key==" + appType.getKey() + ")][0].maxAssignments", + equalTo(Integer.MAX_VALUE))) .andExpect(jsonPath("$content.[?(@.key==" + appType.getKey() + ")][0].key", equalTo("application"))) .andExpect(jsonPath("$content.[?(@.key==test123)][0].id", equalTo(testType.getId().intValue()))) .andExpect(jsonPath("$content.[?(@.key==test123)][0].name", equalTo("TestName123"))) @@ -96,8 +97,8 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes GET requests with sorting by MAXASSIGNMENTS field.") public void getSoftwareModuleTypesSortedByMaxAssignments() throws Exception { - SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + SoftwareModuleType testType = softwareManagement.createSoftwareModuleType( + entityFactory.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); testType.setDescription("Desc1234"); testType = softwareManagement.updateSoftwareModuleType(testType); @@ -106,30 +107,30 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT .param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:DESC")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$content.[0].id", equalTo(testType.getId().intValue()))) - .andExpect(jsonPath("$content.[0].name", equalTo("TestName123"))) - .andExpect(jsonPath("$content.[0].description", equalTo("Desc1234"))) - .andExpect(jsonPath("$content.[0].createdBy", equalTo("uploadTester"))) - .andExpect(jsonPath("$content.[0].createdAt", equalTo(testType.getCreatedAt()))) - .andExpect(jsonPath("$content.[0].lastModifiedBy", equalTo("uploadTester"))) - .andExpect(jsonPath("$content.[0].lastModifiedAt", equalTo(testType.getLastModifiedAt()))) - .andExpect(jsonPath("$content.[0].maxAssignments", equalTo(5))) - .andExpect(jsonPath("$content.[0].key", equalTo("test123"))).andExpect(jsonPath("$total", equalTo(4))); + .andExpect(jsonPath("$content.[1].id", equalTo(testType.getId().intValue()))) + .andExpect(jsonPath("$content.[1].name", equalTo("TestName123"))) + .andExpect(jsonPath("$content.[1].description", equalTo("Desc1234"))) + .andExpect(jsonPath("$content.[1].createdBy", equalTo("uploadTester"))) + .andExpect(jsonPath("$content.[1].createdAt", equalTo(testType.getCreatedAt()))) + .andExpect(jsonPath("$content.[1].lastModifiedBy", equalTo("uploadTester"))) + .andExpect(jsonPath("$content.[1].lastModifiedAt", equalTo(testType.getLastModifiedAt()))) + .andExpect(jsonPath("$content.[1].maxAssignments", equalTo(5))) + .andExpect(jsonPath("$content.[1].key", equalTo("test123"))).andExpect(jsonPath("$total", equalTo(4))); // ascending mvc.perform(get("/rest/v1/softwaremoduletypes").accept(MediaType.APPLICATION_JSON) .param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:ASC")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$content.[3].id", equalTo(testType.getId().intValue()))) - .andExpect(jsonPath("$content.[3].name", equalTo("TestName123"))) - .andExpect(jsonPath("$content.[3].description", equalTo("Desc1234"))) - .andExpect(jsonPath("$content.[3].createdBy", equalTo("uploadTester"))) - .andExpect(jsonPath("$content.[3].createdAt", equalTo(testType.getCreatedAt()))) - .andExpect(jsonPath("$content.[3].lastModifiedBy", equalTo("uploadTester"))) - .andExpect(jsonPath("$content.[3].lastModifiedAt", equalTo(testType.getLastModifiedAt()))) - .andExpect(jsonPath("$content.[3].maxAssignments", equalTo(5))) - .andExpect(jsonPath("$content.[3].key", equalTo("test123"))).andExpect(jsonPath("$total", equalTo(4))); + .andExpect(jsonPath("$content.[2].id", equalTo(testType.getId().intValue()))) + .andExpect(jsonPath("$content.[2].name", equalTo("TestName123"))) + .andExpect(jsonPath("$content.[2].description", equalTo("Desc1234"))) + .andExpect(jsonPath("$content.[2].createdBy", equalTo("uploadTester"))) + .andExpect(jsonPath("$content.[2].createdAt", equalTo(testType.getCreatedAt()))) + .andExpect(jsonPath("$content.[2].lastModifiedBy", equalTo("uploadTester"))) + .andExpect(jsonPath("$content.[2].lastModifiedAt", equalTo(testType.getLastModifiedAt()))) + .andExpect(jsonPath("$content.[2].maxAssignments", equalTo(5))) + .andExpect(jsonPath("$content.[2].key", equalTo("test123"))).andExpect(jsonPath("$total", equalTo(4))); } @Test @@ -138,9 +139,9 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT public void createSoftwareModuleTypes() throws JSONException, Exception { final List types = new ArrayList<>(); - types.add(softwareManagement.generateSoftwareModuleType("test1", "TestName1", "Desc1", 1)); - types.add(softwareManagement.generateSoftwareModuleType("test2", "TestName2", "Desc2", 2)); - types.add(softwareManagement.generateSoftwareModuleType("test3", "TestName3", "Desc3", 3)); + types.add(entityFactory.generateSoftwareModuleType("test1", "TestName1", "Desc1", 1)); + types.add(entityFactory.generateSoftwareModuleType("test2", "TestName2", "Desc2", 2)); + types.add(entityFactory.generateSoftwareModuleType("test3", "TestName3", "Desc3", 3)); final MvcResult mvcResult = mvc .perform(post("/rest/v1/softwaremoduletypes/").content(JsonBuilder.softwareModuleTypes(types)) @@ -182,8 +183,8 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes/{ID} GET requests.") public void getSoftwareModuleType() throws Exception { - SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + SoftwareModuleType testType = softwareManagement.createSoftwareModuleType( + entityFactory.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); testType.setDescription("Desc1234"); testType = softwareManagement.updateSoftwareModuleType(testType); @@ -203,8 +204,8 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes/{ID} DELETE requests (hard delete scenario).") public void deleteSoftwareModuleTypeUnused() throws Exception { - final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + final SoftwareModuleType testType = softwareManagement.createSoftwareModuleType( + entityFactory.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); assertThat(softwareManagement.countSoftwareModuleTypesAll()).isEqualTo(4); @@ -218,26 +219,24 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes/{ID} DELETE requests (soft delete scenario).") public void deleteSoftwareModuleTypeUsed() throws Exception { - final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + final SoftwareModuleType testType = softwareManagement.createSoftwareModuleType( + entityFactory.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); softwareManagement.createSoftwareModule( - softwareManagement.generateSoftwareModule(testType, "name", "version", "description", "vendor")); + entityFactory.generateSoftwareModule(testType, "name", "version", "description", "vendor")); assertThat(softwareManagement.countSoftwareModuleTypesAll()).isEqualTo(4); - assertThat(softwareModuleTypeRepository.count()).isEqualTo(4); mvc.perform(delete("/rest/v1/softwaremoduletypes/{smId}", testType.getId())).andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); - assertThat(softwareModuleTypeRepository.count()).isEqualTo(4); assertThat(softwareManagement.countSoftwareModuleTypesAll()).isEqualTo(3); } @Test @Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes/{ID} PUT requests.") public void updateSoftwareModuleTypeOnlyDescriptionAndNameUntouched() throws Exception { - final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + final SoftwareModuleType testType = softwareManagement.createSoftwareModuleType( + entityFactory.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); final String body = new JSONObject().put("id", testType.getId()).put("description", "foobardesc") .put("name", "nameShouldNotBeChanged").toString(); @@ -292,8 +291,8 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Test @Description("Ensures that the server is behaving as expected on invalid requests (wrong media type, wrong ID etc.).") public void invalidRequestsOnSoftwaremoduleTypesResource() throws Exception { - final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + final SoftwareModuleType testType = softwareManagement.createSoftwareModuleType( + entityFactory.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); final List types = new ArrayList<>(); types.add(testType); @@ -331,10 +330,10 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT @Test @Description("Search erquest of software module types.") public void searchSoftwareModuleTypeRsql() throws Exception { - final SoftwareModuleType testType = softwareManagement - .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); - final SoftwareModuleType testType2 = softwareManagement - .createSoftwareModuleType(softwareManagement.generateSoftwareModuleType("test1234", "TestName1234", "Desc123", 5)); + final SoftwareModuleType testType = softwareManagement.createSoftwareModuleType( + entityFactory.generateSoftwareModuleType("test123", "TestName123", "Desc123", 5)); + final SoftwareModuleType testType2 = softwareManagement.createSoftwareModuleType( + entityFactory.generateSoftwareModuleType("test1234", "TestName1234", "Desc123", 5)); final String rsqlFindLikeDs1OrDs2 = "name==TestName123,name==TestName1234"; @@ -349,7 +348,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractRestIntegrationT char character = 'a'; for (int index = 0; index < amount; index++) { final String str = String.valueOf(character); - final SoftwareModule softwareModule = softwareManagement.generateSoftwareModule(osType, str, str, str, str); + final SoftwareModule softwareModule = entityFactory.generateSoftwareModule(osType, str, str, str, str); softwareManagement.createSoftwareModule(softwareModule); character++; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index b1ed0eb26..6e50d1103 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -35,14 +35,12 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.ActionStatusFields; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.WithUser; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -111,7 +109,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final String knownTargetId = "targetId"; final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); actions.get(0).setStatus(Status.FINISHED); - controllerManagament.addUpdateActionStatus(controllerManagament.generateActionStatus(actions.get(0), + controllerManagament.addUpdateActionStatus(entityFactory.generateActionStatus(actions.get(0), Status.FINISHED, System.currentTimeMillis(), "testmessage")); final PageRequest pageRequest = new PageRequest(0, 1000, Direction.ASC, ActionFields.ID.getFieldName()); @@ -141,7 +139,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { public void securityTokenIsNotInResponseIfMissingPermission() throws Exception { final String knownControllerId = "knownControllerId"; - targetManagement.createTarget(targetManagement.generateTarget(knownControllerId)); + targetManagement.createTarget(entityFactory.generateTarget(knownControllerId)); mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}", knownControllerId)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("securityToken").doesNotExist()); @@ -154,7 +152,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { public void securityTokenIsInResponseWithCorrectPermission() throws Exception { final String knownControllerId = "knownControllerId"; - final Target createTarget = targetManagement.createTarget(targetManagement.generateTarget(knownControllerId)); + final Target createTarget = targetManagement.createTarget(entityFactory.generateTarget(knownControllerId)); mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}", knownControllerId)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) .andExpect(jsonPath("securityToken", equalTo(createTarget.getSecurityToken()))); @@ -185,7 +183,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { } private void createTarget(final String controllerId) { - final JpaTarget target = (JpaTarget) targetManagement.generateTarget(controllerId); + final JpaTarget target = (JpaTarget) entityFactory.generateTarget(controllerId); final JpaTargetInfo targetInfo = new JpaTargetInfo(target); targetInfo.setAddress(IpUtil.createHttpUri("127.0.0.1").toString()); target.setTargetInfo(targetInfo); @@ -197,9 +195,8 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { public void searchActionsRsql() throws Exception { // prepare test - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); - final Target createTarget = targetManagement.createTarget(targetManagement.generateTarget("knownTargetId")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); + final Target createTarget = targetManagement.createTarget(entityFactory.generateTarget("knownTargetId")); deploymentManagement.assignDistributionSet(dsA, Lists.newArrayList(createTarget)); @@ -306,7 +303,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Description("Ensures that deletion is executed if permitted.") public void deleteTargetReturnsOK() throws Exception { final String knownControllerId = "knownControllerIdDelete"; - targetManagement.createTarget(targetManagement.generateTarget(knownControllerId)); + targetManagement.createTarget(entityFactory.generateTarget(knownControllerId)); mvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId)) .andExpect(status().isOk()); @@ -342,7 +339,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final String body = new JSONObject().put("description", knownNewDescription).toString(); // prepare - final Target t = targetManagement.generateTarget(knownControllerId); + final Target t = entityFactory.generateTarget(knownControllerId); t.setDescription("old description"); t.setName(knownNameNotModiy); targetManagement.createTarget(t); @@ -525,8 +522,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final String knownControllerId = "1"; final String knownName = "someName"; createSingleTarget(knownControllerId, knownName); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); deploymentManagement.assignDistributionSet(ds.getId(), knownControllerId); // test @@ -596,8 +592,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final String knownControllerId = "1"; final String knownName = "someName"; createSingleTarget(knownControllerId, knownName); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); // assign ds to target final Long actionId = deploymentManagement.assignDistributionSet(ds.getId(), knownControllerId).getActions() .get(0); @@ -684,13 +679,13 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void createTargetsListReturnsSuccessful() throws Exception { - final Target test1 = targetManagement.generateTarget("id1"); + final Target test1 = entityFactory.generateTarget("id1"); test1.setDescription("testid1"); test1.setName("testname1"); - final Target test2 = targetManagement.generateTarget("id2"); + final Target test2 = entityFactory.generateTarget("id2"); test2.setDescription("testid2"); test2.setName("testname2"); - final Target test3 = targetManagement.generateTarget("id3"); + final Target test3 = entityFactory.generateTarget("id3"); test3.setName("testname3"); test3.setDescription("testid3"); @@ -813,7 +808,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void getActionWithEmptyResult() throws Exception { final String knownTargetId = "targetId"; - final Target target = targetManagement.generateTarget(knownTargetId); + final Target target = entityFactory.generateTarget(knownTargetId); targetManagement.createTarget(target); mvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownTargetId + "/" @@ -1028,13 +1023,12 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final PageRequest pageRequest = new PageRequest(0, 100, Direction.ASC, ActionStatusFields.ID.getFieldName()); - Target target = targetManagement.generateTarget(knownTargetId); + Target target = entityFactory.generateTarget(knownTargetId); target = targetManagement.createTarget(target); final List targets = new ArrayList<>(); targets.add(target); - final Iterator sets = TestDataUtil - .generateDistributionSets(2, softwareManagement, distributionSetManagement).iterator(); + final Iterator sets = testdataFactory.createDistributionSets(2).iterator(); final DistributionSet one = sets.next(); final DistributionSet two = sets.next(); @@ -1074,9 +1068,8 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void assignDistributionSetToTarget() throws Exception { - final Target target = targetManagement.createTarget(targetManagement.generateTarget("fsdfsd")); - final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final Target target = targetManagement.createTarget(entityFactory.generateTarget("fsdfsd")); + final DistributionSet set = testdataFactory.createDistributionSet("one"); mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") .content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON)) @@ -1088,9 +1081,8 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void assignDistributionSetToTargetWithActionTimeForcedAndTime() throws Exception { - final Target target = targetManagement.createTarget(targetManagement.generateTarget("fsdfsd")); - final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final Target target = targetManagement.createTarget(entityFactory.generateTarget("fsdfsd")); + final DistributionSet set = testdataFactory.createDistributionSet("one"); final long forceTime = System.currentTimeMillis(); final String body = new JSONObject().put("id", set.getId()).put("type", "timeforced") @@ -1110,14 +1102,13 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void invalidRequestsOnAssignDistributionSetToTarget() throws Exception { - final DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); + final DistributionSet set = testdataFactory.createDistributionSet("one"); mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") .content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); - targetManagement.createTarget(targetManagement.generateTarget("fsdfsd")); + targetManagement.createTarget(entityFactory.generateTarget("fsdfsd")); mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/fsdfsd/assignedDS") .content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON)) @@ -1207,7 +1198,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final Map knownControllerAttrs = new HashMap<>(); knownControllerAttrs.put("a", "1"); knownControllerAttrs.put("b", "2"); - final Target target = targetManagement.generateTarget(knownTargetId); + final Target target = entityFactory.generateTarget(knownTargetId); targetManagement.createTarget(target); controllerManagament.updateControllerAttributes(knownTargetId, knownControllerAttrs); @@ -1221,7 +1212,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { public void getControllerEmptyAttributesReturnsNoContent() throws Exception { // create target with attributes final String knownTargetId = "targetIdWithAttributes"; - final Target target = targetManagement.generateTarget(knownTargetId); + final Target target = entityFactory.generateTarget(knownTargetId); targetManagement.createTarget(target); // test query target over rest resource @@ -1255,7 +1246,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { } private void createSingleTarget(final String controllerId, final String name) { - final Target target = targetManagement.generateTarget(controllerId); + final Target target = entityFactory.generateTarget(controllerId); target.setName(name); target.setDescription(TARGET_DESCRIPTION_TEST); targetManagement.createTarget(target); @@ -1272,7 +1263,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { char character = 'a'; for (int index = 0; index < amount; index++) { final String str = String.valueOf(character); - final Target target = targetManagement.generateTarget(str); + final Target target = entityFactory.generateTarget(str); target.setName(str); target.setDescription(str); final Target savedTarget = targetManagement.createTarget(target); @@ -1288,7 +1279,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { private void feedbackToByInSync(final Long actionId) { final Action action = deploymentManagement.findAction(actionId); - final ActionStatus actionStatus = controllerManagement.generateActionStatus(action, Status.FINISHED, 0L); + final ActionStatus actionStatus = entityFactory.generateActionStatus(action, Status.FINISHED, 0L); controllerManagement.addUpdateActionStatus(actionStatus); } @@ -1299,10 +1290,9 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { */ private Target createTargetAndStartAction() { // prepare test - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); final Target tA = targetManagement - .createTarget(TestDataUtil.buildTargetFixture("target-id-A", "first description")); + .createTarget(testdataFactory.generateTarget("target-id-A", "first description")); // assign a distribution set so we get an active update action deploymentManagement.assignDistributionSet(dsA, Lists.newArrayList(tA)); // verify active action diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java index 9e698e0af..de0411006 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/SMRessourceMisingMongoDbConnectionTest.java @@ -14,8 +14,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import org.apache.commons.lang3.RandomStringUtils; import org.eclipse.hawkbit.exception.SpServerError; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.BeforeClass; @@ -34,7 +34,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Management API") @Stories("Download Resource") -public class SMRessourceMisingMongoDbConnectionTest extends AbstractIntegrationTest { +public class SMRessourceMisingMongoDbConnectionTest extends AbstractRestIntegrationTest { @BeforeClass public static void initialize() { @@ -48,11 +48,11 @@ public class SMRessourceMisingMongoDbConnectionTest extends AbstractIntegrationT public void missingMongoDbConnectionResultsInErrorAtUpload() throws Exception { assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); - assertThat(artifactRepository.findAll()).hasSize(0); - SoftwareModule sm = softwareManagement.generateSoftwareModule(softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", - "version 1", null, null); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(0); + SoftwareModule sm = entityFactory.generateSoftwareModule( + softwareManagement.findSoftwareModuleTypeByKey("os"), "name 1", "version 1", null, null); sm = softwareManagement.createSoftwareModule(sm); - assertThat(artifactRepository.findAll()).hasSize(0); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(0); // create test file final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); @@ -70,7 +70,7 @@ public class SMRessourceMisingMongoDbConnectionTest extends AbstractIntegrationT assertThat(exceptionInfo.getMessage()).isEqualTo(SpServerError.SP_ARTIFACT_UPLOAD_FAILED.getMessage()); // ensure that the JPA transaction was rolled back - assertThat(artifactRepository.findAll()).hasSize(0); + assertThat(artifactManagement.countLocalArtifactsAll()).isEqualTo(0); } diff --git a/hawkbit-mgmt-resource/src/test/resources/log4j2.xml b/hawkbit-mgmt-resource/src/test/resources/log4j2.xml deleted file mode 100644 index 98ea99ac9..000000000 --- a/hawkbit-mgmt-resource/src/test/resources/log4j2.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hawkbit-mgmt-resource/src/test/resources/logback.xml b/hawkbit-mgmt-resource/src/test/resources/logback.xml new file mode 100644 index 000000000..49ea574f2 --- /dev/null +++ b/hawkbit-mgmt-resource/src/test/resources/logback.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java index 7854640da..ee73a1354 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java @@ -60,6 +60,12 @@ public interface ArtifactManagement { ExternalArtifact createExternalArtifact(@NotNull ExternalArtifactProvider externalRepository, String urlSuffix, @NotNull Long moduleId); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countLocalArtifactsAll(); + + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) + Long countExternalArtifactsAll(); + /** * Persists {@link ExternalArtifactProvider} based on given properties. * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java index 114997fca..0e3f74730 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.Target; /** @@ -24,6 +25,12 @@ public final class Constants { */ public static final String SERVER_MESSAGE_PREFIX = "Update Server: "; + /** + * Number of {@link DistributionSetType}s that are generated as part of + * default tenant setup. + */ + public static final int DEFAULT_DS_TYPES_IN_TENANT = 2; + private Constants() { // Utility class. } 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 cb325cbc9..90bb7068b 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 @@ -9,10 +9,8 @@ package org.eclipse.hawkbit.repository; import java.net.URI; -import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.concurrent.TimeUnit; import javax.validation.constraints.NotNull; @@ -268,61 +266,4 @@ public interface ControllerManagement { TargetInfo updateTargetStatus(@NotNull TargetInfo targetInfo, TargetUpdateStatus status, Long lastTargetQuery, URI address); - /** - * Generates an empty {@link ActionStatus} object without persisting it. - * - * @return {@link ActionStatus} object - */ - ActionStatus generateActionStatus(); - - /** - * Generates an {@link ActionStatus} object without persisting it. - * - * @param action - * the {@link ActionStatus} belongs to. - * @param status - * as reflected by this {@link ActionStatus}. - * @param occurredAt - * time in {@link TimeUnit#MILLISECONDS} GMT when the status - * change happened. - * @param message - * optional comment - * - * @return {@link ActionStatus} object - */ - ActionStatus generateActionStatus(Action action, Status status, Long occurredAt, final String message); - - /** - * Generates an {@link ActionStatus} object without persisting it. - * - * @param action - * the {@link ActionStatus} belongs to. - * @param status - * as reflected by this {@link ActionStatus}. - * @param occurredAt - * time in {@link TimeUnit#MILLISECONDS} GMT when the status - * change happened. - * @param messages - * optional comments - * - * @return {@link ActionStatus} object - */ - ActionStatus generateActionStatus(Action action, final Status status, Long occurredAt, - final Collection messages); - - /** - * Generates an {@link ActionStatus} object without persisting it. - * - * @param action - * the {@link ActionStatus} belongs to. - * @param status - * as reflected by this {@link ActionStatus}. - * @param occurredAt - * time in {@link TimeUnit#MILLISECONDS} GMT when the status - * change happened. - * - * @return {@link ActionStatus} object - */ - ActionStatus generateActionStatus(Action action, Status status, Long occurredAt); - } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 6a6c7851d..59518f854 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -187,6 +187,12 @@ public interface DeploymentManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Long countActionsByTarget(@NotNull String rsqlParam, @NotNull Target target); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countActionStatusAll(); + + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Long countActionsAll(); + /** * counts all actions associated to a specific target. * @@ -274,6 +280,9 @@ public interface DeploymentManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Slice findActionsByTarget(@NotNull Pageable pageable, @NotNull Target target); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Slice findActionsByDistributionSet(@NotNull Pageable pageable, @NotNull DistributionSet ds); + /** * Retrieves all {@link Action}s assigned to a specific {@link Target} and a * given specification. @@ -453,13 +462,6 @@ public interface DeploymentManagement { + SpringEvalExpressions.IS_SYSTEM_CODE) Action startScheduledAction(@NotNull Action action); - /** - * Generates an empty {@link Action} without persisting it. - * - * @return {@link Action} object - */ - Action generateAction(); - /** * All {@link ActionStatus} entries in the repository. * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index 3e31a5a9c..a2e7e5213 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -473,26 +473,6 @@ public interface DistributionSetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) DistributionSetMetadata findOne(@NotNull DistributionSet distributionSet, @NotNull String key); - /** - * Generates an empty {@link DistributionSet} without persisting it. - * - * @return {@link DistributionSet} object - */ - DistributionSet generateDistributionSet(); - - DistributionSetMetadata generateDistributionSetMetadata(); - - DistributionSetMetadata generateDistributionSetMetadata(DistributionSet distributionSet, String key, String value); - - /** - * Generates an empty {@link DistributionSetType} without persisting it. - * - * @return {@link DistributionSetType} object - */ - DistributionSetType generateDistributionSetType(); - - DistributionSetType generateDistributionSetType(String key, String name, String description); - /** * Checks if a {@link DistributionSet} is currently in use by a target in * the repository. @@ -615,7 +595,4 @@ public interface DistributionSetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) DistributionSetType updateDistributionSetType(@NotNull DistributionSetType dsType); - DistributionSet generateDistributionSet(String name, String version, String description, DistributionSetType type, - Collection moduleList); - } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java new file mode 100644 index 000000000..85a2f5e76 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java @@ -0,0 +1,333 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository; + +import java.util.Collection; +import java.util.concurrent.TimeUnit; + +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; +import org.eclipse.hawkbit.repository.model.DistributionSetTag; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetFilterQuery; +import org.eclipse.hawkbit.repository.model.TargetTag; +import org.hibernate.validator.constraints.NotEmpty; + +/** + * central {@link BaseEntity} generation service. Objects are created but not + * persisted. + * + */ +public interface EntityFactory { + + /** + * Generates an empty {@link Action} without persisting it. + * + * @return {@link Action} object + */ + Action generateAction(); + + /** + * Generates an empty {@link ActionStatus} object without persisting it. + * + * @return {@link ActionStatus} object + */ + ActionStatus generateActionStatus(); + + /** + * Generates an {@link ActionStatus} object without persisting it. + * + * @param action + * the {@link ActionStatus} belongs to. + * @param status + * as reflected by this {@link ActionStatus}. + * @param occurredAt + * time in {@link TimeUnit#MILLISECONDS} GMT when the status + * change happened. + * + * @return {@link ActionStatus} object + */ + ActionStatus generateActionStatus(Action action, Status status, Long occurredAt); + + /** + * Generates an {@link ActionStatus} object without persisting it. + * + * @param action + * the {@link ActionStatus} belongs to. + * @param status + * as reflected by this {@link ActionStatus}. + * @param occurredAt + * time in {@link TimeUnit#MILLISECONDS} GMT when the status + * change happened. + * @param messages + * optional comments + * + * @return {@link ActionStatus} object + */ + ActionStatus generateActionStatus(Action action, final Status status, Long occurredAt, + final Collection messages); + + /** + * Generates an {@link ActionStatus} object without persisting it. + * + * @param action + * the {@link ActionStatus} belongs to. + * @param status + * as reflected by this {@link ActionStatus}. + * @param occurredAt + * time in {@link TimeUnit#MILLISECONDS} GMT when the status + * change happened. + * @param message + * optional comment + * + * @return {@link ActionStatus} object + */ + ActionStatus generateActionStatus(Action action, Status status, Long occurredAt, final String message); + + /** + * Generates an empty {@link DistributionSet} without persisting it. + * + * @return {@link DistributionSet} object + */ + DistributionSet generateDistributionSet(); + + /** + * Generates an {@link DistributionSet} without persisting it. + * + * @param name + * {@link DistributionSet#getName()} + * @param version + * {@link DistributionSet#getVersion()} + * @param description + * {@link DistributionSet#getDescription()} + * @param type + * {@link DistributionSet#getType()} + * @param moduleList + * {@link DistributionSet#getModules()} + * + * @return {@link DistributionSet} object + */ + DistributionSet generateDistributionSet(String name, String version, String description, DistributionSetType type, + Collection moduleList); + + /** + * Generates an empty {@link DistributionSetMetadata} element without + * persisting it. + * + * @return {@link DistributionSetMetadata} object + */ + DistributionSetMetadata generateDistributionSetMetadata(); + + /** + * Generates an {@link DistributionSetMetadata} element without persisting + * it. + * + * @param distributionSet + * {@link DistributionSetMetadata#getDistributionSet()} + * @param key + * {@link DistributionSetMetadata#getKey()} + * @param value + * {@link DistributionSetMetadata#getValue()} + * + * @return {@link DistributionSetMetadata} object + */ + DistributionSetMetadata generateDistributionSetMetadata(DistributionSet distributionSet, String key, String value); + + /** + * Generates an empty {@link DistributionSetTag} without persisting it. + * + * @return {@link DistributionSetTag} object + */ + DistributionSetTag generateDistributionSetTag(); + + /** + * Generates a {@link DistributionSetTag} without persisting it. + * + * @param name + * of the tag + * @return {@link DistributionSetTag} object + */ + DistributionSetTag generateDistributionSetTag(String name); + + /** + * Generates a {@link DistributionSetTag} without persisting it. + * + * @param name + * of the tag + * @param description + * of the tag + * @param colour + * of the tag + * @return {@link DistributionSetTag} object + */ + DistributionSetTag generateDistributionSetTag(String name, String description, String colour); + + /** + * Generates an empty {@link DistributionSetType} without persisting it. + * + * @return {@link DistributionSetType} object + */ + DistributionSetType generateDistributionSetType(); + + /** + * Generates a {@link DistributionSetType} without persisting it. + * + * @param key + * {@link DistributionSetType#getKey()} + * @param name + * {@link DistributionSetType#getName()} + * @param description + * {@link DistributionSetType#getDescription()} + * + * @return {@link DistributionSetType} object + */ + DistributionSetType generateDistributionSetType(String key, String name, String description); + + /** + * Generates an empty {@link Rollout} without persisting it. + * + * @return {@link Rollout} object + */ + Rollout generateRollout(); + + /** + * Generates an empty {@link RolloutGroup} without persisting it. + * + * @return {@link RolloutGroup} object + */ + RolloutGroup generateRolloutGroup(); + + /** + * Generates an empty {@link SoftwareModule} without persisting it. + * + * @return {@link SoftwareModule} object + */ + SoftwareModule generateSoftwareModule(); + + /** + * Generates a {@link SoftwareModule} without persisting it. + * + * @param type + * of the {@link SoftwareModule} + * @param name + * abstract name of the {@link SoftwareModule} + * @param version + * of the {@link SoftwareModule} + * @param description + * of the {@link SoftwareModule} + * @param vendor + * of the {@link SoftwareModule} + * + * @return {@link SoftwareModule} object + */ + SoftwareModule generateSoftwareModule(SoftwareModuleType type, String name, String version, String description, + String vendor); + + /** + * Generates an empty {@link SoftwareModuleMetadata} pair without persisting + * it. + * + * @return {@link SoftwareModuleMetadata} object + */ + SoftwareModuleMetadata generateSoftwareModuleMetadata(); + + /** + * Generates a {@link SoftwareModuleMetadata} pair without persisting it. + * + * @param softwareModule + * {@link SoftwareModuleMetadata#getSoftwareModule()} + * @param key + * {@link SoftwareModuleMetadata#getKey()} + * @param value + * {@link SoftwareModuleMetadata#getValue()} + * + * @return {@link SoftwareModuleMetadata} object + */ + SoftwareModuleMetadata generateSoftwareModuleMetadata(SoftwareModule softwareModule, String key, String value); + + /** + * Generates an empty {@link SoftwareModuleType} without persisting it. + * + * @return {@link SoftwareModuleType} object + */ + SoftwareModuleType generateSoftwareModuleType(); + + /** + * Generates a {@link SoftwareModuleType} without persisting it. + * + * @param key + * {@link SoftwareModuleType#getKey()} + * @param name + * {@link SoftwareModuleType#getName()} + * @param description + * {@link SoftwareModuleType#getDescription()} + * @param maxAssignments + * {@link SoftwareModuleType#getMaxAssignments()} + * + * @return {@link SoftwareModuleType} object + */ + SoftwareModuleType generateSoftwareModuleType(String key, String name, String description, int maxAssignments); + + /** + * Generates an empty {@link Target} without persisting it. + * + * @param controllerID + * of the {@link Target} + * + * @return {@link Target} object + */ + Target generateTarget(@NotEmpty String controllerID); + + /** + * Generates an empty {@link TargetFilterQuery} without persisting it. + * + * @return {@link TargetFilterQuery} object + */ + TargetFilterQuery generateTargetFilterQuery(); + + /** + * Generates an empty {@link TargetTag} without persisting it. + * + * @return {@link TargetTag} object + */ + TargetTag generateTargetTag(); + + /** + * Generates a {@link TargetTag} without persisting it. + * + * @param name + * of the tag + * @return {@link TargetTag} object + */ + TargetTag generateTargetTag(String name); + + /** + * Generates a {@link TargetTag} without persisting it. + * + * @param name + * of the tag + * @param description + * of the tag + * @param colour + * of the tag + * @return {@link TargetTag} object + */ + TargetTag generateTargetTag(String name, String description, String colour); + +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java index f28047666..bf7807db0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java @@ -62,4 +62,31 @@ public final class OffsetBasedPageRequest extends PageRequest { return "OffsetBasedPageRequest [offset=" + offset + ", getPageSize()=" + getPageSize() + ", getPageNumber()=" + getPageNumber() + "]"; } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + offset; + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof OffsetBasedPageRequest)) { + return false; + } + final OffsetBasedPageRequest other = (OffsetBasedPageRequest) obj; + if (offset != other.offset) { + return false; + } + return true; + } + } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index d1d3678f5..512b9af3c 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -150,11 +150,4 @@ public interface RolloutGroupManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_READ) RolloutGroup findRolloutGroupWithDetailedStatus(@NotNull Long rolloutGroupId); - - /** - * Generates an empty {@link RolloutGroup} without persisting it. - * - * @return {@link RolloutGroup} object - */ - RolloutGroup generateRolloutGroup(); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index 4753e70ef..2c6e85dda 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -341,11 +341,4 @@ public interface RolloutManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) Rollout updateRollout(@NotNull Rollout rollout); - /** - * Generates an empty {@link Rollout} without persisting it. - * - * @return {@link Rollout} object - */ - Rollout generateRollout(); - } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java index 9723dfd73..0934e871e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java @@ -483,50 +483,4 @@ public interface SoftwareManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) SoftwareModuleType updateSoftwareModuleType(@NotNull SoftwareModuleType sm); - /** - * Generates an empty {@link SoftwareModuleType} without persisting it. - * - * @return {@link SoftwareModuleType} object - */ - SoftwareModuleType generateSoftwareModuleType(); - - /** - * Generates an empty {@link SoftwareModule} without persisting it. - * - * @return {@link SoftwareModule} object - */ - SoftwareModule generateSoftwareModule(); - - /** - * Generates a {@link SoftwareModule} without persisting it. - * - * @param type - * of the {@link SoftwareModule} - * @param name - * abstract name of the {@link SoftwareModule} - * @param version - * of the {@link SoftwareModule} - * @param description - * of the {@link SoftwareModule} - * @param vendor - * of the {@link SoftwareModule} - * - * @return {@link SoftwareModule} object - */ - SoftwareModule generateSoftwareModule(SoftwareModuleType type, String name, String version, String description, - String vendor); - - /** - * Generates an empty {@link SoftwareModuleMetadata} pair without persisting - * it. - * - * @return {@link SoftwareModuleMetadata} object - */ - SoftwareModuleMetadata generateSoftwareModuleMetadata(); - - SoftwareModuleMetadata generateSoftwareModuleMetadata(SoftwareModule softwareModule, String key, String value); - - SoftwareModuleType generateSoftwareModuleType(final String key, final String name, final String description, - final int maxAssignments); - } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java index 19138ae9b..5cc17e09b 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -13,6 +13,8 @@ import java.util.List; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.eclipse.hawkbit.repository.report.model.SystemUsageReport; import org.eclipse.hawkbit.tenancy.TenantAware; @@ -39,7 +41,8 @@ public interface SystemManagement { * @param tenant * to delete */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) void deleteTenant(@NotNull String tenant); /** @@ -69,7 +72,10 @@ public interface SystemManagement { KeyGenerator currentTenantKeyGenerator(); /** - * Returns {@link TenantMetaData} of given and current tenant. + * Returns {@link TenantMetaData} of given and current tenant. Creates for + * new tenants also two {@link SoftwareModuleType} (os and app) and + * {@link Constants#DEFAULT_DS_TYPES_IN_TENANT} {@link DistributionSetType}s + * (os and os_app). * * DISCLAIMER: this variant is used during initial login (where the tenant * is not yet in the session). Please user {@link #getTenantMetadata()} for diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java index 85e5d0273..1b80444b5 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java @@ -245,62 +245,4 @@ public interface TagManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) TargetTag updateTargetTag(@NotNull TargetTag targetTag); - /** - * Generates an empty {@link TargetTag} without persisting it. - * - * @return {@link TargetTag} object - */ - TargetTag generateTargetTag(); - - /** - * Generates an empty {@link DistributionSetTag} without persisting it. - * - * @return {@link DistributionSetTag} object - */ - DistributionSetTag generateDistributionSetTag(); - - /** - * Generates a {@link TargetTag} without persisting it. - * - * @param name - * of the tag - * @param description - * of the tag - * @param colour - * of the tag - * @return {@link TargetTag} object - */ - TargetTag generateTargetTag(String name, String description, String colour); - - /** - * Generates a {@link TargetTag} without persisting it. - * - * @param name - * of the tag - * @return {@link TargetTag} object - */ - TargetTag generateTargetTag(String name); - - /** - * Generates a {@link DistributionSetTag} without persisting it. - * - * @param name - * of the tag - * @param description - * of the tag - * @param colour - * of the tag - * @return {@link DistributionSetTag} object - */ - DistributionSetTag generateDistributionSetTag(String name, String description, String colour); - - /** - * Generates a {@link DistributionSetTag} without persisting it. - * - * @param name - * of the tag - * @return {@link DistributionSetTag} object - */ - DistributionSetTag generateDistributionSetTag(String name); - } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java index 127e22e63..48018b9ec 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java @@ -95,11 +95,4 @@ public interface TargetFilterQueryManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) TargetFilterQuery updateTargetFilterQuery(@NotNull TargetFilterQuery targetFilterQuery); - - /** - * Generates an empty {@link TargetFilterQuery} without persisting it. - * - * @return {@link TargetFilterQuery} object - */ - TargetFilterQuery generateTargetFilterQuery(); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index 7ebb3e4b4..9280e065d 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -601,14 +601,4 @@ public interface TargetManagement { + SpringEvalExpressions.IS_CONTROLLER) List updateTargets(@NotNull Collection targets); - /** - * Generates an empty {@link Target} without persisting it. - * - * @param controllerID - * of the {@link Target} - * - * @return {@link Target} object - */ - Target generateTarget(@NotEmpty String controllerID); - } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java index 32ecdcce4..6d390c03c 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java @@ -16,6 +16,7 @@ import org.springframework.security.access.prepost.PreAuthorize; * Management service for statistics of a single tenant. * */ +@FunctionalInterface public interface TenantStatsManagement { /** diff --git a/hawkbit-repository/hawkbit-repository-core/pom.xml b/hawkbit-repository/hawkbit-repository-core/pom.xml new file mode 100644 index 000000000..77e20cf3c --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-core/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-repository + 0.2.0-SNAPSHOT + + hawkbit-repository-core + hawkBit :: Repository Core Implementation Support + + + + org.eclipse.hawkbit + hawkbit-repository-api + ${project.version} + + + + \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemManagementHolder.java b/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemManagementHolder.java similarity index 100% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemManagementHolder.java rename to hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/SystemManagementHolder.java diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml index e61ad8325..49a19530f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/pom.xml +++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml @@ -52,19 +52,20 @@ hawkbit-repository-api ${project.version} + + org.eclipse.hawkbit + hawkbit-repository-core + ${project.version} + org.eclipse.hawkbit hawkbit-artifact-repository-mongo ${project.version} - + com.google.guava guava - - net._01001111 - jlorem - org.springframework.boot spring-boot @@ -96,6 +97,12 @@ + + org.eclipse.hawkbit + hawkbit-repository-test + ${project.version} + test + com.h2database h2 @@ -121,21 +128,11 @@ allure-junit-adaptor test - - - - - org.springframework.security spring-security-aspects test - - - org.springframework.boot - spring-boot-starter-test - test - +
org.springframework spring-test @@ -150,12 +147,7 @@ org.easytesting fest-assert test - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - test - + org.springframework.security spring-security-config @@ -170,7 +162,6 @@ cz.jirutka.rsql rsql-parser - diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/fbExcludeFilter.xml b/hawkbit-repository/hawkbit-repository-jpa/src/fbExcludeFilter.xml deleted file mode 100644 index bd85e5e73..000000000 --- a/hawkbit-repository/hawkbit-repository-jpa/src/fbExcludeFilter.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/EnableJpaRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/EnableJpaRepository.java new file mode 100644 index 000000000..f15ec8c82 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/EnableJpaRepository.java @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.stereotype.Controller; + +/** + * Annotation to enable {@link ComponentScan} in the resource package to setup + * all {@link Controller} annotated classes and setup the REST-Resources for the + * Management API. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Configuration +@ComponentScan +@Import(RepositoryApplicationConfiguration.class) +public @interface EnableJpaRepository { + +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index afb6f4245..5f5a46c0b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -47,11 +47,10 @@ import org.springframework.validation.beanvalidation.MethodValidationPostProcess @EnableTransactionManagement @EnableJpaAuditing @EnableAspectJAutoProxy -@Configuration @ComponentScan +@Configuration @EnableAutoConfiguration public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { - /** * @return the {@link SystemSecurityContext} singleton bean which make it * accessible in beans which cannot access the service directly, diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java index 93e0afc00..ea0e5c34f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java @@ -288,4 +288,14 @@ public class JpaArtifactManagement implements ArtifactManagement { final boolean overrideExisting, final String contentType) { return createLocalArtifact(inputStream, moduleId, filename, null, null, overrideExisting, contentType); } + + @Override + public Long countLocalArtifactsAll() { + return localArtifactRepository.count(); + } + + @Override + public Long countExternalArtifactsAll() { + return externalArtifactRepository.count(); + } } 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 653d02870..43b8534af 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 @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.repository.jpa; import java.net.URI; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Map; @@ -55,7 +54,6 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -438,33 +436,4 @@ public class JpaControllerManagement implements ControllerManagement { return updateTargetStatus(target, null, System.currentTimeMillis(), address); } - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public ActionStatus generateActionStatus() { - return new JpaActionStatus(); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public ActionStatus generateActionStatus(final Action action, final Status status, final Long occurredAt, - final String message) { - return new JpaActionStatus((JpaAction) action, status, occurredAt, message); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public ActionStatus generateActionStatus(final Action action, final Status status, final Long occurredAt, - final Collection messages) { - - final ActionStatus result = new JpaActionStatus((JpaAction) action, status, occurredAt, null); - messages.forEach(result::addMessage); - - return result; - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public ActionStatus generateActionStatus(final Action action, final Status status, final Long occurredAt) { - return new JpaActionStatus(action, status, occurredAt); - } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index aa843d8fc..cefa5e937 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -84,7 +84,6 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -155,7 +154,8 @@ public class JpaDeploymentManagement implements DeploymentManagement { @Transactional(isolation = Isolation.READ_COMMITTED) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, final String... targetIDs) { - return assignDistributionSet(dsID, ActionType.FORCED, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, targetIDs); + return assignDistributionSet(dsID, ActionType.FORCED, + org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, targetIDs); } @Override @@ -683,12 +683,6 @@ public class JpaDeploymentManagement implements DeploymentManagement { return actionRepository.findByRolloutAndStatus((JpaRollout) rollout, actionStatus); } - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public Action generateAction() { - return new JpaAction(); - } - @Override public Page findActionStatusAll(final Pageable pageable) { return convertAcSPage(actionStatusRepository.findAll(pageable), pageable); @@ -697,4 +691,19 @@ public class JpaDeploymentManagement implements DeploymentManagement { private static Page convertAcSPage(final Page findAll, final Pageable pageable) { return new PageImpl<>(new ArrayList<>(findAll.getContent()), pageable, findAll.getTotalElements()); } + + @Override + public Long countActionStatusAll() { + return actionStatusRepository.count(); + } + + @Override + public Long countActionsAll() { + return actionRepository.count(); + } + + @Override + public Slice findActionsByDistributionSet(final Pageable pageable, final DistributionSet ds) { + return actionRepository.findByDistributionSet(pageable, (JpaDistributionSet) ds); + } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index 426733bcc..e5a38cf51 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -62,7 +62,6 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -739,45 +738,6 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { return toggleTagAssignment(sets.stream().map(ds -> ds.getId()).collect(Collectors.toList()), tag.getName()); } - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public DistributionSetType generateDistributionSetType() { - return new JpaDistributionSetType(); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public DistributionSet generateDistributionSet() { - return new JpaDistributionSet(); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public DistributionSetMetadata generateDistributionSetMetadata() { - return new JpaDistributionSetMetadata(); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public DistributionSetMetadata generateDistributionSetMetadata(final DistributionSet distributionSet, - final String key, final String value) { - return new JpaDistributionSetMetadata(key, distributionSet, value); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public DistributionSetType generateDistributionSetType(final String key, final String name, - final String description) { - return new JpaDistributionSetType(key, name, description); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public DistributionSet generateDistributionSet(final String name, final String version, final String description, - final DistributionSetType type, final Collection moduleList) { - return new JpaDistributionSet(name, version, description, type, moduleList); - } - @Override public Long countDistributionSetsByType(final DistributionSetType type) { return distributionSetRepository.countByType((JpaDistributionSetType) type); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java new file mode 100644 index 000000000..88c34ad11 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java @@ -0,0 +1,201 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.util.Collection; + +import org.eclipse.hawkbit.repository.EntityFactory; +import org.eclipse.hawkbit.repository.jpa.model.JpaAction; +import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; +import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; +import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; +import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; +import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; +import org.eclipse.hawkbit.repository.model.DistributionSetTag; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetFilterQuery; +import org.eclipse.hawkbit.repository.model.TargetTag; +import org.springframework.stereotype.Service; + +/** + * JPA Implementation of {@link EntityFactory}. + * + */ +@Service +public class JpaEntityFactory implements EntityFactory { + + @Override + public DistributionSetType generateDistributionSetType() { + return new JpaDistributionSetType(); + } + + @Override + public DistributionSet generateDistributionSet() { + return new JpaDistributionSet(); + } + + @Override + public DistributionSetMetadata generateDistributionSetMetadata() { + return new JpaDistributionSetMetadata(); + } + + @Override + public DistributionSetMetadata generateDistributionSetMetadata(final DistributionSet distributionSet, + final String key, final String value) { + return new JpaDistributionSetMetadata(key, distributionSet, value); + } + + @Override + public DistributionSetType generateDistributionSetType(final String key, final String name, + final String description) { + return new JpaDistributionSetType(key, name, description); + } + + @Override + public DistributionSet generateDistributionSet(final String name, final String version, final String description, + final DistributionSetType type, final Collection moduleList) { + return new JpaDistributionSet(name, version, description, type, moduleList); + } + + @Override + public Target generateTarget(final String controllerId) { + return new JpaTarget(controllerId); + } + + @Override + public TargetTag generateTargetTag() { + return new JpaTargetTag(); + } + + @Override + public DistributionSetTag generateDistributionSetTag() { + return new JpaDistributionSetTag(); + } + + @Override + public TargetTag generateTargetTag(final String name, final String description, final String colour) { + return new JpaTargetTag(name, description, colour); + } + + @Override + public DistributionSetTag generateDistributionSetTag(final String name, final String description, + final String colour) { + return new JpaDistributionSetTag(name, description, colour); + } + + @Override + public TargetTag generateTargetTag(final String name) { + return new JpaTargetTag(name); + } + + @Override + public DistributionSetTag generateDistributionSetTag(final String name) { + return new JpaDistributionSetTag(name); + } + + @Override + public TargetFilterQuery generateTargetFilterQuery() { + return new JpaTargetFilterQuery(); + } + + @Override + public SoftwareModuleType generateSoftwareModuleType() { + return new JpaSoftwareModuleType(); + } + + @Override + public SoftwareModule generateSoftwareModule() { + return new JpaSoftwareModule(); + } + + @Override + public SoftwareModule generateSoftwareModule(final SoftwareModuleType type, final String name, final String version, + final String description, final String vendor) { + + return new JpaSoftwareModule(type, name, version, description, vendor); + } + + @Override + public SoftwareModuleMetadata generateSoftwareModuleMetadata() { + return new JpaSoftwareModuleMetadata(); + } + + @Override + public SoftwareModuleMetadata generateSoftwareModuleMetadata(final SoftwareModule softwareModule, final String key, + final String value) { + return new JpaSoftwareModuleMetadata(key, softwareModule, value); + } + + @Override + public SoftwareModuleType generateSoftwareModuleType(final String key, final String name, final String description, + final int maxAssignments) { + return new JpaSoftwareModuleType(key, name, description, maxAssignments); + } + + @Override + public Rollout generateRollout() { + return new JpaRollout(); + } + + @Override + public RolloutGroup generateRolloutGroup() { + return new JpaRolloutGroup(); + } + + @Override + public Action generateAction() { + return new JpaAction(); + } + + @Override + public ActionStatus generateActionStatus() { + return new JpaActionStatus(); + } + + @Override + public ActionStatus generateActionStatus(final Action action, final Status status, final Long occurredAt, + final String message) { + return new JpaActionStatus((JpaAction) action, status, occurredAt, message); + } + + @Override + public ActionStatus generateActionStatus(final Action action, final Status status, final Long occurredAt, + final Collection messages) { + + final ActionStatus result = new JpaActionStatus((JpaAction) action, status, occurredAt, null); + messages.forEach(result::addMessage); + + return result; + } + + @Override + public ActionStatus generateActionStatus(final Action action, final Status status, final Long occurredAt) { + return new JpaActionStatus(action, status, occurredAt); + } + +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java index ea6214824..7d176d40a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java @@ -49,7 +49,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -201,9 +200,4 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement { return new PageImpl<>(targetWithActionStatus, pageRequest, totalCount); } - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public RolloutGroup generateRolloutGroup() { - return new JpaRolloutGroup(); - } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index b3e451932..d412d2164 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -667,9 +667,4 @@ public class JpaRolloutManagement implements RolloutManagement { return ((float) finished / (float) totalGroup) * 100; } - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public Rollout generateRollout() { - return new JpaRollout(); - } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index eceec20d1..2fc057aec 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -62,7 +62,6 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -663,44 +662,4 @@ public class JpaSoftwareManagement implements SoftwareManagement { return types.stream().map(this::createSoftwareModuleType).collect(Collectors.toList()); } - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public SoftwareModuleType generateSoftwareModuleType() { - return new JpaSoftwareModuleType(); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public SoftwareModule generateSoftwareModule() { - return new JpaSoftwareModule(); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public SoftwareModule generateSoftwareModule(final SoftwareModuleType type, final String name, final String version, - final String description, final String vendor) { - - return new JpaSoftwareModule(type, name, version, description, vendor); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public SoftwareModuleMetadata generateSoftwareModuleMetadata() { - return new JpaSoftwareModuleMetadata(); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public SoftwareModuleMetadata generateSoftwareModuleMetadata(final SoftwareModule softwareModule, final String key, - final String value) { - return new JpaSoftwareModuleMetadata(key, softwareModule, value); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public SoftwareModuleType generateSoftwareModuleType(final String key, final String name, final String description, - final int maxAssignments) { - return new JpaSoftwareModuleType(key, name, description, maxAssignments); - } - } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index 05d5d486e..be46362a5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -259,28 +259,6 @@ public class JpaSystemManagement implements SystemManagement { return tenantMetaDataRepository.save((JpaTenantMetaData) metaData); } - private DistributionSetType createStandardSoftwareDataSetup() { - final SoftwareModuleType eclApp = softwareModuleTypeRepository.save(new JpaSoftwareModuleType("application", - "ECL Application", "Edge Controller Linux base application type", 1)); - final SoftwareModuleType eclOs = softwareModuleTypeRepository.save( - new JpaSoftwareModuleType("os", "ECL OS", "Edge Controller Linux operation system image type", 1)); - final SoftwareModuleType eclJvm = softwareModuleTypeRepository.save( - new JpaSoftwareModuleType("runtime", "ECL JVM", "Edge Controller Linux java virtual machine type.", 1)); - - distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("ecl_os", "OS only", - "Standard Edge Controller Linux distribution set type.").addMandatoryModuleType(eclOs)); - - distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("ecl_os_app", - "OS with optional app", "Standard Edge Controller Linux distribution set type. OS only.") - .addMandatoryModuleType(eclOs).addOptionalModuleType(eclApp)); - - return distributionSetTypeRepository.save( - (JpaDistributionSetType) new JpaDistributionSetType("ecl_os_app_jvm", "OS with optional app and jvm", - "Standard Edge Controller Linux distribution set type. OS with optional application.") - .addMandatoryModuleType(eclOs).addOptionalModuleType(eclApp) - .addOptionalModuleType(eclJvm)); - } - /** * A implementation of the {@link KeyGenerator} to generate a key based on * either the {@code createInitialTenant} thread local and the @@ -303,4 +281,18 @@ public class JpaSystemManagement implements SystemManagement { initialTenantCreation.toUpperCase()); } } + + private DistributionSetType createStandardSoftwareDataSetup() { + final SoftwareModuleType app = softwareModuleTypeRepository + .save(new JpaSoftwareModuleType("application", "Application", "Application Addons", Integer.MAX_VALUE)); + final SoftwareModuleType os = softwareModuleTypeRepository + .save(new JpaSoftwareModuleType("os", "Firmware", "Core firmware or operationg system", 1)); + + distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("os_app", "With app(s)", + "Default type with Firmware/OS and optional app(s).").addMandatoryModuleType(os) + .addOptionalModuleType(app)); + + return distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("os", "OS only", + "Default type with Firmware/OS only.").addMandatoryModuleType(os)); + } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java index 9a44f1319..29fbb8a2b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java @@ -41,7 +41,6 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -287,41 +286,4 @@ public class JpaTagManagement implements TagManagement { return convertDsPage(distributionSetTagRepository.findAll(spec, pageable), pageable); } - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public TargetTag generateTargetTag() { - return new JpaTargetTag(); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public DistributionSetTag generateDistributionSetTag() { - return new JpaDistributionSetTag(); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public TargetTag generateTargetTag(final String name, final String description, final String colour) { - return new JpaTargetTag(name, description, colour); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public DistributionSetTag generateDistributionSetTag(final String name, final String description, - final String colour) { - return new JpaDistributionSetTag(name, description, colour); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public TargetTag generateTargetTag(final String name) { - return new JpaTargetTag(name); - } - - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public DistributionSetTag generateDistributionSetTag(final String name) { - return new JpaDistributionSetTag(name); - } - } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java index 8bc4a0833..296483bf8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java @@ -109,9 +109,4 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme return targetFilterQueryRepository.save((JpaTargetFilterQuery) targetFilterQuery); } - @Override - public TargetFilterQuery generateTargetFilterQuery() { - return new JpaTargetFilterQuery(); - } - } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java index 8d2fabac7..892ddc771 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java @@ -61,7 +61,6 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.validation.annotation.Validated; @@ -403,7 +402,6 @@ public class JpaTargetManagement implements TargetManagement { @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) public Target unAssignTag(final String controllerID, final TargetTag targetTag) { - // TODO : optimize this, findone? final List allTargets = new ArrayList<>(targetRepository .findAll(TargetSpecifications.byControllerIdWithStatusAndTagsInJoin(Arrays.asList(controllerID)))); final List unAssignTag = unAssignTag(allTargets, targetTag); @@ -673,9 +671,4 @@ public class JpaTargetManagement implements TargetManagement { return resultList; } - @Override - @Transactional(propagation = Propagation.SUPPORTS) - public Target generateTarget(final String controllerId) { - return new JpaTarget(controllerId); - } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/CacheFieldEntityListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/CacheFieldEntityListener.java index dddc01d91..b303f33a4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/CacheFieldEntityListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/CacheFieldEntityListener.java @@ -53,16 +53,11 @@ public class CacheFieldEntityListener { @SuppressWarnings("rawtypes") final String id = ((Identifiable) target).getId().toString(); final Class type = target.getClass(); - findCacheFields(type, id, new CacheFieldCallback() { - @Override - public void fromCache(final Field field, final String cacheKey, final Serializable id) - throws IllegalAccessException { - final Cache cache = cacheManager.getCache(type.getName()); - final ValueWrapper valueWrapper = cache - .get(CacheKeys.entitySpecificCacheKey(id.toString(), cacheKey)); - if (valueWrapper != null && valueWrapper.get() != null) { - FieldUtils.writeField(field, target, valueWrapper.get(), true); - } + findCacheFields(type, id, (field, cacheKey, id1) -> { + final Cache cache = cacheManager.getCache(type.getName()); + final ValueWrapper valueWrapper = cache.get(CacheKeys.entitySpecificCacheKey(id1.toString(), cacheKey)); + if (valueWrapper != null && valueWrapper.get() != null) { + FieldUtils.writeField(field, target, valueWrapper.get(), true); } }); } @@ -82,13 +77,9 @@ public class CacheFieldEntityListener { @SuppressWarnings("rawtypes") final String id = ((Identifiable) target).getId().toString(); final Class type = target.getClass(); - findCacheFields(type, id, new CacheFieldCallback() { - @Override - public void fromCache(final Field field, final String cacheKey, final Serializable id) - throws IllegalAccessException { - final Cache cache = cacheManager.getCache(type.getName()); - cache.evict(CacheKeys.entitySpecificCacheKey(id.toString(), cacheKey)); - } + findCacheFields(type, id, (field, cacheKey, id1) -> { + final Cache cache = cacheManager.getCache(type.getName()); + cache.evict(CacheKeys.entitySpecificCacheKey(id1.toString(), cacheKey)); }); } } @@ -109,6 +100,7 @@ public class CacheFieldEntityListener { } } + @FunctionalInterface private interface CacheFieldCallback { /** * callback methods which is called by the diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupConditionEvaluator.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupConditionEvaluator.java index 642386c69..0690f72ec 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupConditionEvaluator.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rollout/condition/RolloutGroupConditionEvaluator.java @@ -12,8 +12,9 @@ import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; /** - * + * Verifies {@link RolloutGroup#getErrorConditionExp()}. */ +@FunctionalInterface public interface RolloutGroupConditionEvaluator { default boolean verifyExpression(final String expression) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java new file mode 100644 index 000000000..342e0792b --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import org.eclipse.hawkbit.cache.TenantAwareCacheManager; +import org.eclipse.hawkbit.repository.util.AbstractIntegrationTest; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.data.mongodb.gridfs.GridFsOperations; + +@SpringApplicationConfiguration(classes = { org.eclipse.hawkbit.RepositoryApplicationConfiguration.class, + TestConfiguration.class }) +public abstract class AbstractJpaIntegrationTest extends AbstractIntegrationTest { + + @PersistenceContext + protected EntityManager entityManager; + + @Autowired + protected TargetRepository targetRepository; + + @Autowired + protected ActionRepository actionRepository; + + @Autowired + protected DistributionSetRepository distributionSetRepository; + + @Autowired + protected SoftwareModuleRepository softwareModuleRepository; + + @Autowired + protected TenantMetaDataRepository tenantMetaDataRepository; + + @Autowired + protected DistributionSetTypeRepository distributionSetTypeRepository; + + @Autowired + protected SoftwareModuleTypeRepository softwareModuleTypeRepository; + + @Autowired + protected TargetTagRepository targetTagRepository; + + @Autowired + protected DistributionSetTagRepository distributionSetTagRepository; + + @Autowired + protected SoftwareModuleMetadataRepository softwareModuleMetadataRepository; + + @Autowired + protected ActionStatusRepository actionStatusRepository; + + @Autowired + protected ExternalArtifactRepository externalArtifactRepository; + + @Autowired + protected LocalArtifactRepository artifactRepository; + + @Autowired + protected TargetInfoRepository targetInfoRepository; + + @Autowired + protected GridFsOperations operations; + + @Autowired + protected RolloutGroupRepository rolloutGroupRepository; + + @Autowired + protected RolloutRepository rolloutRepository; + + @Autowired + protected TenantAwareCacheManager cacheManager; + + private static CIMySqlTestDatabase tesdatabase; + + @BeforeClass + public static void beforeClass() { + createTestdatabaseAndStart(); + } + + private static void createTestdatabaseAndStart() { + if ("MYSQL".equals(System.getProperty("spring.jpa.database"))) { + tesdatabase = new CIMySqlTestDatabase(); + tesdatabase.before(); + } + } + + @AfterClass + public static void afterClass() { + if (tesdatabase != null) { + tesdatabase.after(); + } + } + +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java new file mode 100644 index 000000000..38a02c213 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import org.eclipse.hawkbit.cache.TenantAwareCacheManager; +import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.data.mongodb.gridfs.GridFsOperations; + +@SpringApplicationConfiguration(classes = { org.eclipse.hawkbit.RepositoryApplicationConfiguration.class, + TestConfiguration.class }) +public abstract class AbstractJpaIntegrationTestWithMongoDB extends AbstractIntegrationTestWithMongoDB { + + @PersistenceContext + protected EntityManager entityManager; + + @Autowired + protected TargetRepository targetRepository; + + @Autowired + protected ActionRepository actionRepository; + + @Autowired + protected DistributionSetRepository distributionSetRepository; + + @Autowired + protected SoftwareModuleRepository softwareModuleRepository; + + @Autowired + protected TenantMetaDataRepository tenantMetaDataRepository; + + @Autowired + protected DistributionSetTypeRepository distributionSetTypeRepository; + + @Autowired + protected SoftwareModuleTypeRepository softwareModuleTypeRepository; + + @Autowired + protected TargetTagRepository targetTagRepository; + + @Autowired + protected DistributionSetTagRepository distributionSetTagRepository; + + @Autowired + protected SoftwareModuleMetadataRepository softwareModuleMetadataRepository; + + @Autowired + protected ActionStatusRepository actionStatusRepository; + + @Autowired + protected ExternalArtifactRepository externalArtifactRepository; + + @Autowired + protected LocalArtifactRepository artifactRepository; + + @Autowired + protected TargetInfoRepository targetInfoRepository; + + @Autowired + protected GridFsOperations operations; + + @Autowired + protected RolloutGroupRepository rolloutGroupRepository; + + @Autowired + protected RolloutRepository rolloutRepository; + + @Autowired + protected TenantAwareCacheManager cacheManager; + + private static CIMySqlTestDatabase tesdatabase; + + @BeforeClass + public static void beforeClass() { + createTestdatabaseAndStart(); + } + + private static void createTestdatabaseAndStart() { + if ("MYSQL".equals(System.getProperty("spring.jpa.database"))) { + tesdatabase = new CIMySqlTestDatabase(); + tesdatabase.before(); + } + } + + @AfterClass + public static void afterClass() { + if (tesdatabase != null) { + tesdatabase.after(); + } + } + +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementNoMongoDbTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementNoMongoDbTest.java index fd91a2158..42b759b74 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementNoMongoDbTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementNoMongoDbTest.java @@ -29,7 +29,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Repository") @Stories("Artifact Management") -public class ArtifactManagementNoMongoDbTest extends AbstractIntegrationTest { +public class ArtifactManagementNoMongoDbTest extends AbstractJpaIntegrationTest { @BeforeClass public static void initialize() { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java index 4c37c00e3..ea6e8e01b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java @@ -32,6 +32,7 @@ import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.util.WithUser; import org.junit.Test; import org.slf4j.LoggerFactory; import org.springframework.data.mongodb.core.query.Criteria; @@ -50,7 +51,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Repository") @Stories("Artifact Management") -public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { +public class ArtifactManagementTest extends AbstractJpaIntegrationTestWithMongoDB { public ArtifactManagementTest() { LOG = LoggerFactory.getLogger(ArtifactManagementTest.class); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java index c79c47af9..f33c5c170 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java @@ -33,14 +33,13 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("Controller Management") -public class ControllerManagementTest extends AbstractIntegrationTest { +public class ControllerManagementTest extends AbstractJpaIntegrationTest { @Test @Description("Controller adds a new action status.") public void controllerAddsActionStatus() { final Target target = new JpaTarget("4712"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList<>(); @@ -99,8 +98,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { // mock final Target target = new JpaTarget("Rabbit"); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList<>(); toAssign.add(savedTarget); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java index 0900973d0..3d0114d67 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java @@ -67,7 +67,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Repository") @Stories("Deployment Management") -public class DeploymentManagementTest extends AbstractIntegrationTest { +public class DeploymentManagementTest extends AbstractJpaIntegrationTest { @Autowired private EventBus eventBus; @@ -75,9 +75,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Test @Description("Test verifies that the repistory retrieves the action including all defined (lazy) details.") public void findActionWithLazyDetails() { - final DistributionSet testDs = TestDataUtil.generateDistributionSet("TestDs", "1.0", softwareManagement, - distributionSetManagement, new ArrayList()); - final List testTarget = targetManagement.createTargets(TestDataUtil.generateTargets(1)); + final DistributionSet testDs = testdataFactory.createDistributionSet("TestDs", "1.0", + new ArrayList()); + final List testTarget = testdataFactory.createTargets(1); // one action with one action status is generated final Long actionId = deploymentManagement.assignDistributionSet(testDs, testTarget).getActions().get(0); final Action action = deploymentManagement.findActionWithDetails(actionId); @@ -91,9 +91,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Test @Description("Test verifies that the custom query to find all actions include the count of action status is working correctly") public void findActionsWithStatusCountByTarget() { - final DistributionSet testDs = TestDataUtil.generateDistributionSet("TestDs", "1.0", softwareManagement, - distributionSetManagement, new ArrayList()); - final List testTarget = targetManagement.createTargets(TestDataUtil.generateTargets(1)); + final DistributionSet testDs = testdataFactory.createDistributionSet("TestDs", "1.0", + new ArrayList()); + final List testTarget = testdataFactory.createTargets(1); // one action with one action status is generated final Action action = deploymentManagement.findActionWithDetails( deploymentManagement.assignDistributionSet(testDs, testTarget).getActions().get(0)); @@ -114,8 +114,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { public void assignAndUnassignDistributionSetToTag() { final List assignDS = new ArrayList<>(); for (int i = 0; i < 4; i++) { - assignDS.add(TestDataUtil.generateDistributionSet("DS" + i, "1.0", softwareManagement, - distributionSetManagement, new ArrayList()).getId()); + assignDS.add(testdataFactory.createDistributionSet("DS" + i, "1.0", new ArrayList()) + .getId()); } // not exists assignDS.add(Long.valueOf(100)); @@ -154,14 +154,13 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Description("Test verifies that an assignment with automatic cancelation works correctly even if the update is split into multiple partitions on the database.") public void multiAssigmentHistoryOverMultiplePagesResultsInTwoActiveAction() { - final DistributionSet cancelDs = TestDataUtil.generateDistributionSet("Canceled DS", "1.0", softwareManagement, - distributionSetManagement, new ArrayList()); + final DistributionSet cancelDs = testdataFactory.createDistributionSet("Canceled DS", "1.0", + new ArrayList()); - final DistributionSet cancelDs2 = TestDataUtil.generateDistributionSet("Canceled DS", "1.2", softwareManagement, - distributionSetManagement, new ArrayList()); + final DistributionSet cancelDs2 = testdataFactory.createDistributionSet("Canceled DS", "1.2", + new ArrayList()); - List targets = targetManagement - .createTargets(TestDataUtil.generateTargets(Constants.MAX_ENTRIES_IN_STATEMENT + 10)); + List targets = testdataFactory.createTargets(Constants.MAX_ENTRIES_IN_STATEMENT + 10); targets = deploymentManagement.assignDistributionSet(cancelDs, targets).getAssignedEntity(); targets = deploymentManagement.assignDistributionSet(cancelDs2, targets).getAssignedEntity(); @@ -179,15 +178,12 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { + "also the target goes back to IN_SYNC as no open action is left.") public void manualCancelWithMultipleAssignmentsCancelLastOneFirst() { JpaTarget target = new JpaTarget("4712"); - final JpaDistributionSet dsFirst = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement, true); + final DistributionSet dsFirst = testdataFactory.createDistributionSet("", true); dsFirst.setRequiredMigrationStep(true); - final JpaDistributionSet dsSecond = TestDataUtil.generateDistributionSet("2", softwareManagement, - distributionSetManagement, true); - final JpaDistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, - distributionSetManagement, true); + final DistributionSet dsSecond = testdataFactory.createDistributionSet("2", true); + final DistributionSet dsInstalled = testdataFactory.createDistributionSet("installed", true); - ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet(dsInstalled); + ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet((JpaDistributionSet) dsInstalled); target = (JpaTarget) targetManagement.createTarget(target); // check initial status @@ -236,15 +232,12 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { + "also the target goes back to IN_SYNC as no open action is left.") public void manualCancelWithMultipleAssignmentsCancelMiddleOneFirst() { JpaTarget target = new JpaTarget("4712"); - final JpaDistributionSet dsFirst = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement, true); + final DistributionSet dsFirst = testdataFactory.createDistributionSet("", true); dsFirst.setRequiredMigrationStep(true); - final JpaDistributionSet dsSecond = TestDataUtil.generateDistributionSet("2", softwareManagement, - distributionSetManagement, true); - final JpaDistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, - distributionSetManagement, true); + final DistributionSet dsSecond = testdataFactory.createDistributionSet("2", true); + final DistributionSet dsInstalled = testdataFactory.createDistributionSet("installed", true); - ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet(dsInstalled); + ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet((JpaDistributionSet) dsInstalled); target = (JpaTarget) targetManagement.createTarget(target); // check initial status @@ -295,13 +288,11 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { public void forceQuitSetActionToInactive() throws InterruptedException { JpaTarget target = new JpaTarget("4712"); - final JpaDistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, - distributionSetManagement, true); - ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet(dsInstalled); + final DistributionSet dsInstalled = testdataFactory.createDistributionSet("installed", true); + ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet((JpaDistributionSet) dsInstalled); target = (JpaTarget) targetManagement.createTarget(target); - final JpaDistributionSet ds = TestDataUtil.generateDistributionSet("newDS", softwareManagement, - distributionSetManagement, true); + final DistributionSet ds = testdataFactory.createDistributionSet("newDS", true); ds.setRequiredMigrationStep(true); // verify initial status @@ -336,14 +327,12 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Description("Force Quit an not canceled Assignment. Expected behaviour is that the action can not be force quit and there is thrown an exception.") public void forceQuitNotAllowedThrowsException() { - JpaTarget target = new JpaTarget("4712"); - final JpaDistributionSet dsInstalled = TestDataUtil.generateDistributionSet("installed", softwareManagement, - distributionSetManagement, true); - ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet(dsInstalled); - target = (JpaTarget) targetManagement.createTarget(target); + Target target = new JpaTarget("4712"); + final DistributionSet dsInstalled = testdataFactory.createDistributionSet("installed", true); + ((JpaTargetInfo) target.getTargetInfo()).setInstalledDistributionSet((JpaDistributionSet) dsInstalled); + target = targetManagement.createTarget(target); - final JpaDistributionSet ds = TestDataUtil.generateDistributionSet("newDS", softwareManagement, - distributionSetManagement, true); + final DistributionSet ds = testdataFactory.createDistributionSet("newDS", true); ds.setRequiredMigrationStep(true); // verify initial status @@ -364,14 +353,16 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { } } - private Action assignSet(final JpaTarget target, final JpaDistributionSet ds) { + private Action assignSet(final Target target, final DistributionSet ds) { deploymentManagement.assignDistributionSet(ds.getId(), new String[] { target.getControllerId() }); assertThat( targetManagement.findTargetByControllerID(target.getControllerId()).getTargetInfo().getUpdateStatus()) .as("wrong update status").isEqualTo(TargetUpdateStatus.PENDING); assertThat(targetManagement.findTargetByControllerID(target.getControllerId()).getAssignedDistributionSet()) .as("wrong assigned ds").isEqualTo(ds); - final Action action = actionRepository.findByTargetAndDistributionSet(pageReq, target, ds).getContent().get(0); + final Action action = actionRepository + .findByTargetAndDistributionSet(pageReq, (JpaTarget) target, (JpaDistributionSet) ds).getContent() + .get(0); assertThat(action).as("action should not be null").isNotNull(); return action; } @@ -392,14 +383,13 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final String myCtrlIDPref = "myCtrlID"; final Iterable savedNakedTargets = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(10, myCtrlIDPref, "first description")); + .createTargets(testdataFactory.generateTargets(10, myCtrlIDPref, "first description")); final String myDeployedCtrlIDPref = "myDeployedCtrlID"; List savedDeployedTargets = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(20, myDeployedCtrlIDPref, "first description")); + .createTargets(testdataFactory.generateTargets(20, myDeployedCtrlIDPref, "first description")); - final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet(""); deploymentManagement.assignDistributionSet(ds, savedDeployedTargets); @@ -446,7 +436,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final EventHandlerMock eventHandlerMock = new EventHandlerMock(0); eventBus.register(eventHandlerMock); - final List targets = targetManagement.createTargets(TestDataUtil.generateTargets(10)); + final List targets = testdataFactory.createTargets(10); final SoftwareModule ah = softwareManagement .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); @@ -657,7 +647,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final DeploymentResult deploymentResult = prepareComplexRepo(undeployedTargetPrefix, noOfUndeployedTargets, deployedTargetPrefix, noOfDeployedTargets, noOfDistributionSets, "myTestDS"); - DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); + DistributionSet dsA = testdataFactory.createDistributionSet(""); distributionSetManagement.deleteDistributionSet(dsA.getId()); dsA = distributionSetManagement.findDistributionSetById(dsA.getId()); @@ -761,12 +751,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Description("Testing if changing target and the status without refreshing the entities from the DB (e.g. concurrent changes from UI and from controller) works") public void alternatingAssignmentAndAddUpdateActionStatus() { - final JpaDistributionSet dsA = TestDataUtil.generateDistributionSet("a", softwareManagement, - distributionSetManagement); - final JpaDistributionSet dsB = TestDataUtil.generateDistributionSet("b", softwareManagement, - distributionSetManagement); - Target targ = targetManagement - .createTarget(TestDataUtil.buildTargetFixture("target-id-A", "first description")); + final DistributionSet dsA = testdataFactory.createDistributionSet("a"); + final DistributionSet dsB = testdataFactory.createDistributionSet("b"); + Target targ = targetManagement.createTarget(testdataFactory.generateTarget("target-id-A", "first description")); List targs = new ArrayList<>(); targs.add(targ); @@ -793,7 +780,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { assertThat(deploymentManagement.findActiveActionsByTarget(targ).get(0).getDistributionSet()) .as("Installed distribution set of action should be null").isNotNull(); - final Page updAct = actionRepository.findByDistributionSet(pageReq, dsA); + final Page updAct = actionRepository.findByDistributionSet(pageReq, (JpaDistributionSet) dsA); final Action action = updAct.getContent().get(0); action.setStatus(Status.FINISHED); final ActionStatus statusMessage = new JpaActionStatus((JpaAction) action, Status.FINISHED, @@ -831,11 +818,9 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { @Description("The test verfies that the DS itself is not changed because of an target assignment" + " which is a relationship but not a changed on the entity itself..") public void checkThatDsRevisionsIsNotChangedWithTargetAssignment() { - final DistributionSet dsA = TestDataUtil.generateDistributionSet("a", softwareManagement, - distributionSetManagement); - TestDataUtil.generateDistributionSet("b", softwareManagement, distributionSetManagement); - Target targ = targetManagement - .createTarget(TestDataUtil.buildTargetFixture("target-id-A", "first description")); + final DistributionSet dsA = testdataFactory.createDistributionSet("a"); + testdataFactory.createDistributionSet("b"); + Target targ = targetManagement.createTarget(testdataFactory.generateTarget("target-id-A", "first description")); assertThat(dsA.getOptLockRevision()).as("lock revision is wrong").isEqualTo( distributionSetManagement.findDistributionSetByIdWithDetails(dsA.getId()).getOptLockRevision()); @@ -854,8 +839,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { public void forceSoftAction() { // prepare final Target target = targetManagement.createTarget(new JpaTarget("knownControllerId")); - final DistributionSet ds = TestDataUtil.generateDistributionSet("a", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet("a"); // assign ds to create an action final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet( ds.getId(), ActionType.SOFT, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, @@ -878,8 +862,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { public void forceAlreadyForcedActionNothingChanges() { // prepare final Target target = targetManagement.createTarget(new JpaTarget("knownControllerId")); - final DistributionSet ds = TestDataUtil.generateDistributionSet("a", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet("a"); // assign ds to create an action final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet( ds.getId(), ActionType.FORCED, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, @@ -926,14 +909,14 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final String deployedTargetPrefix, final int noOfDeployedTargets, final int noOfDistributionSets, final String distributionSetPrefix) { final Iterable nakedTargets = targetManagement.createTargets( - TestDataUtil.buildTargetFixtures(noOfUndeployedTargets, undeployedTargetPrefix, "first description")); + testdataFactory.generateTargets(noOfUndeployedTargets, undeployedTargetPrefix, "first description")); List deployedTargets = targetManagement.createTargets( - TestDataUtil.buildTargetFixtures(noOfDeployedTargets, deployedTargetPrefix, "first description")); + testdataFactory.generateTargets(noOfDeployedTargets, deployedTargetPrefix, "first description")); // creating 10 DistributionSets - final Collection dsList = (Collection) TestDataUtil.generateDistributionSets( - distributionSetPrefix, noOfDistributionSets, softwareManagement, distributionSetManagement); + final Collection dsList = testdataFactory.createDistributionSets(distributionSetPrefix, + noOfDistributionSets); String time = String.valueOf(System.currentTimeMillis()); time = time.substring(time.length() - 5); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index f102ac86c..d26474bb4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -31,14 +31,15 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.util.WithUser; import org.fest.assertions.core.Condition; import org.junit.Test; import org.springframework.data.domain.Page; @@ -56,7 +57,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Repository") @Stories("DistributionSet Management") -public class DistributionSetManagementTest extends AbstractIntegrationTest { +public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { @Test @Description("Tests the successfull module update of unused distribution set type which is in fact allowed.") @@ -178,10 +179,10 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Test @Description("Ensures that it is not possible to create a DS that already exists (unique constraint is on name,version for DS).") public void createDuplicateDistributionSetsFailsWithException() { - TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); + testdataFactory.createDistributionSet("a"); try { - TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); + testdataFactory.createDistributionSet("a"); fail("Should not have worked as DS with same UK already exists."); } catch (final EntityAlreadyExistsException e) { @@ -239,8 +240,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { final String knownKey = "dsMetaKnownKey"; final String knownValue = "dsMetaKnownValue"; - final DistributionSet ds = TestDataUtil.generateDistributionSet("testDs", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet("testDs"); final DistributionSetMetadata metadata = new JpaDistributionSetMetadata(knownKey, ds, knownValue); final JpaDistributionSetMetadata createdMetadata = (JpaDistributionSetMetadata) distributionSetManagement @@ -262,8 +262,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { SoftwareModule ah2 = new JpaSoftwareModule(appType, "agent-hub2", "1.0.5", null, ""); SoftwareModule os2 = new JpaSoftwareModule(osType, "poky2", "3.0.3", null, ""); - DistributionSet ds = TestDataUtil.generateDistributionSet("ds-1", softwareManagement, - distributionSetManagement); + DistributionSet ds = testdataFactory.createDistributionSet("ds-1"); ah2 = softwareManagement.createSoftwareModule(ah2); os2 = softwareManagement.createSoftwareModule(os2); @@ -348,7 +347,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { SoftwareModule os2 = new JpaSoftwareModule(osType, "poky2", "3.0.3", null, ""); final SoftwareModule app2 = new JpaSoftwareModule(appType, "app2", "3.0.3", null, ""); - DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); + DistributionSet ds = testdataFactory.createDistributionSet(""); os2 = softwareManagement.createSoftwareModule(os2); @@ -387,8 +386,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { final String knownUpdateValue = "myNewUpdatedValue"; // create a DS - final DistributionSet ds = TestDataUtil.generateDistributionSet("testDs", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet("testDs"); // initial opt lock revision must be zero assertThat(ds.getOptLockRevision()).isEqualTo(1L); @@ -427,13 +425,12 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Tests that a DS queue is possible where the result is ordered by the target assignment, i.e. assigned first in the list.") public void findDistributionSetsAllOrderedByLinkTarget() { - final List buildDistributionSets = TestDataUtil.generateDistributionSets("dsOrder", 10, - softwareManagement, distributionSetManagement); + final List buildDistributionSets = testdataFactory.createDistributionSets("dsOrder", 10); final List buildTargetFixtures = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(5, "tOrder", "someDesc")); + .createTargets(testdataFactory.generateTargets(5, "tOrder", "someDesc")); - final Iterator dsIterator = buildDistributionSets.iterator(); + final Iterator dsIterator = buildDistributionSets.iterator(); final Iterator tIterator = buildTargetFixtures.iterator(); final DistributionSet dsFirst = dsIterator.next(); final DistributionSet dsSecond = dsIterator.next(); @@ -482,12 +479,9 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { final DistributionSetTag dsTagD = tagManagement .createDistributionSetTag(new JpaDistributionSetTag("DistributionSetTag-D")); - Collection ds100Group1 = (Collection) TestDataUtil.generateDistributionSets("", 100, - softwareManagement, distributionSetManagement); - Collection ds100Group2 = (Collection) TestDataUtil.generateDistributionSets("test2", 100, - softwareManagement, distributionSetManagement); - DistributionSet dsDeleted = TestDataUtil.generateDistributionSet("deleted", softwareManagement, - distributionSetManagement); + Collection ds100Group1 = testdataFactory.createDistributionSets("", 100); + Collection ds100Group2 = testdataFactory.createDistributionSets("test2", 100); + DistributionSet dsDeleted = testdataFactory.createDistributionSet("deleted"); final DistributionSet dsInComplete = distributionSetManagement .createDistributionSet(new JpaDistributionSet("notcomplete", "1", "", standardDsType, null)); @@ -498,8 +492,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { final DistributionSet dsNewType = distributionSetManagement .createDistributionSet(new JpaDistributionSet("newtype", "1", "", newType, dsDeleted.getModules())); - deploymentManagement.assignDistributionSet(dsDeleted, - targetManagement.createTargets(Lists.newArrayList(TestDataUtil.generateTargets(5)))); + deploymentManagement.assignDistributionSet(dsDeleted, Lists.newArrayList(testdataFactory.createTargets(5))); distributionSetManagement.deleteDistributionSet(dsDeleted); dsDeleted = distributionSetManagement.findDistributionSetById(dsDeleted.getId()); @@ -724,7 +717,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Test @Description("Simple DS load without the related data that should be loaded lazy.") public void findDistributionSetsWithoutLazy() { - TestDataUtil.generateDistributionSets(20, softwareManagement, distributionSetManagement); + testdataFactory.createDistributionSets(20); assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)) .hasSize(20); @@ -733,10 +726,8 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Test @Description("Deltes a DS that is no in use. Expected behaviour is a hard delete on the database.") public void deleteUnassignedDistributionSet() { - DistributionSet ds1 = TestDataUtil.generateDistributionSet("ds-1", softwareManagement, - distributionSetManagement); - DistributionSet ds2 = TestDataUtil.generateDistributionSet("ds-2", softwareManagement, - distributionSetManagement); + DistributionSet ds1 = testdataFactory.createDistributionSet("ds-1"); + DistributionSet ds2 = testdataFactory.createDistributionSet("ds-2"); ds1 = distributionSetManagement.findDistributionSetByNameAndVersion(ds1.getName(), ds1.getVersion()); ds2 = distributionSetManagement.findDistributionSetByNameAndVersion(ds2.getName(), ds2.getVersion()); @@ -755,10 +746,8 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Queries and loads the metadata related to a given software module.") public void findAllDistributionSetMetadataByDsId() { // create a DS - DistributionSet ds1 = TestDataUtil.generateDistributionSet("testDs1", softwareManagement, - distributionSetManagement); - DistributionSet ds2 = TestDataUtil.generateDistributionSet("testDs2", softwareManagement, - distributionSetManagement); + DistributionSet ds1 = testdataFactory.createDistributionSet("testDs1"); + DistributionSet ds2 = testdataFactory.createDistributionSet("testDs2"); for (int index = 0; index < 10; index++) { @@ -791,12 +780,9 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { @Description("Deltes a DS that is no in use. Expected behaviour is a soft delete on the database, i.e. only marked as " + "deleted, kept eas refernce and unavailable for future use..") public void deleteAssignedDistributionSet() { - DistributionSet ds1 = TestDataUtil.generateDistributionSet("ds-1", softwareManagement, - distributionSetManagement); - DistributionSet ds2 = TestDataUtil.generateDistributionSet("ds-2", softwareManagement, - distributionSetManagement); - DistributionSet dsAssigned = TestDataUtil.generateDistributionSet("ds-3", softwareManagement, - distributionSetManagement); + DistributionSet ds1 = testdataFactory.createDistributionSet("ds-1"); + DistributionSet ds2 = testdataFactory.createDistributionSet("ds-2"); + DistributionSet dsAssigned = testdataFactory.createDistributionSet("ds-3"); ds1 = distributionSetManagement.findDistributionSetByNameAndVersion(ds1.getName(), ds1.getVersion()); ds2 = distributionSetManagement.findDistributionSetByNameAndVersion(ds2.getName(), ds2.getVersion()); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/JpaTestRepositoryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/JpaTestRepositoryManagement.java new file mode 100644 index 000000000..5c4b0efcc --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/JpaTestRepositoryManagement.java @@ -0,0 +1,109 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import org.eclipse.hawkbit.cache.TenantAwareCacheManager; +import org.eclipse.hawkbit.repository.SystemManagement; +import org.eclipse.hawkbit.repository.util.TestRepositoryManagement; +import org.eclipse.hawkbit.security.SystemSecurityContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.gridfs.GridFsOperations; +import org.springframework.transaction.annotation.Transactional; + +public class JpaTestRepositoryManagement implements TestRepositoryManagement { + + @PersistenceContext + private EntityManager entityManager; + + @Autowired + private TargetRepository targetRepository; + + @Autowired + private ActionRepository actionRepository; + + @Autowired + private DistributionSetRepository distributionSetRepository; + + @Autowired + private SoftwareModuleRepository softwareModuleRepository; + + @Autowired + private TenantMetaDataRepository tenantMetaDataRepository; + + @Autowired + private DistributionSetTypeRepository distributionSetTypeRepository; + + @Autowired + private SoftwareModuleTypeRepository softwareModuleTypeRepository; + + @Autowired + private TargetTagRepository targetTagRepository; + + @Autowired + private DistributionSetTagRepository distributionSetTagRepository; + + @Autowired + private SoftwareModuleMetadataRepository softwareModuleMetadataRepository; + + @Autowired + private ActionStatusRepository actionStatusRepository; + + @Autowired + private ExternalArtifactRepository externalArtifactRepository; + + @Autowired + private LocalArtifactRepository artifactRepository; + + @Autowired + private TargetInfoRepository targetInfoRepository; + + @Autowired + private GridFsOperations operations; + + @Autowired + private RolloutGroupRepository rolloutGroupRepository; + + @Autowired + private RolloutRepository rolloutRepository; + + @Autowired + private TenantAwareCacheManager cacheManager; + + @Autowired + private SystemSecurityContext systemSecurityContext; + + @Autowired + private SystemManagement systemManagement; + + @Override + public void clearTestRepository() { + deleteAllRepos(); + cacheManager.getDirectCacheNames().forEach(name -> cacheManager.getDirectCache(name).clear()); + } + + @Transactional + public void deleteAllRepos() { + final List tenants = systemSecurityContext.runAsSystem(() -> systemManagement.findTenants()); + tenants.forEach(tenant -> { + try { + systemSecurityContext.runAsSystem(() -> { + systemManagement.deleteTenant(tenant); + return null; + }); + } catch (final Exception e) { + e.printStackTrace(); + } + }); + } +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java index 57fc13379..4fba80616 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java @@ -24,7 +24,6 @@ import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.ReportManagement; import org.eclipse.hawkbit.repository.ReportManagement.DateTypes; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Action; @@ -38,6 +37,9 @@ import org.eclipse.hawkbit.repository.report.model.DataReportSeries; import org.eclipse.hawkbit.repository.report.model.DataReportSeriesItem; import org.eclipse.hawkbit.repository.report.model.InnerOuterDataReportSeries; import org.eclipse.hawkbit.repository.report.model.SeriesTime; +import org.eclipse.hawkbit.repository.util.TestdataFactory; +import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.util.WithUser; import org.junit.After; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -55,7 +57,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("Report Management") -public class ReportManagementTest extends AbstractIntegrationTest { +public class ReportManagementTest extends AbstractJpaIntegrationTest { @Autowired private ReportManagement reportManagement; @@ -128,8 +130,7 @@ public class ReportManagementTest extends AbstractIntegrationTest { final LocalDateTime to = LocalDateTime.now(); final LocalDateTime from = to.minusMonths(maxMonthBackAmountReportTargets); - final DistributionSet distributionSet = TestDataUtil.generateDistributionSet("ds", softwareManagement, - distributionSetManagement); + final DistributionSet distributionSet = testdataFactory.createDistributionSet("ds"); final DynamicDateTimeProvider dynamicDateTimeProvider = new DynamicDateTimeProvider(); auditingHandler.setDateTimeProvider(dynamicDateTimeProvider); @@ -181,21 +182,18 @@ public class ReportManagementTest extends AbstractIntegrationTest { final Target knownTarget4 = targetManagement.createTarget(new JpaTarget("t4")); final Target knownTarget5 = targetManagement.createTarget(new JpaTarget("t5")); - final SoftwareModule ah = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); - final SoftwareModule os = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(osType, "poky", "3.0.2", null, "")); + final SoftwareModule ah = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_APP); + final SoftwareModule jvm = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_RT); + final SoftwareModule os = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_OS); - final DistributionSet distributionSet1 = distributionSetManagement - .createDistributionSet(TestDataUtil.buildDistributionSet("ds1", "0.0.0", standardDsType, os, jvm, ah)); - final DistributionSet distributionSet11 = distributionSetManagement - .createDistributionSet(TestDataUtil.buildDistributionSet("ds1", "0.0.1", standardDsType, os, jvm, ah)); - final DistributionSet distributionSet2 = distributionSetManagement - .createDistributionSet(TestDataUtil.buildDistributionSet("ds2", "0.0.2", standardDsType, os, jvm, ah)); - final DistributionSet distributionSet3 = distributionSetManagement - .createDistributionSet(TestDataUtil.buildDistributionSet("ds3", "0.0.3", standardDsType, os, jvm, ah)); + final DistributionSet distributionSet1 = distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("ds1", "0.0.0", standardDsType, Lists.newArrayList(os, jvm, ah))); + final DistributionSet distributionSet11 = distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("ds1", "0.0.1", standardDsType, Lists.newArrayList(os, jvm, ah))); + final DistributionSet distributionSet2 = distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("ds2", "0.0.2", standardDsType, Lists.newArrayList(os, jvm, ah))); + final DistributionSet distributionSet3 = distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("ds3", "0.0.3", standardDsType, Lists.newArrayList(os, jvm, ah))); // ds1(0.0.0)=[target1,target2], ds1(0.0.1)=[target3] deploymentManagement.assignDistributionSet(distributionSet1.getId(), knownTarget1.getControllerId()); @@ -355,21 +353,18 @@ public class ReportManagementTest extends AbstractIntegrationTest { final Target knownTarget3 = targetManagement.createTarget(new JpaTarget("t3")); final Target knownTarget4 = targetManagement.createTarget(new JpaTarget("t4")); - final SoftwareModule ah = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); - final SoftwareModule os = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(osType, "poky", "3.0.2", null, "")); + final SoftwareModule ah = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_APP); + final SoftwareModule jvm = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_RT); + final SoftwareModule os = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_OS); - final DistributionSet distributionSet1 = distributionSetManagement - .createDistributionSet(TestDataUtil.buildDistributionSet("ds1", "0.0.0", standardDsType, os, jvm, ah)); - final DistributionSet distributionSet11 = distributionSetManagement - .createDistributionSet(TestDataUtil.buildDistributionSet("ds1", "0.0.1", standardDsType, os, jvm, ah)); - final DistributionSet distributionSet2 = distributionSetManagement - .createDistributionSet(TestDataUtil.buildDistributionSet("ds2", "0.0.2", standardDsType, os, jvm, ah)); - final DistributionSet distributionSet3 = distributionSetManagement - .createDistributionSet(TestDataUtil.buildDistributionSet("ds3", "0.0.3", standardDsType, os, jvm, ah)); + final DistributionSet distributionSet1 = distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("ds1", "0.0.0", standardDsType, Lists.newArrayList(os, jvm, ah))); + final DistributionSet distributionSet11 = distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("ds1", "0.0.1", standardDsType, Lists.newArrayList(os, jvm, ah))); + final DistributionSet distributionSet2 = distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("ds2", "0.0.2", standardDsType, Lists.newArrayList(os, jvm, ah))); + final DistributionSet distributionSet3 = distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("ds3", "0.0.3", standardDsType, Lists.newArrayList(os, jvm, ah))); // ds1(0.0.0)=[target1,target2], ds1(0.0.1)=[target3] deploymentManagement.assignDistributionSet(distributionSet1.getId(), knownTarget1.getControllerId()); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java index 28ece9239..42e5de498 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java @@ -22,7 +22,6 @@ import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.utils.MultipleInvokeHelper; import org.eclipse.hawkbit.repository.jpa.utils.SuccessCondition; import org.eclipse.hawkbit.repository.model.Action; @@ -41,6 +40,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.repository.util.TestdataFactory; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Description; @@ -49,6 +49,8 @@ import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; +import com.google.common.collect.Lists; + import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; @@ -60,7 +62,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Repository") @Stories("Rollout Management") -public class RolloutManagementTest extends AbstractIntegrationTest { +public class RolloutManagementTest extends AbstractJpaIntegrationTest { @Autowired private RolloutManagement rolloutManagement; @@ -455,8 +457,7 @@ public class RolloutManagementTest extends AbstractIntegrationTest { targetToCancel.add(targetList.get(0)); targetToCancel.add(targetList.get(1)); targetToCancel.add(targetList.get(2)); - final DistributionSet dsForCancelTest = TestDataUtil.generateDistributionSet("dsForTest", softwareManagement, - distributionSetManagement); + final DistributionSet dsForCancelTest = testdataFactory.createDistributionSet("dsForTest"); deploymentManagement.assignDistributionSet(dsForCancelTest, targetToCancel); // 5 targets are canceling but still have the status running and 5 are // still in SCHEDULED @@ -480,8 +481,7 @@ public class RolloutManagementTest extends AbstractIntegrationTest { rolloutManagement.startRollout(rolloutOne); rolloutOne = rolloutManagement.findRolloutById(rolloutOne.getId()); - final DistributionSet dsForRolloutTwo = TestDataUtil.generateDistributionSet("dsForRolloutTwo", - softwareManagement, distributionSetManagement); + final DistributionSet dsForRolloutTwo = testdataFactory.createDistributionSet("dsForRolloutTwo"); final Rollout rolloutTwo = createRolloutByVariables("rolloutTwo", "This is the description for rollout two", 1, "controllerId==rollout-*", dsForRolloutTwo, "50", "80"); @@ -834,7 +834,7 @@ public class RolloutManagementTest extends AbstractIntegrationTest { Rollout myRollout = createTestRolloutWithTargetsAndDistributionSet(amountTargetsForRollout, amountGroups, successCondition, errorCondition, rolloutName, rolloutName); - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountOtherTargets, "others-", "rollout")); + targetManagement.createTargets(testdataFactory.generateTargets(amountOtherTargets, "others-", "rollout")); final String rsqlParam = "controllerId==*MyRoll*"; @@ -872,10 +872,9 @@ public class RolloutManagementTest extends AbstractIntegrationTest { final String errorCondition = "80"; final String rolloutName = "rolloutTest"; final String targetPrefixName = rolloutName; - final DistributionSet distributionSet = TestDataUtil.generateDistributionSet("dsFor" + rolloutName, - softwareManagement, distributionSetManagement); + final DistributionSet distributionSet = testdataFactory.createDistributionSet("dsFor" + rolloutName); targetManagement.createTargets( - TestDataUtil.buildTargetFixtures(amountTargetsForRollout, targetPrefixName + "-", targetPrefixName)); + testdataFactory.generateTargets(amountTargetsForRollout, targetPrefixName + "-", targetPrefixName)); final RolloutGroupConditions conditions = new RolloutGroupConditionBuilder() .successCondition(RolloutGroupSuccessCondition.THRESHOLD, successCondition) .errorCondition(RolloutGroupErrorCondition.THRESHOLD, errorCondition) @@ -933,17 +932,14 @@ public class RolloutManagementTest extends AbstractIntegrationTest { private Rollout createSimpleTestRolloutWithTargetsAndDistributionSet(final int amountTargetsForRollout, final int amountOtherTargets, final int groupSize, final String successCondition, final String errorCondition) { - final SoftwareModule ah = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.1", null, "")); - final SoftwareModule jvm = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(runtimeType, "oracle-jre", "1.7.2", null, "")); - final SoftwareModule os = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(osType, "poky", "3.0.2", null, "")); - final DistributionSet rolloutDS = distributionSetManagement.createDistributionSet( - TestDataUtil.buildDistributionSet("rolloutDS", "0.0.0", standardDsType, os, jvm, ah)); - targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(amountTargetsForRollout, "rollout-", "rollout")); - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountOtherTargets, "others-", "rollout")); + final SoftwareModule ah = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_APP); + final SoftwareModule jvm = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_RT); + final SoftwareModule os = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_OS); + + final DistributionSet rolloutDS = distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("rolloutDS", "0.0.0", standardDsType, Lists.newArrayList(os, jvm, ah))); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargetsForRollout, "rollout-", "rollout")); + targetManagement.createTargets(testdataFactory.generateTargets(amountOtherTargets, "others-", "rollout")); final String filterQuery = "controllerId==rollout-*"; return createRolloutByVariables("test-rollout-name-1", "test-rollout-description-1", groupSize, filterQuery, rolloutDS, successCondition, errorCondition); @@ -952,10 +948,9 @@ public class RolloutManagementTest extends AbstractIntegrationTest { private Rollout createTestRolloutWithTargetsAndDistributionSet(final int amountTargetsForRollout, final int groupSize, final String successCondition, final String errorCondition, final String rolloutName, final String targetPrefixName) { - final DistributionSet dsForRolloutTwo = TestDataUtil.generateDistributionSet("dsFor" + rolloutName, - softwareManagement, distributionSetManagement); + final DistributionSet dsForRolloutTwo = testdataFactory.createDistributionSet("dsFor" + rolloutName); targetManagement.createTargets( - TestDataUtil.buildTargetFixtures(amountTargetsForRollout, targetPrefixName + "-", targetPrefixName)); + testdataFactory.generateTargets(amountTargetsForRollout, targetPrefixName + "-", targetPrefixName)); return createRolloutByVariables(rolloutName, rolloutName + "description", groupSize, "controllerId==" + targetPrefixName + "-*", dsForRolloutTwo, successCondition, errorCondition); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java index 69e19ea3a..366dd6ec7 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java @@ -39,6 +39,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.util.WithUser; import org.junit.Test; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -54,7 +55,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("Software Management") -public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { +public class SoftwareManagementTest extends AbstractJpaIntegrationTestWithMongoDB { @Test @Description("Try to update non updatable fields results in repository doing nothing.") @@ -227,8 +228,8 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { final SoftwareModule ah2 = softwareManagement .createSoftwareModule(new JpaSoftwareModule(appType, "agent-hub", "1.0.2", null, "")); - JpaDistributionSet ds = (JpaDistributionSet) distributionSetManagement.createDistributionSet( - TestDataUtil.buildDistributionSet("ds-1", "1.0.1", standardDsType, os, jvm, ah2)); + JpaDistributionSet ds = (JpaDistributionSet) distributionSetManagement.createDistributionSet(testdataFactory + .generateDistributionSet("ds-1", "1.0.1", standardDsType, Lists.newArrayList(os, jvm, ah2))); final JpaTarget target = (JpaTarget) targetManagement.createTarget(new JpaTarget("test123")); ds = (JpaDistributionSet) assignSet(target, ds).getDistributionSet(); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java index 185416984..e697f65d8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.report.model.TenantUsage; +import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; import org.junit.Test; import ru.yandex.qatools.allure.annotations.Description; @@ -26,7 +27,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("System Management") -public class SystemManagementTest extends AbstractIntegrationTestWithMongoDB { +public class SystemManagementTest extends AbstractJpaIntegrationTestWithMongoDB { @Test @Description("Ensures that findTenants returns all tenants and not only restricted to the tenant which currently is logged in") @@ -108,8 +109,8 @@ public class SystemManagementTest extends AbstractIntegrationTestWithMongoDB { final List createdTargets = createTestTargets(targets); if (updates > 0) { for (int x = 0; x < updates; x++) { - final DistributionSet ds = TestDataUtil.generateDistributionSet("to be deployed" + x, - softwareManagement, distributionSetManagement, true); + final DistributionSet ds = testdataFactory.createDistributionSet("to be deployed" + x, + true); deploymentManagement.assignDistributionSet(ds, createdTargets); } @@ -125,7 +126,7 @@ public class SystemManagementTest extends AbstractIntegrationTestWithMongoDB { private List createTestTargets(final int targets) { return targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(targets, "testTargetOfTenant", "testTargetOfTenant")); + .createTargets(testdataFactory.generateTargets(targets, "testTargetOfTenant", "testTargetOfTenant")); } private void createTestArtifact(final byte[] random) { @@ -137,8 +138,7 @@ public class SystemManagementTest extends AbstractIntegrationTestWithMongoDB { } private void createDeletedTestArtifact(final byte[] random) { - final DistributionSet ds = TestDataUtil.generateDistributionSet("deleted garbage", softwareManagement, - distributionSetManagement, true); + final DistributionSet ds = testdataFactory.createDistributionSet("deleted garbage", true); ds.getModules().stream().forEach(module -> { artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), module.getId(), "file1", false); softwareManagement.deleteSoftwareModule(module); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java index 25437b0ed..5f2fe3fbd 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TagManagementTest.java @@ -23,13 +23,13 @@ import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; -import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; import org.junit.Before; import org.junit.Test; import org.slf4j.LoggerFactory; @@ -46,7 +46,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Repository") @Stories("Tag Management") -public class TagManagementTest extends AbstractIntegrationTest { +public class TagManagementTest extends AbstractJpaIntegrationTest { public TagManagementTest() { LOG = LoggerFactory.getLogger(TagManagementTest.class); } @@ -59,20 +59,13 @@ public class TagManagementTest extends AbstractIntegrationTest { @Test @Description("Full DS tag lifecycle tested. Create tags, assign them to sets and delete the tags.") public void createAndAssignAndDeleteDistributionSetTags() { - final Collection dsAs = (Collection) TestDataUtil.generateDistributionSets("DS-A", 20, - softwareManagement, distributionSetManagement); - final Collection dsBs = (Collection) TestDataUtil.generateDistributionSets("DS-B", 10, - softwareManagement, distributionSetManagement); - final Collection dsCs = (Collection) TestDataUtil.generateDistributionSets("DS-C", 25, - softwareManagement, distributionSetManagement); - final Collection dsABs = (Collection) TestDataUtil.generateDistributionSets("DS-AB", 5, - softwareManagement, distributionSetManagement); - final Collection dsACs = (Collection) TestDataUtil.generateDistributionSets("DS-AC", 11, - softwareManagement, distributionSetManagement); - final Collection dsBCs = (Collection) TestDataUtil.generateDistributionSets("DS-BC", 13, - softwareManagement, distributionSetManagement); - final Collection dsABCs = (Collection) TestDataUtil.generateDistributionSets("DS-ABC", 9, - softwareManagement, distributionSetManagement); + final Collection dsAs = testdataFactory.createDistributionSets("DS-A", 20); + final Collection dsBs = testdataFactory.createDistributionSets("DS-B", 10); + final Collection dsCs = testdataFactory.createDistributionSets("DS-C", 25); + final Collection dsABs = testdataFactory.createDistributionSets("DS-AB", 5); + final Collection dsACs = testdataFactory.createDistributionSets("DS-AC", 11); + final Collection dsBCs = testdataFactory.createDistributionSets("DS-BC", 13); + final Collection dsABCs = testdataFactory.createDistributionSets("DS-ABC", 9); final DistributionSetTag tagA = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("A")); final DistributionSetTag tagB = tagManagement.createDistributionSetTag(new JpaDistributionSetTag("B")); @@ -169,10 +162,8 @@ public class TagManagementTest extends AbstractIntegrationTest { @Description("Verifies the toogle mechanism by means on assigning tag if at least on DS in the list does not have" + "the tag yet. Unassign if all of them have the tag already.") public void assignAndUnassignDistributionSetTags() { - final Collection groupA = (Collection) TestDataUtil.generateDistributionSets(20, - softwareManagement, distributionSetManagement); - final Collection groupB = (Collection) TestDataUtil.generateDistributionSets("unassigned", 20, - softwareManagement, distributionSetManagement); + final Collection groupA = testdataFactory.createDistributionSets(20); + final Collection groupB = testdataFactory.createDistributionSets("unassigned", 20); final DistributionSetTag tag = tagManagement .createDistributionSetTag(new JpaDistributionSetTag("tag1", "tagdesc1", "")); @@ -213,8 +204,8 @@ public class TagManagementTest extends AbstractIntegrationTest { @Description("Verifies the toogle mechanism by means on assigning tag if at least on target in the list does not have" + "the tag yet. Unassign if all of them have the tag already.") public void assignAndUnassignTargetTags() { - final List groupA = targetManagement.createTargets(TestDataUtil.generateTargets(20, "")); - final List groupB = targetManagement.createTargets(TestDataUtil.generateTargets(20, "groupb")); + final List groupA = targetManagement.createTargets(testdataFactory.generateTargets(20, "")); + final List groupB = targetManagement.createTargets(testdataFactory.generateTargets(20, "groupb")); final TargetTag tag = tagManagement.createTargetTag(new JpaTargetTag("tag1", "tagdesc1", "")); @@ -451,8 +442,8 @@ public class TagManagementTest extends AbstractIntegrationTest { } private List createTargetsWithTags() { - final List targets = targetManagement.createTargets(TestDataUtil.generateTargets(20)); - final Iterable tags = tagManagement.createTargetTags(TestDataUtil.generateTargetTags(20)); + final List targets = testdataFactory.createTargets(20); + final Iterable tags = tagManagement.createTargetTags(testdataFactory.generateTargetTags(20)); tags.forEach(tag -> targetManagement.toggleTagAssignment(targets, tag)); @@ -461,10 +452,8 @@ public class TagManagementTest extends AbstractIntegrationTest { private List createDsSetsWithTags() { - final Collection sets = (Collection) TestDataUtil.generateDistributionSets(20, - softwareManagement, distributionSetManagement); - final Iterable tags = tagManagement - .createDistributionSetTags(TestDataUtil.generateDistributionSetTags(20)); + final Collection sets = testdataFactory.createDistributionSets(20); + final Iterable tags = testdataFactory.createDistributionSetTags(20); tags.forEach(tag -> distributionSetManagement.toggleTagAssignment(sets, tag)); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagenmentTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagenmentTest.java index e2a06d5fc..07b92ebeb 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagenmentTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryManagenmentTest.java @@ -27,7 +27,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Repository") @Stories("Target Filter Query Management") -public class TargetFilterQueryManagenmentTest extends AbstractIntegrationTest { +public class TargetFilterQueryManagenmentTest extends AbstractJpaIntegrationTest { @Test @Description("Test creation of target filter query.") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementSearchTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementSearchTest.java index 7b128de3b..1e8f102c7 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementSearchTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementSearchTest.java @@ -44,7 +44,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("Target Management Searches") -public class TargetManagementSearchTest extends AbstractIntegrationTest { +public class TargetManagementSearchTest extends AbstractJpaIntegrationTest { @Test @Description("Tests different parameter combinations for target search operations. " @@ -56,32 +56,30 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final TargetTag targTagZ = tagManagement.createTargetTag(new JpaTargetTag("TargTag-Z")); final TargetTag targTagW = tagManagement.createTargetTag(new JpaTargetTag("TargTag-W")); - final DistributionSet setA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + final DistributionSet setA = testdataFactory.createDistributionSet(""); - final DistributionSet installedSet = TestDataUtil.generateDistributionSet("another", softwareManagement, - distributionSetManagement); + final DistributionSet installedSet = testdataFactory.createDistributionSet("another"); final String targetDsAIdPref = "targ-A"; List targAs = targetManagement.createTargets( - TestDataUtil.buildTargetFixtures(100, targetDsAIdPref, targetDsAIdPref.concat(" description"))); + testdataFactory.generateTargets(100, targetDsAIdPref, targetDsAIdPref.concat(" description"))); targAs = targetManagement.toggleTagAssignment(targAs, targTagX).getAssignedEntity(); final String targetDsBIdPref = "targ-B"; List targBs = targetManagement.createTargets( - TestDataUtil.buildTargetFixtures(100, targetDsBIdPref, targetDsBIdPref.concat(" description"))); + testdataFactory.generateTargets(100, targetDsBIdPref, targetDsBIdPref.concat(" description"))); targBs = targetManagement.toggleTagAssignment(targBs, targTagY).getAssignedEntity(); targBs = targetManagement.toggleTagAssignment(targBs, targTagW).getAssignedEntity(); final String targetDsCIdPref = "targ-C"; List targCs = targetManagement.createTargets( - TestDataUtil.buildTargetFixtures(100, targetDsCIdPref, targetDsCIdPref.concat(" description"))); + testdataFactory.generateTargets(100, targetDsCIdPref, targetDsCIdPref.concat(" description"))); targCs = targetManagement.toggleTagAssignment(targCs, targTagZ).getAssignedEntity(); targCs = targetManagement.toggleTagAssignment(targCs, targTagW).getAssignedEntity(); final String targetDsDIdPref = "targ-D"; final List targDs = targetManagement.createTargets( - TestDataUtil.buildTargetFixtures(100, targetDsDIdPref, targetDsDIdPref.concat(" description"))); + testdataFactory.generateTargets(100, targetDsDIdPref, targetDsDIdPref.concat(" description"))); final String assignedC = targCs.iterator().next().getControllerId(); deploymentManagement.assignDistributionSet(setA.getId(), assignedC); @@ -680,14 +678,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { public void targetSearchWithVariousFilterCombinationsAndOrderByDistributionSet() { final List notAssigned = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(3, "not", "first description")); + .createTargets(testdataFactory.generateTargets(3, "not", "first description")); List targAssigned = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(3, "assigned", "first description")); + .createTargets(testdataFactory.generateTargets(3, "assigned", "first description")); List targInstalled = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(3, "installed", "first description")); + .createTargets(testdataFactory.generateTargets(3, "installed", "first description")); - final DistributionSet ds = TestDataUtil.generateDistributionSet("a", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet("a"); targAssigned = deploymentManagement.assignDistributionSet(ds, targAssigned).getAssignedEntity(); targInstalled = deploymentManagement.assignDistributionSet(ds, targInstalled).getAssignedEntity(); @@ -714,10 +711,9 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { @Test @Description("Verfies that targets with given assigned DS are returned from repository.") public void findTargetByAssignedDistributionSet() { - final DistributionSet assignedSet = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); - targetManagement.createTargets(TestDataUtil.generateTargets(10, "unassigned")); - List assignedtargets = targetManagement.createTargets(TestDataUtil.generateTargets(10, "assigned")); + final DistributionSet assignedSet = testdataFactory.createDistributionSet(""); + targetManagement.createTargets(testdataFactory.generateTargets(10, "unassigned")); + List assignedtargets = targetManagement.createTargets(testdataFactory.generateTargets(10, "assigned")); deploymentManagement.assignDistributionSet(assignedSet, assignedtargets); @@ -734,12 +730,10 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { @Test @Description("Verfies that targets with given installed DS are returned from repository.") public void findTargetByInstalledDistributionSet() { - final DistributionSet assignedSet = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); - final DistributionSet installedSet = TestDataUtil.generateDistributionSet("another", softwareManagement, - distributionSetManagement); - targetManagement.createTargets(TestDataUtil.generateTargets(10, "unassigned")); - List installedtargets = targetManagement.createTargets(TestDataUtil.generateTargets(10, "assigned")); + final DistributionSet assignedSet = testdataFactory.createDistributionSet(""); + final DistributionSet installedSet = testdataFactory.createDistributionSet("another"); + targetManagement.createTargets(testdataFactory.generateTargets(10, "unassigned")); + List installedtargets = targetManagement.createTargets(testdataFactory.generateTargets(10, "assigned")); // set on installed and assign another one deploymentManagement.assignDistributionSet(installedSet, installedtargets).getActions().forEach(actionId -> { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java index 10f614caa..79a7ad89f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java @@ -43,6 +43,8 @@ import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetTag; +import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.util.WithUser; import org.junit.Test; import org.springframework.data.domain.PageRequest; @@ -54,7 +56,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("Target Management") -public class TargetManagementTest extends AbstractIntegrationTest { +public class TargetManagementTest extends AbstractJpaIntegrationTest { @Test @Description("Ensures that retrieving the target security is only permitted with the necessary permissions.") @@ -193,10 +195,8 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Test @Description("Finds a target by given ID and checks if all data is in the reponse (including the data defined as lazy).") public void findTargetByControllerIDWithDetails() { - final DistributionSet set = TestDataUtil.generateDistributionSet("test", softwareManagement, - distributionSetManagement); - final DistributionSet set2 = TestDataUtil.generateDistributionSet("test2", softwareManagement, - distributionSetManagement); + final DistributionSet set = testdataFactory.createDistributionSet("test"); + final DistributionSet set2 = testdataFactory.createDistributionSet("test2"); assertThat(targetManagement.countTargetByAssignedDistributionSet(set.getId())).as("Target count is wrong") .isEqualTo(0); @@ -248,7 +248,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Test @Description("Checks if the EntityAlreadyExistsException is thrown if the targets with the same controller ID are created twice.") public void createMultipleTargetsDuplicate() { - final List targets = TestDataUtil.buildTargetFixtures(5, "mySimpleTargs", "my simple targets"); + final List targets = testdataFactory.generateTargets(5, "mySimpleTargs", "my simple targets"); targetManagement.createTargets(targets); try { targetManagement.createTargets(targets); @@ -323,7 +323,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { public void singleTargetIsInsertedIntoRepo() throws Exception { final String myCtrlID = "myCtrlID"; - final Target target = TestDataUtil.buildTargetFixture(myCtrlID, "the description!"); + final Target target = testdataFactory.generateTarget(myCtrlID, "the description!"); Target savedTarget = targetManagement.createTarget(target); assertNotNull("The target should not be null", savedTarget); @@ -360,9 +360,9 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Description("Create multiple tragets as bulk operation and delete them in bulk.") public void bulkTargetCreationAndDelete() throws Exception { final String myCtrlID = "myCtrlID"; - final List firstList = TestDataUtil.buildTargetFixtures(100, myCtrlID, "first description"); + final List firstList = testdataFactory.generateTargets(100, myCtrlID, "first description"); - final Target extra = TestDataUtil.buildTargetFixture("myCtrlID-00081XX", "first description"); + final Target extra = testdataFactory.generateTarget("myCtrlID-00081XX", "first description"); List firstSaved = targetManagement.createTargets(firstList); @@ -432,7 +432,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Description("Stores target attributes and verfies existence in the repository.") public void savingTargetControllerAttributes() { Iterable ts = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(100, "myCtrlID", "first description")); + .createTargets(testdataFactory.generateTargets(100, "myCtrlID", "first description")); final Map attribs = new HashMap<>(); attribs.put("a.b.c", "abc"); @@ -541,17 +541,17 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Test @Description("Tests the assigment of tags to the a single target.") public void targetTagAssignment() { - Target t1 = TestDataUtil.buildTargetFixture("id-1", "blablub"); + Target t1 = testdataFactory.generateTarget("id-1", "blablub"); final int noT2Tags = 4; final int noT1Tags = 3; final List t1Tags = tagManagement - .createTargetTags(TestDataUtil.buildTargetTagFixtures(noT1Tags, "tag1")); + .createTargetTags(testdataFactory.generateTargetTags(noT1Tags, "tag1")); t1.getTags().addAll(t1Tags); t1 = targetManagement.createTarget(t1); - Target t2 = TestDataUtil.buildTargetFixture("id-2", "blablub"); + Target t2 = testdataFactory.generateTarget("id-2", "blablub"); final List t2Tags = tagManagement - .createTargetTags(TestDataUtil.buildTargetTagFixtures(noT2Tags, "tag2")); + .createTargetTags(testdataFactory.generateTargetTags(noT2Tags, "tag2")); t2.getTags().addAll(t2Tags); t2 = targetManagement.createTarget(t2); @@ -570,17 +570,17 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Description("Tests the assigment of tags to multiple targets.") public void targetTagBulkAssignments() { final List tagATargets = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(10, "tagATargets", "first description")); + .createTargets(testdataFactory.generateTargets(10, "tagATargets", "first description")); final List tagBTargets = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(10, "tagBTargets", "first description")); + .createTargets(testdataFactory.generateTargets(10, "tagBTargets", "first description")); final List tagCTargets = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(10, "tagCTargets", "first description")); + .createTargets(testdataFactory.generateTargets(10, "tagCTargets", "first description")); final List tagABTargets = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(10, "tagABTargets", "first description")); + .createTargets(testdataFactory.generateTargets(10, "tagABTargets", "first description")); final List tagABCTargets = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(10, "tagABCTargets", "first description")); + .createTargets(testdataFactory.generateTargets(10, "tagABCTargets", "first description")); final TargetTag tagA = tagManagement.createTargetTag(new JpaTargetTag("A")); final TargetTag tagB = tagManagement.createTargetTag(new JpaTargetTag("B")); @@ -645,20 +645,20 @@ public class TargetManagementTest extends AbstractIntegrationTest { final TargetTag targTagC = tagManagement.createTargetTag(new JpaTargetTag("Targ-C-Tag")); final List targAs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(25, "target-id-A", "first description")); + .createTargets(testdataFactory.generateTargets(25, "target-id-A", "first description")); final List targBs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(20, "target-id-B", "first description")); + .createTargets(testdataFactory.generateTargets(20, "target-id-B", "first description")); final List targCs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(15, "target-id-C", "first description")); + .createTargets(testdataFactory.generateTargets(15, "target-id-C", "first description")); final List targABs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(12, "target-id-AB", "first description")); + .createTargets(testdataFactory.generateTargets(12, "target-id-AB", "first description")); final List targACs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(13, "target-id-AC", "first description")); + .createTargets(testdataFactory.generateTargets(13, "target-id-AC", "first description")); final List targBCs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(7, "target-id-BC", "first description")); + .createTargets(testdataFactory.generateTargets(7, "target-id-BC", "first description")); final List targABCs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(17, "target-id-ABC", "first description")); + .createTargets(testdataFactory.generateTargets(17, "target-id-ABC", "first description")); targetManagement.toggleTagAssignment(targAs, targTagA); targetManagement.toggleTagAssignment(targABs, targTagA); @@ -706,7 +706,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { final TargetTag targTagA = tagManagement.createTargetTag(new JpaTargetTag("Targ-A-Tag")); final List targAs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(25, "target-id-A", "first description")); + .createTargets(testdataFactory.generateTargets(25, "target-id-A", "first description")); targetManagement.toggleTagAssignment(targAs, targTagA); @@ -726,7 +726,7 @@ public class TargetManagementTest extends AbstractIntegrationTest { @Description("Test the optimized quere for retrieving all ID/name pairs of targets.") public void findAllTargetIdNamePaiss() { final List targAs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(25, "target-id-A", "first description")); + .createTargets(testdataFactory.generateTargets(25, "target-id-A", "first description")); final String[] createdTargetIds = targAs.stream().map(t -> t.getControllerId()) .toArray(size -> new String[size]); @@ -743,10 +743,10 @@ public class TargetManagementTest extends AbstractIntegrationTest { final TargetTag targTagA = tagManagement.createTargetTag(new JpaTargetTag("Targ-A-Tag")); final List targAs = targetManagement - .createTargets(TestDataUtil.buildTargetFixtures(25, "target-id-A", "first description")); + .createTargets(testdataFactory.generateTargets(25, "target-id-A", "first description")); targetManagement.toggleTagAssignment(targAs, targTagA); - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(25, "target-id-B", "first description")); + targetManagement.createTargets(testdataFactory.generateTargets(25, "target-id-B", "first description")); final String[] tagNames = null; final List targetsListWithNoTag = targetManagement diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationManagementTest.java index 0e0d50bbc..73feda1c2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationManagementTest.java @@ -29,7 +29,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("Tenant Configuration Management") -public class TenantConfigurationManagementTest extends AbstractIntegrationTestWithMongoDB { +public class TenantConfigurationManagementTest extends AbstractJpaIntegrationTestWithMongoDB { @Test @Description("Tests that tenant specific configuration can be persisted and in case the tenant does not have specific configuration the default from environment is used instead.") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java index 5339ceef2..8ea794f6a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java @@ -16,8 +16,8 @@ import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.TenancyCacheManager; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; import org.eclipse.hawkbit.repository.jpa.model.helper.EventBusHolder; -import org.eclipse.hawkbit.repository.jpa.utils.RepositoryDataGenerator; -import org.eclipse.hawkbit.repository.jpa.utils.RepositoryDataGenerator.DatabaseCleanupUtil; +import org.eclipse.hawkbit.repository.util.TestRepositoryManagement; +import org.eclipse.hawkbit.repository.util.TestdataFactory; import org.eclipse.hawkbit.security.DdiSecurityProperties; import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.SpringSecurityAuditorAware; @@ -52,14 +52,14 @@ import com.mongodb.MongoClientOptions; @Profile("test") public class TestConfiguration implements AsyncConfigurer { - /** - * DB cleanup utility bean is created. - * - * @return the {@link DatabaseCleanupUtil} bean - */ @Bean - public DatabaseCleanupUtil createDatabaseCleanupUtil() { - return new RepositoryDataGenerator.DatabaseCleanupUtil(); + public TestRepositoryManagement testRepositoryManagement() { + return new JpaTestRepositoryManagement(); + } + + @Bean + public TestdataFactory testdataFactory() { + return new TestdataFactory(); } @Bean diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestDataUtil.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestDataUtil.java deleted file mode 100644 index 296fb98ea..000000000 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestDataUtil.java +++ /dev/null @@ -1,435 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.repository.jpa; - -import static org.fest.assertions.api.Assertions.assertThat; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Random; -import java.util.UUID; - -import org.apache.commons.io.IOUtils; -import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.ControllerManagement; -import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaArtifact; -import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; -import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; -import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; -import org.eclipse.hawkbit.repository.model.Action; -import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.repository.model.DistributionSetType; -import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetTag; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; - -import com.google.common.base.Strings; -import com.google.common.collect.Lists; - -import net._01001111.text.LoremIpsum; - -/** - * Data generator utility for tests. - * - * - * - */ -public class TestDataUtil { - private static final LoremIpsum LOREM = new LoremIpsum(); - - public static DistributionSet createTestDistributionSet(final SoftwareManagement softwareManagement, - final DistributionSetManagement distributionSetManagement) { - final Pageable pageReq = new PageRequest(0, 400); - DistributionSet set = TestDataUtil.generateDistributionSet("one", softwareManagement, - distributionSetManagement); - set.setVersion("anotherVersion"); - set = distributionSetManagement.updateDistributionSet(set); - - set.getModules().forEach(module -> { - module.setDescription("updated description"); - softwareManagement.updateSoftwareModule(module); - }); - - // load also lazy stuff - set = distributionSetManagement.findDistributionSetByIdWithDetails(set.getId()); - - assertThat(distributionSetManagement.findDistributionSetsByDeletedAndOrCompleted(pageReq, false, true)).hasSize(1); - return set; - } - - public static List sendUpdateActionStatusToTargets(final ControllerManagement controllerManagament, - final TargetManagement targetManagement, final ActionRepository actionRepository, final DistributionSet dsA, - final Iterable targs, final Status status, final String... msgs) { - final List result = new ArrayList<>(); - for (final Target t : targs) { - final List findByTarget = actionRepository.findByTarget((JpaTarget) t); - for (final Action action : findByTarget) { - result.add(sendUpdateActionStatusToTarget(controllerManagament, targetManagement, status, action, t, - msgs)); - } - } - return result; - } - - private static Target sendUpdateActionStatusToTarget(final ControllerManagement controllerManagament, - final TargetManagement targetManagement, final Status status, final Action updActA, final Target t, - final String... msgs) { - updActA.setStatus(status); - - final ActionStatus statusMessages = new JpaActionStatus(); - statusMessages.setAction(updActA); - statusMessages.setOccurredAt(System.currentTimeMillis()); - statusMessages.setStatus(status); - for (final String msg : msgs) { - statusMessages.addMessage(msg); - } - controllerManagament.addUpdateActionStatus(statusMessages); - return targetManagement.findTargetByControllerID(t.getControllerId()); - } - - public static List generateDistributionSets(final String suffix, final int number, - final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { - - final List sets = new ArrayList<>(); - for (int i = 0; i < number; i++) { - sets.add(generateDistributionSet(suffix, "v1." + i, softwareManagement, distributionSetManagement, false)); - } - - return sets; - } - - public static DistributionSet generateDistributionSetWithNoSoftwareModules(final String name, final String version, - final DistributionSetManagement distributionSetManagement) { - - final DistributionSet dis = new JpaDistributionSet(); - dis.setName(name); - dis.setVersion(version); - dis.setDescription("Test describtion for " + name); - return distributionSetManagement.createDistributionSet(dis); - } - - public static List generateDistributionSets(final int number, - final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { - - return generateDistributionSets("", number, softwareManagement, distributionSetManagement); - } - - public static JpaDistributionSet generateDistributionSet(final String suffix, final String version, - final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement, - final boolean isRequiredMigrationStep) { - - final SoftwareModule ah = softwareManagement.createSoftwareModule(new JpaSoftwareModule( - findOrCreateSoftwareModuleType(softwareManagement, "application"), suffix + "application", - version + "." + new Random().nextInt(100), LOREM.words(20), suffix + " vendor Limited, California")); - final SoftwareModule jvm = softwareManagement.createSoftwareModule( - new JpaSoftwareModule(findOrCreateSoftwareModuleType(softwareManagement, "runtime"), - suffix + "app runtime", version + "." + new Random().nextInt(100), LOREM.words(20), - suffix + " vendor GmbH, Stuttgart, Germany")); - final SoftwareModule os = softwareManagement - .createSoftwareModule(new JpaSoftwareModule(findOrCreateSoftwareModuleType(softwareManagement, "os"), - suffix + " Firmware", version + "." + new Random().nextInt(100), LOREM.words(20), - suffix + " vendor Limited Inc, California")); - - final List mand = new ArrayList<>(); - mand.add(findOrCreateSoftwareModuleType(softwareManagement, "os")); - - final List opt = new ArrayList<>(); - opt.add(findOrCreateSoftwareModuleType(softwareManagement, "application")); - opt.add(findOrCreateSoftwareModuleType(softwareManagement, "runtime")); - - return (JpaDistributionSet) distributionSetManagement.createDistributionSet( - buildDistributionSet(suffix != null && suffix.length() > 0 ? suffix : "DS", version, - findOrCreateDistributionSetType(distributionSetManagement, "ecl_os_app_jvm", - "OS mandatory App/JVM optional", mand, opt), - os, jvm, ah).setRequiredMigrationStep(isRequiredMigrationStep)); - } - - public static DistributionSet generateDistributionSet(final String suffix, final String version, - final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement, - final Collection tags) { - - final DistributionSet set = generateDistributionSet(suffix, version, softwareManagement, - distributionSetManagement, false); - - final List sets = new ArrayList(); - sets.add(set); - - tags.forEach(tag -> distributionSetManagement.toggleTagAssignment(sets, tag)); - - return distributionSetManagement.findDistributionSetById(set.getId()); - - } - - public static List generateTargets(final int number) { - return generateTargets(0, number, "Test target "); - } - - public static List generateTargets(final int number, final String prefix) { - return generateTargets(0, number, prefix); - } - - public static List generateTargets(final int start, final int number, final String prefix) { - final List targets = new ArrayList<>(); - for (int i = start; i < start + number; i++) { - targets.add(new JpaTarget(prefix + i)); - } - - return targets; - } - - public static List generateTargetTags(final int number) { - final List result = new ArrayList<>(); - - for (int i = 0; i < number; i++) { - result.add(new JpaTargetTag("tag" + i, "tagdesc" + i, "" + i)); - } - - return result; - } - - public static List generateDistributionSetTags(final int number) { - final List result = new ArrayList<>(); - - for (int i = 0; i < number; i++) { - result.add(new JpaDistributionSetTag("tag" + i, "tagdesc" + i, "" + i)); - } - - return result; - } - - public static JpaDistributionSet generateDistributionSet(final String suffix, - final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement, - final boolean isRequiredMigrationStep) { - return generateDistributionSet(suffix, "v1.0", softwareManagement, distributionSetManagement, - isRequiredMigrationStep); - } - - public static JpaDistributionSet generateDistributionSet(final String suffix, - final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement) { - return generateDistributionSet(suffix, "v1.0", softwareManagement, distributionSetManagement, false); - } - - public static List generateArtifacts(final ArtifactManagement artifactManagement, - final Long moduleId) { - final List artifacts = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - final InputStream stubInputStream = IOUtils.toInputStream("some test data" + i); - artifacts.add((AbstractJpaArtifact) artifactManagement.createLocalArtifact(stubInputStream, moduleId, - "filename" + i, false)); - - } - - return artifacts; - } - - public static Target createTarget(final TargetManagement targetManagement) { - final String targetExist = "targetExist"; - final Target target = new JpaTarget(targetExist); - targetManagement.createTarget(target); - return target; - } - - public static DistributionSet generateDistributionSet(final String suffix, - final SoftwareManagement softwareManagement, final DistributionSetManagement distributionSetManagement, - final Collection tags) { - return generateDistributionSet(suffix, "v1.0", softwareManagement, distributionSetManagement, tags); - } - - public static SoftwareModuleType findOrCreateSoftwareModuleType(final SoftwareManagement softwareManagement, - final String softwareModuleType) { - final SoftwareModuleType findSoftwareModuleTypeByKey = softwareManagement - .findSoftwareModuleTypeByKey(softwareModuleType); - if (findSoftwareModuleTypeByKey != null) { - return findSoftwareModuleTypeByKey; - } - return softwareManagement.createSoftwareModuleType(new JpaSoftwareModuleType(softwareModuleType, - softwareModuleType, "Standard type " + softwareManagement, 1)); - } - - public static DistributionSetType findOrCreateDistributionSetType( - final DistributionSetManagement distributionSetManagement, final String dsTypeKey, final String dsTypeName, - final Collection mandatory, final Collection optional) { - final DistributionSetType findDistributionSetTypeByname = distributionSetManagement - .findDistributionSetTypeByKey(dsTypeKey); - - if (findDistributionSetTypeByname != null) { - return findDistributionSetTypeByname; - } - - final DistributionSetType type = new JpaDistributionSetType(dsTypeKey, dsTypeName, - "Standard type" + dsTypeName); - mandatory.forEach(entry -> type.addMandatoryModuleType(entry)); - optional.forEach(entry -> type.addOptionalModuleType(entry)); - - return distributionSetManagement.createDistributionSetType(type); - } - - /** - * builds a set of {@link Target} fixtures from the given parameters. - * - * @param noOfTgts - * number of targets to create - * @param ctlrIDPrefix - * prefix used for the controller ID - * @param descriptionPrefix - * prefix used for the description - * @return set of {@link Target} - */ - public static List buildTargetFixtures(final int noOfTgts, final String ctlrIDPrefix, - final String descriptionPrefix) { - return buildTargetFixtures(noOfTgts, ctlrIDPrefix, descriptionPrefix, null); - } - - /** - * method creates set of targets by by generating the controller ID and the - * description like: prefix + no of target. - * - * @param noOfTgts - * number of targets which should be created - * @param ctlrIDPrefix - * prefix of the controllerID which is concatenated with the - * number of the target - * @param descriptionPrefix - * prefix of the target description which is concatenated with - * the number of the target - * @param tags - * tags which should be added to the created {@link Target}s - * @return set of created targets - */ - public static List buildTargetFixtures(final int noOfTgts, final String ctlrIDPrefix, - final String descriptionPrefix, final TargetTag[] tags) { - final List list = new ArrayList(); - for (int i = 0; i < noOfTgts; i++) { - String ctrlID = ctlrIDPrefix; - if (Strings.isNullOrEmpty(ctrlID)) { - ctrlID = UUID.randomUUID().toString(); - } - ctrlID = String.format("%s-%05d", ctrlID, i); - - final String description = String.format("the description of ProvisioningTarget: [%s]", ctrlID); - - final Target target = buildTargetFixture(ctrlID, description, tags); - list.add(target); - - } - return list; - } - - /** - * builds a single {@link Target} fixture from the given parameters. - * - * @param ctrlID - * controllerID - * @param description - * the description of the target - * @param tags - * assigned {@link TargetTag}s - * @return the created {@link Target} - */ - public static Target buildTargetFixture(final String ctrlID, final String description, final TargetTag[] tags) { - final Target target = new JpaTarget(ctrlID); - target.setName("Prov.Target ".concat(ctrlID)); - target.setDescription(description); - if (tags != null && tags.length > 0) { - for (final TargetTag t : tags) { - target.getTags().add(t); - } - } - return target; - } - - /** - * builder method for creating a single target object. - * - * @param ctrlID - * the ID of the target - * @param description - * of the target - * @return the created target object - */ - public static Target buildTargetFixture(final String ctrlID, final String description) { - return buildTargetFixture(ctrlID, description, null); - } - - /** - * builder method for creating a {@link DistributionSet}. - * - * @param name - * of the DS - * @param version - * of the DS - * @param os - * operating system of the DS - * @param jvm - * java virtual machine of the DS - * @param agentHub - * of the DS - * @return the created {@link DistributionSet} - */ - public static DistributionSet buildDistributionSet(final String name, final String version, - final DistributionSetType type, final SoftwareModule os, final SoftwareModule jvm, - final SoftwareModule agentHub) { - final DistributionSet distributionSet = new JpaDistributionSet(name, version, null, type, - Lists.newArrayList(os, jvm, agentHub)); - distributionSet.setDescription( - String.format("description of DistributionSet; name = '%s', version = '%s'", name, version)); - return distributionSet; - } - - /** - * builder method for creating a set of {@link TargetTag}. - * - * @param noOfTags - * number of {@link TargetTag}. to be created - * @param tagPrefix - * prefix for the {@link TargetTag.getName()} - * @return the created set of {@link TargetTag}s - */ - public static List buildTargetTagFixtures(final int noOfTags, final String tagPrefix) { - final List list = new ArrayList<>(); - for (int i = 0; i < noOfTags; i++) { - String tagName = "myTag"; - if (!Strings.isNullOrEmpty(tagPrefix)) { - tagName = tagPrefix; - } - tagName = String.format("%s-%05d", tagName, i); - - final TargetTag targetTag = buildTargetTagFixture(tagName); - list.add(targetTag); - } - return list; - } - - /** - * builder method for creating a simple {@link TargetTag}. - * - * @param tagName - * name of the Tag - * @return the {@link TargetTag} - */ - public static TargetTag buildTargetTagFixture(final String tagName) { - return new JpaTargetTag(tagName); - } -} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/model/ModelEqualsHashcodeTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/model/ModelEqualsHashcodeTest.java index 2114afc42..9f4cefa5d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/model/ModelEqualsHashcodeTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/model/ModelEqualsHashcodeTest.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.repository.jpa.model; import static org.fest.assertions.api.Assertions.assertThat; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.junit.Test; @@ -20,7 +20,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Unit Tests - Repository") @Stories("Repository Model") -public class ModelEqualsHashcodeTest extends AbstractIntegrationTest { +public class ModelEqualsHashcodeTest extends AbstractJpaIntegrationTest { @Test @Description("Verfies that different objects even with identical primary key, version and tenant " diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java index 949e278ab..3138c9f86 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java @@ -13,7 +13,7 @@ import static org.junit.Assert.fail; import org.eclipse.hawkbit.repository.ActionFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; @@ -30,7 +30,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("RSQL filter actions") -public class RSQLActionFieldsTest extends AbstractIntegrationTest { +public class RSQLActionFieldsTest extends AbstractJpaIntegrationTest { private Target target; private JpaAction action; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java index 2c3747586..6604e3152 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java @@ -15,12 +15,12 @@ import java.util.Arrays; import org.eclipse.hawkbit.repository.DistributionSetFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; +import org.eclipse.hawkbit.repository.util.TestdataFactory; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; @@ -32,19 +32,18 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("RSQL filter distribution set") -public class RSQLDistributionSetFieldTest extends AbstractIntegrationTest { +public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest { @Before public void seuptBeforeTest() { - DistributionSet ds = TestDataUtil.generateDistributionSet("DS", softwareManagement, distributionSetManagement); + DistributionSet ds = testdataFactory.createDistributionSet("DS"); ds.setDescription("DS"); ds = distributionSetManagement.updateDistributionSet(ds); distributionSetManagement .createDistributionSetMetadata(new JpaDistributionSetMetadata("metaKey", ds, "metaValue")); - DistributionSet ds2 = TestDataUtil - .generateDistributionSets("NewDS", 3, softwareManagement, distributionSetManagement).get(0); + DistributionSet ds2 = testdataFactory.createDistributionSets("NewDS", 3).get(0); ds2.setDescription("DS%"); ds2 = distributionSetManagement.updateDistributionSet(ds2); @@ -89,10 +88,12 @@ public class RSQLDistributionSetFieldTest extends AbstractIntegrationTest { @Test @Description("Test filter distribution set by version") public void testFilterByParameterVersion() { - assertRSQLQuery(DistributionSetFields.VERSION.name() + "==v1.0", 2); - assertRSQLQuery(DistributionSetFields.VERSION.name() + "!=v1.0", 2); - assertRSQLQuery(DistributionSetFields.VERSION.name() + "=in=(v1.0,v1.1)", 3); - assertRSQLQuery(DistributionSetFields.VERSION.name() + "=out=(v1.0,error)", 2); + assertRSQLQuery(DistributionSetFields.VERSION.name() + "==" + TestdataFactory.DEFAULT_VERSION, 1); + assertRSQLQuery(DistributionSetFields.VERSION.name() + "!=" + TestdataFactory.DEFAULT_VERSION, 3); + assertRSQLQuery( + DistributionSetFields.VERSION.name() + "=in=(" + TestdataFactory.DEFAULT_VERSION + ",1.0.0,1.0.1)", 3); + assertRSQLQuery(DistributionSetFields.VERSION.name() + "=out=(" + TestdataFactory.DEFAULT_VERSION + ",error)", + 3); } @Test @@ -121,10 +122,10 @@ public class RSQLDistributionSetFieldTest extends AbstractIntegrationTest { @Test @Description("Test filter distribution set by type") public void testFilterByType() { - assertRSQLQuery(DistributionSetFields.TYPE.name() + "==ecl_os_app_jvm", 4); + assertRSQLQuery(DistributionSetFields.TYPE.name() + "==" + TestdataFactory.DS_TYPE_DEFAULT, 4); assertRSQLQuery(DistributionSetFields.TYPE.name() + "==noExist*", 0); - assertRSQLQuery(DistributionSetFields.TYPE.name() + "=in=(ecl_os_app_jvm,ecl)", 4); - assertRSQLQuery(DistributionSetFields.TYPE.name() + "=out=(ecl_os_app_jvm)", 0); + assertRSQLQuery(DistributionSetFields.TYPE.name() + "=in=(" + TestdataFactory.DS_TYPE_DEFAULT + ",ecl)", 4); + assertRSQLQuery(DistributionSetFields.TYPE.name() + "=out=(" + TestdataFactory.DS_TYPE_DEFAULT + ")", 0); } @Test diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetMetadataFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetMetadataFieldsTest.java index af96da86f..65b677693 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetMetadataFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetMetadataFieldsTest.java @@ -14,8 +14,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetMetadataFields; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; @@ -30,14 +29,13 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("RSQL filter distribution set metadata") -public class RSQLDistributionSetMetadataFieldsTest extends AbstractIntegrationTest { +public class RSQLDistributionSetMetadataFieldsTest extends AbstractJpaIntegrationTest { private Long distributionSetId; @Before public void setupBeforeTest() { - final DistributionSet distributionSet = TestDataUtil.generateDistributionSet("DS", softwareManagement, - distributionSetManagement); + final DistributionSet distributionSet = testdataFactory.createDistributionSet("DS"); distributionSetId = distributionSet.getId(); final List metadata = new ArrayList<>(); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java index 408c1847e..fd48aed94 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java @@ -11,8 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.repository.RolloutGroupFields; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; @@ -30,7 +29,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("RSQL filter rollout group") -public class RSQLRolloutGroupFields extends AbstractIntegrationTest { +public class RSQLRolloutGroupFields extends AbstractJpaIntegrationTest { private Long rolloutGroupId; private Rollout rollout; @@ -38,9 +37,8 @@ public class RSQLRolloutGroupFields extends AbstractIntegrationTest { @Before public void seuptBeforeTest() { final int amountTargets = 20; - targetManagement.createTargets(TestDataUtil.buildTargetFixtures(amountTargets, "rollout", "rollout")); - final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, - distributionSetManagement); + targetManagement.createTargets(testdataFactory.generateTargets(amountTargets, "rollout", "rollout")); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); rollout = rolloutManagement.findRolloutById(rollout.getId()); this.rolloutGroupId = rollout.getRolloutGroups().get(0).getId(); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java index 6fb220880..d55de383f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.repository.SoftwareModuleFields; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -27,7 +27,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("RSQL filter software module") -public class RSQLSoftwareModuleFieldTest extends AbstractIntegrationTest { +public class RSQLSoftwareModuleFieldTest extends AbstractJpaIntegrationTest { @Before public void setupBeforeTest() { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java index 87f151873..3f843bffc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java @@ -14,12 +14,11 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.repository.SoftwareModuleMetadataFields; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.util.TestdataFactory; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; @@ -31,15 +30,14 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("RSQL filter software module metadata") -public class RSQLSoftwareModuleMetadataFieldsTest extends AbstractIntegrationTest { +public class RSQLSoftwareModuleMetadataFieldsTest extends AbstractJpaIntegrationTest { private Long softwareModuleId; @Before public void setupBeforeTest() { - final SoftwareModule softwareModule = softwareManagement.createSoftwareModule( - new JpaSoftwareModule(TestDataUtil.findOrCreateSoftwareModuleType(softwareManagement, "application"), - "application", "1.0.0", "Desc", "vendor Limited, California")); + final SoftwareModule softwareModule = testdataFactory.createSoftwareModule(TestdataFactory.SM_TYPE_APP); + softwareModuleId = softwareModule.getId(); final List metadata = new ArrayList<>(); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java index 3254ee4f6..e1538aaee 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.repository.SoftwareModuleTypeFields; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.junit.Test; import org.springframework.data.domain.Page; @@ -23,7 +23,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("RSQL filter software module test type") -public class RSQLSoftwareModuleTypeFieldsTest extends AbstractIntegrationTest { +public class RSQLSoftwareModuleTypeFieldsTest extends AbstractJpaIntegrationTest { @Test @Description("Test filter software module test type by id") @@ -34,7 +34,7 @@ public class RSQLSoftwareModuleTypeFieldsTest extends AbstractIntegrationTest { @Test @Description("Test filter software module test type by name") public void testFilterByParameterName() { - assertRSQLQuery(SoftwareModuleTypeFields.NAME.name() + "==ECL*", 3); + assertRSQLQuery(SoftwareModuleTypeFields.NAME.name() + "==Firmware", 1); } @Test @@ -55,7 +55,7 @@ public class RSQLSoftwareModuleTypeFieldsTest extends AbstractIntegrationTest { @Test @Description("Test filter software module test type by max") public void testFilterByMaxAssignment() { - assertRSQLQuery(SoftwareModuleTypeFields.MAXASSIGNMENTS.name() + "==1", 3); + assertRSQLQuery(SoftwareModuleTypeFields.MAXASSIGNMENTS.name() + "==1", 2); } private void assertRSQLQuery(final String rsqlParam, final long excpectedEntity) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java index a60d17818..3772bb372 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; import org.eclipse.hawkbit.repository.TagFields; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTag; @@ -27,7 +27,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("RSQL filter target and distribution set tags") -public class RSQLTagFieldsTest extends AbstractIntegrationTest { +public class RSQLTagFieldsTest extends AbstractJpaIntegrationTest { @Before public void seuptBeforeTest() { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java index 2e4f0346f..f21e4c938 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java @@ -15,8 +15,7 @@ import java.util.Arrays; import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; @@ -25,6 +24,7 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.util.TestdataFactory; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; @@ -36,19 +36,17 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("RSQL filter target") -public class RSQLTargetFieldTest extends AbstractIntegrationTest { +public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { @Before public void seuptBeforeTest() { - final DistributionSet ds = TestDataUtil.generateDistributionSet("AssignedDs", softwareManagement, - distributionSetManagement); + final DistributionSet ds = testdataFactory.createDistributionSet("AssignedDs"); - final JpaTarget target = new JpaTarget("targetId123"); + final Target target = entityFactory.generateTarget("targetId123"); target.setDescription("targetId123"); - final TargetInfo targetInfo = new JpaTargetInfo(target); + final TargetInfo targetInfo = target.getTargetInfo(); targetInfo.getControllerAttributes().put("revision", "1.1"); - target.setTargetInfo(targetInfo); ((JpaTargetInfo) target.getTargetInfo()).setUpdateStatus(TargetUpdateStatus.PENDING); targetManagement.createTarget(target); @@ -149,11 +147,13 @@ public class RSQLTargetFieldTest extends AbstractIntegrationTest { @Test @Description("Test filter target by assigned ds version") public void testFilterByAssignedDsVersion() { - assertRSQLQuery(TargetFields.ASSIGNEDDS.name() + ".version==v1.0", 1); + assertRSQLQuery(TargetFields.ASSIGNEDDS.name() + ".version==" + TestdataFactory.DEFAULT_VERSION, 1); assertRSQLQuery(TargetFields.ASSIGNEDDS.name() + ".version==*1*", 1); assertRSQLQuery(TargetFields.ASSIGNEDDS.name() + ".version==noExist*", 0); - assertRSQLQuery(TargetFields.ASSIGNEDDS.name() + ".version=in=(v1.0,notexist)", 1); - assertRSQLQuery(TargetFields.ASSIGNEDDS.name() + ".version=out=(v1.0,notexist)", 0); + assertRSQLQuery( + TargetFields.ASSIGNEDDS.name() + ".version=in=(" + TestdataFactory.DEFAULT_VERSION + ",notexist)", 1); + assertRSQLQuery( + TargetFields.ASSIGNEDDS.name() + ".version=out=(" + TestdataFactory.DEFAULT_VERSION + ",notexist)", 0); } @Test diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java index 1c0beeabf..86a0389d5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java @@ -10,14 +10,14 @@ package org.eclipse.hawkbit.repository.jpa.tenancy; import static org.fest.assertions.api.Assertions.assertThat; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; -import org.eclipse.hawkbit.repository.jpa.WithSpringAuthorityRule; -import org.eclipse.hawkbit.repository.jpa.WithUser; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.util.WithUser; import org.junit.Test; import org.springframework.data.domain.Page; import org.springframework.data.domain.Slice; @@ -34,7 +34,7 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Repository") @Stories("Multi Tenancy") -public class MultiTenancyEntityTest extends AbstractIntegrationTest { +public class MultiTenancyEntityTest extends AbstractJpaIntegrationTest { @Test @Description(value = "Ensures that multiple targets with same controller-ID can be created for different tenants.") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/RepositoryDataGenerator.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/RepositoryDataGenerator.java deleted file mode 100644 index 9d41ecb65..000000000 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/utils/RepositoryDataGenerator.java +++ /dev/null @@ -1,485 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.repository.jpa.utils; - -import java.net.URI; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; -import java.util.UUID; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.IntStream; - -import javax.persistence.EntityManager; -import javax.persistence.Query; -import javax.transaction.Transactional; - -import org.eclipse.hawkbit.im.authentication.SpPermission; -import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; -import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; -import org.eclipse.hawkbit.repository.ControllerManagement; -import org.eclipse.hawkbit.repository.DeploymentManagement; -import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; -import org.eclipse.hawkbit.repository.DistributionSetManagement; -import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.TagManagement; -import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.jpa.TestDataUtil; -import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; -import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; -import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; -import org.eclipse.hawkbit.repository.model.Action; -import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.util.IpUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.data.auditing.AuditingHandler; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.security.authentication.TestingAuthenticationToken; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.context.SecurityContextImpl; - -import net._01001111.text.LoremIpsum; - -/** - * Generates test data for setting up the repository for test or demonstration - * purpose. - * - * - * - */ -public final class RepositoryDataGenerator { - private static final Logger LOG = LoggerFactory.getLogger(RepositoryDataGenerator.class); - - public static void initDemoRepo(final ConfigurableApplicationContext context) { - final PersistentInitDemoDataBuilder initDemoDataBuilder = new PersistentInitDemoDataBuilder(context); - initDemoDataBuilder.initDemoRepo(20, 0); - } - - public static void initLoadRepo(final ConfigurableApplicationContext context) { - final PersistentInitDemoDataBuilder initDemoDataBuilder = new PersistentInitDemoDataBuilder(context); - initDemoDataBuilder.initDemoRepo(200, 200); - } - - /** - * builder which build initial demo data and stores it to the repos. - * - */ - private static final class PersistentInitDemoDataBuilder { - - private final SoftwareManagement softwareManagement; - private final TargetManagement targetManagement; - private final DeploymentManagement deploymentManagement; - private final TagManagement tagManagement; - private final ControllerManagement controllerManagement; - private final DistributionSetManagement distributionSetManagement; - - private final DatabaseCleanupUtil dbCleanupUtil; - - private final AuditingHandler auditingHandler; - - final LoremIpsum jlorem = new LoremIpsum(); - - PersistentInitDemoDataBuilder(final ConfigurableApplicationContext context) { - softwareManagement = context.getBean(SoftwareManagement.class); - targetManagement = context.getBean(TargetManagement.class); - tagManagement = context.getBean(TagManagement.class); - deploymentManagement = context.getBean(DeploymentManagement.class); - controllerManagement = context.getBean(ControllerManagement.class); - distributionSetManagement = context.getBean(DistributionSetManagement.class); - - dbCleanupUtil = context.getBean(DatabaseCleanupUtil.class); - - auditingHandler = context.getBean(AuditingHandler.class); - } - - private void runAsAllAuthorityContext(final Runnable runnable) { - final SecurityContext oldContext = SecurityContextHolder.getContext(); - try { - final SecurityContextImpl securityContextImpl = new SecurityContextImpl(); - final TestingAuthenticationToken authentication = new TestingAuthenticationToken("repogenator", - "repogenator", SpPermission.CREATE_REPOSITORY, SpPermission.CREATE_TARGET, - SpPermission.DELETE_REPOSITORY, SpPermission.DELETE_TARGET, SpPermission.READ_REPOSITORY, - SpPermission.READ_TARGET, SpPermission.UPDATE_REPOSITORY, SpPermission.UPDATE_TARGET, - SpringEvalExpressions.CONTROLLER_ROLE); - securityContextImpl.setAuthentication(authentication); - authentication.setDetails(new TenantAwareAuthenticationDetails("default", false)); - SecurityContextHolder.setContext(securityContextImpl); - runnable.run(); - } finally { - SecurityContextHolder.setContext(oldContext); - } - } - - public void generateTestTagetGroup(final String group, final int sizeMultiplikator) { - final DistributionSetTag dsTag = tagManagement - .createDistributionSetTag(new JpaDistributionSetTag("For " + group + "s")); - - auditingHandler.setDateTimeProvider(() -> { - final Calendar instance = Calendar.getInstance(); - instance.add(Calendar.MONTH, -new Random().nextInt(7)); - - return instance; - }); - - final List targets = createTargetTestGroup(group, 20 * sizeMultiplikator); - - auditingHandler.setDateTimeProvider(() -> { - final Calendar instance = Calendar.getInstance(); - return instance; - }); - - LOG.debug("initDemoRepo - start now real action history for group: {}", group); - - // Old history of succesfully finished operations - IntStream.range(0, 10).forEach(idx -> { - final DistributionSet dsReal = TestDataUtil.generateDistributionSet(group + " Release", "v1." + idx, - softwareManagement, distributionSetManagement, - Arrays.asList(new DistributionSetTag[] { dsTag })); - - final DistributionSetAssignmentResult result = deploymentManagement.assignDistributionSet(dsReal, - targets); - - createSimpleActionStatusHistory(result.getActions()); - }); - - final List> targetGroups = splitIntoGroups(targets); - - IntStream.range(0, targetGroups.size()).forEach(idx -> { - final DistributionSet dsReal = TestDataUtil.generateDistributionSet(group + " Release", "v2." + idx, - softwareManagement, distributionSetManagement, - Arrays.asList(new DistributionSetTag[] { dsTag })); - - final DistributionSetAssignmentResult result = deploymentManagement.assignDistributionSet(dsReal, - targetGroups.get(idx)); - - createActionStatusHistory(result.getActions(), sizeMultiplikator); - }); - - LOG.debug("initDemoRepo - real action history finished for group: {}", group); - } - - private List> splitIntoGroups(final List allTargets) { - - final int elements = allTargets.size(); - - final int group1 = elements * (5 + new Random().nextInt(5)) / 100; - final int group2 = elements * (15 + new Random().nextInt(5)) / 100; - - final List> result = new ArrayList>(); - - result.add(allTargets.subList(0, group1)); - result.add(allTargets.subList(group1, group2)); - result.add(allTargets.subList(group2, elements)); - - return result; - - } - - private void createActionStatusHistory(final List actions, final int sizeMultiplikator) { - final AtomicInteger counter = new AtomicInteger(); - - int index = 0; - for (final Long actionGiven : actions) { - // retrieved - Action action = controllerManagement.registerRetrieved( - deploymentManagement.findActionWithDetails(actionGiven), - "Controller retrieved update action and should start now the download."); - - // download - final ActionStatus download = new JpaActionStatus(); - download.setAction(action); - download.setStatus(Status.DOWNLOAD); - download.addMessage("Controller started download."); - action = controllerManagement.addUpdateActionStatus(download); - - // warning - final ActionStatus warning = new JpaActionStatus(); - warning.setAction(action); - warning.setStatus(Status.WARNING); - warning.addMessage("Some warning: " + jlorem.words(new Random().nextInt(50))); - action = controllerManagement.addUpdateActionStatus(warning); - - // garbage - for (int i = 0; i < new Random().nextInt(10); i++) { - final ActionStatus running = new JpaActionStatus(); - running.setAction(action); - running.setStatus(Status.RUNNING); - running.addMessage("Still running: " + jlorem.words(new Random().nextInt(50))); - action = controllerManagement.addUpdateActionStatus(running); - for (int g = 0; g < new Random().nextInt(5); g++) { - final ActionStatus rand = new JpaActionStatus(); - rand.setAction(action); - rand.setStatus(Status.RUNNING); - rand.addMessage(jlorem.words(new Random().nextInt(50))); - action = controllerManagement.addUpdateActionStatus(rand); - } - } - - // close - final ActionStatus close = new JpaActionStatus(); - close.setAction(action); - - // with error - final int incrementAndGet = counter.incrementAndGet(); - if (incrementAndGet % 5 == 0) { - close.setStatus(Status.ERROR); - close.addMessage("Controller reported CLOSED with ERROR!"); - action = controllerManagement.addUpdateActionStatus(close); - } - // with OK - else { - close.setStatus(Status.FINISHED); - close.addMessage("Controller reported CLOSED with OK!"); - action = controllerManagement.addUpdateActionStatus(close); - } - - index++; - } - } - - private void createSimpleActionStatusHistory(final List actions) { - for (final Long actionGiven : actions) { - // retrieved - Action action = controllerManagement.registerRetrieved( - deploymentManagement.findActionWithDetails(actionGiven), - "Controller retrieved update action and should start now the download."); - - // close - final ActionStatus close = new JpaActionStatus(); - close.setAction(action); - close.setStatus(Status.FINISHED); - close.addMessage("Controller reported CLOSED with OK!"); - action = controllerManagement.addUpdateActionStatus(close); - - } - } - - private List createTargetTestGroup(final String group, final int targets) { - LOG.debug("createTargetTestGroup: create group {}", group); - - final TargetTag targTag = tagManagement.createTargetTag(new JpaTargetTag(group)); - - final List targAs = targetManagement.createTargets(buildTargets(targets, group), - TargetUpdateStatus.REGISTERED, System.currentTimeMillis() - new Random().nextInt(50_000_000), - generateIPAddress()); - LOG.debug("createTargetTestGroup: {} created", group); - - LOG.debug("createTargetTestGroup: {} targets status updated including IP", group); - - return targetManagement.toggleTagAssignment(targAs, targTag).getAssignedEntity(); - } - - private List buildTargets(final int noOfTgts, final String descriptionPrefix) { - - final List result = new ArrayList(noOfTgts); - - for (int i = 0; i < noOfTgts; i++) { - final Target target = new JpaTarget(UUID.randomUUID().toString()); - - final StringBuilder builder = new StringBuilder(); - builder.append(descriptionPrefix); - builder.append(jlorem.words(5)); - - target.setDescription(builder.toString()); - target.getTargetInfo().getControllerAttributes().put("revision", "1.1"); - target.getTargetInfo().getControllerAttributes().put("capacity", "128M"); - target.getTargetInfo().getControllerAttributes().put("serial", - String.valueOf(System.currentTimeMillis())); - - result.add(target); - - } - - return result; - } - - /** - * method writes initial test/demo data to the repositories. - * - * @param sizeMultiplikator - * the entire scenario - * @param loadtestgroups - * packages of 1_000 targets - */ - private void initDemoRepo(final int sizeMultiplikator, final int loadtestgroups) { - final LoremIpsum jlorem = new LoremIpsum(); - - runAsAllAuthorityContext(() -> { - dbCleanupUtil.cleanupDB(null); - - // generate targets and assign DS - // 5 groups - 100 targets each -> 500 - final String[] targetTestGroups = { "SHC", "CCU", "Vehicle", "Vending machine", "ECU" }; - - final String[] modulesTypes = { "HeadUnit_FW", "EDC17_FW", "OSGi_Bundle" }; - - final DistributionSetTag depTag = tagManagement - .createDistributionSetTag(new JpaDistributionSetTag("deprecated")); - - Arrays.stream(targetTestGroups).forEach(group -> { - generateTestTagetGroup(group, sizeMultiplikator); - }); - - // garbage DS - LOG.debug("initDemoRepo - start now DS garbage"); - TestDataUtil.generateDistributionSets("Generic Software Package", sizeMultiplikator, softwareManagement, - distributionSetManagement); - LOG.debug("initDemoRepo - DS garbage finished"); - - LOG.debug("initDemoRepo - start now Extra Software Modules and types"); - Arrays.stream(modulesTypes).forEach(typeName -> { - final SoftwareModuleType smtype = softwareManagement.createSoftwareModuleType( - new JpaSoftwareModuleType(typeName.toLowerCase().replaceAll("\\s+", ""), typeName, - jlorem.words(5), Integer.MAX_VALUE)); - - for (int i1 = 0; i1 < sizeMultiplikator; i1++) { - softwareManagement.createSoftwareModule(new JpaSoftwareModule(smtype, typeName + i1, "1.0." + i1, - jlorem.words(5), "the " + typeName + " vendor Inc.")); - } - - }); - LOG.debug("initDemoRepo - Extra Software Modules and types finished"); - - LOG.debug("initDemoRepo - start now target garbage"); - - // garbage targets - // unknown - targetManagement - .createTargets(TestDataUtil.generateTargets(targetTestGroups.length * sizeMultiplikator)); - - // registered - targetManagement.createTargets( - TestDataUtil.generateTargets(targetTestGroups.length * sizeMultiplikator, "registered"), - TargetUpdateStatus.REGISTERED, System.currentTimeMillis(), generateIPAddress()); - - // pending - final DistributionSetTag dsTag = tagManagement - .createDistributionSetTag(new JpaDistributionSetTag("OnlyAssignedTag")); - final DistributionSet ds = TestDataUtil.generateDistributionSet("Pending DS", "v1.0", - softwareManagement, distributionSetManagement, - Arrays.asList(new DistributionSetTag[] { dsTag })); - deploymentManagement.assignDistributionSet(ds, targetManagement.createTargets( - TestDataUtil.generateTargets(targetTestGroups.length * sizeMultiplikator, "pending"))); - - // Load test means additional 1_000_000 target - - for (int i2 = 0; i2 < loadtestgroups; i2++) { - targetManagement.createTargets(TestDataUtil.generateTargets(i2 * 1_000, 1_000, "loadtest-")); - } - - LOG.debug("initDemoRepo complete"); - }); - } - /** - * Adding controller attributes for given {@link Target}. - */ - // private Target setControllerAttributes( final String targetId ) { - // final Target target = - // targetManagement.findTargetByControllerIDWithDetails( targetId ); - // target.getTargetStatus().getControllerAttributes().put( "revision", - // "1.1" ); - // target.getTargetStatus().getControllerAttributes().put( "capacity", - // "128M" ); - // target.getTargetStatus().getControllerAttributes().put( "serial", - // String.valueOf( - // System.currentTimeMillis()) ); - // return targetManagement.updateTarget( target ); - // } - } - - /** - * - * Data clean up class. - * - * - * - */ - public static class DatabaseCleanupUtil { - - private static final Logger LOG = LoggerFactory.getLogger(DatabaseCleanupUtil.class); - @Autowired - private EntityManager entityManager; - - private static final String[] CLEAN_UP_SQLS = new String[] { "sp_tenant", "sp_tenant_configuration", - "sp_artifact", "sp_external_artifact", "sp_external_provider", "sp_target_target_tag", - "sp_target_attributes", "sp_target_tag", "sp_action_status_messages", "sp_action_status", "sp_action", - "sp_ds_dstag", "sp_distributionset_tag", "sp_target_info", "sp_target", "sp_sw_metadata", - "sp_ds_metadata", "sp_ds_module", "sp_distribution_set", "sp_base_software_module", - "sp_ds_type_element", "sp_distribution_set_type", "sp_software_module_type" }; - - /** - * delete all entries from the DB tables. - */ - @Transactional - @Modifying - public void cleanupDB(final String database) { - LOG.debug("Data clean up is started..."); - final boolean isMySql = "MYSQL".equals(database); - if (isMySql) { - // disable foreign key check because otherwise mysql cannot - // delete sp_active_actions due - // the self constraint within the table, stupid MySql - entityManager.createNativeQuery("SET FOREIGN_KEY_CHECKS = 0").executeUpdate(); - } - try { - final String[] dbCmds = new String[] { "delete from" }; - for (final String dbCmd : dbCmds) { - for (final String table : CLEAN_UP_SQLS) { - final String sql = String.format("%s %s", dbCmd, table); - final Query query = entityManager.createNativeQuery(sql); - try { - LOG.debug("cleanup table: {}", sql); - LOG.debug("cleaned table: {}; deleted {} records", sql, query.executeUpdate()); - } catch (final Exception ex) { - LOG.error(String.format("error on executing cleanup statement '%s'", sql), ex); - throw ex; - } - } - } - - LOG.debug("Data clean up is finished..."); - } finally { - if (isMySql) { - // enable foreign key check again! - entityManager.createNativeQuery("SET FOREIGN_KEY_CHECKS = 1").executeUpdate(); - } - } - } - } - - /** - * @return a generated IPv4 address string. - */ - private static URI generateIPAddress() { - final Random r = new Random(); - return IpUtil - .createHttpUri(r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256) + "." + r.nextInt(256)); - } - - private RepositoryDataGenerator() { - super(); - } - -} diff --git a/hawkbit-repository/hawkbit-repository-test/pom.xml b/hawkbit-repository/hawkbit-repository-test/pom.xml new file mode 100644 index 000000000..6b421c8ab --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-test/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-repository + 0.2.0-SNAPSHOT + + hawkbit-repository-test + hawkBit :: Repository Test Utilities + + + + org.eclipse.hawkbit + hawkbit-repository-api + ${project.version} + + + org.eclipse.hawkbit + hawkbit-repository-core + ${project.version} + + + org.eclipse.hawkbit + hawkbit-artifact-repository-mongo + ${project.version} + + + de.flapdoodle.embed + de.flapdoodle.embed.mongo + + + net._01001111 + jlorem + + + commons-io + commons-io + 2.5 + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.security + spring-security-config + + + \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java similarity index 51% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java index a1eff3fae..29bf02fa0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java @@ -6,22 +6,15 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; - -import static org.fest.assertions.api.Assertions.assertThat; - -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; +package org.eclipse.hawkbit.repository.util; import org.eclipse.hawkbit.ExcludePathAwareShallowETagFilter; -import org.eclipse.hawkbit.RepositoryApplicationConfiguration; -import org.eclipse.hawkbit.cache.TenantAwareCacheManager; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.Constants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -30,32 +23,13 @@ import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.jpa.ActionRepository; -import org.eclipse.hawkbit.repository.jpa.ActionStatusRepository; -import org.eclipse.hawkbit.repository.jpa.DistributionSetRepository; -import org.eclipse.hawkbit.repository.jpa.DistributionSetTagRepository; -import org.eclipse.hawkbit.repository.jpa.DistributionSetTypeRepository; -import org.eclipse.hawkbit.repository.jpa.ExternalArtifactRepository; -import org.eclipse.hawkbit.repository.jpa.LocalArtifactRepository; -import org.eclipse.hawkbit.repository.jpa.RolloutGroupRepository; -import org.eclipse.hawkbit.repository.jpa.RolloutRepository; -import org.eclipse.hawkbit.repository.jpa.SoftwareModuleMetadataRepository; -import org.eclipse.hawkbit.repository.jpa.SoftwareModuleRepository; -import org.eclipse.hawkbit.repository.jpa.SoftwareModuleTypeRepository; -import org.eclipse.hawkbit.repository.jpa.TargetInfoRepository; -import org.eclipse.hawkbit.repository.jpa.TargetRepository; -import org.eclipse.hawkbit.repository.jpa.TargetTagRepository; -import org.eclipse.hawkbit.repository.jpa.TenantMetaDataRepository; -import org.eclipse.hawkbit.repository.jpa.utils.RepositoryDataGenerator.DatabaseCleanupUtil; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.security.DosFilter; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.junit.After; -import org.junit.AfterClass; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Rule; import org.junit.rules.MethodRule; import org.junit.rules.TestWatchman; @@ -63,13 +37,11 @@ import org.junit.runner.RunWith; import org.junit.runners.model.FrameworkMethod; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.context.EnvironmentAware; import org.springframework.core.env.Environment; import org.springframework.data.auditing.AuditingHandler; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.data.mongodb.gridfs.GridFsOperations; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ActiveProfiles; @@ -78,12 +50,10 @@ import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.WebApplicationContext; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration -@SpringApplicationConfiguration(classes = { RepositoryApplicationConfiguration.class, TestConfiguration.class }) @ActiveProfiles({ "test" }) @WithUser(principal = "bumlux", allSpPermissions = true, authorities = "ROLE_CONTROLLER") // destroy the context after each test class because otherwise we get problem @@ -96,44 +66,16 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { protected static final Pageable pageReq = new PageRequest(0, 400); - @PersistenceContext - protected EntityManager entityManager; + /** + * Number of {@link DistributionSetType}s that exist in every test case. One + * generated by using + * {@link TestdataFactory#findOrCreateDefaultTestDsType()} and two + * {@link SystemManagement#getTenantMetadata()}; + */ + protected static final int DEFAULT_DS_TYPES = Constants.DEFAULT_DS_TYPES_IN_TENANT + 1; @Autowired - protected TargetRepository targetRepository; - - @Autowired - protected ActionRepository actionRepository; - - @Autowired - protected DistributionSetRepository distributionSetRepository; - - @Autowired - protected SoftwareModuleRepository softwareModuleRepository; - - @Autowired - protected TenantMetaDataRepository tenantMetaDataRepository; - - @Autowired - protected DistributionSetTypeRepository distributionSetTypeRepository; - - @Autowired - protected SoftwareModuleTypeRepository softwareModuleTypeRepository; - - @Autowired - protected TargetTagRepository targetTagRepository; - - @Autowired - protected DistributionSetTagRepository distributionSetTagRepository; - - @Autowired - protected SoftwareModuleMetadataRepository softwareModuleMetadataRepository; - - @Autowired - protected ActionStatusRepository actionStatusRepository; - - @Autowired - protected ExternalArtifactRepository externalArtifactRepository; + protected EntityFactory entityFactory; @Autowired protected SoftwareManagement softwareManagement; @@ -159,15 +101,6 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Autowired protected ArtifactManagement artifactManagement; - @Autowired - protected LocalArtifactRepository artifactRepository; - - @Autowired - protected TargetInfoRepository targetInfoRepository; - - @Autowired - protected GridFsOperations operations; - @Autowired protected WebApplicationContext context; @@ -183,9 +116,6 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Autowired protected SystemManagement systemManagement; - @Autowired - protected TenantAwareCacheManager cacheManager; - @Autowired protected TenantConfigurationManagement tenantConfigurationManagement; @@ -195,19 +125,13 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Autowired protected RolloutGroupManagement rolloutGroupManagement; - @Autowired - protected RolloutGroupRepository rolloutGroupRepository; - - @Autowired - protected RolloutRepository rolloutRepository; - @Autowired protected SystemSecurityContext systemSecurityContext; - protected MockMvc mvc; - @Autowired - protected DatabaseCleanupUtil dbCleanupUtil; + protected TestRepositoryManagement testRepositoryManagement; + + protected MockMvc mvc; protected SoftwareModuleType osType; protected SoftwareModuleType appType; @@ -215,13 +139,14 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { protected DistributionSetType standardDsType; + @Autowired + protected TestdataFactory testdataFactory; + @Rule public final WithSpringAuthorityRule securityRule = new WithSpringAuthorityRule(); protected Environment environment = null; - private static CIMySqlTestDatabase tesdatabase; - @Override public void setEnvironment(final Environment environment) { this.environment = environment; @@ -230,20 +155,29 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Before public void before() throws Exception { mvc = createMvcWebAppContext().build(); + final String description = "Updated description to have lastmodified available in tests"; - standardDsType = securityRule.runAsPrivileged(() -> systemManagement.getTenantMetadata().getDefaultDsType()); - - osType = securityRule.runAsPrivileged(() -> softwareManagement.findSoftwareModuleTypeByKey("os")); - osType.setDescription("Updated description to have lastmodified available in tests"); + osType = securityRule + .runAsPrivileged(() -> testdataFactory.findOrCreateSoftwareModuleType(TestdataFactory.SM_TYPE_OS)); + osType.setDescription(description); osType = securityRule.runAsPrivileged(() -> softwareManagement.updateSoftwareModuleType(osType)); - appType = securityRule.runAsPrivileged(() -> softwareManagement.findSoftwareModuleTypeByKey("application")); - appType.setDescription("Updated description to have lastmodified available in tests"); + appType = securityRule.runAsPrivileged( + () -> testdataFactory.findOrCreateSoftwareModuleType(TestdataFactory.SM_TYPE_APP, Integer.MAX_VALUE)); + appType.setDescription(description); appType = securityRule.runAsPrivileged(() -> softwareManagement.updateSoftwareModuleType(appType)); - runtimeType = securityRule.runAsPrivileged(() -> softwareManagement.findSoftwareModuleTypeByKey("runtime")); - runtimeType.setDescription("Updated description to have lastmodified available in tests"); + runtimeType = securityRule + .runAsPrivileged(() -> testdataFactory.findOrCreateSoftwareModuleType(TestdataFactory.SM_TYPE_RT)); + runtimeType.setDescription(description); runtimeType = securityRule.runAsPrivileged(() -> softwareManagement.updateSoftwareModuleType(runtimeType)); + + standardDsType = securityRule.runAsPrivileged(() -> testdataFactory.findOrCreateDefaultTestDsType()); + } + + @After + public void after() { + testRepositoryManagement.clearTestRepository(); } protected DefaultMockMvcBuilder createMvcWebAppContext() { @@ -254,59 +188,6 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { "/rest/v1/softwaremodules/{smId}/artifacts/{artId}/download", "/*/controller/artifacts/**")); } - @BeforeClass - public static void beforeClass() { - createTestdatabaseAndStart(); - } - - private static void createTestdatabaseAndStart() { - if ("MYSQL".equals(System.getProperty("spring.jpa.database"))) { - tesdatabase = new CIMySqlTestDatabase(); - tesdatabase.before(); - } - } - - @AfterClass - public static void afterClass() { - if (tesdatabase != null) { - tesdatabase.after(); - } - } - - @After - public void after() throws Exception { - deleteAllRepos(); - cacheManager.getDirectCacheNames().forEach(name -> cacheManager.getDirectCache(name).clear()); - assertThat(actionStatusRepository.findAll()).isEmpty(); - assertThat(targetRepository.findAll()).isEmpty(); - assertThat(actionRepository.findAll()).isEmpty(); - assertThat(distributionSetRepository.findAll()).isEmpty(); - assertThat(targetTagRepository.findAll()).isEmpty(); - assertThat(distributionSetTagRepository.findAll()).isEmpty(); - assertThat(softwareModuleRepository.findAll()).isEmpty(); - assertThat(softwareModuleTypeRepository.findAll()).isEmpty(); - assertThat(distributionSetTypeRepository.findAll()).isEmpty(); - assertThat(tenantMetaDataRepository.findAll()).isEmpty(); - assertThat(rolloutGroupRepository.findAll()).isEmpty(); - assertThat(rolloutRepository.findAll()).isEmpty(); - } - - @Transactional - protected void deleteAllRepos() throws Exception { - final List tenants = securityRule.runAs(WithSpringAuthorityRule.withUser(false), - () -> systemManagement.findTenants()); - tenants.forEach(tenant -> { - try { - securityRule.runAs(WithSpringAuthorityRule.withUser(false), () -> { - systemManagement.deleteTenant(tenant); - return null; - }); - } catch (final Exception e) { - e.printStackTrace(); - } - }); - } - @Rule public MethodRule watchman = new TestWatchman() { @Override diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTestWithMongoDB.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTestWithMongoDB.java similarity index 89% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTestWithMongoDB.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTestWithMongoDB.java index d83f2e5cf..28d8add3a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractIntegrationTestWithMongoDB.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTestWithMongoDB.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository.util; import java.io.IOException; import java.net.UnknownHostException; @@ -15,7 +15,9 @@ import java.util.concurrent.atomic.AtomicInteger; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.gridfs.GridFsOperations; import de.flapdoodle.embed.mongo.Command; import de.flapdoodle.embed.mongo.MongodExecutable; @@ -38,10 +40,14 @@ import de.flapdoodle.embed.process.runtime.Network; * */ public abstract class AbstractIntegrationTestWithMongoDB extends AbstractIntegrationTest { + protected static volatile MongodExecutable mongodExecutable = null; private static final AtomicInteger mongoLease = new AtomicInteger(0); private static volatile Integer port; + @Autowired + protected GridFsOperations operations; + @BeforeClass public static void setupMongo() throws UnknownHostException, IOException { mongoLease.incrementAndGet(); @@ -67,8 +73,8 @@ public abstract class AbstractIntegrationTestWithMongoDB extends AbstractIntegra new ArtifactStoreBuilder().defaults(command) .download(new DownloadConfigBuilder().defaultsForCommand(command) .proxyFactory(new HttpProxyFactory( - System.getProperty("http.proxyHost").trim(), - Integer.valueOf(System.getProperty("http.proxyPort")))))); + System.getProperty("http.proxyHost").trim(), Integer + .valueOf(System.getProperty("http.proxyPort")))))); } final IMongodConfig mongodConfig = new MongodConfigBuilder().version(version) @@ -86,7 +92,7 @@ public abstract class AbstractIntegrationTestWithMongoDB extends AbstractIntegra operations.delete(new Query()); } - public void internalShutDownMongo() { + public static void internalShutDownMongo() { if (mongodExecutable != null && mongoLease.decrementAndGet() <= 0) { mongodExecutable.stop(); mongodExecutable = null; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/FreePortFileWriter.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/FreePortFileWriter.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/FreePortFileWriter.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/FreePortFileWriter.java index 8d900a593..383722a75 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/FreePortFileWriter.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/FreePortFileWriter.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository.util; import java.io.File; import java.net.InetSocketAddress; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestRepositoryManagement.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestRepositoryManagement.java new file mode 100644 index 000000000..ddad59990 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestRepositoryManagement.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.util; + +/** + * Repository support for tests. + * + */ +@FunctionalInterface +public interface TestRepositoryManagement { + /** + * Empty the test repository. + */ + void clearTestRepository(); + +} diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java new file mode 100644 index 000000000..0597a30cb --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java @@ -0,0 +1,737 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.util; + +import java.io.InputStream; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Random; +import java.util.UUID; + +import org.apache.commons.io.IOUtils; +import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.DeploymentManagement; +import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; +import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.TargetManagement; +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.Artifact; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.DistributionSetTag; +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.LocalArtifact; +import org.eclipse.hawkbit.repository.model.NamedEntity; +import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; +import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.model.TargetTag; +import org.springframework.beans.factory.annotation.Autowired; + +import com.google.common.base.Strings; +import com.google.common.collect.Lists; + +import net._01001111.text.LoremIpsum; + +/** + * Data generator utility for tests. + */ +public class TestdataFactory { + private static final LoremIpsum LOREM = new LoremIpsum(); + + /** + * default {@link Target#getControllerId()}. + */ + public static final String DEFAULT_CONTROLLER_ID = "targetExist"; + + /** + * Default {@link SoftwareModule#getVendor()}. + */ + public static final String DEFAULT_VENDOR = "Vendor Limited, California"; + + /** + * Default {@link NamedVersionedEntity#getVersion()}. + */ + public static final String DEFAULT_VERSION = "1.0"; + + /** + * Default {@link NamedEntity#getDescription()}. + */ + public static final String DEFAULT_DESCRIPTION = "Desc: " + LOREM.words(10); + + /** + * Key of test default {@link DistributionSetType}. + */ + public static final String DS_TYPE_DEFAULT = "test_default_ds_type"; + + /** + * Key of test "os" {@link SoftwareModuleType} -> mandatory firmware in + * {@link #DS_TYPE_DEFAULT}. + */ + public static final String SM_TYPE_OS = "os"; + + /** + * Key of test "runtime" {@link SoftwareModuleType} -> optional firmware in + * {@link #DS_TYPE_DEFAULT}. + */ + public static final String SM_TYPE_RT = "runtime"; + + /** + * Key of test "application" {@link SoftwareModuleType} -> optional software + * in {@link #DS_TYPE_DEFAULT}. + */ + public static final String SM_TYPE_APP = "application"; + + @Autowired + private ControllerManagement controllerManagament; + + @Autowired + private SoftwareManagement softwareManagement; + + @Autowired + private DistributionSetManagement distributionSetManagement; + + @Autowired + private TargetManagement targetManagement; + + @Autowired + private DeploymentManagement deploymentManagement; + + @Autowired + private TagManagement tagManagement; + + @Autowired + private EntityFactory entityFactory; + + @Autowired + private ArtifactManagement artifactManagement; + + /** + * Creates {@link DistributionSet} in repository including three + * {@link SoftwareModule}s of types {@link #SM_TYPE_OS}, {@link #SM_TYPE_RT} + * , {@link #SM_TYPE_APP} with {@link #DEFAULT_VERSION} and + * {@link DistributionSet#isRequiredMigrationStep()} false. + * + * @param prefix + * for {@link SoftwareModule}s and {@link DistributionSet}s name, + * vendor and description. + * + * @return {@link DistributionSet} entity. + */ + public DistributionSet createDistributionSet(final String prefix) { + return createDistributionSet(prefix, DEFAULT_VERSION, false); + } + + /** + * Creates {@link DistributionSet} in repository including three + * {@link SoftwareModule}s of types {@link #SM_TYPE_OS}, {@link #SM_TYPE_RT} + * , {@link #SM_TYPE_APP} with {@link #DEFAULT_VERSION}. + * + * @param prefix + * for {@link SoftwareModule}s and {@link DistributionSet}s name, + * vendor and description. + * @param isRequiredMigrationStep + * for {@link DistributionSet#isRequiredMigrationStep()} + * + * @return {@link DistributionSet} entity. + */ + public DistributionSet createDistributionSet(final String prefix, final boolean isRequiredMigrationStep) { + return createDistributionSet(prefix, DEFAULT_VERSION, isRequiredMigrationStep); + } + + /** + * Creates {@link DistributionSet} in repository including three + * {@link SoftwareModule}s of types {@link #SM_TYPE_OS}, {@link #SM_TYPE_RT} + * , {@link #SM_TYPE_APP} with {@link #DEFAULT_VERSION} and + * {@link DistributionSet#isRequiredMigrationStep()} false. + * + * @param prefix + * for {@link SoftwareModule}s and {@link DistributionSet}s name, + * vendor and description. + * @param tags + * {@link DistributionSet#getTags()} + * + * @return {@link DistributionSet} entity. + */ + public DistributionSet createDistributionSet(final String prefix, final Collection tags) { + return createDistributionSet(prefix, DEFAULT_VERSION, tags); + } + + /** + * Creates {@link DistributionSet} in repository including three + * {@link SoftwareModule}s of types {@link #SM_TYPE_OS}, {@link #SM_TYPE_RT} + * , {@link #SM_TYPE_APP}. + * + * @param prefix + * for {@link SoftwareModule}s and {@link DistributionSet}s name, + * vendor and description. + * @param version + * {@link DistributionSet#getVersion()} and + * {@link SoftwareModule#getVersion()} extended by a random + * number. + * @param isRequiredMigrationStep + * for {@link DistributionSet#isRequiredMigrationStep()} + * + * @return {@link DistributionSet} entity. + */ + public DistributionSet createDistributionSet(final String prefix, final String version, + final boolean isRequiredMigrationStep) { + + final SoftwareModule appMod = softwareManagement.createSoftwareModule(entityFactory.generateSoftwareModule( + findOrCreateSoftwareModuleType(SM_TYPE_APP, Integer.MAX_VALUE), prefix + SM_TYPE_APP, + version + "." + new Random().nextInt(100), LOREM.words(20), prefix + " vendor Limited, California")); + final SoftwareModule runtimeMod = softwareManagement + .createSoftwareModule(entityFactory.generateSoftwareModule(findOrCreateSoftwareModuleType(SM_TYPE_RT), + prefix + "app runtime", version + "." + new Random().nextInt(100), LOREM.words(20), + prefix + " vendor GmbH, Stuttgart, Germany")); + final SoftwareModule osMod = softwareManagement + .createSoftwareModule(entityFactory.generateSoftwareModule(findOrCreateSoftwareModuleType(SM_TYPE_OS), + prefix + " Firmware", version + "." + new Random().nextInt(100), LOREM.words(20), + prefix + " vendor Limited Inc, California")); + + return distributionSetManagement + .createDistributionSet(generateDistributionSet(prefix != null && prefix.length() > 0 ? prefix : "DS", + version, findOrCreateDefaultTestDsType(), Lists.newArrayList(osMod, runtimeMod, appMod)) + .setRequiredMigrationStep(isRequiredMigrationStep)); + } + + /** + * Creates {@link DistributionSet} in repository including three + * {@link SoftwareModule}s of types {@link #SM_TYPE_OS}, {@link #SM_TYPE_RT} + * , {@link #SM_TYPE_APP}. + * + * @param prefix + * for {@link SoftwareModule}s and {@link DistributionSet}s name, + * vendor and description. + * @param version + * {@link DistributionSet#getVersion()} and + * {@link SoftwareModule#getVersion()} extended by a random + * number. + * @param tags + * {@link DistributionSet#getTags()} + * + * @return {@link DistributionSet} entity. + */ + public DistributionSet createDistributionSet(final String prefix, final String version, + final Collection tags) { + + final DistributionSet set = createDistributionSet(prefix, version, false); + + final List sets = new ArrayList<>(); + sets.add(set); + + tags.forEach(tag -> distributionSetManagement.toggleTagAssignment(sets, tag)); + + return distributionSetManagement.findDistributionSetById(set.getId()); + + } + + /** + * Creates {@link DistributionSet}s in repository including three + * {@link SoftwareModule}s of types {@link #SM_TYPE_OS}, {@link #SM_TYPE_RT} + * , {@link #SM_TYPE_APP} with {@link #DEFAULT_VERSION} followed by an + * iterative number and {@link DistributionSet#isRequiredMigrationStep()} + * false. + * + * @param number + * of {@link DistributionSet}s to create + * + * @return {@link List} of {@link DistributionSet} entities + */ + public List createDistributionSets(final int number) { + + return createDistributionSets("", number); + } + + /** + * Creates {@link DistributionSet}s in repository including three + * {@link SoftwareModule}s of types {@link #SM_TYPE_OS}, {@link #SM_TYPE_RT} + * , {@link #SM_TYPE_APP} with {@link #DEFAULT_VERSION} followed by an + * iterative number and {@link DistributionSet#isRequiredMigrationStep()} + * false. + * + * @param prefix + * for {@link SoftwareModule}s and {@link DistributionSet}s name, + * vendor and description. + * @param number + * of {@link DistributionSet}s to create + * + * @return {@link List} of {@link DistributionSet} entities + */ + public List createDistributionSets(final String prefix, final int number) { + + final List sets = new ArrayList<>(); + for (int i = 0; i < number; i++) { + sets.add(createDistributionSet(prefix, DEFAULT_VERSION + "." + i, false)); + } + + return sets; + } + + /** + * Creates {@link DistributionSet}s in repository with + * {@link #DEFAULT_DESCRIPTION} and + * {@link DistributionSet#isRequiredMigrationStep()} false. + * + * @param name + * {@link DistributionSet#getName()} + * @param version + * {@link DistributionSet#getVersion()} + * + * @return {@link DistributionSet} entity + */ + public DistributionSet createDistributionSetWithNoSoftwareModules(final String name, final String version) { + + final DistributionSet dis = entityFactory.generateDistributionSet(); + dis.setName(name); + dis.setVersion(version); + dis.setDescription(DEFAULT_DESCRIPTION); + dis.setType(findOrCreateDefaultTestDsType()); + return distributionSetManagement.createDistributionSet(dis); + } + + /** + * Creates {@link LocalArtifact}s for given {@link SoftwareModule} with a + * small text payload. + * + * @param moduleId + * the {@link Artifact}s belong to. + * + * @return {@link LocalArtifact} entity. + */ + public List createLocalArtifacts(final Long moduleId) { + final List artifacts = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + final InputStream stubInputStream = IOUtils.toInputStream("some test data" + i, Charset.forName("UTF-8")); + artifacts.add(artifactManagement.createLocalArtifact(stubInputStream, moduleId, "filename" + i, false)); + + } + + return artifacts; + } + + /** + * Creates {@link SoftwareModule} with {@link #DEFAULT_VENDOR} and + * {@link #DEFAULT_VERSION} and random generated + * {@link Target#getDescription()} in the repository. + * + * @param typeKey + * of the {@link SoftwareModuleType} + * + * @return persisted {@link SoftwareModule}. + */ + public SoftwareModule createSoftwareModule(final String typeKey) { + return softwareManagement.createSoftwareModule(entityFactory.generateSoftwareModule( + findOrCreateSoftwareModuleType(typeKey), typeKey, DEFAULT_VERSION, LOREM.words(10), DEFAULT_VENDOR)); + } + + /** + * @return persisted {@link Target} with {@link #DEFAULT_CONTROLLER_ID}. + */ + public Target createTarget() { + return targetManagement.createTarget(entityFactory.generateTarget(DEFAULT_CONTROLLER_ID)); + } + + /** + * Creates {@link DistributionSet}s in repository including three + * {@link SoftwareModule}s of types {@link #SM_TYPE_OS}, {@link #SM_TYPE_RT} + * , {@link #SM_TYPE_APP} with {@link #DEFAULT_VERSION} followed by an + * iterative number and {@link DistributionSet#isRequiredMigrationStep()} + * false. + * + * @return persisted {@link DistributionSet}. + */ + public DistributionSet createTestDistributionSet() { + DistributionSet set = createDistributionSet(""); + set.setVersion(DEFAULT_VERSION); + set = distributionSetManagement.updateDistributionSet(set); + + set.getModules().forEach(module -> { + module.setDescription("Updated " + DEFAULT_DESCRIPTION); + softwareManagement.updateSoftwareModule(module); + }); + + // load also lazy stuff + set = distributionSetManagement.findDistributionSetByIdWithDetails(set.getId()); + + return set; + } + + /** + * @return {@link DistributionSetType} with key {@link #DS_TYPE_DEFAULT} and + * {@link SoftwareModuleType}s {@link #SM_TYPE_OS}, + * {@link #SM_TYPE_RT} , {@link #SM_TYPE_APP}. + */ + public DistributionSetType findOrCreateDefaultTestDsType() { + final List mand = new ArrayList<>(); + mand.add(findOrCreateSoftwareModuleType(SM_TYPE_OS)); + + final List opt = new ArrayList<>(); + opt.add(findOrCreateSoftwareModuleType(SM_TYPE_APP, Integer.MAX_VALUE)); + opt.add(findOrCreateSoftwareModuleType(SM_TYPE_RT)); + + return findOrCreateDistributionSetType(DS_TYPE_DEFAULT, "OS (FW) mandatory, runtime (FW) and app (SW) optional", + mand, opt); + } + + /** + * Creates {@link DistributionSetType} in repository. + * + * @param dsTypeKey + * {@link DistributionSetType#getKey()} + * @param dsTypeName + * {@link DistributionSetType#getName()} + * + * @return persisted {@link DistributionSetType} + */ + public DistributionSetType findOrCreateDistributionSetType(final String dsTypeKey, final String dsTypeName) { + final DistributionSetType findDistributionSetTypeByname = distributionSetManagement + .findDistributionSetTypeByKey(dsTypeKey); + + if (findDistributionSetTypeByname != null) { + return findDistributionSetTypeByname; + } + + final DistributionSetType type = entityFactory.generateDistributionSetType(dsTypeKey, dsTypeName, + LOREM.words(10)); + + return distributionSetManagement.createDistributionSetType(type); + } + + /** + * Finds {@link DistributionSetType} in repository with given + * {@link DistributionSetType#getKey()} or creates if it does not exist yet. + * + * @param dsTypeKey + * {@link DistributionSetType#getKey()} + * @param dsTypeName + * {@link DistributionSetType#getName()} + * @param mandatory + * {@link DistributionSetType#getMandatoryModuleTypes()} + * @param optional + * {@link DistributionSetType#getOptionalModuleTypes()} + * + * @return persisted {@link DistributionSetType} + */ + public DistributionSetType findOrCreateDistributionSetType(final String dsTypeKey, final String dsTypeName, + final Collection mandatory, final Collection optional) { + final DistributionSetType findDistributionSetTypeByname = distributionSetManagement + .findDistributionSetTypeByKey(dsTypeKey); + + if (findDistributionSetTypeByname != null) { + return findDistributionSetTypeByname; + } + + final DistributionSetType type = entityFactory.generateDistributionSetType(dsTypeKey, dsTypeName, + LOREM.words(10)); + mandatory.forEach(type::addMandatoryModuleType); + optional.forEach(type::addOptionalModuleType); + + return distributionSetManagement.createDistributionSetType(type); + } + + /** + * Finds {@link SoftwareModuleType} in repository with given + * {@link SoftwareModuleType#getKey()} or creates if it does not exist yet + * with {@link SoftwareModuleType#getMaxAssignments()} = 1. + * + * @param key + * {@link SoftwareModuleType#getKey()} + * + * @return persisted {@link SoftwareModuleType} + */ + public SoftwareModuleType findOrCreateSoftwareModuleType(final String key) { + return findOrCreateSoftwareModuleType(key, 1); + } + + /** + * Finds {@link SoftwareModuleType} in repository with given + * {@link SoftwareModuleType#getKey()} or creates if it does not exist yet. + * + * @param key + * {@link SoftwareModuleType#getKey()} + * @param maxAssignments + * {@link SoftwareModuleType#getMaxAssignments()} + * + * @return persisted {@link SoftwareModuleType} + */ + public SoftwareModuleType findOrCreateSoftwareModuleType(final String key, final int maxAssignments) { + final SoftwareModuleType findSoftwareModuleTypeByKey = softwareManagement.findSoftwareModuleTypeByKey(key); + if (findSoftwareModuleTypeByKey != null) { + return findSoftwareModuleTypeByKey; + } + return softwareManagement.createSoftwareModuleType( + entityFactory.generateSoftwareModuleType(key, key, LOREM.words(10), maxAssignments)); + } + + /** + * builder method for creating a {@link DistributionSet}. + * + * @param name + * {@link DistributionSet#getName()} + * @param version + * {@link DistributionSet#getVersion()} + * @param type + * {@link DistributionSet#getType()} + * @param modules + * {@link DistributionSet#getModules()} + * + * @return the created {@link DistributionSet} + */ + public DistributionSet generateDistributionSet(final String name, final String version, + final DistributionSetType type, final Collection modules) { + final DistributionSet distributionSet = entityFactory.generateDistributionSet(name, version, null, type, + modules); + distributionSet.setDescription(LOREM.words(10)); + return distributionSet; + } + + /** + * Creates {@link DistributionSetTag}s in repository. + * + * @param number + * of {@link DistributionSetTag}s + * + * @return the persisted {@link DistributionSetTag}s + */ + public List createDistributionSetTags(final int number) { + final List result = new ArrayList<>(); + + for (int i = 0; i < number; i++) { + result.add(entityFactory.generateDistributionSetTag("tag" + i, "tagdesc" + i, String.valueOf(i))); + } + + return tagManagement.createDistributionSetTags(result); + } + + /** + * builder method for creating a single target object. + * + * @param ctrlID + * the ID of the target + * @param description + * of the target + * @return the created target object + */ + public Target generateTarget(final String ctrlID, final String description) { + return generateTarget(ctrlID, description, null); + } + + /** + * Builds a single {@link Target} from the given parameters. + * + * @param ctrlID + * controllerID + * @param description + * the description of the target + * @param tags + * assigned {@link TargetTag}s + * @return the generated {@link Target} + */ + private Target generateTarget(final String ctrlID, final String description, final TargetTag[] tags) { + final Target target = entityFactory.generateTarget(ctrlID); + target.setName("Prov.Target ".concat(ctrlID)); + target.setDescription(description); + if (tags != null && tags.length > 0) { + for (final TargetTag t : tags) { + target.getTags().add(t); + } + } + return target; + } + + /** + * Creates {@link Target}s in repository and with + * {@link #DEFAULT_CONTROLLER_ID} as prefix for + * {@link Target#getControllerId()}. + * + * @param number + * of {@link Target}s to create + * + * @return {@link List} of {@link Target} entities + */ + public List createTargets(final int number) { + return targetManagement.createTargets(generateTargets(0, number, DEFAULT_CONTROLLER_ID)); + } + + /** + * Builds {@link Target} objects with given prefix for + * {@link Target#getControllerId()} followed by a number suffix. + * + * @param start + * value for the controllerId suffix + * @param numberOfTargets + * of {@link Target}s to generate + * @param controllerIdPrefix + * for {@link Target#getControllerId()} generation. + * @return list of {@link Target} objects + */ + private List generateTargets(final int start, final int numberOfTargets, final String controllerIdPrefix) { + final List targets = new ArrayList<>(); + for (int i = start; i < start + numberOfTargets; i++) { + targets.add(entityFactory.generateTarget(controllerIdPrefix + i)); + } + + return targets; + } + + /** + * Builds {@link Target} objects with given prefix for + * {@link Target#getControllerId()} followed by a number suffix starting + * with 0. + * + * @param numberOfTargets + * of {@link Target}s to generate + * @param controllerIdPrefix + * for {@link Target#getControllerId()} generation. + * @return list of {@link Target} objects + */ + public List generateTargets(final int numberOfTargets, final String controllerIdPrefix) { + return generateTargets(0, numberOfTargets, controllerIdPrefix); + } + + /** + * builds a set of {@link Target} fixtures from the given parameters. + * + * @param numberOfTargets + * number of targets to create + * @param controllerIdPrefix + * prefix used for the controller ID + * @param descriptionPrefix + * prefix used for the description + * @return set of {@link Target} + */ + public List generateTargets(final int numberOfTargets, final String controllerIdPrefix, + final String descriptionPrefix) { + return generateTargets(numberOfTargets, controllerIdPrefix, descriptionPrefix, null); + } + + /** + * method creates set of targets by by generating the controller ID and the + * description like: prefix + no of target. + * + * @param noOfTgts + * number of targets which should be created + * @param controllerIdPrefix + * prefix of the controllerID which is concatenated with the + * number of the target. Randomly generated if null. + * @param descriptionPrefix + * prefix of the target description which is concatenated with + * the number of the target + * @param tags + * tags which should be added to the created {@link Target}s + * @return set of created targets + */ + private List generateTargets(final int noOfTgts, final String controllerIdPrefix, + final String descriptionPrefix, final TargetTag[] tags) { + final List list = new ArrayList<>(); + for (int i = 0; i < noOfTgts; i++) { + String ctrlID = controllerIdPrefix; + if (Strings.isNullOrEmpty(ctrlID)) { + ctrlID = UUID.randomUUID().toString(); + } + ctrlID = String.format("%s-%05d", ctrlID, i); + + final String description = descriptionPrefix + DEFAULT_DESCRIPTION; + + final Target target = generateTarget(ctrlID, description, tags); + list.add(target); + + } + return list; + } + + /** + * Generates {@link TargetTag}s. + * + * @param number + * of {@link TargetTag}s to generate. + * + * @return generated {@link TargetTag}s. + */ + public List generateTargetTags(final int number) { + final List result = new ArrayList<>(); + + for (int i = 0; i < number; i++) { + result.add(entityFactory.generateTargetTag("tag" + i, "tagdesc" + i, String.valueOf(i))); + } + + return result; + } + + /** + * Create a set of {@link TargetTag}s. + * + * @param noOfTags + * number of {@link TargetTag}. to be created + * @param tagPrefix + * prefix for the {@link TargetTag#getName()} + * @return the created set of {@link TargetTag}s + */ + public List generateTargetTags(final int noOfTags, final String tagPrefix) { + final List list = new ArrayList<>(); + for (int i = 0; i < noOfTags; i++) { + String tagName = "myTag"; + if (!Strings.isNullOrEmpty(tagPrefix)) { + tagName = tagPrefix; + } + tagName = String.format("%s-%05d", tagName, i); + + final TargetTag targetTag = entityFactory.generateTargetTag(tagName); + list.add(targetTag); + } + return list; + } + + private Action sendUpdateActionStatusToTarget(final Status status, final Action updActA, final String... msgs) { + updActA.setStatus(status); + + final ActionStatus statusMessages = entityFactory.generateActionStatus(); + statusMessages.setAction(updActA); + statusMessages.setOccurredAt(System.currentTimeMillis()); + statusMessages.setStatus(status); + for (final String msg : msgs) { + statusMessages.addMessage(msg); + } + + return controllerManagament.addUpdateActionStatus(statusMessages); + } + + /** + * Append {@link ActionStatus} to all {@link Action}s of given + * {@link Target}s. + * + * @param targets + * to add {@link ActionStatus} + * @param status + * to add + * @param msgs + * to add + * + * @return updated {@link Action}. + */ + public List sendUpdateActionStatusToTargets(final Collection targets, final Status status, + final String... msgs) { + final List result = new ArrayList<>(); + for (final Target target : targets) { + final List findByTarget = deploymentManagement.findActionsByTarget(target); + for (final Action action : findByTarget) { + result.add(sendUpdateActionStatusToTarget(status, action, msgs)); + } + } + return result; + } +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithSpringAuthorityRule.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithSpringAuthorityRule.java index e61215973..b456cc32b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithSpringAuthorityRule.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithSpringAuthorityRule.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository.util; import java.lang.annotation.Annotation; import java.lang.reflect.Field; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithUser.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithUser.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithUser.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithUser.java index 0a936f1c0..04af9196b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/WithUser.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithUser.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository.util; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; diff --git a/hawkbit-repository/pom.xml b/hawkbit-repository/pom.xml index 9d95d0a43..981f3225a 100644 --- a/hawkbit-repository/pom.xml +++ b/hawkbit-repository/pom.xml @@ -23,6 +23,8 @@ hawkbit-repository-jpa hawkbit-repository-api + hawkbit-repository-test + hawkbit-repository-core diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml index 66fb1655a..0b5f39272 100644 --- a/hawkbit-rest-core/pom.xml +++ b/hawkbit-rest-core/pom.xml @@ -44,6 +44,12 @@ + + org.eclipse.hawkbit + hawkbit-repository-test + ${project.version} + test + org.easytesting fest-assert diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java index e86f78d68..1b54eed3e 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rest; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.eclipse.hawkbit.rest.util.FilterHttpResponse; import org.springframework.beans.factory.annotation.Autowired; @@ -19,7 +19,7 @@ import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; * Abstract Test for Rest tests. */ @SpringApplicationConfiguration(classes = { RestConfiguration.class }) -public abstract class AbstractRestIntegrationTest extends AbstractIntegrationTest { +public abstract class AbstractRestIntegrationTest extends AbstractJpaIntegrationTest { @Autowired private FilterHttpResponse filterHttpResponse; @@ -29,5 +29,4 @@ public abstract class AbstractRestIntegrationTest extends AbstractIntegrationTes final DefaultMockMvcBuilder createMvcWebAppContext = super.createMvcWebAppContext(); return createMvcWebAppContext.addFilter(filterHttpResponse); } - } diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java index d3da40035..81e2c3d16 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rest; -import org.eclipse.hawkbit.repository.jpa.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.eclipse.hawkbit.rest.util.FilterHttpResponse; import org.springframework.beans.factory.annotation.Autowired; @@ -19,14 +19,14 @@ import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; * Abstract Test for Rest tests. */ @SpringApplicationConfiguration(classes = { RestConfiguration.class }) -public abstract class AbstractRestIntegrationTestWithMongoDB extends AbstractIntegrationTestWithMongoDB { +public abstract class AbstractRestIntegrationTestWithMongoDB extends AbstractJpaIntegrationTestWithMongoDB { @Autowired private FilterHttpResponse filterHttpResponse; @Override protected DefaultMockMvcBuilder createMvcWebAppContext() { - DefaultMockMvcBuilder createMvcWebAppContext = super.createMvcWebAppContext(); + final DefaultMockMvcBuilder createMvcWebAppContext = super.createMvcWebAppContext(); return createMvcWebAppContext.addFilter(filterHttpResponse); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index d6fbada89..49b2dfada 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.io.Serializable; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; @@ -66,6 +67,9 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { @Autowired private transient SoftwareManagement softwareManagement; + @Autowired + private transient EntityFactory entityFactory; + private Label madatoryLabel; private TextField nameTextField; @@ -277,8 +281,8 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { uiNotifcation.displayValidationError( i18n.get("message.duplicate.softwaremodule", new Object[] { name, version })); } else { - final SoftwareModule newBaseSoftwareModule = HawkbitCommonUtil.addNewBaseSoftware(softwareManagement, - name, version, vendor, softwareManagement.findSoftwareModuleTypeByName(type), description); + final SoftwareModule newBaseSoftwareModule = HawkbitCommonUtil.addNewBaseSoftware(entityFactory, name, + version, vendor, softwareManagement.findSoftwareModuleTypeByName(type), description); if (newBaseSoftwareModule != null) { /* display success message */ uiNotifcation.displaySuccess(i18n.get("message.save.success", new Object[] { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index c71b06671..eb915aef3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -13,6 +13,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @@ -93,6 +94,9 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C @Autowired private transient SoftwareManagement swTypeManagementService; + @Autowired + private transient EntityFactory entityFactory; + @Autowired private transient EventBus.SessionEventBus eventBus; @@ -625,8 +629,8 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C } if (null != typeNameValue && null != typeKeyValue) { - SoftwareModuleType newSWType = swTypeManagementService.generateSoftwareModuleType(typeKeyValue, - typeNameValue, typeDescValue, assignNumber); + SoftwareModuleType newSWType = entityFactory.generateSoftwareModuleType(typeKeyValue, typeNameValue, + typeDescValue, assignNumber); newSWType.setColour(colorPicked); if (null != typeDescValue) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java index 04200208b..ded26b254 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetTypeBeanQuery.java @@ -13,6 +13,7 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -41,6 +42,7 @@ public class DistributionSetTypeBeanQuery extends AbstractBeanQuery firstPageDistSetType = null; private transient DistributionSetManagement distributionSetManagement; + private transient EntityFactory entityFactory; /** * Parametric constructor. @@ -57,7 +59,7 @@ public class DistributionSetTypeBeanQuery extends AbstractBeanQuery loadBeans(final int startIndex, final int count) { Page typeBeans; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java index 9dcdeb12b..8705f7aa9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/SoftwareModuleTypeBeanQuery.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.common; import java.util.List; import java.util.Map; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @@ -31,6 +32,7 @@ public class SoftwareModuleTypeBeanQuery extends AbstractBeanQuery firstPageSwModuleType = null; private transient SoftwareManagement softwareManagement; + private transient EntityFactory entityFactory; /** * Parametric constructor. @@ -47,7 +49,14 @@ public class SoftwareModuleTypeBeanQuery extends AbstractBeanQuery itemIds = (List) selectedTable.getItemIds(); if (null != typeNameValue && null != typeKeyValue && null != itemIds && !itemIds.isEmpty()) { - DistributionSetType newDistType = distributionSetManagement.generateDistributionSetType(typeKeyValue, - typeNameValue, typeDescValue); + DistributionSetType newDistType = entityFactory.generateDistributionSetType(typeKeyValue, typeNameValue, + typeDescValue); for (final Long id : itemIds) { final Item item = selectedTable.getItem(id); final String distTypeName = (String) item.getItemProperty(DIST_TYPE_NAME).getValue(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index a89e98d56..50e89371a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -13,6 +13,7 @@ import java.util.concurrent.Executor; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; @@ -95,6 +96,9 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button @Qualifier("uiExecutor") private transient Executor executor; + @Autowired + private transient EntityFactory entityFactory; + private HorizontalLayout breadcrumbLayout; private Button breadcrumbButton; @@ -503,7 +507,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } private void createTargetFilterQuery() { - final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement.generateTargetFilterQuery(); + final TargetFilterQuery targetFilterQuery = entityFactory.generateTargetFilterQuery(); targetFilterQuery.setName(nameTextField.getValue()); targetFilterQuery.setQuery(queryTextField.getValue()); targetFilterQueryManagement.createTargetFilterQuery(targetFilterQuery); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index cc52ce795..90b3ad597 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -16,6 +16,7 @@ import java.util.Map; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.jpa.TenantMetaDataRepository; @@ -94,6 +95,9 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { @Autowired private transient TenantMetaDataRepository tenantMetaDataRepository; + @Autowired + private transient EntityFactory entityFactory; + private Button saveDistributionBtn; private Button discardDistributionBtn; private TextField distNameTextField; @@ -145,12 +149,12 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { setSizeUndefined(); addComponents(madatoryLabel, distsetTypeNameComboBox, distNameTextField, distVersionTextField, descTextArea, reqMigStepCheckbox); - + addComponent(buttonsLayout); setComponentAlignment(madatoryLabel, Alignment.MIDDLE_LEFT); distNameTextField.focus(); - - } + + } /** * Create required UI components. @@ -297,7 +301,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { if (mandatoryCheck(name, version, distSetTypeName) && duplicateCheck(name, version)) { final String desc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); final boolean isMigStepReq = reqMigStepCheckbox.getValue(); - DistributionSet newDist = distributionSetManagement.generateDistributionSet(); + DistributionSet newDist = entityFactory.generateDistributionSet(); setDistributionValues(newDist, name, version, distSetTypeName, desc, isMigStepReq); newDist = distributionSetManagement.createDistributionSet(newDist); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 56ba4183b..e37086e65 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.management.dstag; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagUpdateEvent; @@ -48,6 +49,9 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo @Autowired private transient UINotification uiNotification; + @Autowired + private transient EntityFactory entityFactory; + private static final String MISSING_TAG_NAME = "message.error.missing.tagname"; private static final String TARGET_TAG_NAME_DYNAMIC_STYLE = "new-target-tag-name"; private static final String MSG_TEXTFIELD_NAME = "textfield.name"; @@ -98,7 +102,7 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo final String tagDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); if (null != tagNameValue) { - DistributionSetTag newDistTag = tagManagement.generateDistributionSetTag(tagNameValue, tagDescValue, + DistributionSetTag newDistTag = entityFactory.generateDistributionSetTag(tagNameValue, tagDescValue, new Color(0, 146, 58).getCSS()); if (colorPicked != null) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java index 003700df5..9080a433f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DistributionTagButtons.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.ui.management.dstag; import java.util.HashMap; import java.util.Map; -import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.repository.eventbus.event.DistributionSetTagUpdateEvent; @@ -53,15 +53,15 @@ public class DistributionTagButtons extends AbstractFilterButtons { private DistributionTagDropEvent spDistTagDropEvent; @Autowired - private TagManagement tagManagement; + private ManagementUIState managementUIState; @Autowired - private ManagementUIState managementUIState; + private transient EntityFactory entityFactory; @Override public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { super.init(filterButtonClickBehaviour); - addNewTag(tagManagement.generateDistributionSetTag("NO TAG")); + addNewTag(entityFactory.generateDistributionSetTag("NO TAG")); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -143,7 +143,7 @@ public class DistributionTagButtons extends AbstractFilterButtons { private void refreshTagTable() { ((LazyQueryContainer) getContainerDataSource()).refresh(); removeGeneratedColumn(FILTER_BUTTON_COLUMN); - addNewTag(tagManagement.generateDistributionSetTag("NO TAG")); + addNewTag(entityFactory.generateDistributionSetTag("NO TAG")); addColumn(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java index 23a82da0f..d6a613cf7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java @@ -26,6 +26,7 @@ import java.util.concurrent.Executor; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action.ActionType; @@ -97,6 +98,8 @@ public class BulkUploadHandler extends CustomComponent final TargetBulkUpdateWindowLayout targetBulkUpdateWindowLayout; + private final EntityFactory entityFactory; + /** * * @param targetBulkUpdateWindowLayout @@ -124,6 +127,7 @@ public class BulkUploadHandler extends CustomComponent this.eventBus = targetBulkUpdateWindowLayout.getEventBus(); distributionSetManagement = SpringContextHelper.getBean(DistributionSetManagement.class); tagManagement = SpringContextHelper.getBean(TagManagement.class); + entityFactory = SpringContextHelper.getBean(EntityFactory.class); } /** @@ -380,7 +384,7 @@ public class BulkUploadHandler extends CustomComponent final String newDesc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); /* create new target entity */ - final Target newTarget = targetManagement.generateTarget(newControllerId); + final Target newTarget = entityFactory.generateTarget(newControllerId); setTargetValues(newTarget, newName, newDesc); targetManagement.createTarget(newTarget); managementUIState.getTargetTableFilters().getBulkUpload().getTargetsCreated().add(newControllerId); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index ddf109773..be17beb18 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.management.targettable; import java.util.HashSet; import java.util.Set; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; @@ -69,6 +70,9 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { @Autowired private transient UINotification uINotification; + + @Autowired + private transient EntityFactory entityFactory; private TextField controllerIDTextField; private TextField nameTextField; @@ -245,7 +249,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { final String newDesc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); /* create new target entity */ - Target newTarget = targetManagement.generateTarget(newControlllerId); + Target newTarget = entityFactory.generateTarget(newControlllerId); /* set values to the new target entity */ setTargetValues(newTarget, newName, newDesc); /* save new target */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java index e5990be49..80de83982 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayout.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.management.targettag; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.repository.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.repository.eventbus.event.TargetTagUpdateEvent; @@ -49,6 +50,9 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { @Autowired private transient UINotification uiNotification; + @Autowired + private transient EntityFactory entityFactory; + private Window targetTagWindow; @Override @@ -193,7 +197,7 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { final String tagNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String tagDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); if (null != tagNameValue) { - TargetTag newTargetTag = tagManagement.generateTargetTag(tagNameValue); + TargetTag newTargetTag = entityFactory.generateTargetTag(tagNameValue); if (null != tagDescValue) { newTargetTag.setDescription(tagDescValue); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java index eeac79728..e7e9c64b1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java @@ -12,8 +12,8 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.repository.eventbus.event.TargetTagDeletedEvent; @@ -77,7 +77,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { private SpPermissionChecker permChecker; @Autowired - private TagManagement tagManagement; + private transient EntityFactory entityFactory; @Autowired private transient TargetManagement targetManagement; @@ -94,7 +94,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { public void init(final TargetTagFilterButtonClick filterButtonClickBehaviour) { this.filterButtonClickBehaviour = filterButtonClickBehaviour; super.init(filterButtonClickBehaviour); - addNewTargetTag(tagManagement.generateTargetTag("NO TAG")); + addNewTargetTag(entityFactory.generateTargetTag("NO TAG")); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -294,7 +294,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { private void refreshContainer() { removeGeneratedColumn(FILTER_BUTTON_COLUMN); ((LazyQueryContainer) getContainerDataSource()).refresh(); - addNewTargetTag(tagManagement.generateTargetTag("NO TAG")); + addNewTargetTag(entityFactory.generateTargetTag("NO TAG")); addColumn(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index f0329e3fe..c909c9c5d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -13,6 +13,7 @@ import java.util.Date; import java.util.List; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action.ActionType; @@ -108,6 +109,9 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { @Autowired private transient UiProperties uiProperties; + @Autowired + private transient EntityFactory entityFactory; + @Autowired private I18N i18n; @@ -479,7 +483,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private Rollout saveRollout() { - Rollout rolloutToCreate = rolloutManagement.generateRollout(); + Rollout rolloutToCreate = entityFactory.generateRollout(); final int amountGroup = Integer.parseInt(noOfGroups.getValue()); final String targetFilter = getTargetFilterQuery(); final int errorThresoldPercent = getErrorThresoldPercentage(amountGroup); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index 7ed9c81dd..da0e3e828 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -19,6 +19,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.TimeZone; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -430,7 +431,7 @@ public final class HawkbitCommonUtil { return trimAndNullIfEmpty(orgText) == null ? SPUIDefinitions.SPACE : orgText; } - /** + /** * Find extra height required to increase by all the components to utilize * the full height of browser for the responsive UI. * @@ -760,10 +761,10 @@ public final class HawkbitCommonUtil { * base software module description * @return BaseSoftwareModule new base software module */ - public static SoftwareModule addNewBaseSoftware(final SoftwareManagement softwareManagement, final String bsname, + public static SoftwareModule addNewBaseSoftware(final EntityFactory entityFactory, final String bsname, final String bsversion, final String bsvendor, final SoftwareModuleType bstype, final String description) { final SoftwareManagement swMgmtService = SpringContextHelper.getBean(SoftwareManagement.class); - SoftwareModule newSWModule = softwareManagement.generateSoftwareModule(); + SoftwareModule newSWModule = entityFactory.generateSoftwareModule(); newSWModule.setType(bstype); newSWModule.setName(bsname); newSWModule.setVersion(bsversion); diff --git a/pom.xml b/pom.xml index 58e7b56dc..add09a1d9 100644 --- a/pom.xml +++ b/pom.xml @@ -553,7 +553,6 @@ de.flapdoodle.embed de.flapdoodle.embed.mongo ${embedded-mongo.version} - test org.easytesting From b369369c2cdf6d79b528b5511f3e1562c5e0bc34 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 08:52:09 +0200 Subject: [PATCH 160/371] add javadoc Signed-off-by: Michael Hirsch --- .../repository/model/SoftwareModule.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java index 67e1027a1..cb01219f4 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java @@ -49,8 +49,17 @@ public interface SoftwareModule extends NamedVersionedEntity { */ List getLocalArtifacts(); + /** + * @return the vendor of this software module + */ String getVendor(); + /** + * @param vendor + * the vendor of this software module to set + */ + void setVendor(String vendor); + /** * @param artifact * is removed from the assigned {@link LocalArtifact}s. @@ -63,14 +72,30 @@ public interface SoftwareModule extends NamedVersionedEntity { */ void removeArtifact(ExternalArtifact artifact); - void setVendor(String vendor); - + /** + * @return the type of the software module + */ SoftwareModuleType getType(); + /** + * @return {@code true} if this software module is marked as deleted + * otherwise {@code false} + */ boolean isDeleted(); + /** + * Marks or un-marks this software module as deleted. + * + * @param deleted + * {@code true} if the software module should be marked as + * deleted otherwise {@code false} + */ void setDeleted(boolean deleted); + /** + * @param type + * the module type for this software module + */ void setType(SoftwareModuleType type); /** From b1a2a583e96acb85218139c1c88e9c441b4d52b4 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 09:21:40 +0200 Subject: [PATCH 161/371] fix mock test by mocking action and target Signed-off-by: Michael Hirsch --- .../amqp/AmqpMessageHandlerServiceTest.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) 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 283b08eed..a0515a871 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 @@ -50,6 +50,7 @@ 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.SoftwareModule; +import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.junit.Before; import org.junit.Test; @@ -429,14 +430,18 @@ public class AmqpMessageHandlerServiceTest { initalizeSecurityTokenGenerator(); // Mock - final JpaAction action = new JpaAction(); - action.setId(targetId); - action.setStatus(status); - action.setTenant("DEFAULT"); - final JpaTarget target = new JpaTarget("target1"); - action.setTarget(target); - - return action; + final JpaAction actionMock = mock(JpaAction.class); + final JpaTarget targetMock = mock(JpaTarget.class); + final TargetInfo targetInfoMock = mock(TargetInfo.class); + when(actionMock.getId()).thenReturn(targetId); + when(actionMock.getStatus()).thenReturn(status); + when(actionMock.getTenant()).thenReturn("DEFAULT"); + when(actionMock.getTarget()).thenReturn(targetMock); + when(targetMock.getControllerId()).thenReturn("target1"); + when(targetMock.getSecurityToken()).thenReturn("securityToken"); + when(targetMock.getTargetInfo()).thenReturn(targetInfoMock); + when(targetInfoMock.getAddress()).thenReturn(null); + return actionMock; } private void initalizeSecurityTokenGenerator() throws IllegalAccessException { From a0ec726fd0feafdc832857a6a31ee6c0a66685c4 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 31 May 2016 10:48:56 +0200 Subject: [PATCH 162/371] Small fixes Signed-off-by: SirWayne --- .../resource/DdiArtifactStoreController.java | 6 +++--- .../ddi/rest/resource/DdiRootController.java | 20 +++++++++---------- .../rest/resource/DdiDeploymentBaseTest.java | 6 +++--- .../amqp/AmqpMessageDispatcherService.java | 10 +++------- ...onstants.java => RepositoryConstants.java} | 4 ++-- .../hawkbit/repository/SystemManagement.java | 2 +- .../hawkbit/repository/TargetManagement.java | 2 +- .../model/ActionWithStatusCount.java | 2 +- .../hawkbit/repository/model/Artifact.java | 2 +- .../hawkbit/repository/model/BaseEntity.java | 2 +- .../repository/model/DistributionSet.java | 2 +- .../model/DistributionSetMetadata.java | 2 +- .../repository/model/DistributionSetTag.java | 2 +- .../repository/model/DistributionSetType.java | 2 +- .../repository/model/ExternalArtifact.java | 2 +- .../hawkbit/repository/model/MetaData.java | 2 +- .../model/NamedVersionedEntity.java | 2 +- ...nts.java => RepositoryModelConstants.java} | 4 ++-- .../hawkbit/repository/model/Rollout.java | 2 +- .../repository/model/SoftwareModule.java | 2 +- .../model/SoftwareModuleMetadata.java | 2 +- .../repository/model/SoftwareModuleType.java | 2 +- .../eclipse/hawkbit/repository/model/Tag.java | 2 +- .../repository/model/TargetFilterQuery.java | 2 +- .../hawkbit/repository/model/TargetInfo.java | 2 +- .../hawkbit/repository/model/TargetTag.java | 2 +- .../model/TargetWithActionStatus.java | 2 +- .../model/TargetWithActionType.java | 2 +- .../model/TenantAwareBaseEntity.java | 2 +- .../repository/model/TenantConfiguration.java | 2 +- .../repository/model/TenantMetaData.java | 2 +- .../jpa/JpaControllerManagement.java | 6 +++--- .../jpa/JpaDeploymentManagement.java | 4 ++-- .../repository/jpa/cache/CacheKeys.java | 2 +- .../jpa/DeploymentManagementTest.java | 4 ++-- .../util/AbstractIntegrationTest.java | 4 ++-- .../ManangementConfirmationWindowLayout.java | 4 ++-- .../rollout/AddUpdateRolloutWindowLayout.java | 4 ++-- .../ui/utils/SPUIButtonDefinitions.java | 2 +- .../ui/utils/SPUILabelDefinitions.java | 2 +- .../ui/utils/SPUIStyleDefinitions.java | 2 +- .../ui/utils/SPUITargetDefinitions.java | 2 +- 42 files changed, 66 insertions(+), 70 deletions(-) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/{Constants.java => RepositoryConstants.java} (92%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/{Constants.java => RepositoryModelConstants.java} (88%) diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 9d690f9d2..5bed44295 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -17,7 +17,7 @@ import javax.servlet.http.HttpServletRequest; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlArtifactStoreControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.Constants; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; @@ -149,10 +149,10 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR actionStatus.setStatus(Status.DOWNLOAD); if (range != null) { - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + request.getRequestURI()); } else { - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(actionStatus); return 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 656835e95..0c6fa4386 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 @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase; import org.eclipse.hawkbit.ddi.json.model.DdiResult.FinalResult; import org.eclipse.hawkbit.ddi.rest.api.DdiRootControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.Constants; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -185,10 +185,10 @@ public class DdiRootController implements DdiRootControllerRestApi { statusMessage.setStatus(Status.DOWNLOAD); if (range != null) { - statusMessage.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + statusMessage.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + request.getRequestURI()); } else { - statusMessage.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); + statusMessage.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(statusMessage); return action; @@ -251,7 +251,7 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Found an active UpdateAction for target {}. returning deyploment: {}", targetid, base); - controllerManagement.registerRetrieved(action, Constants.SERVER_MESSAGE_PREFIX + controllerManagement.registerRetrieved(action, RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target retrieved update action and should start now the download."); return new ResponseEntity<>(base, HttpStatus.OK); @@ -306,13 +306,13 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Controller confirmed cancel (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.CANCELED); - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target confirmed cancelation."); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target confirmed cancelation."); break; case REJECTED: LOG.info("Controller reported internal error (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.WARNING); - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target REJECTED update."); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target REJECTED update."); break; case CLOSED: handleClosedUpdateStatus(feedback, targetid, actionid, actionStatus); @@ -340,7 +340,7 @@ public class DdiRootController implements DdiRootControllerRestApi { targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.RUNNING); actionStatus - .addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); + .addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); } private static void handleClosedUpdateStatus(final DdiActionFeedback feedback, final String targetid, @@ -349,10 +349,10 @@ public class DdiRootController implements DdiRootControllerRestApi { feedback.getStatus().getExecution()); if (feedback.getStatus().getResult().getFinished() == FinalResult.FAILURE) { actionStatus.setStatus(Status.ERROR); - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with ERROR!"); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with ERROR!"); } else { actionStatus.setStatus(Status.FINISHED); - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with OK!"); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with OK!"); } } @@ -390,7 +390,7 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Found an active CancelAction for target {}. returning cancel: {}", targetid, cancel); - controllerManagement.registerRetrieved(action, Constants.SERVER_MESSAGE_PREFIX + controllerManagement.registerRetrieved(action, RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target retrieved cancel action and should start now the cancelation."); return new ResponseEntity<>(cancel, HttpStatus.OK); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index 124d8e38d..33d470b3d 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.Constants; +import org.eclipse.hawkbit.repository.model.RepositoryModelConstants; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; @@ -113,7 +113,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(0); List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.FORCED, - Constants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); + RepositoryModelConstants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); @@ -250,7 +250,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(0); List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.SOFT, - Constants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); + RepositoryModelConstants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java index 3b05c96a6..b643be322 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java @@ -25,7 +25,6 @@ import org.eclipse.hawkbit.dmf.json.model.DownloadAndUpdateRequest; import org.eclipse.hawkbit.dmf.json.model.SoftwareModule; import org.eclipse.hawkbit.eventbus.EventSubscriber; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.util.IpUtil; @@ -53,14 +52,11 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { @Autowired private AmqpSenderService amqpSenderService; - @Autowired - private SoftwareManagement softwareManagement; - /** * Constructor. * - * @param messageConverter - * message converter + * @param rabbitTemplate + * the rabbitTemplate */ @Autowired public AmqpMessageDispatcherService(final RabbitTemplate rabbitTemplate) { @@ -118,7 +114,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { } - private MessageProperties createConnectorMessageProperties(final String tenant, final String controllerId, + private static MessageProperties createConnectorMessageProperties(final String tenant, final String controllerId, final EventTopic topic) { final MessageProperties messageProperties = createMessageProperties(); messageProperties.setHeader(MessageHeaderKey.TOPIC, topic); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryConstants.java similarity index 92% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryConstants.java index fcfd6ab5e..f2cd3f9f6 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryConstants.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; * Repository constants. * */ -public final class Constants { +public final class RepositoryConstants { /** * Prefix that the server puts in front of @@ -30,7 +30,7 @@ public final class Constants { */ public static final int DEFAULT_DS_TYPES_IN_TENANT = 2; - private Constants() { + private RepositoryConstants() { // Utility class. } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java index 5cc17e09b..8ee3b7600 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -74,7 +74,7 @@ public interface SystemManagement { /** * Returns {@link TenantMetaData} of given and current tenant. Creates for * new tenants also two {@link SoftwareModuleType} (os and app) and - * {@link Constants#DEFAULT_DS_TYPES_IN_TENANT} {@link DistributionSetType}s + * {@link RepositoryConstants#DEFAULT_DS_TYPES_IN_TENANT} {@link DistributionSetType}s * (os and os_app). * * DISCLAIMER: this variant is used during initial login (where the tenant diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index 9280e065d..ee10883ec 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -601,4 +601,4 @@ public interface TargetManagement { + SpringEvalExpressions.IS_CONTROLLER) List updateTargets(@NotNull Collection targets); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java index c497783e2..268c37853 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java @@ -45,4 +45,4 @@ public interface ActionWithStatusCount { */ String getRolloutName(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java index 95689a9d9..cc726839d 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java @@ -39,4 +39,4 @@ public interface Artifact extends TenantAwareBaseEntity { */ Long getSize(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java index f23b226c6..2a9948bc5 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java @@ -46,4 +46,4 @@ public interface BaseEntity extends Serializable, Identifiable { */ long getOptLockRevision(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java index c6532b339..5747b38f3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java @@ -129,4 +129,4 @@ public interface DistributionSet extends NamedVersionedEntity { */ boolean isComplete(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java index dfa9b9716..87a62e9ba 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java @@ -19,4 +19,4 @@ public interface DistributionSetMetadata extends MetaData { */ DistributionSet getDistributionSet(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java index 31f909348..05089d138 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java @@ -22,4 +22,4 @@ public interface DistributionSetTag extends Tag { */ List getAssignedToDistributionSet(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java index 5546a9f6d..cf5da40b2 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java @@ -170,4 +170,4 @@ public interface DistributionSetType extends NamedEntity { */ void setColour(final String colour); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java index 4ff3ab5a8..7e1a965e7 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java @@ -38,4 +38,4 @@ public interface ExternalArtifact extends Artifact { */ void setUrlSuffix(String urlSuffix); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java index 4f3397b23..68b7349f9 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java @@ -36,4 +36,4 @@ public interface MetaData extends Serializable { */ void setValue(String value); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java index de6cded12..b66115082 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java @@ -25,4 +25,4 @@ public interface NamedVersionedEntity extends NamedEntity { */ void setVersion(String version); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RepositoryModelConstants.java similarity index 88% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RepositoryModelConstants.java index b43ec6f88..66806915a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RepositoryModelConstants.java @@ -12,7 +12,7 @@ package org.eclipse.hawkbit.repository.model; * Repository model constants. * */ -public final class Constants { +public final class RepositoryModelConstants { /** * indicating that target action has no force time which is only needed in @@ -20,7 +20,7 @@ public final class Constants { */ public static final Long NO_FORCE_TIME = 0L; - private Constants() { + private RepositoryModelConstants() { // Utility class. } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java index 5094c1af8..37185a8e2 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java @@ -156,4 +156,4 @@ public interface Rollout extends NamedEntity { ERROR_STARTING; } -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java index cb01219f4..3c3a24fd0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java @@ -108,4 +108,4 @@ public interface SoftwareModule extends NamedVersionedEntity { */ List getAssignedTo(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java index bb0f877ce..ebfea9c28 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java @@ -25,4 +25,4 @@ public interface SoftwareModuleMetadata extends MetaData { */ void setSoftwareModule(SoftwareModule softwareModule); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java index 313525199..4bd52f3f0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java @@ -57,4 +57,4 @@ public interface SoftwareModuleType extends NamedEntity { */ void setColour(final String colour); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java index e57763920..bfade80e8 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java @@ -24,4 +24,4 @@ public interface Tag extends NamedEntity { */ void setColour(String colour); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java index 9cc200d0d..5052a0060 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java @@ -56,4 +56,4 @@ public interface TargetFilterQuery extends TenantAwareBaseEntity { */ void setQuery(String query); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java index d2e96664c..6317f9783 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java @@ -68,4 +68,4 @@ public interface TargetInfo extends Serializable { */ boolean isRequestControllerAttributes(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java index 585bf8c12..f222e9e90 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java @@ -21,4 +21,4 @@ public interface TargetTag extends Tag { */ List getAssignedToTargets(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java index f775a3879..9193b47ef 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java @@ -19,7 +19,7 @@ public class TargetWithActionStatus { private Target target; - private Status status = null; + private Status status; public TargetWithActionStatus(final Target target) { this.target = target; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java index c05f1ec3f..a9cfa81d1 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java @@ -51,7 +51,7 @@ public class TargetWithActionType { if (actionType == ActionType.TIMEFORCED) { return forceTime; } - return Constants.NO_FORCE_TIME; + return RepositoryModelConstants.NO_FORCE_TIME; } /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java index f79306d75..8c19db236 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java @@ -19,4 +19,4 @@ public interface TenantAwareBaseEntity extends BaseEntity { */ String getTenant(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java index fa9962eec..fdbc5c8d3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java @@ -37,4 +37,4 @@ public interface TenantConfiguration extends TenantAwareBaseEntity { */ void setValue(String value); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java index 23f81ae6f..0b40d9939 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java @@ -31,4 +31,4 @@ public interface TenantMetaData extends BaseEntity { */ String getTenant(); -} \ No newline at end of file +} 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 43b8534af..9fcd646b5 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 @@ -19,7 +19,7 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.repository.Constants; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; @@ -216,7 +216,7 @@ public class JpaControllerManagement implements ControllerManagement { handleFinishedCancelation(actionStatus, action); break; case RETRIEVED: - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Cancellation request retrieved."); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Cancellation request retrieved."); break; default: // do nothing @@ -230,7 +230,7 @@ public class JpaControllerManagement implements ControllerManagement { private void handleFinishedCancelation(final ActionStatus actionStatus, final JpaAction action) { // in case of successful cancellation we also report the success at // the canceled action itself. - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); DeploymentHelper.successCancellation(action, actionRepository, targetManagement, targetInfoRepository, entityManager); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index cefa5e937..6f3a876b8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -145,7 +145,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { return assignDistributionSetByTargetId((JpaDistributionSet) pset, targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), - ActionType.FORCED, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME); + ActionType.FORCED, org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME); } @@ -155,7 +155,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, final String... targetIDs) { return assignDistributionSet(dsID, ActionType.FORCED, - org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, targetIDs); + org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME, targetIDs); } @Override diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java index fdfe7a263..021a17a9d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.cache; import org.eclipse.hawkbit.repository.jpa.model.CacheFieldEntityListener; /** - * Constants for cache keys used in multiple classes. + * RepositoryConstants for cache keys used in multiple classes. * * * diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java index 3d0114d67..565513107 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java @@ -842,7 +842,7 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest { final DistributionSet ds = testdataFactory.createDistributionSet("a"); // assign ds to create an action final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet( - ds.getId(), ActionType.SOFT, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, + ds.getId(), ActionType.SOFT, org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME, target.getControllerId()); final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify preparation @@ -865,7 +865,7 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest { final DistributionSet ds = testdataFactory.createDistributionSet("a"); // assign ds to create an action final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet( - ds.getId(), ActionType.FORCED, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, + ds.getId(), ActionType.FORCED, org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME, target.getControllerId()); final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify perparation diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java index 29bf02fa0..f8c147c61 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.repository.util; import org.eclipse.hawkbit.ExcludePathAwareShallowETagFilter; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.Constants; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -72,7 +72,7 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { * {@link TestdataFactory#findOrCreateDefaultTestDsType()} and two * {@link SystemManagement#getTenantMetadata()}; */ - protected static final int DEFAULT_DS_TYPES = Constants.DEFAULT_DS_TYPES_IN_TENANT + 1; + protected static final int DEFAULT_DS_TYPES = RepositoryConstants.DEFAULT_DS_TYPES_IN_TENANT + 1; @Autowired protected EntityFactory entityFactory; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java index fa8a41f07..db1be1ae5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java @@ -24,7 +24,7 @@ import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action.ActionType; -import org.eclipse.hawkbit.repository.model.Constants; +import org.eclipse.hawkbit.repository.model.RepositoryModelConstants; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.confirmwindow.layout.AbstractConfirmationWindowLayout; @@ -148,7 +148,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin final long forcedTimeStamp = (((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout .getActionTypeOptionGroup().getValue()) == ActionTypeOption.AUTO_FORCED) ? actionTypeOptionGroupLayout.getForcedTimeDateField().getValue().getTime() - : Constants.NO_FORCE_TIME; + : RepositoryModelConstants.NO_FORCE_TIME; final Map> saveAssignedList = new HashMap<>(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index c909c9c5d..5248a1836 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -17,7 +17,7 @@ import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action.ActionType; -import org.eclipse.hawkbit.repository.model.Constants; +import org.eclipse.hawkbit.repository.model.RepositoryModelConstants; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; @@ -465,7 +465,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return (((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout.getActionTypeOptionGroup() .getValue()) == ActionTypeOption.AUTO_FORCED) ? actionTypeOptionGroupLayout.getForcedTimeDateField().getValue().getTime() - : Constants.NO_FORCE_TIME; + : RepositoryModelConstants.NO_FORCE_TIME; } private ActionType getActionType() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java index 8ab9318cf..0b727ce2a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.utils; /** - * Constants required for Button. + * RepositoryConstants required for Button. * * * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java index 937a53adc..5e6feceb2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.ui.utils; import com.vaadin.ui.themes.ValoTheme; /** - * Constants required for Label. + * RepositoryConstants required for Label. * * * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java index c50135251..f5f857d60 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.utils; /** - * Constants required for Style. + * RepositoryConstants required for Style. * * * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java index 2474fb36c..1fd17b9e6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.utils; /** - * Constants required for Target. + * RepositoryConstants required for Target. * * * From c2cb42df618405a8085bd76ddbbb24356898c497 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 09:48:43 +0200 Subject: [PATCH 163/371] add javadoc Signed-off-by: Michael Hirsch --- .../repository/ArtifactManagement.java | 8 ++ .../repository/DeploymentManagement.java | 32 +++++- .../repository/model/RolloutGroup.java | 105 +++++++++++++++++- 3 files changed, 141 insertions(+), 4 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java index ee73a1354..167b6019f 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java @@ -60,9 +60,17 @@ public interface ArtifactManagement { ExternalArtifact createExternalArtifact(@NotNull ExternalArtifactProvider externalRepository, String urlSuffix, @NotNull Long moduleId); + /** + * @return the total amount of local artifacts stored in the artifact + * management + */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Long countLocalArtifactsAll(); + /** + * @return the total amount of external artifacts stored in the artifact + * management + */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) Long countExternalArtifactsAll(); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 59518f854..1c2c71f8e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -187,9 +187,15 @@ public interface DeploymentManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Long countActionsByTarget(@NotNull String rsqlParam, @NotNull Target target); + /** + * @return the total amount of stored action status + */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Long countActionStatusAll(); + /** + * @return the total amount of stored actions + */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Long countActionsAll(); @@ -280,8 +286,20 @@ public interface DeploymentManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Slice findActionsByTarget(@NotNull Pageable pageable, @NotNull Target target); + /** + * Retrieves all {@link Action} which assigned to a specific + * {@link DistributionSet}. + * + * @param pageable + * the page request parameter for paging and sorting the result + * @param distributionSet + * the distribution set which should be assigned to the actions + * in the result + * @return a list of {@link Action} which are assigned to a specific + * {@link DistributionSet} + */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Slice findActionsByDistributionSet(@NotNull Pageable pageable, @NotNull DistributionSet ds); + Slice findActionsByDistributionSet(@NotNull Pageable pageable, @NotNull DistributionSet distributionSet); /** * Retrieves all {@link Action}s assigned to a specific {@link Target} and a @@ -345,8 +363,18 @@ public interface DeploymentManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Page findActionStatusByAction(@NotNull Pageable pageReq, @NotNull Action action); + /** + * Retrieves all {@link ActionStatus} inclusive their messages by a specific + * {@link Action}. + * + * @param pageable + * the page request parameter for paging and sorting the result + * @param action + * the {@link Action} to retrieve the {@link ActionStatus} from + * @return a page of {@link ActionStatus} by a speciifc {@link Action} + */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - Page findActionStatusByActionWithMessages(@NotNull Pageable pageReq, @NotNull Action action); + Page findActionStatusByActionWithMessages(@NotNull Pageable pageable, @NotNull Action action); /** * Retrieves all {@link Action}s of a specific target ordered by action ID. diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java index e4d9f5bb7..3180fdb6a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RolloutGroup.java @@ -16,44 +16,145 @@ package org.eclipse.hawkbit.repository.model; */ public interface RolloutGroup extends NamedEntity { + /** + * @return the corresponding {@link Rollout} of this group + */ Rollout getRollout(); + /** + * @param rollout + * sets the {@link Rollout} for this group + */ void setRollout(Rollout rollout); + /** + * @return the current {@link RolloutGroupStatus} for this group + */ RolloutGroupStatus getStatus(); + /** + * @param status + * the {@link RolloutGroupStatus} to set for this group + */ void setStatus(RolloutGroupStatus status); + /** + * @return the parent group of this group, in case the group is the root + * group it does not have a parent and so return {@code null} + */ RolloutGroup getParent(); + /** + * @return the {@link RolloutGroupSuccessCondition} for this group to + * indicate when a group is successful + */ RolloutGroupSuccessCondition getSuccessCondition(); - void setSuccessCondition(RolloutGroupSuccessCondition finishCondition); + /** + * @param successCondition + * the {@link RolloutGroupSuccessCondition} to be set for this + * group to indicate when a group is successfully and a next + * group might be started + */ + void setSuccessCondition(RolloutGroupSuccessCondition successCondition); + /** + * @return a String representation of the expression to be evaluated by the + * {@link RolloutGroupSuccessCondition} to indicate if the condition + * is true, might be {@code null} if no expression must be set for + * the {@link RolloutGroupSuccessCondition} + */ String getSuccessConditionExp(); - void setSuccessConditionExp(String finishExp); + /** + * @param successConditionExp + * sets a String represented expression which is evaluated by the + * {@link RolloutGroupSuccessCondition}, might be {@code null} if + * the set {@link RolloutGroupSuccessCondition} can handle + * {@code null} value + */ + void setSuccessConditionExp(String successConditionExp); + /** + * @return the {@link RolloutGroupErrorCondition} for this group to indicate + * when a group should marked as failed + */ RolloutGroupErrorCondition getErrorCondition(); + /** + * + * @param errorCondition + * the {@link RolloutGroupErrorCondition} to be set for this + * group to indicate when a group is marked as failed and the + * corresponding {@link RolloutGroupErrorAction} should be + * executed + */ void setErrorCondition(RolloutGroupErrorCondition errorCondition); + /** + * @return a String representation of the expression to be evaluated by the + * {@link RolloutGroupErrorCondition} to indicate if the condition + * is true, might be {@code null} if no expression must be set for + * the {@link RolloutGroupErrorCondition} + */ String getErrorConditionExp(); + /** + * @param errorExp + * sets a String represented expression which is evaluated by the + * {@link RolloutGroupErrorCondition}, might be {@code null} if + * the set {@link RolloutGroupErrorCondition} can handle + * {@code null} value + */ void setErrorConditionExp(String errorExp); + /** + * @return a {@link RolloutGroupErrorAction} which is executed when the + * given {@link RolloutGroupErrorCondition} is met, might be + * {@code null} if no error action is set + */ RolloutGroupErrorAction getErrorAction(); + /** + * @param errorAction + * the {@link RolloutGroupErrorAction} to be set which should be + * executed if the {@link RolloutGroupErrorCondition} is met, + * might be {@code null} if no error action should be executed + */ void setErrorAction(RolloutGroupErrorAction errorAction); + /** + * @return a String representation of the expression to be evaluated by the + * {@link RolloutGroupErrorAction} might be {@code null} if no + * expression must be set for the {@link RolloutGroupErrorAction} + */ String getErrorActionExp(); + /** + * @param errorActionExp + * sets a String represented expression which is evaluated by the + * {@link RolloutGroupErrorAction}, might be {@code null} if the + * set {@link RolloutGroupErrorAction} can handle {@code null} + * value + */ void setErrorActionExp(String errorActionExp); + /** + * @return the {@link RolloutGroupSuccessAction} which is executed if the + * {@link RolloutGroupSuccessCondition} is met + */ RolloutGroupSuccessAction getSuccessAction(); + /** + * @return a String representation of the expression to be evaluated by the + * {@link RolloutGroupSuccessAction} might be {@code null} if no + * expression must be set for the {@link RolloutGroupSuccessAction} + */ String getSuccessActionExp(); + /** + * @return the total amount of targets containing in this group + */ long getTotalTargets(); /** From 14cb962f4212652a4d936ad848169778ef528750 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 10:38:38 +0200 Subject: [PATCH 164/371] fix sonar rule don't use generic wildcard Signed-off-by: Michael Hirsch --- .../hawkbit/repository/TenantConfigurationManagement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java index 9937084eb..734704f05 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java @@ -89,7 +89,7 @@ public interface TenantConfigurationManagement { */ @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - TenantConfigurationValue getConfigurationValue(TenantConfigurationKey configurationKey); + TenantConfigurationValue getConfigurationValue(TenantConfigurationKey configurationKey); /** * Retrieves a configuration value from the e.g. tenant overwritten From b14d3bbd3c0afe67700c3b1024f1443a82ec3ca3 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 31 May 2016 10:48:56 +0200 Subject: [PATCH 165/371] Small fixes Signed-off-by: SirWayne --- .../resource/DdiArtifactStoreController.java | 6 +++--- .../ddi/rest/resource/DdiRootController.java | 20 +++++++++---------- .../rest/resource/DdiDeploymentBaseTest.java | 6 +++--- .../amqp/AmqpMessageDispatcherService.java | 10 +++------- ...onstants.java => RepositoryConstants.java} | 4 ++-- .../hawkbit/repository/SystemManagement.java | 2 +- .../hawkbit/repository/TargetManagement.java | 2 +- .../model/ActionWithStatusCount.java | 2 +- .../hawkbit/repository/model/Artifact.java | 2 +- .../hawkbit/repository/model/BaseEntity.java | 2 +- .../repository/model/DistributionSet.java | 2 +- .../model/DistributionSetMetadata.java | 2 +- .../repository/model/DistributionSetTag.java | 2 +- .../repository/model/DistributionSetType.java | 2 +- .../repository/model/ExternalArtifact.java | 2 +- .../hawkbit/repository/model/MetaData.java | 2 +- .../model/NamedVersionedEntity.java | 2 +- ...nts.java => RepositoryModelConstants.java} | 4 ++-- .../hawkbit/repository/model/Rollout.java | 2 +- .../repository/model/SoftwareModule.java | 2 +- .../model/SoftwareModuleMetadata.java | 2 +- .../repository/model/SoftwareModuleType.java | 2 +- .../eclipse/hawkbit/repository/model/Tag.java | 2 +- .../repository/model/TargetFilterQuery.java | 2 +- .../hawkbit/repository/model/TargetInfo.java | 2 +- .../hawkbit/repository/model/TargetTag.java | 2 +- .../model/TargetWithActionStatus.java | 2 +- .../model/TargetWithActionType.java | 2 +- .../model/TenantAwareBaseEntity.java | 2 +- .../repository/model/TenantConfiguration.java | 2 +- .../repository/model/TenantMetaData.java | 2 +- .../jpa/JpaControllerManagement.java | 6 +++--- .../jpa/JpaDeploymentManagement.java | 4 ++-- .../repository/jpa/cache/CacheKeys.java | 2 +- .../jpa/DeploymentManagementTest.java | 4 ++-- .../util/AbstractIntegrationTest.java | 4 ++-- .../ManangementConfirmationWindowLayout.java | 4 ++-- .../rollout/AddUpdateRolloutWindowLayout.java | 4 ++-- .../ui/utils/SPUIButtonDefinitions.java | 2 +- .../ui/utils/SPUILabelDefinitions.java | 2 +- .../ui/utils/SPUIStyleDefinitions.java | 2 +- .../ui/utils/SPUITargetDefinitions.java | 2 +- 42 files changed, 66 insertions(+), 70 deletions(-) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/{Constants.java => RepositoryConstants.java} (92%) rename hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/{Constants.java => RepositoryModelConstants.java} (88%) diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 9d690f9d2..5bed44295 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -17,7 +17,7 @@ import javax.servlet.http.HttpServletRequest; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlArtifactStoreControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.Constants; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; @@ -149,10 +149,10 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR actionStatus.setStatus(Status.DOWNLOAD); if (range != null) { - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + request.getRequestURI()); } else { - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(actionStatus); return 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 656835e95..0c6fa4386 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 @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase; import org.eclipse.hawkbit.ddi.json.model.DdiResult.FinalResult; import org.eclipse.hawkbit.ddi.rest.api.DdiRootControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.Constants; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -185,10 +185,10 @@ public class DdiRootController implements DdiRootControllerRestApi { statusMessage.setStatus(Status.DOWNLOAD); if (range != null) { - statusMessage.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + statusMessage.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " + request.getRequestURI()); } else { - statusMessage.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); + statusMessage.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(statusMessage); return action; @@ -251,7 +251,7 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Found an active UpdateAction for target {}. returning deyploment: {}", targetid, base); - controllerManagement.registerRetrieved(action, Constants.SERVER_MESSAGE_PREFIX + controllerManagement.registerRetrieved(action, RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target retrieved update action and should start now the download."); return new ResponseEntity<>(base, HttpStatus.OK); @@ -306,13 +306,13 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Controller confirmed cancel (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.CANCELED); - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target confirmed cancelation."); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target confirmed cancelation."); break; case REJECTED: LOG.info("Controller reported internal error (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.WARNING); - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target REJECTED update."); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target REJECTED update."); break; case CLOSED: handleClosedUpdateStatus(feedback, targetid, actionid, actionStatus); @@ -340,7 +340,7 @@ public class DdiRootController implements DdiRootControllerRestApi { targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.RUNNING); actionStatus - .addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); + .addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); } private static void handleClosedUpdateStatus(final DdiActionFeedback feedback, final String targetid, @@ -349,10 +349,10 @@ public class DdiRootController implements DdiRootControllerRestApi { feedback.getStatus().getExecution()); if (feedback.getStatus().getResult().getFinished() == FinalResult.FAILURE) { actionStatus.setStatus(Status.ERROR); - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with ERROR!"); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with ERROR!"); } else { actionStatus.setStatus(Status.FINISHED); - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with OK!"); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with OK!"); } } @@ -390,7 +390,7 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Found an active CancelAction for target {}. returning cancel: {}", targetid, cancel); - controllerManagement.registerRetrieved(action, Constants.SERVER_MESSAGE_PREFIX + controllerManagement.registerRetrieved(action, RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target retrieved cancel action and should start now the cancelation."); return new ResponseEntity<>(cancel, HttpStatus.OK); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index 124d8e38d..33d470b3d 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.Constants; +import org.eclipse.hawkbit.repository.model.RepositoryModelConstants; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; @@ -113,7 +113,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(0); List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.FORCED, - Constants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); + RepositoryModelConstants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); @@ -250,7 +250,7 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(0); List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.SOFT, - Constants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); + RepositoryModelConstants.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java index 3b05c96a6..b643be322 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java @@ -25,7 +25,6 @@ import org.eclipse.hawkbit.dmf.json.model.DownloadAndUpdateRequest; import org.eclipse.hawkbit.dmf.json.model.SoftwareModule; import org.eclipse.hawkbit.eventbus.EventSubscriber; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; -import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.util.IpUtil; @@ -53,14 +52,11 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { @Autowired private AmqpSenderService amqpSenderService; - @Autowired - private SoftwareManagement softwareManagement; - /** * Constructor. * - * @param messageConverter - * message converter + * @param rabbitTemplate + * the rabbitTemplate */ @Autowired public AmqpMessageDispatcherService(final RabbitTemplate rabbitTemplate) { @@ -118,7 +114,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { } - private MessageProperties createConnectorMessageProperties(final String tenant, final String controllerId, + private static MessageProperties createConnectorMessageProperties(final String tenant, final String controllerId, final EventTopic topic) { final MessageProperties messageProperties = createMessageProperties(); messageProperties.setHeader(MessageHeaderKey.TOPIC, topic); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryConstants.java similarity index 92% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryConstants.java index fcfd6ab5e..f2cd3f9f6 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryConstants.java @@ -15,7 +15,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; * Repository constants. * */ -public final class Constants { +public final class RepositoryConstants { /** * Prefix that the server puts in front of @@ -30,7 +30,7 @@ public final class Constants { */ public static final int DEFAULT_DS_TYPES_IN_TENANT = 2; - private Constants() { + private RepositoryConstants() { // Utility class. } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java index 5cc17e09b..8ee3b7600 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -74,7 +74,7 @@ public interface SystemManagement { /** * Returns {@link TenantMetaData} of given and current tenant. Creates for * new tenants also two {@link SoftwareModuleType} (os and app) and - * {@link Constants#DEFAULT_DS_TYPES_IN_TENANT} {@link DistributionSetType}s + * {@link RepositoryConstants#DEFAULT_DS_TYPES_IN_TENANT} {@link DistributionSetType}s * (os and os_app). * * DISCLAIMER: this variant is used during initial login (where the tenant diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index 9280e065d..ee10883ec 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -601,4 +601,4 @@ public interface TargetManagement { + SpringEvalExpressions.IS_CONTROLLER) List updateTargets(@NotNull Collection targets); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java index c497783e2..268c37853 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionWithStatusCount.java @@ -45,4 +45,4 @@ public interface ActionWithStatusCount { */ String getRolloutName(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java index 95689a9d9..cc726839d 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Artifact.java @@ -39,4 +39,4 @@ public interface Artifact extends TenantAwareBaseEntity { */ Long getSize(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java index f23b226c6..2a9948bc5 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java @@ -46,4 +46,4 @@ public interface BaseEntity extends Serializable, Identifiable { */ long getOptLockRevision(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java index c6532b339..5747b38f3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSet.java @@ -129,4 +129,4 @@ public interface DistributionSet extends NamedVersionedEntity { */ boolean isComplete(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java index dfa9b9716..87a62e9ba 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetMetadata.java @@ -19,4 +19,4 @@ public interface DistributionSetMetadata extends MetaData { */ DistributionSet getDistributionSet(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java index 31f909348..05089d138 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java @@ -22,4 +22,4 @@ public interface DistributionSetTag extends Tag { */ List getAssignedToDistributionSet(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java index 5546a9f6d..cf5da40b2 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetType.java @@ -170,4 +170,4 @@ public interface DistributionSetType extends NamedEntity { */ void setColour(final String colour); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java index 4ff3ab5a8..7e1a965e7 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ExternalArtifact.java @@ -38,4 +38,4 @@ public interface ExternalArtifact extends Artifact { */ void setUrlSuffix(String urlSuffix); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java index 4f3397b23..68b7349f9 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java @@ -36,4 +36,4 @@ public interface MetaData extends Serializable { */ void setValue(String value); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java index de6cded12..b66115082 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedVersionedEntity.java @@ -25,4 +25,4 @@ public interface NamedVersionedEntity extends NamedEntity { */ void setVersion(String version); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RepositoryModelConstants.java similarity index 88% rename from hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RepositoryModelConstants.java index b43ec6f88..66806915a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Constants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/RepositoryModelConstants.java @@ -12,7 +12,7 @@ package org.eclipse.hawkbit.repository.model; * Repository model constants. * */ -public final class Constants { +public final class RepositoryModelConstants { /** * indicating that target action has no force time which is only needed in @@ -20,7 +20,7 @@ public final class Constants { */ public static final Long NO_FORCE_TIME = 0L; - private Constants() { + private RepositoryModelConstants() { // Utility class. } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java index 5094c1af8..37185a8e2 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Rollout.java @@ -156,4 +156,4 @@ public interface Rollout extends NamedEntity { ERROR_STARTING; } -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java index cb01219f4..3c3a24fd0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java @@ -108,4 +108,4 @@ public interface SoftwareModule extends NamedVersionedEntity { */ List getAssignedTo(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java index bb0f877ce..ebfea9c28 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleMetadata.java @@ -25,4 +25,4 @@ public interface SoftwareModuleMetadata extends MetaData { */ void setSoftwareModule(SoftwareModule softwareModule); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java index 313525199..4bd52f3f0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleType.java @@ -57,4 +57,4 @@ public interface SoftwareModuleType extends NamedEntity { */ void setColour(final String colour); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java index e57763920..bfade80e8 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Tag.java @@ -24,4 +24,4 @@ public interface Tag extends NamedEntity { */ void setColour(String colour); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java index 9cc200d0d..5052a0060 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetFilterQuery.java @@ -56,4 +56,4 @@ public interface TargetFilterQuery extends TenantAwareBaseEntity { */ void setQuery(String query); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java index d2e96664c..6317f9783 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java @@ -68,4 +68,4 @@ public interface TargetInfo extends Serializable { */ boolean isRequestControllerAttributes(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java index 585bf8c12..f222e9e90 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetTag.java @@ -21,4 +21,4 @@ public interface TargetTag extends Tag { */ List getAssignedToTargets(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java index f775a3879..9193b47ef 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionStatus.java @@ -19,7 +19,7 @@ public class TargetWithActionStatus { private Target target; - private Status status = null; + private Status status; public TargetWithActionStatus(final Target target) { this.target = target; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java index c05f1ec3f..a9cfa81d1 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetWithActionType.java @@ -51,7 +51,7 @@ public class TargetWithActionType { if (actionType == ActionType.TIMEFORCED) { return forceTime; } - return Constants.NO_FORCE_TIME; + return RepositoryModelConstants.NO_FORCE_TIME; } /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java index f79306d75..8c19db236 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java @@ -19,4 +19,4 @@ public interface TenantAwareBaseEntity extends BaseEntity { */ String getTenant(); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java index fa9962eec..fdbc5c8d3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantConfiguration.java @@ -37,4 +37,4 @@ public interface TenantConfiguration extends TenantAwareBaseEntity { */ void setValue(String value); -} \ No newline at end of file +} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java index 23f81ae6f..0b40d9939 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TenantMetaData.java @@ -31,4 +31,4 @@ public interface TenantMetaData extends BaseEntity { */ String getTenant(); -} \ No newline at end of file +} 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 43b8534af..9fcd646b5 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 @@ -19,7 +19,7 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.repository.Constants; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; @@ -216,7 +216,7 @@ public class JpaControllerManagement implements ControllerManagement { handleFinishedCancelation(actionStatus, action); break; case RETRIEVED: - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Cancellation request retrieved."); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Cancellation request retrieved."); break; default: // do nothing @@ -230,7 +230,7 @@ public class JpaControllerManagement implements ControllerManagement { private void handleFinishedCancelation(final ActionStatus actionStatus, final JpaAction action) { // in case of successful cancellation we also report the success at // the canceled action itself. - actionStatus.addMessage(Constants.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); DeploymentHelper.successCancellation(action, actionRepository, targetManagement, targetInfoRepository, entityManager); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index cefa5e937..6f3a876b8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -145,7 +145,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { return assignDistributionSetByTargetId((JpaDistributionSet) pset, targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), - ActionType.FORCED, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME); + ActionType.FORCED, org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME); } @@ -155,7 +155,7 @@ public class JpaDeploymentManagement implements DeploymentManagement { @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(final Long dsID, final String... targetIDs) { return assignDistributionSet(dsID, ActionType.FORCED, - org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, targetIDs); + org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME, targetIDs); } @Override diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java index fdfe7a263..021a17a9d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheKeys.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.cache; import org.eclipse.hawkbit.repository.jpa.model.CacheFieldEntityListener; /** - * Constants for cache keys used in multiple classes. + * RepositoryConstants for cache keys used in multiple classes. * * * diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java index 3d0114d67..565513107 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DeploymentManagementTest.java @@ -842,7 +842,7 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest { final DistributionSet ds = testdataFactory.createDistributionSet("a"); // assign ds to create an action final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet( - ds.getId(), ActionType.SOFT, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, + ds.getId(), ActionType.SOFT, org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME, target.getControllerId()); final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify preparation @@ -865,7 +865,7 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest { final DistributionSet ds = testdataFactory.createDistributionSet("a"); // assign ds to create an action final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet( - ds.getId(), ActionType.FORCED, org.eclipse.hawkbit.repository.model.Constants.NO_FORCE_TIME, + ds.getId(), ActionType.FORCED, org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME, target.getControllerId()); final Action action = deploymentManagement.findActionWithDetails(assignDistributionSet.getActions().get(0)); // verify perparation diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java index 29bf02fa0..f8c147c61 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.repository.util; import org.eclipse.hawkbit.ExcludePathAwareShallowETagFilter; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.Constants; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -72,7 +72,7 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { * {@link TestdataFactory#findOrCreateDefaultTestDsType()} and two * {@link SystemManagement#getTenantMetadata()}; */ - protected static final int DEFAULT_DS_TYPES = Constants.DEFAULT_DS_TYPES_IN_TENANT + 1; + protected static final int DEFAULT_DS_TYPES = RepositoryConstants.DEFAULT_DS_TYPES_IN_TENANT + 1; @Autowired protected EntityFactory entityFactory; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java index fa8a41f07..db1be1ae5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java @@ -24,7 +24,7 @@ import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action.ActionType; -import org.eclipse.hawkbit.repository.model.Constants; +import org.eclipse.hawkbit.repository.model.RepositoryModelConstants; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.confirmwindow.layout.AbstractConfirmationWindowLayout; @@ -148,7 +148,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin final long forcedTimeStamp = (((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout .getActionTypeOptionGroup().getValue()) == ActionTypeOption.AUTO_FORCED) ? actionTypeOptionGroupLayout.getForcedTimeDateField().getValue().getTime() - : Constants.NO_FORCE_TIME; + : RepositoryModelConstants.NO_FORCE_TIME; final Map> saveAssignedList = new HashMap<>(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index c909c9c5d..5248a1836 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -17,7 +17,7 @@ import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Action.ActionType; -import org.eclipse.hawkbit.repository.model.Constants; +import org.eclipse.hawkbit.repository.model.RepositoryModelConstants; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; @@ -465,7 +465,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { return (((ActionTypeOptionGroupLayout.ActionTypeOption) actionTypeOptionGroupLayout.getActionTypeOptionGroup() .getValue()) == ActionTypeOption.AUTO_FORCED) ? actionTypeOptionGroupLayout.getForcedTimeDateField().getValue().getTime() - : Constants.NO_FORCE_TIME; + : RepositoryModelConstants.NO_FORCE_TIME; } private ActionType getActionType() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java index 8ab9318cf..0b727ce2a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIButtonDefinitions.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.utils; /** - * Constants required for Button. + * RepositoryConstants required for Button. * * * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java index 937a53adc..5e6feceb2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.ui.utils; import com.vaadin.ui.themes.ValoTheme; /** - * Constants required for Label. + * RepositoryConstants required for Label. * * * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java index c50135251..f5f857d60 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.utils; /** - * Constants required for Style. + * RepositoryConstants required for Style. * * * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java index 2474fb36c..1fd17b9e6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUITargetDefinitions.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.utils; /** - * Constants required for Target. + * RepositoryConstants required for Target. * * * From 62a2e2cdb498e5dd970eb8c2a8ea5db6eab6f353 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 10:49:03 +0200 Subject: [PATCH 166/371] introduce own interfaces for registering the currentTenantKeyGenerator Signed-off-by: Michael Hirsch --- .../hawkbit/repository/SystemManagement.java | 6 --- .../jpa/CurrentTenantCacheKeyGenerator.java | 40 +++++++++++++++++++ .../repository/jpa/JpaSystemManagement.java | 2 +- 3 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/CurrentTenantCacheKeyGenerator.java diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java index 8ee3b7600..039e4ae13 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -18,8 +18,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.eclipse.hawkbit.repository.report.model.SystemUsageReport; import org.eclipse.hawkbit.tenancy.TenantAware; -import org.springframework.cache.interceptor.KeyGenerator; -import org.springframework.context.annotation.Bean; import org.springframework.security.access.prepost.PreAuthorize; /** @@ -67,10 +65,6 @@ public interface SystemManagement { */ TenantMetaData getTenantMetadata(); - // TODO figure out why this is necessary and clean this up - @Bean - KeyGenerator currentTenantKeyGenerator(); - /** * Returns {@link TenantMetaData} of given and current tenant. Creates for * new tenants also two {@link SoftwareModuleType} (os and app) and diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/CurrentTenantCacheKeyGenerator.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/CurrentTenantCacheKeyGenerator.java new file mode 100644 index 000000000..029246d2d --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/CurrentTenantCacheKeyGenerator.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Service; + +/** + * Defines the interfaces to register the {@link KeyGenerator} as bean which is + * used by spring caching framework to resolve the key-generator. The + * key-generator must registered as bean so spring can resolve the key-generator + * by its name. + * + * When using the {@link Service} annotation e.g. by {@link JpaSystemManagement} + * the bean registration must be declared by the interface due spring registers + * the bean by the implemented interfaces. So introduce a single interface for + * the {@link JpaSystemManagement} implementation to allow it to register the + * key-generator bean. + * + */ +@FunctionalInterface +public interface CurrentTenantCacheKeyGenerator { + + /** + * Bean declaration to register a {@code currentTenantKeyGenerator} bean + * which is used by the caching framework. + * + * @return the {@link KeyGenerator} to be used to cache the values of the + * current used tenant in the {@link JpaSystemManagement} + */ + @Bean + KeyGenerator currentTenantKeyGenerator(); +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index be46362a5..8f9e8c5f9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -49,7 +49,7 @@ import org.springframework.validation.annotation.Validated; @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service -public class JpaSystemManagement implements SystemManagement { +public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, SystemManagement { @Autowired private EntityManager entityManager; From cf64d2ffdf3ab5e09d7ca11524fa773c7d924f42 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 31 May 2016 10:53:07 +0200 Subject: [PATCH 167/371] css style change Signed-off-by: Melanie Retter --- .../resources/VAADIN/themes/hawkbit/customstyles/common.scss | 4 ---- 1 file changed, 4 deletions(-) diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss index ba02cfbda..ecacdcd67 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss @@ -289,10 +289,6 @@ font-weight:normal; } - .hawkbit [class*="margin-bottom"] > tbody > [class*="lastrow"] > td { - padding-bottom: 12px !important; - } - .form-lastrow { padding-bottom: 12px !important; } From f1e3406b978c9165089fffddf4c66c8938664361 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 31 May 2016 10:56:10 +0200 Subject: [PATCH 168/371] Move jackson dependendy from repo to rest-core Signed-off-by: SirWayne --- .../hawkbit-repository-jpa/pom.xml | 18 ++++-------------- hawkbit-rest-core/pom.xml | 8 ++++++++ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml index 49a19530f..0a5f65957 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/pom.xml +++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml @@ -36,16 +36,6 @@ - - - com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core - jackson-databind - - org.eclipse.hawkbit @@ -95,6 +85,10 @@ spring-boot-configuration-processor true + + cz.jirutka.rsql + rsql-parser + @@ -158,10 +152,6 @@ spring-security-web test - - cz.jirutka.rsql - rsql-parser - diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml index 0b5f39272..1a74f4b3e 100644 --- a/hawkbit-rest-core/pom.xml +++ b/hawkbit-rest-core/pom.xml @@ -32,6 +32,14 @@ ${project.version} + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-databind + javax.servlet javax.servlet-api From 252f409912ba1835d7ee5208fb27925fb203e84a Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 11:01:04 +0200 Subject: [PATCH 169/371] fix generic wildcard Signed-off-by: Michael Hirsch --- .../configuration/TenantConfigurationKey.java | 38 ++++++------------- .../jpa/JpaTenantConfigurationManagement.java | 3 +- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/TenantConfigurationKey.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/TenantConfigurationKey.java index 402185be3..d68e963be 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/TenantConfigurationKey.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/TenantConfigurationKey.java @@ -30,60 +30,45 @@ public enum TenantConfigurationKey { /** * boolean value {@code true} {@code false}. */ - AUTHENTICATION_MODE_HEADER_ENABLED("authentication.header.enabled", - "hawkbit.server.ddi.security.authentication.header.enabled", Boolean.class, Boolean.FALSE.toString(), - TenantConfigurationBooleanValidator.class), + AUTHENTICATION_MODE_HEADER_ENABLED("authentication.header.enabled", "hawkbit.server.ddi.security.authentication.header.enabled", Boolean.class, Boolean.FALSE.toString(), TenantConfigurationBooleanValidator.class), /** * */ - AUTHENTICATION_MODE_HEADER_AUTHORITY_NAME("authentication.header.authority", - "hawkbit.server.ddi.security.authentication.header.authority", String.class, Boolean.FALSE.toString(), - TenantConfigurationStringValidator.class), + AUTHENTICATION_MODE_HEADER_AUTHORITY_NAME("authentication.header.authority", "hawkbit.server.ddi.security.authentication.header.authority", String.class, Boolean.FALSE.toString(), TenantConfigurationStringValidator.class), /** * boolean value {@code true} {@code false}. */ - AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED("authentication.targettoken.enabled", - "hawkbit.server.ddi.security.authentication.targettoken.enabled", Boolean.class, Boolean.FALSE.toString(), - TenantConfigurationBooleanValidator.class), + AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED("authentication.targettoken.enabled", "hawkbit.server.ddi.security.authentication.targettoken.enabled", Boolean.class, Boolean.FALSE.toString(), TenantConfigurationBooleanValidator.class), /** * boolean value {@code true} {@code false}. */ - AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_ENABLED("authentication.gatewaytoken.enabled", - "hawkbit.server.ddi.security.authentication.gatewaytoken.enabled", Boolean.class, Boolean.FALSE.toString(), - TenantConfigurationBooleanValidator.class), + AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_ENABLED("authentication.gatewaytoken.enabled", "hawkbit.server.ddi.security.authentication.gatewaytoken.enabled", Boolean.class, Boolean.FALSE.toString(), TenantConfigurationBooleanValidator.class), /** * string value which holds the name of the security token key. */ - AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_NAME("authentication.gatewaytoken.name", - "hawkbit.server.ddi.security.authentication.gatewaytoken.name", String.class, null, - TenantConfigurationStringValidator.class), + AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_NAME("authentication.gatewaytoken.name", "hawkbit.server.ddi.security.authentication.gatewaytoken.name", String.class, null, TenantConfigurationStringValidator.class), /** * string value which holds the actual security-key of the gateway security * token. */ - AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_KEY("authentication.gatewaytoken.key", - "hawkbit.server.ddi.security.authentication.gatewaytoken.key", String.class, null, - TenantConfigurationStringValidator.class), + AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_KEY("authentication.gatewaytoken.key", "hawkbit.server.ddi.security.authentication.gatewaytoken.key", String.class, null, TenantConfigurationStringValidator.class), /** * string value which holds the polling time interval in the format HH:mm:ss */ - POLLING_TIME_INTERVAL("pollingTime", "hawkbit.controller.pollingTime", String.class, null, - TenantConfigurationPollingDurationValidator.class), + POLLING_TIME_INTERVAL("pollingTime", "hawkbit.controller.pollingTime", String.class, null, TenantConfigurationPollingDurationValidator.class), /** * string value which holds the polling time interval in the format HH:mm:ss */ - POLLING_OVERDUE_TIME_INTERVAL("pollingOverdueTime", "hawkbit.controller.pollingOverdueTime", String.class, null, - TenantConfigurationPollingDurationValidator.class), + POLLING_OVERDUE_TIME_INTERVAL("pollingOverdueTime", "hawkbit.controller.pollingOverdueTime", String.class, null, TenantConfigurationPollingDurationValidator.class), /** * boolean value {@code true} {@code false}. */ - ANONYMOUS_DOWNLOAD_MODE_ENABLED("anonymous.download.enabled", "hawkbit.server.download.anonymous.enabled", - Boolean.class, Boolean.FALSE.toString(), TenantConfigurationBooleanValidator.class); + ANONYMOUS_DOWNLOAD_MODE_ENABLED("anonymous.download.enabled", "hawkbit.server.download.anonymous.enabled", Boolean.class, Boolean.FALSE.toString(), TenantConfigurationBooleanValidator.class); private final String keyName; private final String defaultKeyName; @@ -140,8 +125,9 @@ public enum TenantConfigurationKey { * @return the data type of the tenant configuration value. (e.g. * Integer.class, String.class) */ - public Class getDataType() { - return dataType; + @SuppressWarnings("unchecked") + public Class getDataType() { + return (Class) dataType; } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java index ec5f3e843..9f65091a4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java @@ -97,7 +97,7 @@ public class JpaTenantConfigurationManagement implements EnvironmentAware, Tenan } @Override - public TenantConfigurationValue getConfigurationValue(final TenantConfigurationKey configurationKey) { + public TenantConfigurationValue getConfigurationValue(final TenantConfigurationKey configurationKey) { return getConfigurationValue(configurationKey, configurationKey.getDataType()); } @@ -147,6 +147,7 @@ public class JpaTenantConfigurationManagement implements EnvironmentAware, Tenan final JpaTenantConfiguration updatedTenantConfiguration = tenantConfigurationRepository .save(tenantConfiguration); + @SuppressWarnings("unchecked") final Class clazzT = (Class) value.getClass(); return TenantConfigurationValue. builder().global(false).createdBy(updatedTenantConfiguration.getCreatedBy()) From a8bca3dc1232b4f60904dd25d7cd2075f8f1aaed Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 11:07:02 +0200 Subject: [PATCH 170/371] fix sonar issue unused local variable Signed-off-by: Michael Hirsch --- .../hawkbit/artifact/repository/ArtifactStore.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java index 5f12498ff..af60a39c8 100644 --- a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java +++ b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java @@ -124,11 +124,9 @@ public class ArtifactStore implements ArtifactRepository { try { LOGGER.debug("storing file {} of content {}", filename, contentType); tempFile = File.createTempFile("uploadFile", null); - try (final FileOutputStream os = new FileOutputStream(tempFile)) { - try (BufferedOutputStream bos = new BufferedOutputStream(os)) { - try (BufferedInputStream bis = new BufferedInputStream(content)) { - return store(content, contentType, bos, tempFile, hash); - } + try (final BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tempFile))) { + try (BufferedInputStream bis = new BufferedInputStream(content)) { + return store(bis, contentType, bos, tempFile, hash); } } } catch (final IOException | MongoException e1) { From 1117bbebbbcb4d446ce5654724582820de6e3bfc Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 11:29:41 +0200 Subject: [PATCH 171/371] re-add json dependency for tests Signed-off-by: Michael Hirsch --- .../hawkbit-repository-jpa/pom.xml | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml index 0a5f65957..d234f5f57 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/pom.xml +++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml @@ -8,8 +8,7 @@ http://www.eclipse.org/legal/epl-v10.html --> - + 4.0.0 org.eclipse.hawkbit @@ -51,7 +50,7 @@ org.eclipse.hawkbit hawkbit-artifact-repository-mongo ${project.version} - + com.google.guava guava @@ -75,7 +74,7 @@ org.springframework.security spring-security-core - + org.flywaydb flyway-core @@ -97,6 +96,16 @@ ${project.version} test + + com.fasterxml.jackson.core + jackson-core + test + + + com.fasterxml.jackson.core + jackson-databind + test + com.h2database h2 @@ -126,7 +135,7 @@ org.springframework.security spring-security-aspects test - + org.springframework spring-test @@ -141,7 +150,7 @@ org.easytesting fest-assert test - + org.springframework.security spring-security-config From 91fd94b3562f7d367879d01bcbdebbc05543daf0 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 31 May 2016 12:28:24 +0200 Subject: [PATCH 172/371] Migrated MySQL schema creation to test package. Small doc improvements on testdatafactory. Signed-off-by: Kai Zimmermann --- .../MgmtDistributionSetResourceTest.java | 2 +- .../src/test/resources/logback.xml | 2 +- .../jpa/AbstractJpaIntegrationTest.java | 24 ---- ...AbstractJpaIntegrationTestWithMongoDB.java | 27 ---- .../repository/jpa/LocalH2TestDatabase.java | 118 ------------------ .../util/AbstractIntegrationTest.java | 23 ++++ .../repository/util}/CIMySqlTestDatabase.java | 28 +++-- .../repository/util/TestdataFactory.java | 10 +- .../repository/util}/Testdatabase.java | 2 +- 9 files changed, 52 insertions(+), 184 deletions(-) delete mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/LocalH2TestDatabase.java rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/CIMySqlTestDatabase.java (70%) rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/Testdatabase.java (91%) diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index b4887c40c..8c15e0a8c 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -387,7 +387,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest @WithUser(principal = "uploadTester", allSpPermissions = true) @Description("Ensures that single DS requested by ID is listed with expected payload.") public void getDistributionSet() throws Exception { - final DistributionSet set = testdataFactory.createTestDistributionSet(); + final DistributionSet set = testdataFactory.createUpdatedDistributionSet(); // perform request mvc.perform(get("/rest/v1/distributionsets/{dsId}", set.getId()).accept(MediaType.APPLICATION_JSON)) diff --git a/hawkbit-mgmt-resource/src/test/resources/logback.xml b/hawkbit-mgmt-resource/src/test/resources/logback.xml index 49ea574f2..30060d1c6 100644 --- a/hawkbit-mgmt-resource/src/test/resources/logback.xml +++ b/hawkbit-mgmt-resource/src/test/resources/logback.xml @@ -23,7 +23,7 @@ - + diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java index 342e0792b..ecb7f2d37 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java @@ -13,8 +13,6 @@ import javax.persistence.PersistenceContext; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; import org.eclipse.hawkbit.repository.util.AbstractIntegrationTest; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.data.mongodb.gridfs.GridFsOperations; @@ -79,26 +77,4 @@ public abstract class AbstractJpaIntegrationTest extends AbstractIntegrationTest @Autowired protected TenantAwareCacheManager cacheManager; - - private static CIMySqlTestDatabase tesdatabase; - - @BeforeClass - public static void beforeClass() { - createTestdatabaseAndStart(); - } - - private static void createTestdatabaseAndStart() { - if ("MYSQL".equals(System.getProperty("spring.jpa.database"))) { - tesdatabase = new CIMySqlTestDatabase(); - tesdatabase.before(); - } - } - - @AfterClass - public static void afterClass() { - if (tesdatabase != null) { - tesdatabase.after(); - } - } - } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java index 38a02c213..6650d1e3c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java @@ -13,11 +13,8 @@ import javax.persistence.PersistenceContext; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.data.mongodb.gridfs.GridFsOperations; @SpringApplicationConfiguration(classes = { org.eclipse.hawkbit.RepositoryApplicationConfiguration.class, TestConfiguration.class }) @@ -68,9 +65,6 @@ public abstract class AbstractJpaIntegrationTestWithMongoDB extends AbstractInte @Autowired protected TargetInfoRepository targetInfoRepository; - @Autowired - protected GridFsOperations operations; - @Autowired protected RolloutGroupRepository rolloutGroupRepository; @@ -80,25 +74,4 @@ public abstract class AbstractJpaIntegrationTestWithMongoDB extends AbstractInte @Autowired protected TenantAwareCacheManager cacheManager; - private static CIMySqlTestDatabase tesdatabase; - - @BeforeClass - public static void beforeClass() { - createTestdatabaseAndStart(); - } - - private static void createTestdatabaseAndStart() { - if ("MYSQL".equals(System.getProperty("spring.jpa.database"))) { - tesdatabase = new CIMySqlTestDatabase(); - tesdatabase.before(); - } - } - - @AfterClass - public static void afterClass() { - if (tesdatabase != null) { - tesdatabase.after(); - } - } - } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/LocalH2TestDatabase.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/LocalH2TestDatabase.java deleted file mode 100644 index 7812527c8..000000000 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/LocalH2TestDatabase.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.repository.jpa; - -import java.io.IOException; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.util.UUID; - -import org.h2.tools.Server; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * - */ -public class LocalH2TestDatabase implements Testdatabase { - - private final static Logger LOG = LoggerFactory.getLogger(LocalH2TestDatabase.class); - private final int port; - private Server h2server; - private boolean dbStarted; - private String uri; - - public LocalH2TestDatabase(final int port) { - super(); - this.port = port; - createUri(); - initSystemProperties(); - } - - private final void initSystemProperties() { - System.setProperty("spring.datasource.driverClassName", getDriverClassName()); - System.setProperty("spring.datasource.username", ""); - System.setProperty("spring.datasource.password", ""); - System.setProperty("hawkbit.server.database", "H2"); - } - - private void dropAllObjects() { - try (Connection connection = DriverManager.getConnection(uri)) { - connection.prepareCall("DROP ALL OBJECTS;").execute(); - } catch (final SQLException e) { - e.printStackTrace(); - } - } - - @Override - public void before() { - try { - startDatabase(); - } catch (ClassNotFoundException | SQLException | IOException e) { - e.printStackTrace(); - } - } - - @Override - public void after() { - try { - stopDatabase(); - } catch (ClassNotFoundException | SQLException | IOException e) { - e.printStackTrace(); - } - } - - private void startDatabase() throws SQLException, ClassNotFoundException, IOException { - if (dbStarted) { - return; - } - - // Start H2 database for OpenFire - h2server = Server - .createTcpServer( - new String[] { "-tcpPort", String.valueOf(port), "-tcpAllowOthers", "-tcpShutdownForce" }) - .start(); - dbStarted = true; - LOG.info("H2 Database started on port {} and uri {}", port, uri); - dropAllObjects(); - } - - private final void createUri() { - this.uri = "jdbc:h2:tcp://localhost:" + port + "/mem:SP" + UUID.randomUUID().toString() + ";MVCC=TRUE;" - + "DB_CLOSE_DELAY=-1"; - System.setProperty("spring.datasource.url", uri); - } - - private void stopDatabase() throws SQLException, ClassNotFoundException, IOException { - if (!dbStarted) { - return; - } - - h2server.stop(); - h2server = null; - dbStarted = false; - try { - Thread.sleep(1000); - } catch (final InterruptedException e) { - } - } - - @Override - public String getDriverClassName() { - return "org.h2.Driver"; - } - - @Override - public String getUri() { - return uri; - } - -} diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java index 29bf02fa0..901827d32 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java @@ -29,7 +29,9 @@ import org.eclipse.hawkbit.security.DosFilter; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.junit.After; +import org.junit.AfterClass; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Rule; import org.junit.rules.MethodRule; import org.junit.rules.TestWatchman; @@ -211,4 +213,25 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { } } }; + + private static CIMySqlTestDatabase tesdatabase; + + @BeforeClass + public static void beforeClass() { + createTestdatabaseAndStart(); + } + + private static void createTestdatabaseAndStart() { + if ("MYSQL".equals(System.getProperty("spring.jpa.database"))) { + tesdatabase = new CIMySqlTestDatabase(); + tesdatabase.before(); + } + } + + @AfterClass + public static void afterClass() { + if (tesdatabase != null) { + tesdatabase.after(); + } + } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/CIMySqlTestDatabase.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/CIMySqlTestDatabase.java similarity index 70% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/CIMySqlTestDatabase.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/CIMySqlTestDatabase.java index c0a8b161c..e6bbe1f6a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/CIMySqlTestDatabase.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/CIMySqlTestDatabase.java @@ -6,10 +6,11 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository.util; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; import java.sql.SQLException; import org.apache.commons.lang3.RandomStringUtils; @@ -17,17 +18,20 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * + * {@link Testdatabase} implementation for MySQL. * */ public class CIMySqlTestDatabase implements Testdatabase { - private final static Logger LOG = LoggerFactory.getLogger(CIMySqlTestDatabase.class); + private static final Logger LOG = LoggerFactory.getLogger(CIMySqlTestDatabase.class); private String schemaName; private String uri; private final String username; private final String password; + /** + * Constructor. + */ public CIMySqlTestDatabase() { this.username = System.getProperty("spring.datasource.username"); this.password = System.getProperty("spring.datasource.password"); @@ -43,7 +47,7 @@ public class CIMySqlTestDatabase implements Testdatabase { private void createSchemaUri() { schemaName = "SP" + RandomStringUtils.randomAlphanumeric(10); - this.uri = this.uri.substring(0, uri.lastIndexOf("/") + 1); + this.uri = this.uri.substring(0, uri.lastIndexOf('/') + 1); System.setProperty("spring.datasource.url", uri + schemaName); } @@ -55,10 +59,12 @@ public class CIMySqlTestDatabase implements Testdatabase { private void createSchema() { try (Connection connection = DriverManager.getConnection(uri, username, password)) { - connection.prepareStatement("CREATE SCHEMA " + schemaName + ";").execute(); - LOG.info("Schema {} created on uri {}", schemaName, uri); + try (PreparedStatement statement = connection.prepareStatement("CREATE SCHEMA " + schemaName + ";")) { + statement.execute(); + LOG.info("Schema {} created on uri {}", schemaName, uri); + } } catch (final SQLException e) { - e.printStackTrace(); + LOG.error("Schema creation failed!", e); } } @@ -70,10 +76,12 @@ public class CIMySqlTestDatabase implements Testdatabase { private void dropSchema() { try (Connection connection = DriverManager.getConnection(uri, username, password)) { - connection.prepareStatement("DROP SCHEMA " + schemaName + ";").execute(); - LOG.info("Schema {} dropped on uri {}", schemaName, uri); + try (PreparedStatement statement = connection.prepareStatement("DROP SCHEMA " + schemaName + ";")) { + statement.execute(); + LOG.info("Schema {} dropped on uri {}", schemaName, uri); + } } catch (final SQLException e) { - e.printStackTrace(); + LOG.error("Schema drop failed!", e); } } diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java index 0597a30cb..1ed5679c8 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java @@ -29,6 +29,7 @@ import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.Artifact; +import org.eclipse.hawkbit.repository.model.BaseEntity; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -219,7 +220,7 @@ public class TestdataFactory { * @param version * {@link DistributionSet#getVersion()} and * {@link SoftwareModule#getVersion()} extended by a random - * number. + * number.updat * @param tags * {@link DistributionSet#getTags()} * @@ -352,9 +353,14 @@ public class TestdataFactory { * iterative number and {@link DistributionSet#isRequiredMigrationStep()} * false. * + * In addition it updates the ccreated {@link DistributionSet}s and + * {@link SoftwareModule}s to ensure that + * {@link BaseEntity#getLastModifiedAt()} and + * {@link BaseEntity#getLastModifiedBy()} is filled. + * * @return persisted {@link DistributionSet}. */ - public DistributionSet createTestDistributionSet() { + public DistributionSet createUpdatedDistributionSet() { DistributionSet set = createDistributionSet(""); set.setVersion(DEFAULT_VERSION); set = distributionSetManagement.updateDistributionSet(set); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/Testdatabase.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/Testdatabase.java similarity index 91% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/Testdatabase.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/Testdatabase.java index 38133c800..b24d34533 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/Testdatabase.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/Testdatabase.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository.util; /** * From c5541b42dc86496dcb959e33d640f6f638b48555 Mon Sep 17 00:00:00 2001 From: Asharani Date: Tue, 31 May 2016 17:45:24 +0530 Subject: [PATCH 173/371] Added null check for address host Signed-off-by: Asharani --- .../hawkbit/ui/filter/target/TargetSearchTextFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java index c834c0d74..e6decd00a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java @@ -56,7 +56,7 @@ public class TargetSearchTextFilter implements FilterExpression { } private boolean ipAddressIgnoreCase() { - if (target.getTargetInfo().getAddress() == null) { + if (target.getTargetInfo().getAddress() == null || target.getTargetInfo().getAddress().getHost() == null) { return false; } return target.getTargetInfo().getAddress().getHost().toUpperCase().contains(searchTextUpper); From 3e6930419e4bf4b9eca73c3fced8dc7ce2154165 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 31 May 2016 15:43:49 +0200 Subject: [PATCH 174/371] refactor code Signed-off-by: Michael Hirsch --- .../hawkbit/ui/filter/target/TargetSearchTextFilter.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java index e6decd00a..64e9067e9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filter/target/TargetSearchTextFilter.java @@ -3,6 +3,8 @@ */ package org.eclipse.hawkbit.ui.filter.target; +import java.net.URI; + import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.ui.filter.FilterExpression; @@ -56,9 +58,10 @@ public class TargetSearchTextFilter implements FilterExpression { } private boolean ipAddressIgnoreCase() { - if (target.getTargetInfo().getAddress() == null || target.getTargetInfo().getAddress().getHost() == null) { + final URI targetAddress = target.getTargetInfo().getAddress(); + if (targetAddress == null || targetAddress.getHost() == null) { return false; } - return target.getTargetInfo().getAddress().getHost().toUpperCase().contains(searchTextUpper); + return targetAddress.getHost().toUpperCase().contains(searchTextUpper); } } From f41e55b92d994effc97c9798204a0a0a5e51a068 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 31 May 2016 16:29:52 +0200 Subject: [PATCH 175/371] Added IDs for save and cancel button Signed-off-by: Melanie Retter --- .../hawkbit/ui/common/CommonDialogWindow.java | 8 ++++---- .../hawkbit/ui/utils/SPUIComponetIdProvider.java | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index a8bad0a08..8dd6dc18a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -92,8 +92,8 @@ public class CommonDialogWindow extends Window { buttonsLayout.setSizeFull(); buttonsLayout.setSpacing(true); - saveButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_SAVE, "save", "", "", - true, FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); + saveButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SAVE_BUTTON, "save", "", "", true, + FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); saveButton.setSizeUndefined(); if (null != saveButtonClickListener) { saveButton.addClickListener(saveButtonClickListener); @@ -104,8 +104,8 @@ public class CommonDialogWindow extends Window { buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); buttonsLayout.setExpandRatio(saveButton, 1.0F); - cancelButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_CANCEL, "cancel", "", - "", true, FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); + cancelButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.CANCEL_BUTTON, "cancel", "", "", true, + FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); cancelButton.setSizeUndefined(); if (null != cancelButtonClickListener) { cancelButton.addClickListener(cancelButtonClickListener); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java index c25926445..ca1a4fc0e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java @@ -501,6 +501,16 @@ public final class SPUIComponetIdProvider { */ public static final String SYSTEM_CONFIGURATION_SAVE = "system.configuration.save"; + /** + * ID for save button in pop-up-windows instance of commonDialogWindow + */ + public static final String SAVE_BUTTON = "common.dialog.window.save"; + + /** + * ID for cancel button in pop-up-windows instance of commonDialogWindow + */ + public static final String CANCEL_BUTTON = "common.dialog.window.cancel"; + /** * Cancel button is. */ @@ -681,12 +691,12 @@ public final class SPUIComponetIdProvider { * custom filter - update button id. */ public static final String CUSTOM_FILTER_DETAIL_LINK = "custom.filter.detail.link"; - + /** * DistributionSet - Metadata button id. */ public static final String DS_METADATA_DETAIL_LINK = "distributionset.metadata.detail.link"; - + /** * Software Module - Metadata button id. */ From 13f9791891388b601ab2802c39bf4a0662762748 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 31 May 2016 20:50:22 +0200 Subject: [PATCH 176/371] Removed JPA dependencies from runtime. Test only now. Signed-off-by: Kai Zimmermann --- examples/hawkbit-custom-theme-example/pom.xml | 5 + .../java/org/eclipse/hawkbit/app/Start.java | 2 + examples/hawkbit-example-app/pom.xml | 5 + .../java/org/eclipse/hawkbit/app/Start.java | 2 + hawkbit-ddi-resource/pom.xml | 8 +- .../resource/DdiArtifactStoreController.java | 16 +- .../ddi/rest/resource/DdiRootController.java | 20 ++- hawkbit-dmf-amqp/pom.xml | 10 +- .../AmqpMessageDispatcherServiceTest.java | 6 +- .../PropertyBasedArtifactUrlHandlerTest.java | 28 ++-- .../resources/application-test.properties | 38 +++++ .../src/test/resources/logback.xml | 35 +++++ hawkbit-http-security/pom.xml | 2 +- hawkbit-mgmt-resource/pom.xml | 17 +- .../rest/resource/MgmtRolloutResource.java | 8 +- .../MgmtSoftwareModuleResourceTest.java | 2 +- .../resources/application-test.properties | 14 -- .../hawkbit-repository-api/pom.xml | 4 + .../repository/ControllerManagement.java | 15 ++ .../hawkbit/repository/EntityFactory.java | 8 + .../TargetFilterQueryManagement.java | 19 +++ .../hawkbit/repository/TargetManagement.java | 13 ++ .../jpa/model/helper/EventBusHolder.java | 3 +- .../hawkbit-repository-jpa/pom.xml | 27 +--- .../eclipse/hawkbit/EnableJpaRepository.java | 1 - .../RepositoryApplicationConfiguration.java | 2 +- .../jpa/JpaControllerManagement.java | 14 +- .../repository/jpa/JpaEntityFactory.java | 7 + .../jpa/JpaTargetFilterQueryManagement.java | 8 + .../AbstractJpaTenantAwareBaseEntity.java | 2 + .../jpa/model/JpaDistributionSetMetadata.java | 2 + .../jpa/AbstractJpaIntegrationTest.java | 3 +- ...AbstractJpaIntegrationTestWithMongoDB.java | 3 +- .../jpa/ArtifactManagementTest.java | 1 + .../hawkbit-repository-test/pom.xml | 18 ++- .../util/AbstractIntegrationTest.java | 4 +- .../repository/util}/HashGeneratorUtils.java | 22 +-- .../util}/JpaTestRepositoryManagement.java | 61 +------- .../repository/util}/TestConfiguration.java | 4 +- hawkbit-rest-core/pom.xml | 13 +- .../util/RestResourceConversionHelper.java | 37 ++--- .../rest/AbstractRestIntegrationTest.java | 7 +- ...bstractRestIntegrationTestWithMongoDB.java | 7 +- hawkbit-security-integration/pom.xml | 8 +- hawkbit-ui/pom.xml | 8 +- .../artifacts/details/ArtifactBeanQuery.java | 12 +- .../smtable/ProxyBaseSoftwareModuleItem.java | 41 ++++- .../ui/common/DistributionSetIdName.java | 7 +- .../ui/components/ProxyDistribution.java | 42 ++++- .../ui/components/ProxyTargetFilter.java | 50 +++++- .../DistributionAddUpdateWindowLayout.java | 7 +- .../ui/rollout/rollout/ProxyRollout.java | 96 +++++++++++- .../ui/rollout/rollout/RolloutBeanQuery.java | 2 - .../rolloutgroup/ProxyRolloutGroup.java | 146 +++++++++++++++++- 54 files changed, 699 insertions(+), 243 deletions(-) create mode 100644 hawkbit-dmf-amqp/src/test/resources/application-test.properties create mode 100644 hawkbit-dmf-amqp/src/test/resources/logback.xml rename hawkbit-repository/{hawkbit-repository-jpa => hawkbit-repository-core}/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java (90%) rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/HashGeneratorUtils.java (74%) rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/JpaTestRepositoryManagement.java (50%) rename hawkbit-repository/{hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa => hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util}/TestConfiguration.java (95%) diff --git a/examples/hawkbit-custom-theme-example/pom.xml b/examples/hawkbit-custom-theme-example/pom.xml index 7caa99ba2..875db18e3 100644 --- a/examples/hawkbit-custom-theme-example/pom.xml +++ b/examples/hawkbit-custom-theme-example/pom.xml @@ -79,6 +79,11 @@ hawkbit-http-security ${project.version} + + org.eclipse.hawkbit + hawkbit-repository-jpa + ${project.version} + diff --git a/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java index fdad8a999..7f80eb05b 100644 --- a/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -8,6 +8,7 @@ package org.eclipse.hawkbit.app; * http://www.eclipse.org/legal/epl-v10.html */ +import org.eclipse.hawkbit.EnableJpaRepository; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -21,6 +22,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableHawkbitManagedSecurityConfiguration // Exception squid:S1118 - Spring boot standard behavior @SuppressWarnings({ "squid:S1118" }) +@EnableJpaRepository public class Start { /** * Main method to start the spring-boot application. diff --git a/examples/hawkbit-example-app/pom.xml b/examples/hawkbit-example-app/pom.xml index 957ba8d6a..f501d5529 100644 --- a/examples/hawkbit-example-app/pom.xml +++ b/examples/hawkbit-example-app/pom.xml @@ -92,6 +92,11 @@ hawkbit-http-security ${project.version} + + org.eclipse.hawkbit + hawkbit-repository-jpa + ${project.version} + diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java index d22d6f4a1..95fb39147 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.app; +import org.eclipse.hawkbit.EnableJpaRepository; import org.eclipse.hawkbit.autoconfigure.security.EnableHawkbitManagedSecurityConfiguration; import org.eclipse.hawkbit.ddi.EnableDdiApi; import org.eclipse.hawkbit.mgmt.EnableMgmtApi; @@ -23,6 +24,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableHawkbitManagedSecurityConfiguration @EnableMgmtApi @EnableDdiApi +@EnableJpaRepository // Exception squid:S1118 - Spring boot standard behavior @SuppressWarnings({ "squid:S1118" }) public class Start { diff --git a/hawkbit-ddi-resource/pom.xml b/hawkbit-ddi-resource/pom.xml index 35aff47f5..cb85f8c8c 100644 --- a/hawkbit-ddi-resource/pom.xml +++ b/hawkbit-ddi-resource/pom.xml @@ -38,7 +38,7 @@ org.eclipse.hawkbit - hawkbit-repository-jpa + hawkbit-repository-api ${project.version} @@ -54,6 +54,12 @@ ${project.version} test + + org.eclipse.hawkbit + hawkbit-repository-jpa + ${project.version} + test + org.eclipse.hawkbit hawkbit-rest-core diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 5bed44295..85a326f9a 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -17,10 +17,9 @@ import javax.servlet.http.HttpServletRequest; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.ddi.dl.rest.api.DdiDlArtifactStoreControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.EntityFactory; -import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -60,9 +59,6 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR @Autowired private ControllerManagement controllerManagement; - @Autowired - private CacheWriteNotify cacheWriteNotify; - @Autowired private HawkbitSecurityProperties securityProperties; @@ -101,7 +97,8 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR requestResponseContextHolder.getHttpServletRequest(), targetid, artifact); result = RestResourceConversionHelper.writeFileResponse(artifact, requestResponseContextHolder.getHttpServletResponse(), - requestResponseContextHolder.getHttpServletRequest(), file, cacheWriteNotify, action.getId()); + requestResponseContextHolder.getHttpServletRequest(), file, controllerManagement, + action.getId()); } else { result = RestResourceConversionHelper.writeFileResponse(artifact, requestResponseContextHolder.getHttpServletResponse(), @@ -149,10 +146,11 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR actionStatus.setStatus(Status.DOWNLOAD); if (range != null) { - actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " - + request.getRequestURI()); + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + + " of: " + request.getRequestURI()); } else { - actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); + actionStatus.addMessage( + RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(actionStatus); return 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 0c6fa4386..20d1b2e29 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 @@ -29,12 +29,11 @@ import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase; import org.eclipse.hawkbit.ddi.json.model.DdiResult.FinalResult; import org.eclipse.hawkbit.ddi.rest.api.DdiRootControllerRestApi; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.EntityFactory; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -83,9 +82,6 @@ public class DdiRootController implements DdiRootControllerRestApi { @Autowired private ArtifactManagement artifactManagement; - @Autowired - private CacheWriteNotify cacheWriteNotify; - @Autowired private HawkbitSecurityProperties securityProperties; @@ -167,7 +163,8 @@ public class DdiRootController implements DdiRootControllerRestApi { module); result = RestResourceConversionHelper.writeFileResponse(artifact, requestResponseContextHolder.getHttpServletResponse(), - requestResponseContextHolder.getHttpServletRequest(), file, cacheWriteNotify, action.getId()); + requestResponseContextHolder.getHttpServletRequest(), file, controllerManagement, + action.getId()); } } return result; @@ -185,10 +182,11 @@ public class DdiRootController implements DdiRootControllerRestApi { statusMessage.setStatus(Status.DOWNLOAD); if (range != null) { - statusMessage.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + " of: " - + request.getRequestURI()); + statusMessage.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + + " of: " + request.getRequestURI()); } else { - statusMessage.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); + statusMessage.addMessage( + RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } controllerManagement.addInformationalActionStatus(statusMessage); return action; @@ -339,8 +337,8 @@ public class DdiRootController implements DdiRootControllerRestApi { LOG.debug("Controller reported intermediate status (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.RUNNING); - actionStatus - .addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); + actionStatus.addMessage( + RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); } private static void handleClosedUpdateStatus(final DdiActionFeedback feedback, final String targetid, diff --git a/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf-amqp/pom.xml index bcebc9628..c2ed7c213 100644 --- a/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf-amqp/pom.xml @@ -23,10 +23,10 @@ org.eclipse.hawkbit - hawkbit-repository-jpa + hawkbit-repository-api ${project.version} - + org.eclipse.hawkbit hawkbit-core ${project.version} @@ -41,6 +41,10 @@ hawkbit-dmf-api ${project.version} + + org.springframework.boot + spring-boot-autoconfigure + org.springframework.amqp spring-rabbit @@ -98,7 +102,7 @@ org.eclipse.hawkbit hawkbit-repository-jpa ${project.version} - tests + test ru.yandex.qatools.allure diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java index 480948683..5faaa74f0 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java @@ -33,11 +33,11 @@ import org.eclipse.hawkbit.dmf.amqp.api.MessageType; import org.eclipse.hawkbit.dmf.json.model.DownloadAndUpdateRequest; import org.eclipse.hawkbit.eventbus.event.CancelTargetAssignmentEvent; import org.eclipse.hawkbit.repository.eventbus.event.TargetAssignDistributionSetEvent; -import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTestWithMongoDB; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.util.IpUtil; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -47,6 +47,7 @@ import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.converter.AbstractJavaTypeMapper; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.ActiveProfiles; import ru.yandex.qatools.allure.annotations.Description; @@ -56,7 +57,8 @@ import ru.yandex.qatools.allure.annotations.Stories; @ActiveProfiles({ "test" }) @Features("Component Tests - Device Management Federation API") @Stories("AmqpMessage Dispatcher Service Test") -public class AmqpMessageDispatcherServiceTest extends AbstractJpaIntegrationTestWithMongoDB { +@SpringApplicationConfiguration(classes = { org.eclipse.hawkbit.RepositoryApplicationConfiguration.class }) +public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWithMongoDB { private static final String TENANT = "default"; diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index 8f855da68..c67d6cf47 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -11,15 +11,12 @@ package org.eclipse.hawkbit.util; import static org.junit.Assert.assertEquals; import org.eclipse.hawkbit.AmqpTestConfiguration; -import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.api.ArtifactUrlHandler; import org.eclipse.hawkbit.api.UrlProtocol; -import org.eclipse.hawkbit.repository.jpa.TestConfiguration; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; -import org.eclipse.hawkbit.tenancy.TenantAware; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -34,18 +31,18 @@ import ru.yandex.qatools.allure.annotations.Stories; */ @Features("Component Tests - Artifact URL Handler") @Stories("Test to generate the artifact download URL") -@SpringApplicationConfiguration(classes = { RepositoryApplicationConfiguration.class, TestConfiguration.class, - AmqpTestConfiguration.class }) +@SpringApplicationConfiguration(classes = { AmqpTestConfiguration.class, + org.eclipse.hawkbit.RepositoryApplicationConfiguration.class }) public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTestWithMongoDB { private static final String HTTPS_LOCALHOST = "https://localhost:8080/"; private static final String HTTP_LOCALHOST = "http://localhost:8080/"; + @Autowired private ArtifactUrlHandler urlHandlerProperties; - @Autowired - private TenantAware tenantAware; + private LocalArtifact localArtifact; - private final String controllerId = "Test"; + private static final String CONTROLLER_ID = "Test"; private String fileName; private Long softwareModuleId; private String sha1Hash; @@ -65,21 +62,22 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest @Description("Tests the generation of http download url.") public void testHttpUrl() { - final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, + final String url = urlHandlerProperties.getUrl(CONTROLLER_ID, softwareModuleId, fileName, sha1Hash, UrlProtocol.HTTP); assertEquals("http is build incorrect", - HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + "/softwaremodules/" - + localArtifact.getSoftwareModule().getId() + "/artifacts/" + localArtifact.getFilename(), + HTTP_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/" + CONTROLLER_ID + + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" + + localArtifact.getFilename(), url); } @Test @Description("Tests the generation of https download url.") public void testHttpsUrl() { - final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, + final String url = urlHandlerProperties.getUrl(CONTROLLER_ID, softwareModuleId, fileName, sha1Hash, UrlProtocol.HTTPS); assertEquals("https is build incorrect", - HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + HTTPS_LOCALHOST + tenantAware.getCurrentTenant() + "/controller/v1/" + CONTROLLER_ID + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" + localArtifact.getFilename(), url); @@ -88,10 +86,10 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest @Test @Description("Tests the generation of coap download url.") public void testCoapUrl() { - final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, + final String url = urlHandlerProperties.getUrl(CONTROLLER_ID, softwareModuleId, fileName, sha1Hash, UrlProtocol.COAP); assertEquals("coap is build incorrect", "coap://127.0.0.1:5683/fw/" + tenantAware.getCurrentTenant() + "/" - + controllerId + "/sha1/" + localArtifact.getSha1Hash(), url); + + CONTROLLER_ID + "/sha1/" + localArtifact.getSha1Hash(), url); } } diff --git a/hawkbit-dmf-amqp/src/test/resources/application-test.properties b/hawkbit-dmf-amqp/src/test/resources/application-test.properties new file mode 100644 index 000000000..79b1fe78f --- /dev/null +++ b/hawkbit-dmf-amqp/src/test/resources/application-test.properties @@ -0,0 +1,38 @@ +# +# Copyright (c) 2015 Bosch Software Innovations GmbH and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# + + + +# supported: H2, MYSQL +hawkbit.server.database=H2 + +spring.jpa.database=${hawkbit.server.database} + + +flyway.sqlMigrationSuffix=${spring.jpa.database}.sql + +# effective DB setting +spring.datasource.url=${${hawkbit.server.database}.spring.datasource.url} +spring.datasource.driverClassName=${${hawkbit.server.database}.spring.datasource.driverClassName} +spring.datasource.username=${${hawkbit.server.database}.spring.datasource.username} +spring.datasource.password=${${hawkbit.server.database}.spring.datasource.password} + +# H2 +##;AUTOCOMMIT=ON +H2.spring.datasource.url=jdbc:h2:mem:sp-db;DB_CLOSE_ON_EXIT=FALSE +#H2.spring.datasource.url=jdbc:h2:./db/sp-db;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;MVCC=TRUE +H2.spring.datasource.driverClassName=org.h2.Driver +H2.spring.datasource.username=sa +H2.spring.datasource.password=sa + +# MYSQL +MYSQL.spring.datasource.url=jdbc:mysql://localhost:3306/sp_test +MYSQL.spring.datasource.driverClassName=org.mariadb.jdbc.Driver +MYSQL.spring.datasource.username=root +MYSQL.spring.datasource.password= diff --git a/hawkbit-dmf-amqp/src/test/resources/logback.xml b/hawkbit-dmf-amqp/src/test/resources/logback.xml new file mode 100644 index 000000000..30060d1c6 --- /dev/null +++ b/hawkbit-dmf-amqp/src/test/resources/logback.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hawkbit-http-security/pom.xml b/hawkbit-http-security/pom.xml index 03a9b6678..bb77df454 100644 --- a/hawkbit-http-security/pom.xml +++ b/hawkbit-http-security/pom.xml @@ -22,7 +22,7 @@ org.eclipse.hawkbit - hawkbit-repository-jpa + hawkbit-repository-api ${project.version} diff --git a/hawkbit-mgmt-resource/pom.xml b/hawkbit-mgmt-resource/pom.xml index fb0167793..007c6789b 100644 --- a/hawkbit-mgmt-resource/pom.xml +++ b/hawkbit-mgmt-resource/pom.xml @@ -23,9 +23,9 @@ org.eclipse.hawkbit - hawkbit-repository-jpa + hawkbit-repository-api ${project.version} - + org.eclipse.hawkbit hawkbit-mgmt-api @@ -53,6 +53,12 @@ ${project.version} test + + org.eclipse.hawkbit + hawkbit-repository-jpa + ${project.version} + test + org.eclipse.hawkbit hawkbit-rest-core @@ -96,13 +102,6 @@ spring-security-config test - - org.eclipse.hawkbit - hawkbit-repository-jpa - ${project.version} - tests - test - org.eclipse.hawkbit hawkbit-http-security diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java index 623241981..7144316b8 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java @@ -22,9 +22,8 @@ import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; -import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; @@ -64,6 +63,9 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { @Autowired private DistributionSetManagement distributionSetManagement; + @Autowired + private TargetFilterQueryManagement targetFilterQueryManagement; + @Autowired private EntityFactory entityFactory; @@ -103,7 +105,7 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { // first check the given RSQL query if it's well formed, otherwise and // exception is thrown - RSQLUtility.parse(rolloutRequestBody.getTargetFilterQuery(), TargetFields.class); + targetFilterQueryManagement.verifyTargetFilterQuerySyntax(rolloutRequestBody.getTargetFilterQuery()); final DistributionSet distributionSet = findDistributionSetOrThrowException(rolloutRequestBody); diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java index a0bf416c9..e7397dd49 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java @@ -36,12 +36,12 @@ import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; -import org.eclipse.hawkbit.repository.jpa.HashGeneratorUtils; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.util.HashGeneratorUtils; import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; diff --git a/hawkbit-mgmt-resource/src/test/resources/application-test.properties b/hawkbit-mgmt-resource/src/test/resources/application-test.properties index 92506caa4..cd98bb23f 100644 --- a/hawkbit-mgmt-resource/src/test/resources/application-test.properties +++ b/hawkbit-mgmt-resource/src/test/resources/application-test.properties @@ -7,22 +7,8 @@ # http://www.eclipse.org/legal/epl-v10.html # -# used if IM profile is disabled -security.ignored=true - -# IM required for integration tests -spring.profiles.active=im,suiteembedded,artifactrepository,redis - -server.port=12222 - -spring.data.mongodb.uri=mongodb://localhost/spArtifactRepository${random.value} -spring.data.mongodb.port=28017 - - # supported: H2, MYSQL hawkbit.server.database=H2 -hawkbit.server.database.env=TEST -spring.main.show_banner=false hawkbit.server.ddi.security.authentication.header=true diff --git a/hawkbit-repository/hawkbit-repository-api/pom.xml b/hawkbit-repository/hawkbit-repository-api/pom.xml index 076ae8cd8..050a9a070 100644 --- a/hawkbit-repository/hawkbit-repository-api/pom.xml +++ b/hawkbit-repository/hawkbit-repository-api/pom.xml @@ -31,6 +31,10 @@ org.hibernate hibernate-validator + + + cz.jirutka.rsql + rsql-parser org.springframework.hateoas 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 90bb7068b..f8615bcc3 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 @@ -14,6 +14,7 @@ import java.util.Map; import javax.validation.constraints.NotNull; +import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -32,6 +33,8 @@ import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.security.access.prepost.PreAuthorize; +import com.google.common.eventbus.EventBus; + /** * Service layer for all operations of the DDI API (with access permissions only * for the controller). @@ -54,6 +57,18 @@ public interface ControllerManagement { @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) Action addCancelActionStatus(@NotNull ActionStatus actionStatus); + /** + * Sends the download progress in percentage and notifies the + * {@link EventBus} with a {@link DownloadProgressEvent}. + * + * @param statusId + * the ID of the {@link ActionStatus} + * @param progressPercent + * the progress in percentage which must be between 0-100 + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + void downloadProgressPercent(long statusId, int progressPercent); + /** * Simple addition of a new {@link ActionStatus} entry to the {@link Action} * . No state changes. diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java index 85a2f5e76..7542cd2ce 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -330,4 +331,11 @@ public interface EntityFactory { */ TargetTag generateTargetTag(String name, String description, String colour); + /** + * Generates an empty {@link LocalArtifact} without persisting it. + * + * @return {@link LocalArtifact} object + */ + LocalArtifact generateLocalArtifact(); + } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java index 48018b9ec..d748ed470 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java @@ -11,6 +11,8 @@ package org.eclipse.hawkbit.repository; import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.exception.RSQLParameterSyntaxException; +import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -40,6 +42,23 @@ public interface TargetFilterQueryManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) void deleteTargetFilterQuery(@NotNull Long targetFilterQueryId); + /** + * Verifies provided filter syntax. + * + * @param query + * to verify + * + * @return true if syntax is valid + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + boolean verifyTargetFilterQuerySyntax(String query); + /** * * Retrieves all target filter query{@link TargetFilterQuery}. diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index ee10883ec..9054127ef 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -439,7 +439,14 @@ public interface TargetManagement { * in string notation * @param pageable * pagination parameter + * * @return the found {@link Target}s, never {@code null} + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Page findTargetsAll(@NotNull String targetFilterQuery, @NotNull Pageable pageable); @@ -455,6 +462,12 @@ public interface TargetManagement { * pagination parameter * * @return the found {@link Target}s, never {@code null} + * + * @throws RSQLParameterUnsupportedFieldException + * if a field in the RSQL string is used but not provided by the + * given {@code fieldNameProvider} + * @throws RSQLParameterSyntaxException + * if the RSQL syntax is wrong */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Slice findTargetsAll(@NotNull TargetFilterQuery targetFilterQuery, @NotNull Pageable pageable); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java b/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java similarity index 90% rename from hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java rename to hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java index 5196283d1..3829d639b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java +++ b/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/jpa/model/helper/EventBusHolder.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.repository.jpa.model.helper; -import org.eclipse.hawkbit.repository.jpa.model.CacheFieldEntityListener; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.eventbus.EventBus; @@ -16,7 +15,7 @@ import com.google.common.eventbus.EventBus; /** * A singleton bean which holds the {@link EventBus} to have to the cache * manager in beans not instantiated by spring e.g. JPA entities or - * {@link CacheFieldEntityListener} which cannot be autowired. + * CacheFieldEntityListener which cannot be autowired. * */ public final class EventBusHolder { diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml index d234f5f57..bd56e9ca5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/pom.xml +++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml @@ -120,27 +120,12 @@ javax.el javax.el-api test - - - org.springframework - spring-context-support - test - + ru.yandex.qatools.allure allure-junit-adaptor test - - org.springframework.security - spring-security-aspects - test - - - org.springframework - spring-test - test - org.easytesting fest-assert-core @@ -151,16 +136,6 @@ fest-assert test - - org.springframework.security - spring-security-config - test - - - org.springframework.security - spring-security-web - test - diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/EnableJpaRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/EnableJpaRepository.java index f15ec8c82..55fd4a111 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/EnableJpaRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/EnableJpaRepository.java @@ -26,7 +26,6 @@ import org.springframework.stereotype.Controller; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Configuration -@ComponentScan @Import(RepositoryApplicationConfiguration.class) public @interface EnableJpaRepository { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index 5f5a46c0b..50207037a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -47,8 +47,8 @@ import org.springframework.validation.beanvalidation.MethodValidationPostProcess @EnableTransactionManagement @EnableJpaAuditing @EnableAspectJAutoProxy -@ComponentScan @Configuration +@ComponentScan @EnableAutoConfiguration public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { /** 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 9fcd646b5..80de385c8 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 @@ -19,13 +19,14 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.RepositoryConstants; 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.jpa.cache.CacheWriteNotify; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus_; @@ -98,6 +99,9 @@ public class JpaControllerManagement implements ControllerManagement { @Autowired private TenantConfigurationManagement tenantConfigurationManagement; + @Autowired + private CacheWriteNotify cacheWriteNotify; + @Override public String getPollingTime() { final TenantConfigurationKey configurationKey = TenantConfigurationKey.POLLING_TIME_INTERVAL; @@ -230,7 +234,8 @@ public class JpaControllerManagement implements ControllerManagement { private void handleFinishedCancelation(final ActionStatus actionStatus, final JpaAction action) { // in case of successful cancellation we also report the success at // the canceled action itself. - actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); + actionStatus.addMessage( + RepositoryConstants.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); DeploymentHelper.successCancellation(action, actionRepository, targetManagement, targetInfoRepository, entityManager); } @@ -436,4 +441,9 @@ public class JpaControllerManagement implements ControllerManagement { return updateTargetStatus(target, null, System.currentTimeMillis(), address); } + @Override + public void downloadProgressPercent(final long statusId, final int progressPercent) { + cacheWriteNotify.downloadProgressPercent(statusId, progressPercent); + } + } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java index 88c34ad11..afa3b4dc6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java @@ -17,6 +17,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaLocalArtifact; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; @@ -32,6 +33,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -198,4 +200,9 @@ public class JpaEntityFactory implements EntityFactory { return new JpaActionStatus(action, status, occurredAt); } + @Override + public LocalArtifact generateLocalArtifact() { + return new JpaLocalArtifact(); + } + } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java index 296483bf8..f418f5f4b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java @@ -11,9 +11,11 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.ArrayList; import java.util.List; +import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; +import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility; import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder; import org.eclipse.hawkbit.repository.jpa.specifications.TargetFilterQuerySpecification; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; @@ -109,4 +111,10 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme return targetFilterQueryRepository.save((JpaTargetFilterQuery) targetFilterQuery); } + @Override + public boolean verifyTargetFilterQuerySyntax(final String query) { + RSQLUtility.parse(query, TargetFields.class); + return true; + } + } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java index 880a51167..ccd4a30b1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java @@ -97,6 +97,8 @@ public abstract class AbstractJpaTenantAwareBaseEntity extends AbstractJpaBaseEn * @see org.eclipse.hawkbit.repository.model.BaseEntity#equals(java.lang.Object) */ @Override + // exception squid:S2259 - obj is checked for null in super + @SuppressWarnings("squid:S2259") public boolean equals(final Object obj) { if (!super.equals(obj)) { return false; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java index 5d176b4a9..3f4323bbe 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetMetadata.java @@ -67,6 +67,8 @@ public class JpaDistributionSetMetadata extends AbstractJpaMetaData implements D } @Override + // exception squid:S2259 - obj is checked for null in super + @SuppressWarnings("squid:S2259") public boolean equals(final Object obj) { if (!super.equals(obj)) { return false; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java index ecb7f2d37..b4b451ecd 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java @@ -17,8 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.data.mongodb.gridfs.GridFsOperations; -@SpringApplicationConfiguration(classes = { org.eclipse.hawkbit.RepositoryApplicationConfiguration.class, - TestConfiguration.class }) +@SpringApplicationConfiguration(classes = { org.eclipse.hawkbit.RepositoryApplicationConfiguration.class }) public abstract class AbstractJpaIntegrationTest extends AbstractIntegrationTest { @PersistenceContext diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java index 6650d1e3c..d1c433cc4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java @@ -16,8 +16,7 @@ import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; -@SpringApplicationConfiguration(classes = { org.eclipse.hawkbit.RepositoryApplicationConfiguration.class, - TestConfiguration.class }) +@SpringApplicationConfiguration(classes = { org.eclipse.hawkbit.RepositoryApplicationConfiguration.class }) public abstract class AbstractJpaIntegrationTestWithMongoDB extends AbstractIntegrationTestWithMongoDB { @PersistenceContext diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java index ea6e8e01b..faf7649d0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java @@ -32,6 +32,7 @@ import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.util.HashGeneratorUtils; import org.eclipse.hawkbit.repository.util.WithUser; import org.junit.Test; import org.slf4j.LoggerFactory; diff --git a/hawkbit-repository/hawkbit-repository-test/pom.xml b/hawkbit-repository/hawkbit-repository-test/pom.xml index 6b421c8ab..4a05735ac 100644 --- a/hawkbit-repository/hawkbit-repository-test/pom.xml +++ b/hawkbit-repository/hawkbit-repository-test/pom.xml @@ -33,7 +33,11 @@ org.eclipse.hawkbit hawkbit-artifact-repository-mongo ${project.version} - + + + org.springframework + spring-context-support + de.flapdoodle.embed de.flapdoodle.embed.mongo @@ -55,5 +59,17 @@ org.springframework.security spring-security-config + + org.springframework.security + spring-security-aspects + + + org.springframework + spring-test + + + org.springframework.security + spring-security-web + \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java index b8690bc74..c2bd61676 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java @@ -10,11 +10,11 @@ package org.eclipse.hawkbit.repository.util; import org.eclipse.hawkbit.ExcludePathAwareShallowETagFilter; import org.eclipse.hawkbit.repository.ArtifactManagement; -import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.EntityFactory; +import org.eclipse.hawkbit.repository.RepositoryConstants; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -39,6 +39,7 @@ import org.junit.runner.RunWith; import org.junit.runners.model.FrameworkMethod; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.context.EnvironmentAware; import org.springframework.core.env.Environment; import org.springframework.data.auditing.AuditingHandler; @@ -58,6 +59,7 @@ import org.springframework.web.context.WebApplicationContext; @WebAppConfiguration @ActiveProfiles({ "test" }) @WithUser(principal = "bumlux", allSpPermissions = true, authorities = "ROLE_CONTROLLER") +@SpringApplicationConfiguration(classes = { TestConfiguration.class }) // destroy the context after each test class because otherwise we get problem // when context is // refreshed we e.g. get two instances of CacheManager which leads to very diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/HashGeneratorUtils.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/HashGeneratorUtils.java similarity index 74% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/HashGeneratorUtils.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/HashGeneratorUtils.java index a94807958..e222007f1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/HashGeneratorUtils.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/HashGeneratorUtils.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -14,13 +14,10 @@ import java.security.NoSuchAlgorithmException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.io.BaseEncoding; + /** - * Hash utility calls copied from - * http://www.codejava.net/coding/how-to-calculate-md5-and-sha-hash-values-in- - * java. - * - * - * + * Hash digest utility. */ public final class HashGeneratorUtils { @@ -68,18 +65,11 @@ public final class HashGeneratorUtils { try { final MessageDigest digest = MessageDigest.getInstance(algorithm); final byte[] hashedBytes = digest.digest(message); - return convertByteArrayToHexString(hashedBytes); + return BaseEncoding.base16().lowerCase().encode(hashedBytes); } catch (final NoSuchAlgorithmException e) { - LOG.error("Algorithm could not be find", e); + LOG.error("Algorithm could not be found", e); } return null; } - private static String convertByteArrayToHexString(final byte[] arrayBytes) { - final StringBuilder builder = new StringBuilder(); - for (int i = 0; i < arrayBytes.length; i++) { - builder.append(Integer.toString((arrayBytes[i] & 0xff) + 0x100, 16).substring(1)); - } - return builder.toString(); - } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/JpaTestRepositoryManagement.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/JpaTestRepositoryManagement.java similarity index 50% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/JpaTestRepositoryManagement.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/JpaTestRepositoryManagement.java index 5c4b0efcc..7ec5bb407 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/JpaTestRepositoryManagement.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/JpaTestRepositoryManagement.java @@ -6,77 +6,18 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository.util; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - import org.eclipse.hawkbit.cache.TenantAwareCacheManager; import org.eclipse.hawkbit.repository.SystemManagement; -import org.eclipse.hawkbit.repository.util.TestRepositoryManagement; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.gridfs.GridFsOperations; import org.springframework.transaction.annotation.Transactional; public class JpaTestRepositoryManagement implements TestRepositoryManagement { - @PersistenceContext - private EntityManager entityManager; - - @Autowired - private TargetRepository targetRepository; - - @Autowired - private ActionRepository actionRepository; - - @Autowired - private DistributionSetRepository distributionSetRepository; - - @Autowired - private SoftwareModuleRepository softwareModuleRepository; - - @Autowired - private TenantMetaDataRepository tenantMetaDataRepository; - - @Autowired - private DistributionSetTypeRepository distributionSetTypeRepository; - - @Autowired - private SoftwareModuleTypeRepository softwareModuleTypeRepository; - - @Autowired - private TargetTagRepository targetTagRepository; - - @Autowired - private DistributionSetTagRepository distributionSetTagRepository; - - @Autowired - private SoftwareModuleMetadataRepository softwareModuleMetadataRepository; - - @Autowired - private ActionStatusRepository actionStatusRepository; - - @Autowired - private ExternalArtifactRepository externalArtifactRepository; - - @Autowired - private LocalArtifactRepository artifactRepository; - - @Autowired - private TargetInfoRepository targetInfoRepository; - - @Autowired - private GridFsOperations operations; - - @Autowired - private RolloutGroupRepository rolloutGroupRepository; - - @Autowired - private RolloutRepository rolloutRepository; - @Autowired private TenantAwareCacheManager cacheManager; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestConfiguration.java similarity index 95% rename from hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestConfiguration.java index 8ea794f6a..acbaae2b4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TestConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestConfiguration.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.jpa; +package org.eclipse.hawkbit.repository.util; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -16,8 +16,6 @@ import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.TenancyCacheManager; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; import org.eclipse.hawkbit.repository.jpa.model.helper.EventBusHolder; -import org.eclipse.hawkbit.repository.util.TestRepositoryManagement; -import org.eclipse.hawkbit.repository.util.TestdataFactory; import org.eclipse.hawkbit.security.DdiSecurityProperties; import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.SpringSecurityAuditorAware; diff --git a/hawkbit-rest-core/pom.xml b/hawkbit-rest-core/pom.xml index 1a74f4b3e..bb511839c 100644 --- a/hawkbit-rest-core/pom.xml +++ b/hawkbit-rest-core/pom.xml @@ -21,6 +21,11 @@ + + org.eclipse.hawkbit + hawkbit-repository-api + ${project.version} + org.eclipse.hawkbit hawkbit-repository-jpa @@ -62,13 +67,7 @@ org.easytesting fest-assert test - - - org.eclipse.hawkbit - hawkbit-repository-jpa - ${project.version} - tests - + ru.yandex.qatools.allure allure-junit-adaptor diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java index baa18edb2..875152e0e 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java @@ -22,7 +22,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; -import org.eclipse.hawkbit.repository.jpa.cache.CacheWriteNotify; +import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -84,7 +84,7 @@ public final class RestResourceConversionHelper { * from the client * @param file * to be write to the client response - * @param cacheWriteNotify + * @param controllerManagement * to write progress updates to * @param statusId * of the UpdateActionStatus @@ -95,9 +95,9 @@ public final class RestResourceConversionHelper { */ public static ResponseEntity writeFileResponse(final LocalArtifact artifact, final HttpServletResponse response, final HttpServletRequest request, final DbArtifact file, - final CacheWriteNotify cacheWriteNotify, final Long statusId) { + final ControllerManagement controllerManagement, final Long statusId) { - ResponseEntity result = null; + ResponseEntity result; final String etag = artifact.getSha1Hash(); final Long lastModified = artifact.getLastModifiedAt() != null ? artifact.getLastModifiedAt() @@ -143,19 +143,19 @@ public final class RestResourceConversionHelper { // full request - no range if (ranges.isEmpty() || ranges.get(0).equals(full)) { LOG.debug("filename ({}) results into a full request: ", artifact.getFilename()); - fullfileRequest(artifact, response, file, cacheWriteNotify, statusId, full); + fullfileRequest(artifact, response, file, controllerManagement, statusId, full); result = new ResponseEntity<>(HttpStatus.OK); } // standard range request else if (ranges.size() == 1) { LOG.debug("filename ({}) results into a standard range request: ", artifact.getFilename()); - standardRangeRequest(artifact, response, file, cacheWriteNotify, statusId, ranges); + standardRangeRequest(artifact, response, file, controllerManagement, statusId, ranges); result = new ResponseEntity<>(HttpStatus.PARTIAL_CONTENT); } // multipart range request else { LOG.debug("filename ({}) results into a multipart range request: ", artifact.getFilename()); - multipartRangeRequest(artifact, response, file, cacheWriteNotify, statusId, ranges); + multipartRangeRequest(artifact, response, file, controllerManagement, statusId, ranges); result = new ResponseEntity<>(HttpStatus.PARTIAL_CONTENT); } @@ -164,14 +164,15 @@ public final class RestResourceConversionHelper { } private static void fullfileRequest(final LocalArtifact artifact, final HttpServletResponse response, - final DbArtifact file, final CacheWriteNotify cacheWriteNotify, final Long statusId, final ByteRange full) { + final DbArtifact file, final ControllerManagement controllerManagement, final Long statusId, + final ByteRange full) { final ByteRange r = full; response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes " + r.getStart() + "-" + r.getEnd() + "/" + r.getTotal()); response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(r.getLength())); try { - copyStreams(file.getFileInputStream(), response.getOutputStream(), cacheWriteNotify, statusId, r.getStart(), - r.getLength()); + copyStreams(file.getFileInputStream(), response.getOutputStream(), controllerManagement, statusId, + r.getStart(), r.getLength()); } catch (final IOException e) { LOG.error("fullfileRequest of file ({}) failed!", artifact.getFilename(), e); throw new FileSteamingFailedException(artifact.getFilename()); @@ -231,7 +232,7 @@ public final class RestResourceConversionHelper { } private static void multipartRangeRequest(final LocalArtifact artifact, final HttpServletResponse response, - final DbArtifact file, final CacheWriteNotify cacheWriteNotify, final Long statusId, + final DbArtifact file, final ControllerManagement controllerManagement, final Long statusId, final List ranges) { response.setContentType("multipart/byteranges; boundary=" + ByteRange.MULTIPART_BOUNDARY); response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); @@ -245,7 +246,7 @@ public final class RestResourceConversionHelper { .println("Content-Range: bytes " + r.getStart() + "-" + r.getEnd() + "/" + r.getTotal()); // Copy single part range of multi part range. - copyStreams(file.getFileInputStream(), response.getOutputStream(), cacheWriteNotify, statusId, + copyStreams(file.getFileInputStream(), response.getOutputStream(), controllerManagement, statusId, r.getStart(), r.getLength()); } @@ -259,7 +260,7 @@ public final class RestResourceConversionHelper { } private static void standardRangeRequest(final LocalArtifact artifact, final HttpServletResponse response, - final DbArtifact file, final CacheWriteNotify cacheWriteNotify, final Long statusId, + final DbArtifact file, final ControllerManagement controllerManagement, final Long statusId, final List ranges) { final ByteRange r = ranges.get(0); response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes " + r.getStart() + "-" + r.getEnd() + "/" + r.getTotal()); @@ -267,8 +268,8 @@ public final class RestResourceConversionHelper { response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); try { - copyStreams(file.getFileInputStream(), response.getOutputStream(), cacheWriteNotify, statusId, r.getStart(), - r.getLength()); + copyStreams(file.getFileInputStream(), response.getOutputStream(), controllerManagement, statusId, + r.getStart(), r.getLength()); } catch (final IOException e) { LOG.error("standardRangeRequest of file ({}) failed!", artifact.getFilename(), e); throw new FileSteamingFailedException(artifact.getFilename()); @@ -276,7 +277,7 @@ public final class RestResourceConversionHelper { } private static long copyStreams(final InputStream from, final OutputStream to, - final CacheWriteNotify cacheWriteNotify, final Long statusId, final long start, final long length) + final ControllerManagement controllerManagement, final Long statusId, final long start, final long length) throws IOException { checkNotNull(from); checkNotNull(to); @@ -309,13 +310,13 @@ public final class RestResourceConversionHelper { toContinue = false; } - if (cacheWriteNotify != null) { + if (controllerManagement != null) { final int newPercent = DoubleMath.roundToInt(total * 100.0 / length, RoundingMode.DOWN); // every 10 percent an event if (newPercent == 100 || newPercent > progressPercent + 10) { progressPercent = newPercent; - cacheWriteNotify.downloadProgressPercent(statusId, progressPercent); + controllerManagement.downloadProgressPercent(statusId, progressPercent); } } } diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java index 1b54eed3e..14ba8556e 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rest; -import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; +import org.eclipse.hawkbit.repository.util.AbstractIntegrationTest; import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.eclipse.hawkbit.rest.util.FilterHttpResponse; import org.springframework.beans.factory.annotation.Autowired; @@ -18,8 +18,9 @@ import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; /** * Abstract Test for Rest tests. */ -@SpringApplicationConfiguration(classes = { RestConfiguration.class }) -public abstract class AbstractRestIntegrationTest extends AbstractJpaIntegrationTest { +@SpringApplicationConfiguration(classes = { RestConfiguration.class, + org.eclipse.hawkbit.RepositoryApplicationConfiguration.class }) +public abstract class AbstractRestIntegrationTest extends AbstractIntegrationTest { @Autowired private FilterHttpResponse filterHttpResponse; diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java index 81e2c3d16..4d952434d 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rest; -import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.eclipse.hawkbit.rest.util.FilterHttpResponse; import org.springframework.beans.factory.annotation.Autowired; @@ -18,8 +18,9 @@ import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; /** * Abstract Test for Rest tests. */ -@SpringApplicationConfiguration(classes = { RestConfiguration.class }) -public abstract class AbstractRestIntegrationTestWithMongoDB extends AbstractJpaIntegrationTestWithMongoDB { +@SpringApplicationConfiguration(classes = { RestConfiguration.class, + org.eclipse.hawkbit.RepositoryApplicationConfiguration.class }) +public abstract class AbstractRestIntegrationTestWithMongoDB extends AbstractIntegrationTestWithMongoDB { @Autowired private FilterHttpResponse filterHttpResponse; diff --git a/hawkbit-security-integration/pom.xml b/hawkbit-security-integration/pom.xml index 194a5e3cb..455e3ece1 100644 --- a/hawkbit-security-integration/pom.xml +++ b/hawkbit-security-integration/pom.xml @@ -23,7 +23,7 @@ org.eclipse.hawkbit - hawkbit-repository-jpa + hawkbit-repository-api ${project.version} @@ -37,6 +37,12 @@ + + org.eclipse.hawkbit + hawkbit-repository-jpa + ${project.version} + test + junit junit diff --git a/hawkbit-ui/pom.xml b/hawkbit-ui/pom.xml index a9cd5aca3..dadcb264a 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -151,7 +151,7 @@ org.eclipse.hawkbit - hawkbit-repository-jpa + hawkbit-repository-api ${project.version} @@ -229,6 +229,12 @@ + + org.eclipse.hawkbit + hawkbit-repository-jpa + ${project.version} + test + org.mockito mockito-core diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java index b9bceda3a..80e8a2f4f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/details/ArtifactBeanQuery.java @@ -12,8 +12,8 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; -import org.eclipse.hawkbit.repository.jpa.model.JpaLocalArtifact; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -38,6 +38,7 @@ public class ArtifactBeanQuery extends AbstractBeanQuery { private static final long serialVersionUID = -333786310371208962L; private Sort sort = new Sort(Direction.DESC, "filename"); private transient ArtifactManagement artifactManagement = null; + private transient EntityFactory entityFactory; private transient Page firstPagetArtifacts = null; private Long baseSwModuleId = null; @@ -73,7 +74,7 @@ public class ArtifactBeanQuery extends AbstractBeanQuery { @Override protected LocalArtifact constructBean() { - return new JpaLocalArtifact(); + return entityFactory.generateLocalArtifact(); } @Override @@ -116,4 +117,11 @@ public class ArtifactBeanQuery extends AbstractBeanQuery { } return artifactManagement; } + + private EntityFactory getEntityFactory() { + if (entityFactory == null) { + entityFactory = SpringContextHelper.getBean(EntityFactory.class); + } + return entityFactory; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java index 14568c307..1559a9bec 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/ProxyBaseSoftwareModuleItem.java @@ -10,8 +10,6 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.security.SecureRandom; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; - /** * * Proxy for software module to display details in Software modules table. @@ -19,7 +17,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; * * */ -public class ProxyBaseSoftwareModuleItem extends JpaSoftwareModule { +public class ProxyBaseSoftwareModuleItem { private static final long serialVersionUID = -1555306616599140635L; @@ -39,6 +37,11 @@ public class ProxyBaseSoftwareModuleItem extends JpaSoftwareModule { private String modifiedByUser; + private String name; + private String version; + private String vendor; + private String description; + /** * Default constructor. */ @@ -47,6 +50,38 @@ public class ProxyBaseSoftwareModuleItem extends JpaSoftwareModule { swId = RANDOM_OBJ.nextLong(); } + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public String getVersion() { + return version; + } + + public void setVersion(final String version) { + this.version = version; + } + + public String getVendor() { + return vendor; + } + + public void setVendor(final String vendor) { + this.vendor = vendor; + } + + public String getDescription() { + return description; + } + + public void setDescription(final String description) { + this.description = description; + } + public String getCreatedByUser() { return createdByUser; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetIdName.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetIdName.java index c499babcd..66101fbd4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetIdName.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/DistributionSetIdName.java @@ -22,13 +22,18 @@ public class DistributionSetIdName implements Serializable { private final Long id; private final String name; private final String version; - + public static DistributionSetIdName generate(final DistributionSet distributionSet) { return new DistributionSetIdName(distributionSet.getId(), distributionSet.getName(), distributionSet.getVersion()); } + public static DistributionSetIdName generate(final Long id, final String name, final String version) { + return new DistributionSetIdName(id, name, version); + + } + /** * @param id * the {@link DistributionSet#getId()} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java index a8e7fe9d1..0420f9e4b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyDistribution.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.components; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.DistributionSetIdName; @@ -17,7 +16,7 @@ import org.eclipse.hawkbit.ui.common.DistributionSetIdName; * * */ -public class ProxyDistribution extends JpaDistributionSet { +public class ProxyDistribution { private static final long serialVersionUID = -8891449133620645310L; @@ -35,6 +34,11 @@ public class ProxyDistribution extends JpaDistributionSet { private String nameVersion; + private Long id; + private String name; + private String version; + private String description; + /** * @return the nameVersion */ @@ -43,7 +47,7 @@ public class ProxyDistribution extends JpaDistributionSet { } public DistributionSetIdName getDistributionSetIdName() { - return DistributionSetIdName.generate(this); + return DistributionSetIdName.generate(id, name, version); } /** @@ -102,4 +106,36 @@ public class ProxyDistribution extends JpaDistributionSet { this.modifiedByUser = modifiedByUser; } + public Long getId() { + return id; + } + + public void setId(final Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public String getVersion() { + return version; + } + + public void setVersion(final String version) { + this.version = version; + } + + public String getDescription() { + return description; + } + + public void setDescription(final String description) { + this.description = description; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java index eb3f22dce..9faf501e0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/ProxyTargetFilter.java @@ -8,14 +8,12 @@ */ package org.eclipse.hawkbit.ui.components; -import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; - /** * * * */ -public class ProxyTargetFilter extends JpaTargetFilterQuery { +public class ProxyTargetFilter { private static final long serialVersionUID = 6622060929679084419L; @@ -23,6 +21,12 @@ public class ProxyTargetFilter extends JpaTargetFilterQuery { private String modifiedDate; + private String name; + private Long id; + private String createdBy; + private String lastModifiedBy; + private String query; + public String getCreatedDate() { return createdDate; } @@ -46,4 +50,44 @@ public class ProxyTargetFilter extends JpaTargetFilterQuery { this.modifiedDate = modifiedDate; } + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(final Long id) { + this.id = id; + } + + public String getLastModifiedBy() { + return lastModifiedBy; + } + + public void setLastModifiedBy(final String lastModifiedBy) { + this.lastModifiedBy = lastModifiedBy; + } + + public String getQuery() { + return query; + } + + public void setQuery(final String query) { + this.query = query; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(final String createdBy) { + this.createdBy = createdBy; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 90b3ad597..2a4e63466 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -19,7 +19,6 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; -import org.eclipse.hawkbit.repository.jpa.TenantMetaDataRepository; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantMetaData; @@ -92,9 +91,6 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { @Autowired private transient SystemManagement systemManagement; - @Autowired - private transient TenantMetaDataRepository tenantMetaDataRepository; - @Autowired private transient EntityFactory entityFactory; @@ -225,8 +221,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { } private DistributionSetType getDefaultDistributionSetType() { - final TenantMetaData tenantMetaData = tenantMetaDataRepository - .findByTenantIgnoreCase(systemManagement.currentTenant()); + final TenantMetaData tenantMetaData = systemManagement.getTenantMetadata(); return tenantMetaData.getDefaultDsType(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java index 4074edb55..88e7204aa 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java @@ -10,8 +10,10 @@ package org.eclipse.hawkbit.ui.rollout.rollout; import java.util.Set; -import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; import com.vaadin.server.FontAwesome; @@ -20,7 +22,7 @@ import com.vaadin.server.FontAwesome; * Proxy rollout with custom properties. * */ -public class ProxyRollout extends JpaRollout { +public class ProxyRollout { private static final long serialVersionUID = 4539849939617681918L; @@ -46,6 +48,17 @@ public class ProxyRollout extends JpaRollout { private Set swModules; + private Long id; + private String name; + private String version; + private String description; + private DistributionSet distributionSet; + private String createdBy; + private String lastModifiedBy; + private long forcedTime; + private RolloutStatus status; + private TotalTargetCountStatus totalTargetCountStatus; + /** * @return the isRequiredMigrationStep */ @@ -214,4 +227,83 @@ public class ProxyRollout extends JpaRollout { return FontAwesome.CIRCLE_O.getHtml(); } + public Long getId() { + return id; + } + + public void setId(final Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public String getVersion() { + return version; + } + + public void setVersion(final String version) { + this.version = version; + } + + public String getDescription() { + return description; + } + + public void setDescription(final String description) { + this.description = description; + } + + public DistributionSet getDistributionSet() { + return distributionSet; + } + + public void setDistributionSet(final DistributionSet distributionSet) { + this.distributionSet = distributionSet; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(final String createdBy) { + this.createdBy = createdBy; + } + + public String getLastModifiedBy() { + return lastModifiedBy; + } + + public void setLastModifiedBy(final String lastModifiedBy) { + this.lastModifiedBy = lastModifiedBy; + } + + public long getForcedTime() { + return forcedTime; + } + + public void setForcedTime(final long forcedTime) { + this.forcedTime = forcedTime; + } + + public RolloutStatus getStatus() { + return status; + } + + public void setStatus(final RolloutStatus status) { + this.status = status; + } + + public TotalTargetCountStatus getTotalTargetCountStatus() { + return totalTargetCountStatus; + } + + public void setTotalTargetCountStatus(final TotalTargetCountStatus totalTargetCountStatus) { + this.totalTargetCountStatus = totalTargetCountStatus; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java index 8a9675564..0bfa349d0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java @@ -138,8 +138,6 @@ public class RolloutBeanQuery extends AbstractBeanQuery { final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); proxyRollout.setTotalTargetsCount(String.valueOf(rollout.getTotalTargets())); - - proxyRollout.setDescription(distributionSet.getDescription()); proxyRollout.setType(distributionSet.getType().getName()); proxyRollout.setIsRequiredMigrationStep(distributionSet.isRequiredMigrationStep()); proxyRollout.setSwModules(distributionSet.getModules()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java index f6653d971..05a6ec410 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java @@ -8,14 +8,19 @@ */ package org.eclipse.hawkbit.ui.rollout.rolloutgroup; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorAction; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessAction; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; /** * Proxy rollout group with renderer properties. * */ -public class ProxyRolloutGroup extends JpaRolloutGroup { +public class ProxyRolloutGroup { private static final long serialVersionUID = -2745056813306692356L; @@ -41,6 +46,23 @@ public class ProxyRolloutGroup extends JpaRolloutGroup { private String totalTargetsCount; + private Long id; + private String name; + private String description; + private String createdBy; + private String lastModifiedBy; + private RolloutGroupStatus status; + private TotalTargetCountStatus totalTargetCountStatus; + + private RolloutGroupSuccessCondition successCondition; + private String successConditionExp; + private RolloutGroupSuccessAction successAction; + private String successActionExp; + private RolloutGroupErrorCondition errorCondition; + private String errorConditionExp; + private RolloutGroupErrorAction errorAction; + private String errorActionExp; + private RolloutRendererData rolloutRendererData; public RolloutRendererData getRolloutRendererData() { @@ -216,4 +238,124 @@ public class ProxyRolloutGroup extends JpaRolloutGroup { this.totalTargetsCount = totalTargetsCount; } + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(final Long id) { + this.id = id; + } + + public String getDescription() { + return description; + } + + public void setDescription(final String description) { + this.description = description; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(final String createdBy) { + this.createdBy = createdBy; + } + + public String getLastModifiedBy() { + return lastModifiedBy; + } + + public void setLastModifiedBy(final String lastModifiedBy) { + this.lastModifiedBy = lastModifiedBy; + } + + public RolloutGroupStatus getStatus() { + return status; + } + + public void setStatus(final RolloutGroupStatus status) { + this.status = status; + } + + public TotalTargetCountStatus getTotalTargetCountStatus() { + return totalTargetCountStatus; + } + + public void setTotalTargetCountStatus(final TotalTargetCountStatus totalTargetCountStatus) { + this.totalTargetCountStatus = totalTargetCountStatus; + } + + public RolloutGroupSuccessCondition getSuccessCondition() { + return successCondition; + } + + public void setSuccessCondition(final RolloutGroupSuccessCondition successCondition) { + this.successCondition = successCondition; + } + + public String getSuccessConditionExp() { + return successConditionExp; + } + + public void setSuccessConditionExp(final String successConditionExp) { + this.successConditionExp = successConditionExp; + } + + public RolloutGroupSuccessAction getSuccessAction() { + return successAction; + } + + public void setSuccessAction(final RolloutGroupSuccessAction successAction) { + this.successAction = successAction; + } + + public String getSuccessActionExp() { + return successActionExp; + } + + public void setSuccessActionExp(final String successActionExp) { + this.successActionExp = successActionExp; + } + + public RolloutGroupErrorCondition getErrorCondition() { + return errorCondition; + } + + public void setErrorCondition(final RolloutGroupErrorCondition errorCondition) { + this.errorCondition = errorCondition; + } + + public String getErrorConditionExp() { + return errorConditionExp; + } + + public void setErrorConditionExp(final String errorConditionExp) { + this.errorConditionExp = errorConditionExp; + } + + public RolloutGroupErrorAction getErrorAction() { + return errorAction; + } + + public void setErrorAction(final RolloutGroupErrorAction errorAction) { + this.errorAction = errorAction; + } + + public String getErrorActionExp() { + return errorActionExp; + } + + public void setErrorActionExp(final String errorActionExp) { + this.errorActionExp = errorActionExp; + } + } From 3b045122247b635c3578fe7327e7cb466f9e98b6 Mon Sep 17 00:00:00 2001 From: Asharani Date: Wed, 1 Jun 2016 10:46:38 +0530 Subject: [PATCH 177/371] Reverting commit on behalf of Venu Signed-off-by: Asharani --- .../smtable/SoftwareModuleDetails.java | 12 ++----- .../AbstractTableDetailsLayout.java | 27 ++++----------- .../dstable/DistributionSetDetails.java | 34 +------------------ .../smtable/SwModuleDetails.java | 12 +------ .../dstable/DistributionDetails.java | 22 ------------ .../ui/utils/SPUIComponetIdProvider.java | 10 ------ .../src/main/resources/messages.properties | 2 -- .../src/main/resources/messages_de.properties | 2 -- .../src/main/resources/messages_en.properties | 2 -- 9 files changed, 10 insertions(+), 113 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java index f76c0692c..9d535f7f5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java @@ -12,7 +12,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; -import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleMetadatadetailslayout; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -45,7 +44,7 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta @Autowired private ArtifactUploadState artifactUploadState; - + @Override protected String getEditButtonId() { return SPUIComponetIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON; @@ -56,9 +55,8 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta detailsTab.addTab(createDetailsLayout(), getI18n().get("caption.tab.details"), null); detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null); detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); - detailsTab.addTab(createMetadataLayout(), getI18n().get("caption.metadata.tab"), null); } - + @Override protected void onEdit(final ClickEvent event) { final Window addSoftwareModule = softwareModuleAddUpdateWindow @@ -83,8 +81,6 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta updateSoftwareModuleDetailsLayout(HawkbitCommonUtil.SP_STRING_EMPTY, HawkbitCommonUtil.SP_STRING_EMPTY, maxAssign); } - - populateMetadataDetails(); } private void updateSoftwareModuleDetailsLayout(final String type, final String vendor, final String maxAssign) { @@ -145,8 +141,4 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta protected String getDetailsHeaderCaptionId() { return SPUIComponetIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } - - private void populateMetadataDetails(){ - swmMetadataTable.populateSMMetadata(getSelectedBaseEntity()); - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java index d7d9f131f..33fcf5af9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractTableDetailsLayout.java @@ -72,12 +72,8 @@ public abstract class AbstractTableDetailsLayout extends private VerticalLayout logLayout; private VerticalLayout attributesLayout; - - private VerticalLayout metadataLayout; - - protected SoftwareModuleMetadatadetailslayout swmMetadataTable; - - /** + + /** * Initialize components. */ @PostConstruct @@ -149,10 +145,8 @@ public abstract class AbstractTableDetailsLayout extends detailsTab.setHeight(90, Unit.PERCENTAGE); detailsTab.addStyleName(SPUIStyleDefinitions.DETAILS_LAYOUT_STYLE); detailsTab.setId(getTabSheetId()); - swmMetadataTable = new SoftwareModuleMetadatadetailslayout(); - swmMetadataTable.init(getI18n(), getPermissionChecker()); addTabs(detailsTab); - } + } private void buildLayout() { final HorizontalLayout nameEditLayout = new HorizontalLayout(); @@ -215,9 +209,8 @@ public abstract class AbstractTableDetailsLayout extends populateLog(); populateDescription(); populateDetailsWidget(); - } - + protected void populateLog() { logLayout.removeAllComponents(); @@ -288,15 +281,7 @@ public abstract class AbstractTableDetailsLayout extends descriptionLayout = getTabLayout(); return descriptionLayout; } - - protected VerticalLayout createMetadataLayout() { - metadataLayout = getTabLayout(); - metadataLayout.setSizeFull(); - metadataLayout.addComponent(swmMetadataTable); - return metadataLayout; - } - - + /** * Default caption of header to be displayed when no data row selected in * table. @@ -332,7 +317,7 @@ public abstract class AbstractTableDetailsLayout extends public VerticalLayout getDetailsLayout() { return detailsLayout; } - + private void populateDescription() { if (selectedBaseEntity != null) { updateDescriptionLayout(i18n.get("label.description"), selectedBaseEntity.getDescription()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java index df6a1a2d1..a1d1ffcfe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java @@ -8,10 +8,8 @@ */ package org.eclipse.hawkbit.ui.distributions.dstable; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; @@ -19,13 +17,11 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; -import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleIdName; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; -import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetMetadatadetailslayout; import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable; import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -42,18 +38,13 @@ import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Item; -import com.vaadin.data.util.IndexedContainer; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.Table.Align; -import com.vaadin.ui.themes.ValoTheme; -import com.vaadin.ui.Component; import com.vaadin.ui.Label; import com.vaadin.ui.TabSheet; -import com.vaadin.ui.Table; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; @@ -73,10 +64,6 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet private static final String SOFT_MODULE = "softwareModule"; private static final String UNASSIGN_SOFT_MODULE = "unassignSoftModule"; - - private static final String DS_METADA_KEY = "Key"; - - private static final String VIEW ="view"; @Autowired private ManageDistUIState manageDistUIState; @@ -94,12 +81,8 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet private transient DistributionSetManagement distributionSetManagement; private SoftwareModuleDetailsTable softwareModuleTable; - - private DistributionSetMetadatadetailslayout dsMetadataTable; private VerticalLayout tagsLayout; - - private VerticalLayout metadataLayout; Map assignedSWModule = new HashMap<>(); @@ -111,8 +94,6 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet softwareModuleTable = new SoftwareModuleDetailsTable(); softwareModuleTable.init(getI18n(), true, getPermissionChecker(), distributionSetManagement, getEventBus(), manageDistUIState); - dsMetadataTable = new DistributionSetMetadatadetailslayout(); - dsMetadataTable.init(getI18n(), getPermissionChecker()); super.init(); } @@ -126,14 +107,6 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet populateDetails(); populateModule(); populateTags(); - populateMetadataDetails(); - } - - protected VerticalLayout createMetadataLayout() { - metadataLayout = getTabLayout(); - metadataLayout.setSizeFull(); - metadataLayout.addComponent(dsMetadataTable); - return metadataLayout; } private void populateModule() { @@ -265,11 +238,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet updateDistributionSetDetailsLayout(null, null); } } - - private void populateMetadataDetails(){ - dsMetadataTable.populateDSMetadata(getSelectedBaseEntity()); - } - + private void updateDistributionSetDetailsLayout(final String type, final Boolean isMigrationRequired) { final VerticalLayout detailsTabLayout = getDetailsLayout(); detailsTabLayout.removeAllComponents(); @@ -325,7 +294,6 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet detailsTab.addTab(createSoftwareModuleTab(), getI18n().get("caption.softwares.distdetail.tab"), null); detailsTab.addTab(createTagsLayout(), getI18n().get("caption.tags.tab"), null); detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); - detailsTab.addTab(createMetadataLayout(), getI18n().get("caption.metadata.tab"), null); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java index 512ef2190..8774c9e08 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleDetails.java @@ -12,8 +12,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; -import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetMetadatadetailslayout; -import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleMetadatadetailslayout; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -46,7 +44,7 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay @Autowired private ManageDistUIState manageDistUIState; - + @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent softwareModuleEvent) { onBaseEntityEvent(softwareModuleEvent); @@ -71,11 +69,8 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay detailsTab.addTab(createDetailsLayout(), getI18n().get("caption.tab.details"), null); detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null); detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); - detailsTab.addTab(createMetadataLayout(), getI18n().get("caption.metadata.tab"), null); } - - @Override protected String getDefaultCaption() { return getI18n().get("upload.swModuleTable.header"); @@ -144,16 +139,11 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay @Override protected void populateDetailsWidget() { populateDetails(); - populateMetadataDetails(); } @Override protected String getDetailsHeaderCaptionId() { return SPUIComponetIdProvider.TARGET_DETAILS_HEADER_LABEL_ID; } - - private void populateMetadataDetails(){ - swmMetadataTable.populateSMMetadata(getSelectedBaseEntity()); - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java index fd5a67998..81151b076 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.management.dstable; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; -import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetMetadatadetailslayout; import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable; import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -49,19 +48,11 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail private DistributionTagToken distributionTagToken; private SoftwareModuleDetailsTable softwareModuleTable; - - private VerticalLayout metadataLayout; - - private DistributionSetMetadatadetailslayout dsMetadataTable; @Override protected void init() { softwareModuleTable = new SoftwareModuleDetailsTable(); softwareModuleTable.init(getI18n(), false, getPermissionChecker(), null, null, null); - - dsMetadataTable = new DistributionSetMetadatadetailslayout(); - dsMetadataTable.init(getI18n(), getPermissionChecker()); - super.init(); } @@ -82,14 +73,6 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail detailsTab.addTab(createSoftwareModuleTab(), getI18n().get("caption.softwares.distdetail.tab"), null); detailsTab.addTab(createTagsLayout(), getI18n().get("caption.tags.tab"), null); detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); - detailsTab.addTab(createMetadataLayout(), getI18n().get("caption.metadata.tab"), null); - } - - protected VerticalLayout createMetadataLayout() { - metadataLayout = getTabLayout(); - metadataLayout.setSizeFull(); - metadataLayout.addComponent(dsMetadataTable); - return metadataLayout; } @Override @@ -126,16 +109,11 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail protected String getTabSheetId() { return SPUIComponetIdProvider.DISTRIBUTION_DETAILS_TABSHEET; } - - private void populateMetadataDetails(){ - dsMetadataTable.populateDSMetadata(getSelectedBaseEntity()); - } @Override protected void populateDetailsWidget() { softwareModuleTable.populateModule(getSelectedBaseEntity()); populateDetails(getSelectedBaseEntity()); - populateMetadataDetails(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java index c25926445..fa1b6759d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java @@ -681,16 +681,6 @@ public final class SPUIComponetIdProvider { * custom filter - update button id. */ public static final String CUSTOM_FILTER_DETAIL_LINK = "custom.filter.detail.link"; - - /** - * DistributionSet - Metadata button id. - */ - public static final String DS_METADATA_DETAIL_LINK = "distributionset.metadata.detail.link"; - - /** - * Software Module - Metadata button id. - */ - public static final String SW_METADATA_DETAIL_LINK = "softwaremodule.metadata.detail.link"; /** * custom filter - save button id. diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 7165a18a6..4fdbe7d02 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -69,7 +69,6 @@ caption.bulk.upload.targets = Bulk Upload caption.softwares.distdetail.tab = Modules caption.tags.tab = Tags caption.logs.tab = Logs -caption.metadata.tab = Metadata caption.attributes.tab = Attributes caption.types.tab = Types caption.save.window = Action Details @@ -91,7 +90,6 @@ caption.force.action.confirmbox = Confirm Force Active Action caption.filter.delete.confirmbox = Confirm Filter Delete Action # Labels prefix with - label -label.dist.details.key = Key label.dist.details.type = Type : label.dist.details.name = Name : label.dist.details.version = Version : diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index ba4be0f5b..3a75ba61f 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -67,7 +67,6 @@ caption.bulk.upload.targets = Bulk Upload caption.softwares.distdetail.tab = Modules caption.tags.tab = Tags caption.logs.tab = Logs -caption.metadata.tab = Metadata caption.attributes.tab = Attributes caption.types.tab = Types caption.save.window = Action Details @@ -90,7 +89,6 @@ caption.filter.custom = Custom Filter caption.filter.delete.confirmbox = Confirm Filter Delete Action # Labels prefix with - label -label.dist.details.key = Key label.dist.details.type = Type : label.dist.details.name = Name : label.dist.details.version = Version : diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 07b9fd799..d87ac238b 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -69,7 +69,6 @@ caption.bulk.upload.targets = Bulk Upload caption.softwares.distdetail.tab = Modules caption.tags.tab = Tags caption.logs.tab = Logs -caption.metadata.tab = Metadata caption.attributes.tab = Attributes caption.types.tab = Types caption.save.window = Action Details @@ -90,7 +89,6 @@ caption.force.action.confirmbox = Confirm Force Active Action caption.filter.delete.confirmbox = Confirm Filter Delete Action # Labels prefix with - label -label.dist.details.key = Key label.dist.details.type = Type : label.dist.details.name = Name : label.dist.details.version = Version : From f26d240f3878c0f1816eee16c19d2637cad167f0 Mon Sep 17 00:00:00 2001 From: Asharani Date: Wed, 1 Jun 2016 11:17:50 +0530 Subject: [PATCH 178/371] Reverting commit d3f7b9d - on behalf of venu Signed-off-by: Asharani --- .../DistributionSetMetadatadetailslayout.java | 156 ------------------ .../SoftwareModuleMetadatadetailslayout.java | 156 ------------------ 2 files changed, 312 deletions(-) delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java deleted file mode 100644 index 9f01c975f..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/DistributionSetMetadatadetailslayout.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.common.detailslayout; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; -import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.vaadin.data.Item; -import com.vaadin.data.util.IndexedContainer; -import com.vaadin.ui.Button; -import com.vaadin.ui.Label; -import com.vaadin.ui.Table; -import com.vaadin.ui.themes.ValoTheme; - -public class DistributionSetMetadatadetailslayout extends Table { - - private static final long serialVersionUID = 2913758299611837718L; - - private static final Logger LOG = LoggerFactory.getLogger(DistributionSetMetadatadetailslayout.class); - - private static final String METADATA_KEY = "Key"; - - private static final String VIEW = "view"; - - private SpPermissionChecker permissionChecker; - - private I18N i18n; - - /** - * Initialize software module table- to be displayed in details layout. - * - * @param i18n - * I18N - * @param isUnassignSoftModAllowed - * boolean flag to check for unassign functionality allowed for - * the view. - * @param distributionSetManagement - * DistributionSetManagement - * @param permissionChecker - * SpPermissionChecker - * @param eventBus - * SessionEventBus - * @param manageDistUIState - * ManageDistUIState - */ - public void init(final I18N i18n, final SpPermissionChecker permissionChecker) { - this.i18n = i18n; - this.permissionChecker = permissionChecker; - createDSMetadataTable(); - addCustomGeneratedColumns(); - } - - private void createDSMetadataTable() { - addStyleName(ValoTheme.TABLE_NO_HORIZONTAL_LINES); - addStyleName(ValoTheme.TABLE_NO_STRIPES); - setSelectable(false); - setImmediate(true); - setContainerDataSource(getSwModuleContainer()); - setColumnHeaderMode(ColumnHeaderMode.EXPLICIT); - addDSMetadataTableHeader(); - setSizeFull(); // check if this style is required - addStyleName(SPUIStyleDefinitions.SW_MODULE_TABLE); - } - - private IndexedContainer getSwModuleContainer() { - final IndexedContainer container = new IndexedContainer(); - container.addContainerProperty(METADATA_KEY, String.class, ""); - setColumnExpandRatio(METADATA_KEY, 0.7f); - setColumnAlignment(METADATA_KEY, Align.LEFT); - - if (permissionChecker.hasUpdateDistributionPermission()) { - container.addContainerProperty(VIEW, Label.class, ""); - setColumnExpandRatio(VIEW, 0.2F); - setColumnAlignment(VIEW, Align.RIGHT); - } - return container; - } - - private void addDSMetadataTableHeader() { - setColumnHeader(METADATA_KEY, i18n.get("label.dist.details.key")); - } - - /** - * Populate software module table. - * - * @param distributionSet - */ - public void populateDSMetadata(final DistributionSet distributionSet) { - removeAllItems(); - final List dsMetadtaList = new ArrayList<>(); - for (int i = 1; i <= 5; i++) { - final DistributionSetMetadata dsMetadata = new DistributionSetMetadata(); - dsMetadata.setKey("ReleaseNote AAA" + i); - dsMetadata.setValue("ReleaseNote AAA sample data" + i); - dsMetadtaList.add(dsMetadata); - } - if (null != distributionSet) { - /* - * final List dsMetadataList = - * distributionSet.getMetadata(); - */ - final List dsMetadataList = dsMetadtaList; - if (null != dsMetadataList && !dsMetadataList.isEmpty()) { - dsMetadataList.forEach(dsMetadata -> setDSMetadataProperties(dsMetadata)); - } - } - - } - - private void setDSMetadataProperties(final DistributionSetMetadata dsMetadata) { - final Item item = getContainerDataSource().addItem(dsMetadata.getKey()); - item.getItemProperty(METADATA_KEY).setValue(dsMetadata.getKey()); - if (permissionChecker.hasUpdateDistributionPermission()) { - item.getItemProperty(VIEW).setValue(HawkbitCommonUtil.getFormatedLabel("View")); - } - - } - - protected void addCustomGeneratedColumns() { - addGeneratedColumn(VIEW, (source, itemId, columnId) -> customMetadataDetailButton((String) itemId)); - } - - private Button customMetadataDetailButton(final String itemId) { - final Item row1 = getItem(itemId); - final String metadataKey = (String) row1.getItemProperty(METADATA_KEY).getValue(); - - final Button viewIcon = SPUIComponentProvider.getButton(getDetailLinkId(metadataKey), VIEW, - "View DistributionSet Metadata details", null, false, null, SPUIButtonStyleSmallNoBorder.class); - viewIcon.setData(metadataKey); - viewIcon.addStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link"); - // viewIcon.addClickListener(event -> onClickOfDetailButton(event)); - return viewIcon; - } - - private static String getDetailLinkId(final String name) { - return new StringBuilder(SPUIComponetIdProvider.DS_METADATA_DETAIL_LINK).append('.').append(name).toString(); - } -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java deleted file mode 100644 index 83e1df6cd..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/SoftwareModuleMetadatadetailslayout.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.common.detailslayout; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; -import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.vaadin.data.Item; -import com.vaadin.data.util.IndexedContainer; -import com.vaadin.ui.Button; -import com.vaadin.ui.Label; -import com.vaadin.ui.Table; -import com.vaadin.ui.themes.ValoTheme; - -public class SoftwareModuleMetadatadetailslayout extends Table { - - private static final long serialVersionUID = 2913758299611838818L; - - private static final Logger LOG = LoggerFactory.getLogger(SoftwareModuleMetadatadetailslayout.class); - - private static final String METADATA_KEY = "Key"; - - private static final String VIEW = "view"; - - private SpPermissionChecker permissionChecker; - - private I18N i18n; - - /** - * Initialize software module table- to be displayed in details layout. - * - * @param i18n - * I18N - * @param isUnassignSoftModAllowed - * boolean flag to check for unassign functionality allowed for - * the view. - * @param distributionSetManagement - * DistributionSetManagement - * @param permissionChecker - * SpPermissionChecker - * @param eventBus - * SessionEventBus - * @param manageDistUIState - * ManageDistUIState - */ - public void init(final I18N i18n, final SpPermissionChecker permissionChecker) { - this.i18n = i18n; - this.permissionChecker = permissionChecker; - createSWMMetadataTable(); - addCustomGeneratedColumns(); - } - - private void createSWMMetadataTable() { - addStyleName(ValoTheme.TABLE_NO_HORIZONTAL_LINES); - addStyleName(ValoTheme.TABLE_NO_STRIPES); - setSelectable(false); - setImmediate(true); - setContainerDataSource(getSwModuleMetadataContainer()); - setColumnHeaderMode(ColumnHeaderMode.EXPLICIT); - addSMMetadataTableHeader(); - setSizeFull(); // check if this style is required - addStyleName(SPUIStyleDefinitions.SW_MODULE_TABLE); - } - - private IndexedContainer getSwModuleMetadataContainer() { - final IndexedContainer container = new IndexedContainer(); - container.addContainerProperty(METADATA_KEY, String.class, ""); - setColumnExpandRatio(METADATA_KEY, 0.7f); - setColumnAlignment(METADATA_KEY, Align.LEFT); - - if (permissionChecker.hasUpdateDistributionPermission()) { - container.addContainerProperty(VIEW, Label.class, ""); - setColumnExpandRatio(VIEW, 0.2F); - setColumnAlignment(VIEW, Align.RIGHT); - } - return container; - } - - private void addSMMetadataTableHeader() { - setColumnHeader(METADATA_KEY, i18n.get("label.dist.details.key")); - } - - /** - * Populate software module table. - * - * @param distributionSet - */ - public void populateSMMetadata(final SoftwareModule swModule) { - removeAllItems(); - final List swMetadtaList = new ArrayList<>(); - for (int i = 1; i <= 5; i++) { - final SoftwareModuleMetadata swMetadata = new SoftwareModuleMetadata(); - swMetadata.setKey("ReleaseNote BBB" + i); - swMetadata.setValue("ReleaseNote BBB sample data" + i); - swMetadtaList.add(swMetadata); - } - if (null != swModule) { - /* - * final List swMetadataList = - * swModule.getMetadata(); - */ - final List swMetadataList = swMetadtaList; - if (null != swMetadataList && !swMetadataList.isEmpty()) { - swMetadataList.forEach(swMetadata -> setSWMetadataProperties(swMetadata)); - } - } - - } - - private void setSWMetadataProperties(final SoftwareModuleMetadata swMetadata) { - final Item item = getContainerDataSource().addItem(swMetadata.getKey()); - item.getItemProperty(METADATA_KEY).setValue(swMetadata.getKey()); - if (permissionChecker.hasUpdateDistributionPermission()) { - item.getItemProperty(VIEW).setValue(HawkbitCommonUtil.getFormatedLabel("View")); - } - - } - - protected void addCustomGeneratedColumns() { - addGeneratedColumn(VIEW, (source, itemId, columnId) -> customMetadataDetailButton((String) itemId)); - } - - private Button customMetadataDetailButton(final String itemId) { - final Item row1 = getItem(itemId); - final String metadataKey = (String) row1.getItemProperty(METADATA_KEY).getValue(); - - final Button viewIcon = SPUIComponentProvider.getButton(getDetailLinkId(metadataKey), VIEW, - "View Software Module Metadata details", null, false, null, SPUIButtonStyleSmallNoBorder.class); - viewIcon.setData(metadataKey); - viewIcon.addStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link"); - // viewIcon.addClickListener(event -> onClickOfDetailButton(event)); - return viewIcon; - } - - private static String getDetailLinkId(final String name) { - return new StringBuilder(SPUIComponetIdProvider.SW_METADATA_DETAIL_LINK).append('.').append(name).toString(); - } -} From 1881880cd95877013ff464448cf8744acd1b6947 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 1 Jun 2016 09:21:51 +0200 Subject: [PATCH 179/371] Added findactions method. Signed-off-by: Kai Zimmermann --- .../hawkbit/repository/DeploymentManagement.java | 10 ++++++++++ .../repository/jpa/JpaDeploymentManagement.java | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 1c2c71f8e..9dc5f74c8 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -286,6 +286,16 @@ public interface DeploymentManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Slice findActionsByTarget(@NotNull Pageable pageable, @NotNull Target target); + /** + * Retrieves all {@link Action}s from repository. + * + * @param pageable + * pagination parameter + * @return a paged list of {@link Action}s + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) + Slice findActionsAll(@NotNull Pageable pageable); + /** * Retrieves all {@link Action} which assigned to a specific * {@link DistributionSet}. diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index 6f3a876b8..4739f16a7 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -706,4 +706,9 @@ public class JpaDeploymentManagement implements DeploymentManagement { public Slice findActionsByDistributionSet(final Pageable pageable, final DistributionSet ds) { return actionRepository.findByDistributionSet(pageable, (JpaDistributionSet) ds); } + + @Override + public Slice findActionsAll(final Pageable pageable) { + return convertAcPage(actionRepository.findAll(pageable), pageable); + } } From 5208aa2dea2c5ad0a4674dc02b9efadcf10effe7 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 1 Jun 2016 10:33:28 +0200 Subject: [PATCH 180/371] change color save/cancel buttons Signed-off-by: Melanie Retter --- .../org/eclipse/hawkbit/ui/common/CommonDialogWindow.java | 7 +++++-- .../VAADIN/themes/hawkbit/customstyles/common.scss | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 8dd6dc18a..4324cf222 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -14,8 +14,8 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleBorderWithIcon; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; +import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.server.FontAwesome; import com.vaadin.ui.AbstractOrderedLayout; import com.vaadin.ui.Alignment; @@ -27,7 +27,6 @@ import com.vaadin.ui.Link; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; -@Service public class CommonDialogWindow extends Window { private static final long serialVersionUID = -1321949234316858703L; @@ -48,6 +47,8 @@ public class CommonDialogWindow extends Window { private HorizontalLayout buttonsLayout; + protected ValueChangeListener buttonEnableListener; + public CommonDialogWindow() { init(null, null); @@ -95,6 +96,7 @@ public class CommonDialogWindow extends Window { saveButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.SAVE_BUTTON, "save", "", "", true, FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); saveButton.setSizeUndefined(); + saveButton.addStyleName("default-color"); if (null != saveButtonClickListener) { saveButton.addClickListener(saveButtonClickListener); } else { @@ -107,6 +109,7 @@ public class CommonDialogWindow extends Window { cancelButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.CANCEL_BUTTON, "cancel", "", "", true, FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); cancelButton.setSizeUndefined(); + cancelButton.addStyleName("default-color"); if (null != cancelButtonClickListener) { cancelButton.addClickListener(cancelButtonClickListener); } else { diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss index ecacdcd67..802dd5a70 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss @@ -293,4 +293,8 @@ padding-bottom: 12px !important; } + .v-button-default-color { + color: #551f62; + } + } From f8538853ed8716542cdf62e0883dffd1028000a9 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 1 Jun 2016 13:12:53 +0200 Subject: [PATCH 181/371] Add method all permissions Signed-off-by: SirWayne --- .../security/SecurityAutoConfiguration.java | 39 ++------------- .../im/authentication/PermissionUtils.java | 47 +++++++++++++++++++ .../im/authentication/SpPermission.java | 30 ++++++++++++ 3 files changed, 81 insertions(+), 35 deletions(-) create mode 100644 hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java index 8a3a50ad2..3d07664df 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java @@ -8,23 +8,17 @@ */ package org.eclipse.hawkbit.autoconfigure.security; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.util.ArrayList; -import java.util.Collection; -import java.util.List; import org.eclipse.hawkbit.im.authentication.MultitenancyIndicator; import org.eclipse.hawkbit.im.authentication.PermissionService; -import org.eclipse.hawkbit.im.authentication.SpPermission; +import org.eclipse.hawkbit.im.authentication.PermissionUtils; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.im.authentication.UserAuthenticationFilter; -import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.DdiSecurityProperties; +import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.SpringSecurityAuditorAware; import org.eclipse.hawkbit.tenancy.TenantAware; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -39,7 +33,6 @@ import org.springframework.security.config.annotation.authentication.builders.Au import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter; import org.springframework.security.core.Authentication; -import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; @@ -98,8 +91,6 @@ public class SecurityAutoConfiguration { @ConditionalOnMissingBean(value = { UserAuthenticationFilter.class }) public static class InMemoryUserManagementConfiguration extends GlobalAuthenticationConfigurerAdapter { - private static final Logger LOGGER = LoggerFactory.getLogger(InMemoryUserManagementConfiguration.class); - @Autowired private AuthenticationConfiguration configuration; @@ -127,7 +118,7 @@ public class SecurityAutoConfiguration { final InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager( new ArrayList<>()); inMemoryUserDetailsManager.setAuthenticationManager(null); - inMemoryUserDetailsManager.createUser(new User("admin", "admin", getAllAuthorities())); + inMemoryUserDetailsManager.createUser(new User("admin", "admin", PermissionUtils.createAllAuthorityList())); return inMemoryUserDetailsManager; } @@ -136,29 +127,7 @@ public class SecurityAutoConfiguration { */ @Bean public MultitenancyIndicator multiTenancyIndicator() { - return new MultitenancyIndicator() { - @Override - public boolean isMultiTenancySupported() { - return false; - } - }; - } - - private Collection getAllAuthorities() { - final List allPermissions = new ArrayList<>(); - final Field[] declaredFields = SpPermission.class.getDeclaredFields(); - for (final Field field : declaredFields) { - if (Modifier.isPublic(field.getModifiers()) && Modifier.isStatic(field.getModifiers())) { - field.setAccessible(true); - try { - final String permissionName = (String) field.get(null); - allPermissions.add(new SimpleGrantedAuthority(permissionName)); - } catch (final IllegalAccessException e) { - LOGGER.error(e.getMessage(), e); - } - } - } - return allPermissions; + return () -> false; } private static class TenantDaoAuthenticationProvider extends DaoAuthenticationProvider { diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java new file mode 100644 index 000000000..2f9352734 --- /dev/null +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.im.authentication; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; + +/** + * * Utility method for creation of GrantedAuthority collections etc. + */ +public final class PermissionUtils { + + private PermissionUtils() { + + } + + /** + * Create {@link GrantedAuthority} by a special role. + * + * @param roles + * the roles + * @return a list of {@link GrantedAuthority} + */ + public static List createAuthorityList(final Collection roles) { + final List authorities = new ArrayList<>(roles.size()); + + for (final String role : roles) { + authorities.add(new SimpleGrantedAuthority(role)); + } + + return authorities; + } + + /** + * Returns all authorities. + * + * @return a list of {@link GrantedAuthority} + */ + public static List createAllAuthorityList() { + return createAuthorityList(SpPermission.getAllAuthorities()); + } +} diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java index 2e222d879..6c27b703a 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java @@ -9,7 +9,14 @@ package org.eclipse.hawkbit.im.authentication; import java.lang.annotation.Target; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.GrantedAuthority; @@ -35,6 +42,8 @@ import org.springframework.security.core.GrantedAuthority; */ public final class SpPermission { + private static final Logger LOGGER = LoggerFactory.getLogger(SpPermission.class); + /** * Permission to read the targets from the * {@link ProvisioningTargetRepository} including their meta information, @@ -139,6 +148,27 @@ public final class SpPermission { // Constants only } + /** + * Return all permission. + * + * @return all permission + */ + public static Collection getAllAuthorities() { + final List allPermissions = new ArrayList<>(); + final Field[] declaredFields = SpPermission.class.getDeclaredFields(); + for (final Field field : declaredFields) { + if (Modifier.isPublic(field.getModifiers()) && Modifier.isStatic(field.getModifiers())) { + field.setAccessible(true); + try { + allPermissions.add((String) field.get(null)); + } catch (final IllegalAccessException e) { + LOGGER.error(e.getMessage(), e); + } + } + } + return allPermissions; + } + /** * Contains all the spring security evaluation expressions for the * {@link PreAuthorize} annotation for method security. From 615cbe230843cb3185f0f35ec4aa58fdc7075347 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 1 Jun 2016 13:17:40 +0200 Subject: [PATCH 182/371] Added null check for selected target --- .../hawkbit-repository-jpa/.gitignore | 1 + .../actionhistory/ActionHistoryTable.java | 22 +++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-jpa/.gitignore diff --git a/hawkbit-repository/hawkbit-repository-jpa/.gitignore b/hawkbit-repository/hawkbit-repository-jpa/.gitignore new file mode 100644 index 000000000..ae3c17260 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index b571bb3df..f4cf633cb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -69,14 +69,15 @@ import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; /** - * + * Table for {@link Target#getActions()} history. * */ - @SpringComponent @ViewScope public class ActionHistoryTable extends TreeTable implements Handler { + private static final String BUTTON_CANCEL = "button.cancel"; + private static final String BUTTON_OK = "button.ok"; private static final long serialVersionUID = -1631514704696786653L; @Autowired private I18N i18n; @@ -241,11 +242,14 @@ public class ActionHistoryTable extends TreeTable implements Handler { private void getcontainerData() { hierarchicalContainer.removeAllItems(); - /* service method to create action history for target */ - final List actionHistory = deploymentManagement + + if (target != null) { + /* service method to create action history for target */ + final List actionHistory = deploymentManagement .findActionsWithStatusCountByTargetOrderByIdDesc(target); - - addDetailsToContainer(actionHistory); + + addDetailsToContainer(actionHistory); + } } /** @@ -751,7 +755,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { private void confirmAndForceAction(final Long actionId) { /* Display the confirmation */ final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.force.action.confirmbox"), - i18n.get("message.force.action.confirm"), i18n.get("button.ok"), i18n.get("button.cancel"), ok -> { + i18n.get("message.force.action.confirm"), i18n.get(BUTTON_OK), i18n.get(BUTTON_CANCEL), ok -> { if (ok) { /* cancel the action */ deploymentManagement.forceTargetAction(actionId); @@ -773,7 +777,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { private void confirmAndForceQuitAction(final Long actionId) { /* Display the confirmation */ final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.forcequit.action.confirmbox"), - i18n.get("message.forcequit.action.confirm"), i18n.get("button.ok"), i18n.get("button.cancel"), ok -> { + i18n.get("message.forcequit.action.confirm"), i18n.get(BUTTON_OK), i18n.get(BUTTON_CANCEL), ok -> { if (ok) { final boolean cancelResult = forceQuitActiveAction(actionId); if (cancelResult) { @@ -801,7 +805,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { */ private void confirmAndCancelAction(final Long actionId) { final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.cancel.action.confirmbox"), - i18n.get("message.cancel.action.confirm"), i18n.get("button.ok"), i18n.get("button.cancel"), ok -> { + i18n.get("message.cancel.action.confirm"), i18n.get(BUTTON_OK), i18n.get(BUTTON_CANCEL), ok -> { if (ok) { final boolean cancelResult = cancelActiveAction(actionId); if (cancelResult) { From 561e6b970676badda3bd70b634d686376d7ae074 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 1 Jun 2016 13:51:42 +0200 Subject: [PATCH 183/371] Fixed event processing. Signed-off-by: Kai Zimmermann --- .../repository/jpa/model/EntityPropertyChangeListener.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java index cc0041646..2dd0fdb40 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/EntityPropertyChangeListener.java @@ -52,13 +52,13 @@ public class EntityPropertyChangeListener extends DescriptorEventAdapter { @Override public void postUpdate(final DescriptorEvent event) { - if (event.getObject().getClass().equals(Action.class)) { + if (event.getObject().getClass().equals(JpaAction.class)) { getAfterTransactionCommmitExecutor().afterCommit(() -> getEventBus().post( new ActionPropertyChangeEvent((Action) event.getObject(), getChangeSet(Action.class, event)))); - } else if (event.getObject().getClass().equals(Rollout.class)) { + } else if (event.getObject().getClass().equals(JpaRollout.class)) { getAfterTransactionCommmitExecutor().afterCommit(() -> getEventBus().post( new RolloutPropertyChangeEvent((Rollout) event.getObject(), getChangeSet(Rollout.class, event)))); - } else if (event.getObject().getClass().equals(RolloutGroup.class)) { + } else if (event.getObject().getClass().equals(JpaRolloutGroup.class)) { getAfterTransactionCommmitExecutor().afterCommit( () -> getEventBus().post(new RolloutGroupPropertyChangeEvent((RolloutGroup) event.getObject(), getChangeSet(RolloutGroup.class, event)))); From 935ca2f963ceaf783a536ddb53b564e7926670b7 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 2 Jun 2016 08:20:55 +0200 Subject: [PATCH 184/371] Fixed broken repo access security checks. Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/repository/ControllerManagement.java | 1 - .../hawkbit/repository/jpa/JpaControllerManagement.java | 9 +++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) 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 f8615bcc3..531da8819 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 @@ -177,7 +177,6 @@ public interface ControllerManagement { * @return the security context of the target, in case no target exists for * the given controllerId {@code null} is returned */ - @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) String getSecurityTokenByControllerId(@NotEmpty String controllerId); /** 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 80de385c8..77b71e661 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 @@ -47,6 +47,7 @@ import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TenantConfiguration; import org.eclipse.hawkbit.security.HawkbitSecurityProperties; +import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -102,6 +103,9 @@ public class JpaControllerManagement implements ControllerManagement { @Autowired private CacheWriteNotify cacheWriteNotify; + @Autowired + private SystemSecurityContext systemSecurityContext; + @Override public String getPollingTime() { final TenantConfigurationKey configurationKey = TenantConfigurationKey.POLLING_TIME_INTERVAL; @@ -109,8 +113,9 @@ public class JpaControllerManagement implements ControllerManagement { JpaTenantConfigurationManagement.validateTenantConfigurationDataType(configurationKey, propertyType); final TenantConfiguration tenantConfiguration = tenantConfigurationRepository .findByKey(configurationKey.getKeyName()); - return tenantConfigurationManagement - .buildTenantConfigurationValueByKey(configurationKey, propertyType, tenantConfiguration).getValue(); + + return systemSecurityContext.runAsSystem(() -> tenantConfigurationManagement + .buildTenantConfigurationValueByKey(configurationKey, propertyType, tenantConfiguration).getValue()); } @Override From 5d17a7d5c3b764d7a1594c09525debe6d6d90fcc Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 2 Jun 2016 08:50:37 +0200 Subject: [PATCH 185/371] Added sonar exceptions. Signed-off-by: Kai Zimmermann --- .../org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java | 4 ++++ .../eclipse/hawkbit/artifact/repository/ArtifactStore.java | 3 +++ .../AfterTransactionCommitDefaultServiceExecutor.java | 3 +++ .../repository/jpa/model/JpaSoftwareModuleMetadata.java | 2 ++ .../org/eclipse/hawkbit/security/SystemSecurityContext.java | 2 ++ 5 files changed, 14 insertions(+) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java index 34c5f548e..0931f6f3e 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java @@ -236,6 +236,10 @@ public class DeviceSimulatorUpdater { } final File tempFile = File.createTempFile("uploadFile", null); + + // Exception squid:S2070 - not used for hashing sensitive + // data + @SuppressWarnings("squid:S2070") final MessageDigest md = MessageDigest.getInstance("SHA-1"); try (final DigestOutputStream dos = new DigestOutputStream(new FileOutputStream(tempFile), md)) { diff --git a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java index af60a39c8..aa9ff3409 100644 --- a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java +++ b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java @@ -205,6 +205,9 @@ public class ArtifactStore implements ArtifactRepository { throws NoSuchAlgorithmException, IOException { String sha1Hash; // compute digest + // Exception squid:S2070 - not used for hashing sensitive + // data + @SuppressWarnings("squid:S2070") final MessageDigest md = MessageDigest.getInstance("SHA-1"); try (final DigestOutputStream dos = new DigestOutputStream(os, md)) { ByteStreams.copy(stream, dos); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitDefaultServiceExecutor.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitDefaultServiceExecutor.java index 687c1e3d4..6c58a0207 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitDefaultServiceExecutor.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/executor/AfterTransactionCommitDefaultServiceExecutor.java @@ -45,6 +45,8 @@ public class AfterTransactionCommitDefaultServiceExecutor extends TransactionSyn } @Override + // Exception squid:S1217 - we want to run this synchronous + @SuppressWarnings("squid:S1217") public void afterCommit(final Runnable runnable) { LOGGER.debug("Submitting new runnable {} to run after transaction commit", runnable); if (TransactionSynchronizationManager.isSynchronizationActive()) { @@ -58,6 +60,7 @@ public class AfterTransactionCommitDefaultServiceExecutor extends TransactionSyn return; } LOGGER.info("Transaction synchronization is NOT ACTIVE/ INACTIVE. Executing right now runnable {}", runnable); + runnable.run(); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java index 53ce08ca9..e8972eb97 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModuleMetadata.java @@ -68,6 +68,8 @@ public class JpaSoftwareModuleMetadata extends AbstractJpaMetaData implements So } @Override + // exception squid:S2259 - obj is checked for null in super + @SuppressWarnings("squid:S2259") public boolean equals(final Object obj) { if (!super.equals(obj)) { return false; diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java index f849eb541..78fb5818d 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java @@ -64,6 +64,8 @@ public class SystemSecurityContext { * the callable to call within the system security context * @return the return value of the {@link Callable#call()} method. */ + // Exception squid:S2221 - Callable declares Exception + @SuppressWarnings("squid:S2221") public T runAsSystem(final Callable callable) { final SecurityContext oldContext = SecurityContextHolder.getContext(); try { From 8c904f900eb46627651f86bd75b18765aa34ea0e Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 2 Jun 2016 08:51:31 +0200 Subject: [PATCH 186/371] Ignoring springBeans meta file. Signed-off-by: Kai Zimmermann --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 8cd3d476e..e49219859 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,5 @@ local.properties # Maven maven.properties /*/maven.properties + +hawkbit-repository/hawkbit-repository-jpa/.springBeans From afbea77310ce269a567ddc933de0d3aa676ea42a Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 2 Jun 2016 11:07:49 +0200 Subject: [PATCH 187/371] Add Permission Unit Test Signed-off-by: SirWayne --- .../im/authentication/SpPermission.java | 30 ++++++++++- .../im/authentication/PermissionTest.java | 54 +++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java index 6c27b703a..d15501fda 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java @@ -12,7 +12,9 @@ import java.lang.annotation.Target; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.List; import org.slf4j.Logger; @@ -154,16 +156,42 @@ public final class SpPermission { * @return all permission */ public static Collection getAllAuthorities() { + return getAllAuthorities(Collections.emptyList()); + } + + /** + * Return all permission. + * + * @param exclusionRoles + * roles which will excluded + * @return all permissions + */ + public static Collection getAllAuthorities(final String... exclusionRoles) { + return getAllAuthorities(Arrays.asList(exclusionRoles)); + } + + /** + * Return all permission. + * + * @param exclusionRoles + * roles which will excluded + * @return all permissions + */ + public static Collection getAllAuthorities(final Collection exclusionRoles) { final List allPermissions = new ArrayList<>(); final Field[] declaredFields = SpPermission.class.getDeclaredFields(); for (final Field field : declaredFields) { if (Modifier.isPublic(field.getModifiers()) && Modifier.isStatic(field.getModifiers())) { field.setAccessible(true); try { - allPermissions.add((String) field.get(null)); + final String role = (String) field.get(null); + if (!(exclusionRoles.contains(role))) { + allPermissions.add(role); + } } catch (final IllegalAccessException e) { LOGGER.error(e.getMessage(), e); } + } } return allPermissions; diff --git a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java new file mode 100644 index 000000000..bca7fd1c1 --- /dev/null +++ b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.im.authentication; + +import static org.fest.assertions.api.Assertions.assertThat; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import org.junit.Test; +import org.springframework.context.annotation.Description; +import org.springframework.security.core.GrantedAuthority; + +import ru.yandex.qatools.allure.annotations.Features; +import ru.yandex.qatools.allure.annotations.Stories; + +/** + * Test {@link SpPermission}. + */ +@Features("Unit Tests - Security") +@Stories("Permission Test") +public final class PermissionTest { + + @Test + @Description("Verify the get permission function") + public void testGetPermissions() { + final int allPermission = 15; + final int permissionWithoutSystem = allPermission - 3; + final Collection allAuthorities = SpPermission.getAllAuthorities(); + final List allAuthoritiesList = PermissionUtils.createAllAuthorityList(); + assertThat(allAuthorities).hasSize(allPermission); + assertThat(allAuthoritiesList).hasSize(allPermission); + assertThat(allAuthoritiesList.stream().map(authority -> authority.getAuthority()).collect(Collectors.toList())) + .containsAll(allAuthorities); + + final Collection authoritiesWithoutSystem = SpPermission.getAllAuthorities(SpPermission.SYSTEM_ADMIN, + SpPermission.SYSTEM_DIAG, SpPermission.SYSTEM_MONITOR); + final List authoritiesListWithoutSystem = PermissionUtils.createAuthorityList(SpPermission + .getAllAuthorities(SpPermission.SYSTEM_ADMIN, SpPermission.SYSTEM_DIAG, SpPermission.SYSTEM_MONITOR)); + + assertThat(authoritiesWithoutSystem).hasSize(permissionWithoutSystem); + assertThat(authoritiesListWithoutSystem).hasSize(permissionWithoutSystem); + assertThat(authoritiesListWithoutSystem.stream().map(authority -> authority.getAuthority()) + .collect(Collectors.toList())).containsAll(authoritiesWithoutSystem); + + } +} From 1fe267c5c35f05615a1c49df552faa62cca4bcd2 Mon Sep 17 00:00:00 2001 From: Asharani Date: Thu, 2 Jun 2016 15:50:29 +0530 Subject: [PATCH 188/371] Re-added component id's in SPUIComponenetIdProvider Signed-off-by: Asharani --- .../ui/artifacts/upload/UploadLayout.java | 2 +- .../upload/UploadStatusInfoWindow.java | 10 ++++---- .../ui/utils/SPUIComponentIdProvider.java | 24 +++++++++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index 3be271e3c..05c175ead 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -793,7 +793,7 @@ public class UploadLayout extends VerticalLayout { } private void createUploadStatusButton() { - uploadStatusButton = SPUIComponentProvider.getButton(SPUIComponetIdProvider.UPLOAD_STATUS_BUTTON, "", "", "", + uploadStatusButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.UPLOAD_STATUS_BUTTON, "", "", "", false, null, SPUIButtonStyleSmall.class); uploadStatusButton.setStyleName(SPUIStyleDefinitions.ACTION_BUTTON); uploadStatusButton.addStyleName(SPUIStyleDefinitions.UPLOAD_PROGRESS_INDICATOR_STYLE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java index e4ab8d474..a58c6ea14 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusInfoWindow.java @@ -24,7 +24,7 @@ import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -190,7 +190,7 @@ public class UploadStatusInfoWindow extends Window { } private void setPopupProperties() { - setId(SPUIComponetIdProvider.UPLOAD_STATUS_POPUP_ID); + setId(SPUIComponentIdProvider.UPLOAD_STATUS_POPUP_ID); addStyleName(SPUIStyleDefinitions.UPLOAD_INFO); setImmediate(true); setResizable(false); @@ -411,7 +411,7 @@ public class UploadStatusInfoWindow extends Window { private Button getMinimizeButton() { final Button minimizeBtn = SPUIComponentProvider.getButton( - SPUIComponetIdProvider.UPLOAD_STATUS_POPUP_MINIMIZE_BUTTON_ID, "", "", "", true, FontAwesome.MINUS, + SPUIComponentIdProvider.UPLOAD_STATUS_POPUP_MINIMIZE_BUTTON_ID, "", "", "", true, FontAwesome.MINUS, SPUIButtonStyleSmallNoBorder.class); minimizeBtn.addStyleName(ValoTheme.BUTTON_BORDERLESS); minimizeBtn.addClickListener(event -> minimizeWindow()); @@ -421,7 +421,7 @@ public class UploadStatusInfoWindow extends Window { private Button getResizeButton() { final Button resizeBtn = SPUIComponentProvider.getButton( - SPUIComponetIdProvider.UPLOAD_STATUS_POPUP_RESIZE_BUTTON_ID, "", "", "", true, FontAwesome.EXPAND, + SPUIComponentIdProvider.UPLOAD_STATUS_POPUP_RESIZE_BUTTON_ID, "", "", "", true, FontAwesome.EXPAND, SPUIButtonStyleSmallNoBorder.class); resizeBtn.addStyleName(ValoTheme.BUTTON_BORDERLESS); resizeBtn.addClickListener(event -> resizeWindow(event)); @@ -455,7 +455,7 @@ public class UploadStatusInfoWindow extends Window { private Button getCloseButton() { final Button closeBtn = SPUIComponentProvider.getButton( - SPUIComponetIdProvider.UPLOAD_STATUS_POPUP_CLOSE_BUTTON_ID, "", "", "", true, FontAwesome.TIMES, + SPUIComponentIdProvider.UPLOAD_STATUS_POPUP_CLOSE_BUTTON_ID, "", "", "", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); closeBtn.addStyleName(ValoTheme.BUTTON_BORDERLESS); closeBtn.addClickListener(event -> onClose()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index 80d40104a..6649b12fe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -888,6 +888,30 @@ public final class SPUIComponentIdProvider { */ public static final String VALIDATION_STATUS_ICON_ID = "validation.status.icon"; + /** + * Artifact upload status popup - minimize button id. + */ + public static final String UPLOAD_STATUS_POPUP_MINIMIZE_BUTTON_ID = "artifact.upload.minimize.button.id"; + + /** + * Artifact upload status popup - close button id. + */ + public static final String UPLOAD_STATUS_POPUP_CLOSE_BUTTON_ID = "artifact.upload.close.button.id"; + + /** + * Artifact upload status popup - resize button id. + */ + public static final String UPLOAD_STATUS_POPUP_RESIZE_BUTTON_ID = "artifact.upload.resize.button.id"; + + /** + * Artifact upload view - upload status button id. + */ + public static final String UPLOAD_STATUS_BUTTON = "artficat.upload.status.button.id"; + + /** + * Artifact uplaod view - uplod status popup id. + */ + public static final String UPLOAD_STATUS_POPUP_ID = "artifact.upload.status.popup.id"; /** * /* Private Constructor. */ From 5d4de130b44805eed9707476feb9e8ff73c89a7b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 2 Jun 2016 13:45:56 +0200 Subject: [PATCH 189/371] Fix license header Signed-off-by: SirWayne --- .../hawkbit/im/authentication/PermissionService.java | 2 +- .../hawkbit/im/authentication/PermissionUtils.java | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionService.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionService.java index bad24e6c4..2cbadd02d 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionService.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionService.java @@ -17,7 +17,7 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; /** - * + * Service to check permissions. * */ public class PermissionService { diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java index 2f9352734..ae8b604bb 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java @@ -1,5 +1,10 @@ /** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.im.authentication; @@ -11,7 +16,7 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; /** - * * Utility method for creation of GrantedAuthority collections etc. + * Utility method for creation of GrantedAuthority collections etc. */ public final class PermissionUtils { From e12fcd804efec0dec28dae37e102a5d74f6c14ff Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 2 Jun 2016 14:08:37 +0200 Subject: [PATCH 190/371] Fixed default ds gen. Signed-off-by: Kai Zimmermann --- .../rest/resource/MgmtDistributionSetResourceTest.java | 2 +- .../hawkbit/repository/jpa/JpaSystemManagement.java | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index 8c15e0a8c..ad72aa55d 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -789,7 +789,7 @@ public class MgmtDistributionSetResourceTest extends AbstractRestIntegrationTest final int amount = 10; testdataFactory.createDistributionSets(amount); distributionSetManagement.createDistributionSet(entityFactory.generateDistributionSet("incomplete", "2", - "incomplete", distributionSetManagement.findDistributionSetTypeByKey("ecl_os"), null)); + "incomplete", distributionSetManagement.findDistributionSetTypeByKey("os"), null)); final String rsqlFindLikeDs1OrDs2 = "complete==" + Boolean.TRUE; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index 8f9e8c5f9..ab5fc1b41 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -288,11 +288,11 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst final SoftwareModuleType os = softwareModuleTypeRepository .save(new JpaSoftwareModuleType("os", "Firmware", "Core firmware or operationg system", 1)); - distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("os_app", "With app(s)", - "Default type with Firmware/OS and optional app(s).").addMandatoryModuleType(os) - .addOptionalModuleType(app)); - - return distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("os", "OS only", + distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("os", "OS only", "Default type with Firmware/OS only.").addMandatoryModuleType(os)); + + return distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("os_app", + "OS with app(s)", "Default type with Firmware/OS and optional app(s).").addMandatoryModuleType(os) + .addOptionalModuleType(app)); } } From 2769170c47ec52d83d506f5b3d8aa7340fde738e Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 2 Jun 2016 15:13:49 +0200 Subject: [PATCH 191/371] Created constants in API for default tenant type setup. Signed-off-by: Kai Zimmermann --- .../hawkbit-example-mgmt-simulator/.gitignore | 1 + .../softwaremodule/MgmtSoftwareModule.java | 13 ----- hawkbit-repository/.gitignore | 1 + .../eclipse/hawkbit/repository/Constants.java | 58 +++++++++++++++++++ .../repository/jpa/JpaSystemManagement.java | 22 ++++--- .../jpa/rsql/RSQLSoftwareModuleFieldTest.java | 7 ++- 6 files changed, 77 insertions(+), 25 deletions(-) create mode 100644 hawkbit-repository/.gitignore create mode 100644 hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java diff --git a/examples/hawkbit-example-mgmt-simulator/.gitignore b/examples/hawkbit-example-mgmt-simulator/.gitignore index 4b9b73073..b5c3eb864 100644 --- a/examples/hawkbit-example-mgmt-simulator/.gitignore +++ b/examples/hawkbit-example-mgmt-simulator/.gitignore @@ -1,3 +1,4 @@ /target/ /bin/ /.apt_generated/ +/.springBeans diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java index ec4a48e89..08b723198 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/softwaremodule/MgmtSoftwareModule.java @@ -23,19 +23,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class MgmtSoftwareModule extends MgmtNamedEntity { - /** - * API definition for Software module type#RUNTIME. - */ - public static final String SM_RUNTIME = "runtime"; - /** - * API definition for for Software module type#OS. - */ - public static final String SM_OS = "os"; - /** - * API definition for for Software module type#APPLICATION. - */ - public static final String SM_APPLICATION = "application"; - @JsonProperty(value = "id", required = true) private Long moduleId; diff --git a/hawkbit-repository/.gitignore b/hawkbit-repository/.gitignore new file mode 100644 index 000000000..6a3b2b405 --- /dev/null +++ b/hawkbit-repository/.gitignore @@ -0,0 +1 @@ +/.springBeans diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java new file mode 100644 index 000000000..6ccb4bc82 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.repository; + +import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.SoftwareModuleType; + +/** + * Repository API constants. + * + */ +public final class Constants { + /** + * Default {@link SoftwareModuleType} generated by repository for every new + * account for Firmware/Operating System. + */ + public static final String SMT_DEFAULT_OS_KEY = "os"; + /** + * Default {@link SoftwareModuleType} generated by repository for every new + * account for applications. + */ + public static final String SMT_DEFAULT_APP_KEY = "application"; + + /** + * {@link DistributionSetType#getKey()} of a {@link DistributionSetType} + * generated by repository for every new account that includes + * {@link #SMT_DEFAULT_OS_KEY} as mandatory module and optional + * {@link #SMT_DEFAULT_APP_KEY}s. + */ + public static final String DST_DEFAULT_OS_WITH_APPS_KEY = "os_app"; + + /** + * {@link DistributionSetType#getName()} of a {@link DistributionSetType} + * generated by repository for every new account that includes + * {@link #SMT_DEFAULT_OS_KEY} as mandatory module and optional + * {@link #SMT_DEFAULT_APP_KEY}s. + */ + public static final String DST_DEFAULT_OS_WITH_APPS_NAME = "OS with app(s)"; + + /** + * {@link DistributionSetType#getKey()} of a {@link DistributionSetType} + * generated by repository for every new account that includes only + * {@link #SMT_DEFAULT_OS_KEY} as mandatory module. + */ + public static final String DST_DEFAULT_OS_ONLY_KEY = "os"; + + /** + * {@link DistributionSetType#getName()} of a {@link DistributionSetType} + * generated by repository for every new account that includes only + * {@link #SMT_DEFAULT_OS_KEY} as mandatory module. + */ + public static final String DST_DEFAULT_OS_ONLY_NAME = "OS only"; + + private Constants() { + // Utility class. + } +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index ab5fc1b41..a2865c4b0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -16,6 +16,7 @@ import java.util.stream.Collectors; import javax.persistence.EntityManager; import org.eclipse.hawkbit.cache.TenancyCacheManager; +import org.eclipse.hawkbit.repository.Constants; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -283,16 +284,19 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst } private DistributionSetType createStandardSoftwareDataSetup() { - final SoftwareModuleType app = softwareModuleTypeRepository - .save(new JpaSoftwareModuleType("application", "Application", "Application Addons", Integer.MAX_VALUE)); - final SoftwareModuleType os = softwareModuleTypeRepository - .save(new JpaSoftwareModuleType("os", "Firmware", "Core firmware or operationg system", 1)); + final SoftwareModuleType app = softwareModuleTypeRepository.save(new JpaSoftwareModuleType( + Constants.SMT_DEFAULT_APP_KEY, "Application", "Application Addons", Integer.MAX_VALUE)); + final SoftwareModuleType os = softwareModuleTypeRepository.save(new JpaSoftwareModuleType( + Constants.SMT_DEFAULT_OS_KEY, "Firmware", "Core firmware or operationg system", 1)); - distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("os", "OS only", - "Default type with Firmware/OS only.").addMandatoryModuleType(os)); + distributionSetTypeRepository + .save((JpaDistributionSetType) new JpaDistributionSetType(Constants.DST_DEFAULT_OS_ONLY_KEY, + Constants.DST_DEFAULT_OS_ONLY_NAME, "Default type with Firmware/OS only.") + .addMandatoryModuleType(os)); - return distributionSetTypeRepository.save((JpaDistributionSetType) new JpaDistributionSetType("os_app", - "OS with app(s)", "Default type with Firmware/OS and optional app(s).").addMandatoryModuleType(os) - .addOptionalModuleType(app)); + return distributionSetTypeRepository + .save((JpaDistributionSetType) new JpaDistributionSetType(Constants.DST_DEFAULT_OS_WITH_APPS_KEY, + Constants.DST_DEFAULT_OS_WITH_APPS_NAME, "Default type with Firmware/OS and optional app(s).") + .addMandatoryModuleType(os).addOptionalModuleType(app)); } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java index d55de383f..47732dac2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java @@ -16,6 +16,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; +import org.eclipse.hawkbit.repository.util.TestdataFactory; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; @@ -84,10 +85,10 @@ public class RSQLSoftwareModuleFieldTest extends AbstractJpaIntegrationTest { @Test @Description("Test filter software module by type") public void testFilterByType() { - assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "==application", 2); + assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "==" + TestdataFactory.SM_TYPE_APP, 2); assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "==noExist*", 0); - assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "=in=(application)", 2); - assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "=out=(application)", 2); + assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "=in=(" + TestdataFactory.SM_TYPE_APP + ")", 2); + assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "=out=(" + TestdataFactory.SM_TYPE_APP + ")", 2); } @Test From 3cc6fdc21f8810816e7e9c7f7fde1e06cb01c7bd Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Thu, 2 Jun 2016 18:17:38 +0200 Subject: [PATCH 192/371] Basic auth entry point added, so e.g. a browser shows basic auth pop-up. Also done some clean-up/formatting. Signed-off-by: Dominic Schabel --- .../SecurityManagedConfiguration.java | 107 ++++++++++-------- .../main/resources/hawkbitdefaults.properties | 3 + 2 files changed, 62 insertions(+), 48 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java index 825e21c12..07aaffe24 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java @@ -8,6 +8,10 @@ */ package org.eclipse.hawkbit.autoconfigure.security; +import static com.google.common.collect.Lists.newArrayList; +import static org.springframework.context.annotation.AdviceMode.ASPECTJ; +import static org.springframework.core.Ordered.HIGHEST_PRECEDENCE; + import java.io.IOException; import java.net.URI; @@ -46,13 +50,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.boot.context.embedded.FilterRegistrationBean; import org.springframework.boot.context.embedded.ServletListenerRegistrationBean; import org.springframework.cache.Cache; -import org.springframework.context.annotation.AdviceMode; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.security.authentication.AuthenticationManager; @@ -72,6 +75,7 @@ import org.springframework.security.web.access.intercept.FilterSecurityIntercept import org.springframework.security.web.authentication.AnonymousAuthenticationFilter; import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; import org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter; +import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint; import org.springframework.security.web.header.writers.frameoptions.StaticAllowFromStrategy; import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter; import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter.XFrameOptionsMode; @@ -83,20 +87,17 @@ import org.vaadin.spring.security.web.VaadinRedirectStrategy; import org.vaadin.spring.security.web.authentication.VaadinAuthenticationSuccessHandler; import org.vaadin.spring.security.web.authentication.VaadinUrlAuthenticationSuccessHandler; -import com.google.common.collect.Lists; - /** - * All configurations related to SP authentication and authorization layer. - * - * - * + * All configurations related to HawkBit's authentication and authorization + * layer. */ @Configuration @EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true, mode = AdviceMode.ASPECTJ, proxyTargetClass = true, securedEnabled = true) +@EnableGlobalMethodSecurity(prePostEnabled = true, mode = ASPECTJ, proxyTargetClass = true, securedEnabled = true) @EnableWebMvcSecurity -@Order(value = Ordered.HIGHEST_PRECEDENCE) +@Order(value = HIGHEST_PRECEDENCE) public class SecurityManagedConfiguration { + private static final Logger LOG = LoggerFactory.getLogger(SecurityManagedConfiguration.class); @Autowired @@ -104,9 +105,6 @@ public class SecurityManagedConfiguration { /** * {@link WebSecurityConfigurer} for the internal SP controller API. - * - * - * */ @Configuration @Order(300) @@ -114,19 +112,25 @@ public class SecurityManagedConfiguration { @Autowired private ControllerManagement controllerManagement; + @Autowired private TenantConfigurationManagement tenantConfigurationManagement; + @Autowired private TenantAware tenantAware; + @Autowired private DdiSecurityProperties ddiSecurityConfiguration; + @Autowired private org.springframework.boot.autoconfigure.security.SecurityProperties springSecurityProperties; + @Autowired private SystemSecurityContext systemSecurityContext; @Override protected void configure(final HttpSecurity http) throws Exception { + final ControllerTenantAwareAuthenticationDetailsSource authenticationDetailsSource = new ControllerTenantAwareAuthenticationDetailsSource(); final HttpControllerPreAuthenticatedSecurityHeaderFilter securityHeaderFilter = new HttpControllerPreAuthenticatedSecurityHeaderFilter( @@ -164,16 +168,19 @@ public class SecurityManagedConfiguration { } if (ddiSecurityConfiguration.getAuthentication().getAnonymous().isEnabled()) { + LOG.info( - "******************\n** Anonymous controller security enabled, should only use for developing purposes **\n******************"); + "******************\n** Anonymous controller security enabled, should only be used for developing purposes **\n******************"); + final AnonymousAuthenticationFilter anoymousFilter = new AnonymousAuthenticationFilter( "controllerAnonymousFilter", "anonymous", - Lists.newArrayList(new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_ROLE_ANONYMOUS), + newArrayList(new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_ROLE_ANONYMOUS), new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_DOWNLOAD_ROLE))); anoymousFilter.setAuthenticationDetailsSource(authenticationDetailsSource); httpSec.requestMatchers().antMatchers("/*/controller/v1/**", "/*/controller/artifacts/v1/**").and() .securityContext().disable().anonymous().authenticationFilter(anoymousFilter); } else { + httpSec.addFilter(securityHeaderFilter).addFilter(securityTokenFilter) .addFilter(gatewaySecurityTokenFilter).addFilter(controllerAnonymousDownloadFilter) .antMatcher("/*/controller/**").anonymous().disable().authorizeRequests().anyRequest() @@ -186,6 +193,7 @@ public class SecurityManagedConfiguration { @Override protected void configure(final AuthenticationManagerBuilder auth) throws Exception { + auth.authenticationProvider(new PreAuthTokenSourceTrustAuthenticationProvider( ddiSecurityConfiguration.getRp().getTrustedIPs())); } @@ -200,6 +208,7 @@ public class SecurityManagedConfiguration { @Bean @Order(50) public FilterRegistrationBean dosFilter() { + final FilterRegistrationBean filterRegBean = new FilterRegistrationBean(); filterRegBean.setFilter(new DosFilter(securityProperties.getDos().getFilter().getMaxRead(), @@ -207,6 +216,7 @@ public class SecurityManagedConfiguration { securityProperties.getDos().getFilter().getWhitelist(), securityProperties.getClients().getBlacklist(), securityProperties.getClients().getRemoteIpHeader())); filterRegBean.addUrlPatterns("/{tenant}/controller/v1/*", "/rest/*"); + return filterRegBean; } @@ -219,22 +229,21 @@ public class SecurityManagedConfiguration { @Bean @Order(100) public FilterRegistrationBean eTagFilter() { + final FilterRegistrationBean filterRegBean = new FilterRegistrationBean(); - // eclude the URLs for downloading artifacts, so no eTag is generated in - // the - // ShallowEtagHeaderFilter, just using the SH1 hash of the artifact - // itself as 'ETag', because - // otherwise the file will be copied in memory! + // Exclude the URLs for downloading artifacts, so no eTag is generated + // in the ShallowEtagHeaderFilter, just using the SH1 hash of the + // artifact itself as 'ETag', because otherwise the file will be copied + // in memory! filterRegBean.setFilter(new ExcludePathAwareShallowETagFilter( "/rest/v1/softwaremodules/{smId}/artifacts/{artId}/download", "/{tenant}/controller/artifacts/**", "/{targetid}/softwaremodules/{softwareModuleId}/artifacts/**")); + return filterRegBean; } /** * Security configuration for the REST management API of the health url. - * - * */ @Configuration @Order(310) @@ -249,28 +258,34 @@ public class SecurityManagedConfiguration { /** * Security configuration for the REST management API. - * - * */ @Configuration @Order(350) public static class RestSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { + @Autowired private UserAuthenticationFilter userAuthenticationFilter; + @Autowired private SystemManagement systemManagement; + @Autowired private TenantAware tenantAware; + @Autowired - private org.springframework.boot.autoconfigure.security.SecurityProperties springSecurityProperties; + private SecurityProperties springSecurityProperties; @Override protected void configure(final HttpSecurity http) throws Exception { + final BasicAuthenticationEntryPoint basicAuthEntryPoint = new BasicAuthenticationEntryPoint(); + basicAuthEntryPoint.setRealmName(springSecurityProperties.getBasic().getRealm()); + HttpSecurity httpSec = http.regexMatcher("\\/rest.*|\\/system.*").csrf().disable(); if (springSecurityProperties.isRequireSsl()) { httpSec = httpSec.requiresChannel().anyRequest().requiresSecure().and(); } + httpSec.addFilterBefore(new Filter() { @Override public void init(final FilterConfig filterConfig) throws ServletException { @@ -296,12 +311,13 @@ public class SecurityManagedConfiguration { .hasAnyAuthority(SpPermission.SYSTEM_ADMIN) .antMatchers(MgmtRestConstants.BASE_SYSTEM_MAPPING + "/**") .hasAnyAuthority(SpPermission.SYSTEM_DIAG); + + httpSec.httpBasic().and().exceptionHandling().authenticationEntryPoint(basicAuthEntryPoint); } } /** * {@link WebSecurityConfigurer} for external (management) access. - * */ @Configuration @Order(400) @@ -311,10 +327,13 @@ public class SecurityManagedConfiguration { private static final String XFRAME_OPTION_DENY = "DENY"; private static final String XFRAME_OPTION_SAMEORIGIN = "SAMEORIGIN"; private static final String XFAME_OPTION_ALLOW_FROM = "ALLOW-FROM"; + @Autowired private VaadinSecurityContext vaadinSecurityContext; + @Autowired private org.springframework.boot.autoconfigure.security.SecurityProperties springSecurityProperties; + @Autowired private HawkbitSecurityProperties securityProperties; @@ -346,10 +365,13 @@ public class SecurityManagedConfiguration { */ @Bean public VaadinAuthenticationSuccessHandler redirectSaveHandler() { + final VaadinUrlAuthenticationSuccessHandler handler = new TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler(); + handler.setRedirectStrategy(vaadinRedirectStrategy()); handler.setDefaultTargetUrl("/UI/"); handler.setTargetUrlParameter("r"); + return handler; } @@ -371,7 +393,8 @@ public class SecurityManagedConfiguration { // configuration xframe-option final String confXframeOption = securityProperties.getXframe().getOption(); final String confAllowFromUri = securityProperties.getXframe().getAllowfrom(); - if (confXframeOption.equals(XFAME_OPTION_ALLOW_FROM) && confAllowFromUri.isEmpty()) { + + if (XFAME_OPTION_ALLOW_FROM.equals(confXframeOption) && confAllowFromUri.isEmpty()) { // if allow-from option is specified but no allowFromUri throw // exception throw new IllegalStateException("hawkbit.server.security.xframe.option has been specified as ALLOW-FROM" @@ -380,9 +403,8 @@ public class SecurityManagedConfiguration { } // workaround regex: we need to exclude the URL /UI/HEARTBEAT here - // because we bound the - // vaadin application to /UI and not to root, described in - // vaadin-forum: + // because we bound the vaadin application to /UI and not to root, + // described in vaadin-forum: // https://vaadin.com/forum#!/thread/3200565. HttpSecurity httpSec = http.regexMatcher("(?!.*HEARTBEAT)^.*\\/UI.*$") // disable as CSRF is handled by Vaadin @@ -391,8 +413,9 @@ public class SecurityManagedConfiguration { if (springSecurityProperties.isRequireSsl()) { httpSec = httpSec.requiresChannel().anyRequest().requiresSecure().and(); } else { + LOG.info( - "\"******************\\n** Requires HTTPS Security has been disabled for UI, should only use for developing purposes **\\n******************\""); + "\"******************\\n** Requires HTTPS Security has been disabled for UI, should only be used for developing purposes **\\n******************\""); } // for UI integrator we allow frame integration on same origin @@ -441,9 +464,6 @@ public class SecurityManagedConfiguration { /** * A Websecruity config to handle and filter the download ids. - * - * - * */ @Configuration @EnableWebSecurity @@ -459,6 +479,7 @@ public class SecurityManagedConfiguration { @Override protected void configure(final HttpSecurity http) throws Exception { + final HttpDownloadAuthenticationFilter downloadIdAuthenticationFilter = new HttpDownloadAuthenticationFilter( downloadIdCache); downloadIdAuthenticationFilter.setAuthenticationManager(authenticationManager()); @@ -476,32 +497,21 @@ public class SecurityManagedConfiguration { auth.authenticationProvider(new PreAuthTokenSourceTrustAuthenticationProvider( ddiSecurityConfiguration.getRp().getTrustedIPs())); } - } - } /** * After a successful login on the UI we need to ensure to create the tenant * meta data within SP. - * - * */ class TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler extends VaadinUrlAuthenticationSuccessHandler { @Autowired private SystemManagement systemManagement; - /* - * (non-Javadoc) - * - * @see org.vaadin.spring.security.web.authentication. - * SavedRequestAwareVaadinAuthenticationSuccessHandler - * #onAuthenticationSuccess(org.springframework.security.core. - * Authentication) - */ @Override public void onAuthenticationSuccess(final Authentication authentication) throws Exception { + if (authentication.getClass().equals(TenantUserPasswordAuthenticationToken.class)) { systemManagement .getTenantMetadata(((TenantUserPasswordAuthenticationToken) authentication).getTenant().toString()); @@ -515,14 +525,13 @@ class TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler extends // has been fixed. systemManagement.getTenantMetadata("DEFAULT"); } + super.onAuthenticationSuccess(authentication); } } /** * Sevletfilter to create metadata after successful authentication over RESTful. - * - * */ class AuthenticationSuccessTenantMetadataCreationFilter implements Filter { @@ -543,11 +552,13 @@ class AuthenticationSuccessTenantMetadataCreationFilter implements Filter { @Override public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { + final String currentTenant = tenantAware.getCurrentTenant(); if (currentTenant != null) { // lazy initialize tenant meta data after successful authentication systemManagement.getTenantMetadata(currentTenant); } + chain.doFilter(request, response); } diff --git a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties index 488777b8d..5525794a7 100644 --- a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties +++ b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties @@ -7,6 +7,9 @@ # http://www.eclipse.org/legal/epl-v10.html # +# Displayed basic auth realm +security.basic.realm=HawkBit + # JPA / Datasource spring.jpa.eclipselink.eclipselink.weaving=false spring.jpa.database=H2 From 223e0f6c857a55e6392ec1fd8ef27a055030b459 Mon Sep 17 00:00:00 2001 From: AMU7KOR Date: Fri, 3 Jun 2016 10:02:50 +0530 Subject: [PATCH 193/371] Fix: Interupt upload if software moudle is not selected Signed-off-by: AMU7KOR --- .../ui/artifacts/upload/UploadHandler.java | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java index 61f68f397..78a6fd9a9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadHandler.java @@ -133,7 +133,6 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public OutputStream receiveUpload(final String fileName, final String mimeType) { - uploadInterrupted = false; aborted = false; failureReason = null; this.fileName = fileName; @@ -214,17 +213,23 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public void uploadStarted(final StartedEvent event) { - selectedSwForUpload = artifactUploadState.getSelectedBaseSoftwareModule().get(); + uploadInterrupted = false; + selectedSwForUpload = artifactUploadState.getSelectedBaseSoftwareModule().isPresent() ? artifactUploadState + .getSelectedBaseSoftwareModule().get() : null; - // single file session - if (view.isSoftwareModuleSelected() && !view.checkIfFileIsDuplicate(event.getFilename(), selectedSwForUpload)) { - LOG.debug("Upload started for file :{}", event.getFilename()); - eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STARTED, new UploadFileStatus( - event.getFilename(), 0, 0, selectedSwForUpload))); - } else { + if (view.isSoftwareModuleSelected()) { + // single file session + if (!view.checkIfFileIsDuplicate(event.getFilename(), selectedSwForUpload)) { + LOG.debug("Upload started for file :{}", event.getFilename()); + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_STARTED, + new UploadFileStatus(event.getFilename(), 0, 0, selectedSwForUpload))); + } + } + else { failureReason = i18n.get("message.upload.failed"); upload.interruptUpload(); - // actual interrupt will happen a bit late so setting the below flag + // actual interrupt will happen a bit late so setting the below + // flag uploadInterrupted = true; } } @@ -319,14 +324,20 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene */ @Override public void uploadFailed(final FailedEvent event) { - if (failureReason == null) { - failureReason = event.getReason().getMessage(); - } - eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( - fileName, failureReason, selectedSwForUpload))); - if (!aborted) { - LOG.info("Upload failed for file :{}", event.getFilename()); - LOG.info("Upload failed for file :{}", event.getReason()); + /** + * If upload failed due to no selected software UPLOAD_FAILED event need + * not be published. + */ + if (selectedSwForUpload != null) { + if (failureReason == null) { + failureReason = event.getReason().getMessage(); + } + eventBus.publish(this, new UploadStatusEvent(UploadStatusEventType.UPLOAD_FAILED, new UploadFileStatus( + fileName, failureReason, selectedSwForUpload))); + if (!aborted) { + LOG.info("Upload failed for file :{}", event.getFilename()); + LOG.info("Upload failed for file :{}", event.getReason()); + } } } From 92e1d78df377dcf41070cfb8b9c269997f313a43 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 3 Jun 2016 07:47:22 +0200 Subject: [PATCH 194/371] exclude .sonar directory from license check Signed-off-by: Michael Hirsch --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index 0e4fec71d..49ef805b3 100644 --- a/pom.xml +++ b/pom.xml @@ -168,6 +168,8 @@ eclipse_codeformatter.xml **/addons.scss **/VAADIN/widgetsets/** + .sonar + **/.sonar/** JAVADOC_STYLE From 6c725efd70ad7ed9ae045249cabc773799179716 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 3 Jun 2016 09:49:36 +0200 Subject: [PATCH 195/371] Code review, correct font-size of close/minimize button of commonDialogWindow Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 45 ++++++++++++++----- .../CreateUpdateSoftwareTypeLayout.java | 8 ++-- .../ColorPickerConstants.java | 10 ++++- .../ColorPickerHelper.java | 40 ++++++++++++----- .../ColorPickerLayout.java | 10 +++-- .../hawkbit/ui/common/CommonDialogWindow.java | 16 ++++++- .../SPUIButtonStyleBorderWithIcon.java | 24 +++++++--- .../CreateUpdateDistSetTypeLayout.java | 39 ++++++---------- .../CreateOrUpdateFilterHeader.java | 18 +++----- ...ava => AbstractCreateUpdateTagLayout.java} | 13 +++--- .../ui/layouts/CreateUpdateTypeLayout.java | 22 +++++---- .../DistributionAddUpdateWindowLayout.java | 5 +-- ...eateUpdateDistributionTagLayoutWindow.java | 11 ++--- .../TargetBulkUpdateWindowLayout.java | 4 +- .../CreateUpdateTargetTagLayoutWindow.java | 10 ++--- .../targettag/MultipleTargetFilter.java | 1 + .../rollout/AddUpdateRolloutWindowLayout.java | 29 +++++++++--- .../ui/rollout/rollout/RolloutListGrid.java | 11 ++--- .../ui/rollout/rollout/RolloutListHeader.java | 4 -- .../DefaultDistributionSetTypeLayout.java | 5 +-- .../TenantConfigurationDashboardView.java | 11 +++-- ...ficateAuthenticationConfigurationItem.java | 5 +-- ...yTokenAuthenticationConfigurationItem.java | 1 + .../ui/utils/SPUIComponetIdProvider.java | 4 -- .../themes/hawkbit/customstyles/others.scss | 2 +- .../hawkbit/customstyles/popup-common.scss | 8 +++- 26 files changed, 213 insertions(+), 143 deletions(-) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/{colorPicker => colorpicker}/ColorPickerConstants.java (77%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/{colorPicker => colorpicker}/ColorPickerHelper.java (66%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/{colorPicker => colorpicker}/ColorPickerLayout.java (97%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/{CreateUpdateTagLayout.java => AbstractCreateUpdateTagLayout.java} (98%) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index f766af2d4..33cefae8a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -12,7 +12,6 @@ import java.io.Serializable; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; @@ -29,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.spring.events.EventBus; +import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.ComboBox; @@ -64,9 +64,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se @Autowired private transient SoftwareManagement softwareManagement; - @Autowired - private transient UiProperties uiProperties; - private Label mandatoryLabel; private TextField nameTextField; @@ -182,9 +179,8 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se } /** - * Keep UI components on Layout. + * Build the window content and get an instance of customDialogWindow * - * @return */ private void createWindow() { @@ -215,22 +211,28 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se nameTextField.focus(); } + /** + * add a TextChangeListener to the description TextField + */ private void addDescriptionTextChangeListener() { descTextArea.addTextChangeListener(event -> { if (event.getText().equals(oldDescriptionValue) && vendorTextField.getValue().equals(oldVendorValue)) { - window.setSaveButtonEnabled(false); + window.setSaveButtonEnabled(hasDescriptionOrVendorChanged(event)); } else { - window.setSaveButtonEnabled(true); + window.setSaveButtonEnabled(hasDescriptionOrVendorChanged(event)); } }); } + /** + * add a TextChangeListener to the vendor TextField + */ private void addVendorTextChangeListener() { vendorTextField.addTextChangeListener(event -> { if (event.getText().equals(oldVendorValue) && descTextArea.getValue().equals(oldDescriptionValue)) { - window.setSaveButtonEnabled(false); + window.setSaveButtonEnabled(hasDescriptionOrVendorChanged(event)); } else { - window.setSaveButtonEnabled(true); + window.setSaveButtonEnabled(hasDescriptionOrVendorChanged(event)); } }); } @@ -264,6 +266,9 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se } } + /** + * updates a softwareModule + */ private void updateSwModule() { final String newDesc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); final String newVendor = HawkbitCommonUtil.trimAndNullIfEmpty(vendorTextField.getValue()); @@ -280,6 +285,9 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se closeThisWindow(); } + /** + * fill the data of a softwareModule in the content of the window + */ private void populateValuesOfSwModule() { final SoftwareModule swModle = softwareManagement.findSoftwareModuleById(baseSwModuleId); nameTextField.setValue(swModle.getName()); @@ -333,6 +341,10 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se return isValid; } + /** + * saves or updates a softwareModule depending on the information if it is a + * new softwareModule or an existing one + */ private void save() { if (editSwModule) { updateSwModule(); @@ -341,4 +353,17 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se addNewBaseSoftware(); } } + + /** + * Checks if the description and vendor have changed and set the button + * enabled/disabled + * + * @param event + * TextChangeEvent + * @return Boolean + */ + private boolean hasDescriptionOrVendorChanged(final TextChangeEvent event) { + return !(event.getText().equals(oldDescriptionValue) && vendorTextField.getValue().equals(oldVendorValue)); + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index d23329f37..70aceb6db 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -11,12 +11,13 @@ package org.eclipse.hawkbit.ui.artifacts.smtype; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; @@ -279,9 +280,8 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout protected void previewButtonClicked() { if (!tagPreviewBtnClicked) { final String selectedOption = (String) optiongroup.getValue(); - if (null != selectedOption && selectedOption.equalsIgnoreCase(updateTypeStr)) { + if (StringUtils.isNotEmpty(selectedOption) && selectedOption.equalsIgnoreCase(updateTypeStr)) { if (null != tagNameComboBox.getValue()) { - final SoftwareModuleType typeSelected = swTypeManagementService .findSoftwareModuleTypeByName(tagNameComboBox.getValue().toString()); if (null != typeSelected) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerConstants.java similarity index 77% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerConstants.java index ddb4eb70c..06e280e4e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerConstants.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerConstants.java @@ -6,12 +6,20 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.colorPicker; +package org.eclipse.hawkbit.ui.colorpicker; import com.vaadin.shared.ui.colorpicker.Color; +/** + * Provides color constants for the ColorPickerLayout + * + */ public class ColorPickerConstants { public static final String DEFAULT_COLOR = "rgb(44,151,32)"; public static final Color START_COLOR = new Color(0, 146, 58); + + private ColorPickerConstants() { + + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerHelper.java similarity index 66% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerHelper.java index 815bb97b2..923c58fe3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerHelper.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerHelper.java @@ -6,8 +6,9 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.colorPicker; +package org.eclipse.hawkbit.ui.colorpicker; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,19 +16,27 @@ import org.slf4j.LoggerFactory; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.ui.Slider.ValueOutOfBoundsException; +/** + * Contains helper methods for the ColorPickerLayout to handle the ColorPicker + * + */ public class ColorPickerHelper { private static final Logger LOG = LoggerFactory.getLogger(ColorPickerHelper.class); + private ColorPickerHelper() { + + } + /** - * Get color picked value in string. + * Get color picked value as string. * * @return String of color picked value. */ public static String getColorPickedString(final SpColorPickerPreview preview) { - return "rgb(" + preview.getColor().getRed() + "," + preview.getColor().getGreen() + "," - + preview.getColor().getBlue() + ")"; + final Color color = preview.getColor(); + return "rgb(" + color.getRed() + "," + color.getGreen() + "," + color.getBlue() + ")"; } /** @@ -39,9 +48,11 @@ public class ColorPickerHelper { */ public static Color rgbToColorConverter(final String value) { - if (!value.startsWith("rgb")) { - return null; + if (StringUtils.isEmpty(value) || (StringUtils.isNotEmpty(value) && !value.startsWith("rgb"))) { + throw new IllegalArgumentException( + "String to convert is empty or of invalid format - value: '" + value + "'"); } + // RGB color format rgb/rgba(255,255,255,0.1) final String[] colors = value.substring(value.indexOf('(') + 1, value.length() - 1).split(","); final int red = Integer.parseInt(colors[0]); @@ -50,20 +61,27 @@ public class ColorPickerHelper { if (colors.length > 3) { final int alpha = (int) (Double.parseDouble(colors[3]) * 255d); return new Color(red, green, blue, alpha); - } else { - return new Color(red, green, blue); } + return new Color(red, green, blue); } + /** + * + * Gets the selectedColor in the ColorPickerLayout and sets the slider + * values + * + * @param colorPickerLayout + * colorPickerLayout + */ public static void setRgbSliderValues(final ColorPickerLayout colorPickerLayout) { try { final double redColorValue = colorPickerLayout.getSelectedColor().getRed(); - colorPickerLayout.getRedSlider().setValue(new Double(redColorValue)); + colorPickerLayout.getRedSlider().setValue(Double.valueOf(redColorValue)); final double blueColorValue = colorPickerLayout.getSelectedColor().getBlue(); - colorPickerLayout.getBlueSlider().setValue(new Double(blueColorValue)); + colorPickerLayout.getBlueSlider().setValue(Double.valueOf(blueColorValue)); final double greenColorValue = colorPickerLayout.getSelectedColor().getGreen(); - colorPickerLayout.getGreenSlider().setValue(new Double(greenColorValue)); + colorPickerLayout.getGreenSlider().setValue(Double.valueOf(greenColorValue)); } catch (final ValueOutOfBoundsException e) { LOG.error("Unable to set RGB color value to " + colorPickerLayout.getSelectedColor().getRed() + "," + colorPickerLayout.getSelectedColor().getGreen() + "," diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java similarity index 97% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java index dba5ac8df..7d2046bd9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorPicker/ColorPickerLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.colorPicker; +package org.eclipse.hawkbit.ui.colorpicker; import java.util.HashSet; import java.util.Set; @@ -21,13 +21,15 @@ import com.vaadin.ui.Slider; import com.vaadin.ui.components.colorpicker.ColorPickerGradient; import com.vaadin.ui.components.colorpicker.ColorSelector; +/** + * + * Defines the Layout for the ColorPicker + * + */ public class ColorPickerLayout extends GridLayout { private static final long serialVersionUID = -7025970080613796692L; - /** - * Local Instance of ColorPickerPreview. - */ private SpColorPickerPreview selPreview; private ColorPickerGradient colorSelect; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 8b179ba4a..6b59ebd69 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -9,11 +9,13 @@ package org.eclipse.hawkbit.ui.common; import org.apache.commons.lang3.StringUtils; +import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleBorderWithIcon; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.server.FontAwesome; @@ -27,6 +29,12 @@ import com.vaadin.ui.Link; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; +/** + * + * Superclass for pop-up-windows including a minimize and close icon in the + * upper right corner and a save and cancel button at the bottom. + * + */ public class CommonDialogWindow extends Window { private static final long serialVersionUID = -1321949234316858703L; @@ -49,6 +57,9 @@ public class CommonDialogWindow extends Window { protected ValueChangeListener buttonEnableListener; + @Autowired + private transient UiProperties uiProperties; + public CommonDialogWindow() { init(null, null); @@ -84,6 +95,7 @@ public class CommonDialogWindow extends Window { setResizable(true); center(); setModal(true); + addStyleName("fontsize"); } private HorizontalLayout createActionButtonsLayout(final ClickListener saveButtonClickListener, @@ -100,7 +112,7 @@ public class CommonDialogWindow extends Window { if (null != saveButtonClickListener) { saveButton.addClickListener(saveButtonClickListener); } else { - LOG.warn("No ClickListener for saveButton specified"); + throw new IllegalArgumentException("no ClickListener for save button specified"); } buttonsLayout.addComponent(saveButton); buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); @@ -113,7 +125,7 @@ public class CommonDialogWindow extends Window { if (null != cancelButtonClickListener) { cancelButton.addClickListener(cancelButtonClickListener); } else { - LOG.warn("No ClickListener for cancelButton specified"); + throw new IllegalArgumentException("no ClickListener for cancel button specified"); } buttonsLayout.addComponent(cancelButton); buttonsLayout.setComponentAlignment(cancelButton, Alignment.MIDDLE_LEFT); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java index 2f8b88d74..be72dd700 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java @@ -14,6 +14,8 @@ import com.vaadin.ui.themes.ValoTheme; public class SPUIButtonStyleBorderWithIcon implements SPUIButtonDecorator { + Button button; + /** * Style for button: Primary. */ @@ -21,7 +23,19 @@ public class SPUIButtonStyleBorderWithIcon implements SPUIButtonDecorator { @Override public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { - // Set Style + this.button = button; + + setButtonStyle(style, setStyle); + setButtonIcon(icon); + + button.addStyleName(ValoTheme.LABEL_SMALL); + button.setSizeFull(); + + return button; + } + + private void setButtonStyle(final String style, final boolean setStyle) { + if (null != style) { if (setStyle) { button.setStyleName(style); @@ -29,14 +43,12 @@ public class SPUIButtonStyleBorderWithIcon implements SPUIButtonDecorator { button.addStyleName(style); } } - button.addStyleName(ValoTheme.LABEL_SMALL); - button.setSizeFull(); + } + + private void setButtonIcon(final Resource icon) { - // Set icon if (null != icon) { button.setIcon(icon); } - return button; } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 266339050..c43110b10 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -16,8 +16,8 @@ import org.eclipse.hawkbit.repository.DistributionSetRepository; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -350,12 +350,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout final CheckBox mandatoryCheckBox = (CheckBox) item.getItemProperty(DIST_TYPE_MANDATORY).getValue(); final Boolean isMandatory = mandatoryCheckBox.getValue(); final SoftwareModuleType swModuleType = softwareManagement.findSoftwareModuleTypeByName(distTypeName); - if (isMandatory) { - newDistType.addMandatoryModuleType(swModuleType); - - } else { - newDistType.addOptionalModuleType(swModuleType); - } + checkMandatoryAndAddMandatoryModuleType(newDistType, isMandatory, swModuleType); } if (null != typeDescValue) { newDistType.setDescription(typeDescValue); @@ -400,12 +395,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout final String distTypeName = (String) item.getItemProperty(DIST_TYPE_NAME).getValue(); final SoftwareModuleType swModuleType = softwareManagement .findSoftwareModuleTypeByName(distTypeName); - if (isMandatory) { - updateDistSetType.addMandatoryModuleType(swModuleType); - - } else { - updateDistSetType.addOptionalModuleType(swModuleType); - } + checkMandatoryAndAddMandatoryModuleType(updateDistSetType, isMandatory, swModuleType); } } updateDistSetType.setColour(ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview())); @@ -422,6 +412,16 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } + private void checkMandatoryAndAddMandatoryModuleType(final DistributionSetType updateDistSetType, + final Boolean isMandatory, final SoftwareModuleType swModuleType) { + if (isMandatory) { + updateDistSetType.addMandatoryModuleType(swModuleType); + + } else { + updateDistSetType.addOptionalModuleType(swModuleType); + } + } + private DistributionSetType removeSWModuleTypesFromDistSetType(final String selectedDistSetType) { final DistributionSetType distSetType = fetchDistributionSetType(selectedDistSetType); @@ -590,17 +590,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } } - /** - * reset the tag name and tag description component border color. - */ - @Override - protected void restoreComponentStyles() { - - super.restoreComponentStyles(); - typeKey.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); - typeKey.addStyleName(SPUIDefinitions.DIST_SET_TYPE_KEY); - } - @Override protected void save(final ClickEvent event) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index cbade914b..a9ea2092d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -68,7 +68,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button private static final long serialVersionUID = 7474232427119031474L; - private static final String breadcrumbCustomFilters = "breadcrumb.target.filter.custom.filters"; + private static final String BREADCRUMB_CUSTOM_FILTERS = "breadcrumb.target.filter.custom.filters"; @Autowired private I18N i18n; @@ -238,8 +238,8 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button final Button createFilterViewLink = SPUIComponentProvider.getButton(null, "", "", null, false, null, SPUIButtonStyleSmallNoBorder.class); createFilterViewLink.setStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link rollout-caption-links"); - createFilterViewLink.setDescription(i18n.get(breadcrumbCustomFilters)); - createFilterViewLink.setCaption(i18n.get(breadcrumbCustomFilters)); + createFilterViewLink.setDescription(i18n.get(BREADCRUMB_CUSTOM_FILTERS)); + createFilterViewLink.setCaption(i18n.get(BREADCRUMB_CUSTOM_FILTERS)); createFilterViewLink.addClickListener(value -> showCustomFiltersView()); return createFilterViewLink; @@ -487,15 +487,11 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button public void buttonClick(final ClickEvent event) { if (SPUIComponetIdProvider.CUSTOM_FILTER_SAVE_ICON.equals(event.getComponent().getId()) && manadatoryFieldsPresent()) { - if (filterManagementUIState.isCreateFilterViewDisplayed()) { - if (!doesAlreadyExists()) { - createTargetFilterQuery(); - } + if (filterManagementUIState.isCreateFilterViewDisplayed() && !doesAlreadyExists()) { + createTargetFilterQuery(); } else { - if (!nameTextField.getValue().equals(oldFilterName)) { - if (!doesAlreadyExists()) { - updateCustomFilter(); - } + if (!nameTextField.getValue().equals(oldFilterName) && !doesAlreadyExists()) { + updateCustomFilter(); } else { updateCustomFilter(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java similarity index 98% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index efe629eb7..c92790022 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -15,9 +15,9 @@ import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerLayout; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerLayout; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -27,8 +27,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -58,9 +56,9 @@ import com.vaadin.ui.themes.ValoTheme; /** * Abstract class for create/update target tag layout. */ -public abstract class CreateUpdateTagLayout extends CustomComponent implements ColorChangeListener, ColorSelector { +public abstract class AbstractCreateUpdateTagLayout extends CustomComponent + implements ColorChangeListener, ColorSelector { private static final long serialVersionUID = 4229177824620576456L; - private static final Logger LOG = LoggerFactory.getLogger(CreateUpdateTagLayout.class); private static final String TAG_NAME_DYNAMIC_STYLE = "new-tag-name"; private static final String TAG_DESC_DYNAMIC_STYLE = "new-tag-desc"; protected static final String TAG_DYNAMIC_STYLE = "tag-color-preview"; @@ -236,6 +234,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C protected void previewButtonClicked() { if (!tagPreviewBtnClicked) { setColor(); + mainLayout.getComponent(1, 0); mainLayout.addComponent(colorPickerLayout, 1, 0); mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index ad2758a5f..019b64aaa 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -11,8 +11,8 @@ package org.eclipse.hawkbit.ui.layouts; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -32,7 +32,13 @@ import com.vaadin.ui.components.colorpicker.ColorChangeEvent; import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; -public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { +/** + * + * Superclass defining common properties and methods for creating/updating + * types. + * + */ +public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { private static final long serialVersionUID = 5732904956185988397L; @@ -187,6 +193,7 @@ public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { protected void restoreComponentStyles() { super.restoreComponentStyles(); typeKey.removeStyleName(TYPE_NAME_DYNAMIC_STYLE); + typeKey.addStyleName(SPUIDefinitions.TYPE_KEY); } /** @@ -298,20 +305,17 @@ public class CreateUpdateTypeLayout extends CreateUpdateTagLayout { @Override protected void save(final ClickEvent event) { - // TODO Auto-generated method stub - + // is implemented in the inherited class } @Override protected void populateTagNameCombo() { - // TODO Auto-generated method stub - + // is implemented in the inherited class } @Override protected void setTagDetails(final String tagSelected) { - // TODO Auto-generated method stub - + // is implemented in the inherited class } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 2ce9f84f5..459893521 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -22,7 +22,6 @@ import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantMetaData; -import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; @@ -91,9 +90,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { @Autowired private transient TenantMetaDataRepository tenantMetaDataRepository; - @Autowired - private transient UiProperties uiProperties; - private TextField distNameTextField; private TextField distVersionTextField; private Label madatoryLabel; @@ -537,4 +533,5 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { public void setOriginalDistSetTYpe(final String originalDistSetType) { this.originalDistSetType = originalDistSetType; } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 1c6372033..c4da4d12e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -16,9 +16,9 @@ import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; -import org.eclipse.hawkbit.ui.layouts.CreateUpdateTagLayout; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.layouts.AbstractCreateUpdateTagLayout; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.vaadin.spring.events.EventScope; @@ -31,11 +31,12 @@ import com.vaadin.ui.UI; /** * - * + * Class for Create/Update Tag Layout of distribution set + * */ @SpringComponent @ViewScope -public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayout { +public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdateTagLayout { private static final long serialVersionUID = 444276149954167545L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java index e938f68f3..231b072fd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetBulkUpdateWindowLayout.java @@ -354,7 +354,9 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent { } /** - * @return + * create and return window + * + * @return Window window */ public Window getWindow() { managementUIState.setBulkUploadWindowMinimised(false); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java index f3f78377a..ae0c19f38 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java @@ -16,9 +16,9 @@ import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerConstants; -import org.eclipse.hawkbit.ui.colorPicker.ColorPickerHelper; -import org.eclipse.hawkbit.ui.layouts.CreateUpdateTagLayout; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; +import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; +import org.eclipse.hawkbit.ui.layouts.AbstractCreateUpdateTagLayout; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -28,11 +28,11 @@ import com.vaadin.ui.Button.ClickEvent; /** * - * + * Class for Create / Update Tag Layout of target */ @SpringComponent @ViewScope -public class CreateUpdateTargetTagLayoutWindow extends CreateUpdateTagLayout { +public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLayout { private static final long serialVersionUID = 2446682350481560235L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java index 6e4c73a92..c2403e96a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/MultipleTargetFilter.java @@ -170,4 +170,5 @@ public class MultipleTargetFilter extends Accordion implements SelectedTabChange UI.getCurrent().addWindow(addUpdateWindow); addUpdateWindow.setVisible(true); } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 0f5b00f1a..f29c4e9d9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -41,6 +41,8 @@ import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; @@ -76,6 +78,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private static final long serialVersionUID = 2999293468801479916L; + private static final Logger LOG = LoggerFactory.getLogger(AddUpdateRolloutWindowLayout.class); + private static final String MESSAGE_ROLLOUT_FIELD_VALUE_RANGE = "message.rollout.field.value.range"; private static final String MESSAGE_ENTER_NUMBER = "message.enter.number"; @@ -642,11 +646,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, groupSize), 0, groupSize) .validate(Integer.valueOf(value.toString())); } - } catch (final InvalidValueException ex) { - throw ex; + } + // suppress the need of preserve original exception, will blow + // up the + // log and not necessary here + catch (@SuppressWarnings("squid:S1166") final InvalidValueException ex) { + LOG.error(ex.getMessage()); } } - } private int getGroupSize() { @@ -662,8 +669,12 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, 100), 0, 100) .validate(Integer.valueOf(value.toString())); - } catch (final InvalidValueException ex) { - throw ex; + } + // suppress the need of preserve original exception, will blow + // up the + // log and not necessary here + catch (@SuppressWarnings("squid:S1166") final InvalidValueException ex) { + LOG.error(ex.getMessage()); } } } @@ -677,8 +688,12 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, 500), 0, 500) .validate(Integer.valueOf(value.toString())); - } catch (final InvalidValueException ex) { - throw ex; + } + // suppress the need of preserve original exception, will blow + // up the + // log and not necessary here + catch (@SuppressWarnings("squid:S1166") final InvalidValueException ex) { + LOG.error(ex.getMessage()); } } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index a63dd37e8..c55800138 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -632,15 +632,13 @@ public class RolloutListGrid extends AbstractGrid { @Override public TotalTargetCountStatus convertToModel(final String value, - final Class targetType, final Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { + final Class targetType, final Locale locale) { return null; } @Override public String convertToPresentation(final TotalTargetCountStatus value, - final Class targetType, final Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { + final Class targetType, final Locale locale) { return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); } @@ -664,14 +662,13 @@ public class RolloutListGrid extends AbstractGrid { private static final long serialVersionUID = 6589305227035220369L; @Override - public Long convertToModel(final String value, final Class targetType, final Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { + public Long convertToModel(final String value, final Class targetType, final Locale locale) { return null; } @Override public String convertToPresentation(final Long value, final Class targetType, - final Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + final Locale locale) { if (value == 0) { return ""; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index f4d2a325f..b3043eb4a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -15,7 +15,6 @@ import org.eclipse.hawkbit.ui.common.grid.AbstractGridHeader; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -49,9 +48,6 @@ public class RolloutListHeader extends AbstractGridHeader { @Autowired private transient EventBus.SessionEventBus eventBus; - @Autowired - private I18N i18n; - @Autowired private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java index 098456d88..aa2a31a7c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DefaultDistributionSetTypeLayout.java @@ -14,7 +14,6 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantMetaData; -import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -50,9 +49,6 @@ public class DefaultDistributionSetTypeLayout extends BaseConfigurationView impl @Autowired private I18N i18n; - @Autowired - private transient UiProperties uiProperties; - private Long currentDefaultDisSetType; private Long selectedDefaultDisSetType; @@ -158,4 +154,5 @@ public class DefaultDistributionSetTypeLayout extends BaseConfigurationView impl changeIcon.setVisible(false); } } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java index a6f1b8c32..1ef0d1960 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java @@ -32,6 +32,7 @@ import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Link; import com.vaadin.ui.Panel; import com.vaadin.ui.VerticalLayout; @@ -118,9 +119,9 @@ public class TenantConfigurationDashboardView extends CustomComponent implements undoConfigurationBtn.addClickListener(event -> undoConfiguration()); hlayout.addComponent(undoConfigurationBtn); - // final Link linkToSystemConfigHelp = SPUIComponentProvider - // .getHelpLink(uiProperties.getLinks().getDocumentation().getSystemConfigurationView()); - // hlayout.addComponent(linkToSystemConfigHelp); + final Link linkToSystemConfigHelp = SPUIComponentProvider + .getHelpLink(uiProperties.getLinks().getDocumentation().getSystemConfigurationView()); + hlayout.addComponent(linkToSystemConfigHelp); return hlayout; } @@ -142,9 +143,7 @@ public class TenantConfigurationDashboardView extends CustomComponent implements } private void undoConfiguration() { - configurationViews.forEach(confView -> { - confView.undo(); - }); + configurationViews.forEach(confView -> confView.undo()); // More methods saveConfigurationBtn.setEnabled(false); undoConfigurationBtn.setEnabled(false); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java index e49f77b8d..872bdef29 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/CertificateAuthenticationConfigurationItem.java @@ -41,10 +41,6 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti private VerticalLayout detailLayout; private TextField caRootAuthorityTextField; - /** - * @param systemManagement - * the system management to retrie the configuration - */ @Autowired public CertificateAuthenticationConfigurationItem( final TenantConfigurationManagement tenantConfigurationManagement) { @@ -147,4 +143,5 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti configurationCaRootAuthorityChanged = true; notifyConfigurationChanged(); } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java index 86d51409a..31e910ddc 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/GatewaySecurityTokenAuthenticationConfigurationItem.java @@ -195,4 +195,5 @@ public class GatewaySecurityTokenAuthenticationConfigurationItem extends Abstrac gatewayTokenNameTextField.setValue(getSecurityTokenName()); gatewayTokenkeyLabel.setValue(getSecurityTokenKey()); } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java index 3992cf042..8766e06cb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java @@ -11,10 +11,6 @@ package org.eclipse.hawkbit.ui.utils; /** * Interface to provide the unchanged constants. * - * - * - * - * */ public final class SPUIComponetIdProvider { /** diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss index 3e90b5ed2..d327baa94 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/others.scss @@ -88,7 +88,7 @@ } .icon-only { - // margin-bottom: 6px !important; + margin-bottom: 6px !important; } //Toggle between pin and status icon diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss index 7b4bfe0d1..457fc266d 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss @@ -11,7 +11,6 @@ //Color picker layout position adjustment .rgb-vertical-layout { - // margin-top: 100px !important; padding-bottom: 12px; } @@ -47,4 +46,11 @@ box-shadow: none !important; height: 75px !important; } + + .v-window-fontsize .v-window-closebox, + .v-window-fontsize .v-window-maximizebox, + .v-window-fontsize .v-window-restorebox { + font-size: 16px; + } + } From 70f18914f76d12eecdc58792430a933364ae5e9a Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 3 Jun 2016 11:17:45 +0200 Subject: [PATCH 196/371] remove empty javadoc lines Signed-off-by: Melanie Retter --- .../ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 33cefae8a..c2cb281d3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -43,8 +43,6 @@ import com.vaadin.ui.themes.ValoTheme; /** * Generates window for Software module add or update. - * - * */ @SpringComponent @ViewScope From 7468d8961ef982b01ac4b3e0c28b060a45cbd7c6 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 3 Jun 2016 12:34:09 +0200 Subject: [PATCH 197/371] Completed constants. Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/repository/Constants.java | 28 +++++++++++++++---- .../repository/jpa/JpaSystemManagement.java | 9 +++--- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java index 6ccb4bc82..9a1e442b0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java @@ -1,5 +1,10 @@ /** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.repository; @@ -12,16 +17,29 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType; */ public final class Constants { /** - * Default {@link SoftwareModuleType} generated by repository for every new - * account for Firmware/Operating System. + * {@link SoftwareModuleType#getKey()} of a {@link SoftwareModuleType} + * generated by repository for every new account for Firmware/Operating + * System. */ public static final String SMT_DEFAULT_OS_KEY = "os"; /** - * Default {@link SoftwareModuleType} generated by repository for every new - * account for applications. + * {@link SoftwareModuleType#getKey()} of a {@link SoftwareModuleType} + * generated by repository for every new account for applications. */ public static final String SMT_DEFAULT_APP_KEY = "application"; + /** + * {@link SoftwareModuleType#getName()} of a {@link SoftwareModuleType} + * generated by repository for every new account for "Firmware/Operating + * System" . + */ + public static final String SMT_DEFAULT_OS_NAME = "Firmware"; + /** + * {@link SoftwareModuleType#getName()} of a {@link SoftwareModuleType} + * generated by repository for every new account for "applications/apps". + */ + public static final String SMT_DEFAULT_APP_NAME = "Application"; + /** * {@link DistributionSetType#getKey()} of a {@link DistributionSetType} * generated by repository for every new account that includes diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index a2865c4b0..3fed3d858 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -284,10 +284,11 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst } private DistributionSetType createStandardSoftwareDataSetup() { - final SoftwareModuleType app = softwareModuleTypeRepository.save(new JpaSoftwareModuleType( - Constants.SMT_DEFAULT_APP_KEY, "Application", "Application Addons", Integer.MAX_VALUE)); + final SoftwareModuleType app = softwareModuleTypeRepository + .save(new JpaSoftwareModuleType(Constants.SMT_DEFAULT_APP_KEY, Constants.SMT_DEFAULT_APP_NAME, + "Application Addons", Integer.MAX_VALUE)); final SoftwareModuleType os = softwareModuleTypeRepository.save(new JpaSoftwareModuleType( - Constants.SMT_DEFAULT_OS_KEY, "Firmware", "Core firmware or operationg system", 1)); + Constants.SMT_DEFAULT_OS_KEY, Constants.SMT_DEFAULT_OS_NAME, "Core firmware or operationg system", 1)); distributionSetTypeRepository .save((JpaDistributionSetType) new JpaDistributionSetType(Constants.DST_DEFAULT_OS_ONLY_KEY, @@ -299,4 +300,4 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst Constants.DST_DEFAULT_OS_WITH_APPS_NAME, "Default type with Firmware/OS and optional app(s).") .addMandatoryModuleType(os).addOptionalModuleType(app)); } -} +} \ No newline at end of file From 51ab973e6bda7ac17f2499cc75361514ac358869 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 3 Jun 2016 13:41:29 +0200 Subject: [PATCH 198/371] fix sonar rule replace lambda with a method reference Signed-off-by: Melanie Retter --- .../smtable/SoftwareModuleAddUpdateWindow.java | 4 ++-- .../smtype/CreateUpdateSoftwareTypeLayout.java | 4 ++-- .../hawkbit/ui/artifacts/upload/UploadLayout.java | 4 ++-- .../ui/common/filterlayout/AbstractFilterButtons.java | 9 ++++----- .../ui/common/filterlayout/AbstractFilterHeader.java | 6 ++---- .../hawkbit/ui/common/grid/AbstractGridHeader.java | 4 ++-- .../hawkbit/ui/common/table/AbstractTableHeader.java | 4 ++-- .../disttype/CreateUpdateDistSetTypeLayout.java | 2 +- .../filtermanagement/CreateOrUpdateFilterHeader.java | 2 +- .../hawkbit/ui/filtermanagement/TargetFilterTable.java | 4 ++-- .../ui/layouts/AbstractCreateUpdateTagLayout.java | 4 ++-- .../hawkbit/ui/layouts/CreateUpdateTypeLayout.java | 2 +- .../dstag/CreateUpdateDistributionTagLayoutWindow.java | 2 +- .../footer/ManangementConfirmationWindowLayout.java | 3 +-- .../hawkbit/ui/management/targettable/TargetTable.java | 4 ++-- .../targettag/CreateUpdateTargetTagLayoutWindow.java | 2 +- .../rollout/rollout/AddUpdateRolloutWindowLayout.java | 2 +- .../hawkbit/ui/rollout/rollout/RolloutListGrid.java | 8 ++++---- .../ui/rollout/rolloutgroup/RolloutGroupListGrid.java | 9 ++++----- .../RolloutGroupTargetsListGrid.java | 5 ++--- .../TenantConfigurationDashboardView.java | 4 ++-- .../hawkbit/ui/utils/SPUIComponentIdProvider.java | 10 ++++++++++ 22 files changed, 51 insertions(+), 47 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 7817163cc..d9a232ce6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -149,7 +149,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se mandatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); mandatoryLabel.addStyleName(ValoTheme.LABEL_SMALL); - typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, false, + typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, true, null, i18n.get("upload.swmodule.type")); typeComboBox.setId(SPUIComponentIdProvider.SW_MODULE_TYPE); typeComboBox.setStyleName(SPUIDefinitions.COMBO_BOX_SPECIFIC_STYLE + " " + ValoTheme.COMBOBOX_TINY); @@ -193,8 +193,8 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se addStyleName("lay-color"); final FormLayout formLayout = new FormLayout(); - formLayout.addComponent(typeComboBox); formLayout.addComponent(mandatoryLabel); + formLayout.addComponent(typeComboBox); formLayout.addComponent(nameTextField); formLayout.addComponent(versionTextField); formLayout.addComponent(vendorTextField); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 70aceb6db..ecfde01ad 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -65,7 +65,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout @Override protected void addListeners() { super.addListeners(); - optiongroup.addValueChangeListener(event -> createOptionValueChanged(event)); + optiongroup.addValueChangeListener(this::createOptionValueChanged); } @Override @@ -112,7 +112,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event), null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java index ad406b297..48da08118 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadLayout.java @@ -268,7 +268,7 @@ public class UploadLayout extends VerticalLayout { SPUIButtonStyleSmall.class); processBtn.setIcon(FontAwesome.BELL); processBtn.addStyleName(SPUIStyleDefinitions.ACTION_BUTTON); - processBtn.addClickListener(event -> displayConfirmWindow(event)); + processBtn.addClickListener(this::displayConfirmWindow); processBtn.setHtmlContentAllowed(true); if (artifactUploadState.getFileSelected().isEmpty()) { processBtn.setEnabled(false); @@ -281,7 +281,7 @@ public class UploadLayout extends VerticalLayout { SPUIButtonStyleSmall.class); discardBtn.setIcon(FontAwesome.TRASH_O); discardBtn.addStyleName(SPUIStyleDefinitions.ACTION_BUTTON); - discardBtn.addClickListener(event -> discardUploadData(event)); + discardBtn.addClickListener(this::discardUploadData); } boolean checkForDuplicate(final String filename) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java index b64578782..09d79572c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java @@ -42,11 +42,11 @@ import com.vaadin.ui.themes.ValoTheme; public abstract class AbstractFilterButtons extends Table { private static final long serialVersionUID = 7783305719009746375L; - + private static final String DEFAULT_GREEN = "rgb(44,151,32)"; protected static final String FILTER_BUTTON_COLUMN = "filterButton"; - + @Autowired protected transient EventBus.SessionEventBus eventBus; @@ -63,7 +63,7 @@ public abstract class AbstractFilterButtons extends Table { createTable(); eventBus.subscribe(this); } - + @PreDestroy void destroy() { eventBus.unsubscribe(this); @@ -125,8 +125,7 @@ public abstract class AbstractFilterButtons extends Table { } else if (id != null && isClickedByDefault(name)) { filterButtonClickBehaviour.setDefaultClickedButton(typeButton); } - final DragAndDropWrapper wrapper = createDragAndDropWrapper(typeButton, name, id); - return wrapper; + return createDragAndDropWrapper(typeButton, name, id); } protected boolean isNoTagSateSelected() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java index ddc2d9889..ae497e41e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterHeader.java @@ -34,7 +34,6 @@ public abstract class AbstractFilterHeader extends VerticalLayout { private static final long serialVersionUID = -1388340600522323332L; - @Autowired protected SpPermissionChecker permChecker; @@ -64,7 +63,7 @@ public abstract class AbstractFilterHeader extends VerticalLayout { if (hasCreateUpdatePermission() && isAddTagRequired()) { config = SPUIComponentProvider.getButton(getConfigureFilterButtonId(), "", "", "", true, FontAwesome.COG, SPUIButtonStyleSmallNoBorder.class); - config.addClickListener(event -> settingsIconClicked(event)); + config.addClickListener(this::settingsIconClicked); } hideIcon = SPUIComponentProvider.getButton(getHideButtonId(), "", "", "", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); @@ -92,8 +91,7 @@ public abstract class AbstractFilterHeader extends VerticalLayout { } private Label createHeaderCaption() { - final Label captionLabel = SPUIComponentProvider.getLabel(getTitle(), SPUILabelDefinitions.SP_WIDGET_CAPTION); - return captionLabel; + return SPUIComponentProvider.getLabel(getTitle(), SPUILabelDefinitions.SP_WIDGET_CAPTION); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java index 2d69eea20..4ba8ec464 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java @@ -123,14 +123,14 @@ public abstract class AbstractGridHeader extends VerticalLayout { private Button createAddButton() { final Button button = SPUIComponentProvider.getButton(getAddIconId(), "", "", null, false, FontAwesome.PLUS, SPUIButtonStyleSmallNoBorder.class); - button.addClickListener(event -> addNewItem(event)); + button.addClickListener(this::addNewItem); return button; } private Button createCloseButton() { final Button button = SPUIComponentProvider.getButton(getCloseButtonId(), "", "", null, false, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); - button.addClickListener(event -> onClose(event)); + button.addClickListener(this::onClose); return button; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java index 6f05dce8d..ad5fba1ad 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java @@ -235,14 +235,14 @@ public abstract class AbstractTableHeader extends VerticalLayout { private Button createAddIcon() { final Button button = SPUIComponentProvider.getButton(getAddIconId(), "", "", null, false, FontAwesome.PLUS, SPUIButtonStyleSmallNoBorder.class); - button.addClickListener(event -> addNewItem(event)); + button.addClickListener(this::addNewItem); return button; } private Button createBulkUploadIcon() { final Button button = SPUIComponentProvider.getButton(getBulkUploadIconId(), "", "", null, false, FontAwesome.UPLOAD, SPUIButtonStyleSmallNoBorder.class); - button.addClickListener(event -> bulkUpload(event)); + button.addClickListener(this::bulkUpload); return button; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index c43110b10..2492d5e39 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -612,7 +612,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event), null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java index f46cc60ba..2ed4b305c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java @@ -251,7 +251,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); nameField.setId(SPUIComponentIdProvider.CUSTOM_FILTER_ADD_NAME); nameField.setPropertyDataSource(nameLabel); - nameField.addTextChangeListener(event -> onFilterNameChange(event)); + nameField.addTextChangeListener(this::onFilterNameChange); return nameField; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java index e6d17e8db..6e83769b5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java @@ -167,7 +167,7 @@ public class TargetFilterTable extends Table { SPUILabelDefinitions.DELETE_CUSTOM_FILTER, ValoTheme.BUTTON_TINY + " " + "redicon", true, FontAwesome.TRASH_O, SPUIButtonStyleSmallNoBorder.class); deleteIcon.setData(itemId); - deleteIcon.addClickListener(event -> onDelete(event)); + deleteIcon.addClickListener(this::onDelete); return deleteIcon; } @@ -217,7 +217,7 @@ public class TargetFilterTable extends Table { SPUILabelDefinitions.UPDATE_CUSTOM_FILTER, null, false, null, SPUIButtonStyleSmallNoBorder.class); updateIcon.setData(tfName); updateIcon.addStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link"); - updateIcon.addClickListener(event -> onClickOfDetailButton(event)); + updateIcon.addClickListener(this::onClickOfDetailButton); return updateIcon; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index e484f95ba..d5195cb83 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -108,7 +108,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected void createWindow() { reset(); setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(event), event -> discard(event), null)); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null)); } /** @@ -223,7 +223,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent colorPickerLayout.getColorSelect().addColorChangeListener(this); colorPickerLayout.getSelPreview().addColorChangeListener(this); tagColorPreviewBtn.addClickListener(event -> previewButtonClicked()); - tagNameComboBox.addValueChangeListener(event -> tagNameChosen(event)); + tagNameComboBox.addValueChangeListener(this::tagNameChosen); slidersValueChangeListeners(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index 7263ae9f7..1987d6053 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -52,7 +52,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { @Override protected void addListeners() { super.addListeners(); - optiongroup.addValueChangeListener(event -> createOptionValueChanged(event)); + optiongroup.addValueChangeListener(this::createOptionValueChanged); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index c4da4d12e..8f368b69f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -74,7 +74,7 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat @Override protected void addListeners() { super.addListeners(); - optiongroup.addValueChangeListener(event -> optionValueChanged(event)); + optiongroup.addValueChangeListener(this::optionValueChanged); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java index 52cca5794..2553bc131 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ManangementConfirmationWindowLayout.java @@ -481,8 +481,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin /* * On delete of pinned target ,unpin refresh both target table and DS */ - managementUIState.getDistributionTableFilters().getPinnedTargetId() - .ifPresent(targetId -> unPinDeletedTarget(targetId)); + managementUIState.getDistributionTableFilters().getPinnedTargetId().ifPresent(this::unPinDeletedTarget); eventBus.publish(this, SaveActionWindowEvent.DELETED_TARGETS); managementUIState.getDeletedTargetList().clear(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 697166f5a..e1b1e394b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -332,7 +332,7 @@ public class TargetTable extends AbstractTable implements if (!isMaximized()) { columnList.add(new TableColumn(SPUIDefinitions.TARGET_STATUS_POLL_TIME, "", 0.0F)); columnList.add(new TableColumn(SPUIDefinitions.TARGET_STATUS_PIN_TOGGLE_ICON, "", 0.0F)); - } + } return columnList; } @@ -455,7 +455,7 @@ public class TargetTable extends AbstractTable implements pinBtn.setHeightUndefined(); pinBtn.setData(itemId); pinBtn.setId(SPUIComponentIdProvider.TARGET_PIN_ICON + "." + itemId); - pinBtn.addClickListener(event -> addPinClickListener(event)); + pinBtn.addClickListener(this::addPinClickListener); if (isPinned(((TargetIdName) itemId).getControllerId())) { pinBtn.addStyleName(TARGET_PINNED); isTargetPinned = Boolean.TRUE; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java index ae0c19f38..ab95e9bef 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java @@ -60,7 +60,7 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa @Override protected void addListeners() { super.addListeners(); - optiongroup.addValueChangeListener(event -> optionValueChanged(event)); + optiongroup.addValueChangeListener(this::optionValueChanged); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index f98f50128..26a830aee 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -301,7 +301,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { errorThresoldOptions.addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL); errorThresoldOptions.addStyleName(SPUIStyleDefinitions.ROLLOUT_OPTION_GROUP); errorThresoldOptions.setSizeUndefined(); - errorThresoldOptions.addValueChangeListener(event -> onErrorThresoldOptionChange(event)); + errorThresoldOptions.addValueChangeListener(this::onErrorThresoldOptionChange); return errorThresoldOptions; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index fd45739ac..49c3b8e76 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -297,7 +297,7 @@ public class RolloutListGrid extends AbstractGrid { @Override protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); + return this::getDescription; } @Override @@ -310,10 +310,10 @@ public class RolloutListGrid extends AbstractGrid { createRolloutStatusToFontMap(); getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); - getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(this::onClickOfActionBtn)); final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); - customObjectRenderer.addClickListener(event -> onClickOfRolloutName(event)); + customObjectRenderer.addClickListener(this::onClickOfRolloutName); getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); } @@ -370,7 +370,7 @@ public class RolloutListGrid extends AbstractGrid { private ContextMenu createContextMenu(final Long rolloutId) { final ContextMenu context = new ContextMenu(); - context.addItemClickListener(event -> menuItemClicked(event)); + context.addItemClickListener(this::menuItemClicked); final Item row = getContainerDataSource().getItem(rolloutId); final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) .getValue(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index 3706e685a..16a98d4df 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java @@ -238,8 +238,7 @@ public class RolloutGroupListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), new TotalTargetCountStatusConverter()); if (permissionChecker.hasRolloutTargetsReadPermission()) { - getColumn(ROLLOUT_RENDERER_DATA) - .setRenderer(new RolloutRenderer(event -> onClickOfRolloutGroupName(event))); + getColumn(ROLLOUT_RENDERER_DATA).setRenderer(new RolloutRenderer(this::onClickOfRolloutGroupName)); } } @@ -259,7 +258,7 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); + return this::getDescription; } private void onClickOfRolloutGroupName(final RendererClickEvent event) { @@ -324,14 +323,14 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override public TotalTargetCountStatus convertToModel(final String value, final Class targetType, final Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { + throws com.vaadin.data.util.converter.Converter.ConversionException { return null; } @Override public String convertToPresentation(final TotalTargetCountStatus value, final Class targetType, final Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { + throws com.vaadin.data.util.converter.Converter.ConversionException { return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java index e176beb7e..07399bdb0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java @@ -50,13 +50,12 @@ import com.vaadin.spring.annotation.ViewScope; public class RolloutGroupTargetsListGrid extends AbstractGrid { private static final long serialVersionUID = -2244756637458984597L; - + @Autowired private transient RolloutUIState rolloutUIState; private transient Map statusIconMap = new EnumMap<>(Status.class); - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final RolloutEvent event) { if (RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS != event) { @@ -161,7 +160,7 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { @Override protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); + return this::getDescription; } private void alignColumns() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java index e740fcd1c..2b0e4496b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardView.java @@ -105,8 +105,8 @@ public class TenantConfigurationDashboardView extends CustomComponent implements final HorizontalLayout hlayout = new HorizontalLayout(); hlayout.setSpacing(true); - saveConfigurationBtn = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SYSTEM_CONFIGURATION_SAVE, "", "", - "", true, FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); + saveConfigurationBtn = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SYSTEM_CONFIGURATION_SAVE, "", + "", "", true, FontAwesome.SAVE, SPUIButtonStyleSmallNoBorder.class); saveConfigurationBtn.setEnabled(false); saveConfigurationBtn.setDescription(i18n.get("configuration.savebutton.tooltip")); saveConfigurationBtn.addClickListener(event -> saveConfiguration()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index 80d40104a..17c215b0a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -501,6 +501,16 @@ public final class SPUIComponentIdProvider { */ public static final String SYSTEM_CONFIGURATION_SAVE = "system.configuration.save"; + /** + * ID for save button in pop-up-windows instance of commonDialogWindow + */ + public static final String SAVE_BUTTON = "common.dialog.window.save"; + + /** + * ID for cancel button in pop-up-windows instance of commonDialogWindow + */ + public static final String CANCEL_BUTTON = "common.dialog.window.cancel"; + /** * Cancel button is. */ From 9bd62d181584bec21fa3aaa5658b08e087c11f72 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 3 Jun 2016 14:36:46 +0200 Subject: [PATCH 199/371] Refactor auto config and detail service Signed-off-by: SirWayne --- .../InMemoryUserManagementConfiguration.java | 98 ++++++++++++++++ .../security/SecurityAutoConfiguration.java | 110 ------------------ .../main/resources/META-INF/spring.factories | 3 +- .../ui/common/UserDetailsFormatter.java | 6 +- 4 files changed, 101 insertions(+), 116 deletions(-) create mode 100644 hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java new file mode 100644 index 000000000..5a745a02b --- /dev/null +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java @@ -0,0 +1,98 @@ +package org.eclipse.hawkbit.autoconfigure.security; + +import java.util.ArrayList; + +import org.eclipse.hawkbit.im.authentication.MultitenancyIndicator; +import org.eclipse.hawkbit.im.authentication.PermissionUtils; +import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; +import org.eclipse.hawkbit.im.authentication.UserAuthenticationFilter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; + +/** + * Auto-configuration for the in-memory-user-management. + * + */ +@Configuration +@ConditionalOnMissingBean(UserDetailsService.class) +public class InMemoryUserManagementConfiguration extends GlobalAuthenticationConfigurerAdapter { + + @Autowired + private AuthenticationConfiguration configuration; + + @Override + public void configure(final AuthenticationManagerBuilder auth) throws Exception { + final DaoAuthenticationProvider userDaoAuthenticationProvider = new TenantDaoAuthenticationProvider(); + userDaoAuthenticationProvider.setUserDetailsService(userDetailsService()); + auth.authenticationProvider(userDaoAuthenticationProvider); + } + + /** + * @return the user details service to load a user from memory user manager. + */ + @Bean + @ConditionalOnMissingBean + public UserDetailsService userDetailsService() { + final InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager(new ArrayList<>()); + inMemoryUserDetailsManager.setAuthenticationManager(null); + inMemoryUserDetailsManager.createUser(new User("admin", "admin", PermissionUtils.createAllAuthorityList())); + return inMemoryUserDetailsManager; + } + + /** + * @return the multi-tenancy indicator to disallow multi-tenancy + */ + @Bean + @ConditionalOnMissingBean + public MultitenancyIndicator multiTenancyIndicator() { + return () -> false; + } + + private static class TenantDaoAuthenticationProvider extends DaoAuthenticationProvider { + + @Override + protected Authentication createSuccessAuthentication(final Object principal, + final Authentication authentication, final UserDetails user) { + final UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(principal, + authentication.getCredentials(), user.getAuthorities()); + result.setDetails(new TenantAwareAuthenticationDetails("DEFAULT", false)); + return result; + } + } + + /** + * @return the {@link UserAuthenticationFilter} to include into the SP + * security configuration. + * @throws Exception + * lazy bean exception maybe if the authentication manager + * cannot be instantiated + */ + @Bean + @ConditionalOnMissingBean + public UserAuthenticationFilter userAuthenticationFilter() throws Exception { + return new UserAuthenticationFilterBasicAuth(configuration.getAuthenticationManager()); + } + + private static final class UserAuthenticationFilterBasicAuth extends BasicAuthenticationFilter + implements UserAuthenticationFilter { + + private UserAuthenticationFilterBasicAuth(final AuthenticationManager authenticationManager) { + super(authenticationManager); + } + + } +} \ No newline at end of file diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java index 3d07664df..d74b27dc8 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java @@ -8,36 +8,17 @@ */ package org.eclipse.hawkbit.autoconfigure.security; -import java.util.ArrayList; - -import org.eclipse.hawkbit.im.authentication.MultitenancyIndicator; import org.eclipse.hawkbit.im.authentication.PermissionService; -import org.eclipse.hawkbit.im.authentication.PermissionUtils; -import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; -import org.eclipse.hawkbit.im.authentication.UserAuthenticationFilter; import org.eclipse.hawkbit.security.DdiSecurityProperties; import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.SpringSecurityAuditorAware; import org.eclipse.hawkbit.tenancy.TenantAware; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.domain.AuditorAware; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.authentication.dao.DaoAuthenticationProvider; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; -import org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.provisioning.InMemoryUserDetailsManager; -import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; /** * {@link EnableAutoConfiguration Auto-configuration} for security. @@ -81,95 +62,4 @@ public class SecurityAutoConfiguration { return new SpringSecurityAuditorAware(); } - /** - * Auto-configuration for the in-memory-user-management. - * - * - * - */ - @Configuration - @ConditionalOnMissingBean(value = { UserAuthenticationFilter.class }) - public static class InMemoryUserManagementConfiguration extends GlobalAuthenticationConfigurerAdapter { - - @Autowired - private AuthenticationConfiguration configuration; - - /* - * (non-Javadoc) - * - * @see org.springframework.security.config.annotation.authentication. - * configurers. GlobalAuthenticationConfigurerAdapter - * #configure(org.springframework.security.config.annotation. - * authentication.builders.AuthenticationManagerBuilder) - */ - @Override - public void configure(final AuthenticationManagerBuilder auth) throws Exception { - final DaoAuthenticationProvider userDaoAuthenticationProvider = new TenantDaoAuthenticationProvider(); - userDaoAuthenticationProvider.setUserDetailsService(userDetailsService()); - auth.authenticationProvider(userDaoAuthenticationProvider); - } - - /** - * @return the user details service to load a user from memory user - * manager. - */ - @Bean - public UserDetailsService userDetailsService() { - final InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager( - new ArrayList<>()); - inMemoryUserDetailsManager.setAuthenticationManager(null); - inMemoryUserDetailsManager.createUser(new User("admin", "admin", PermissionUtils.createAllAuthorityList())); - return inMemoryUserDetailsManager; - } - - /** - * @return the multi-tenancy indicator to disallow multi-tenancy - */ - @Bean - public MultitenancyIndicator multiTenancyIndicator() { - return () -> false; - } - - private static class TenantDaoAuthenticationProvider extends DaoAuthenticationProvider { - /* - * (non-Javadoc) - * - * @see org.springframework.security.authentication.dao. - * AbstractUserDetailsAuthenticationProvider - * #createSuccessAuthentication(java.lang.Object, - * org.springframework.security.core.Authentication, - * org.springframework.security.core.userdetails.UserDetails) - */ - @Override - protected Authentication createSuccessAuthentication(final Object principal, - final Authentication authentication, final UserDetails user) { - final UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(principal, - authentication.getCredentials(), user.getAuthorities()); - result.setDetails(new TenantAwareAuthenticationDetails("DEFAULT", false)); - return result; - } - } - - /** - * @return the {@link UserAuthenticationFilter} to include into the SP - * security configuration. - * @throws Exception - * lazy bean exception maybe if the authentication manager - * cannot be instantiated - */ - @Bean - public UserAuthenticationFilter userAuthenticationFilter() throws Exception { - return new UserAuthenticationFilterBasicAuth(configuration.getAuthenticationManager()); - } - - private static final class UserAuthenticationFilterBasicAuth extends BasicAuthenticationFilter - implements UserAuthenticationFilter { - - private UserAuthenticationFilterBasicAuth(final AuthenticationManager authenticationManager) { - super(authenticationManager); - } - - } - } - } diff --git a/hawkbit-autoconfigure/src/main/resources/META-INF/spring.factories b/hawkbit-autoconfigure/src/main/resources/META-INF/spring.factories index 335054585..7df1f5ed2 100644 --- a/hawkbit-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/hawkbit-autoconfigure/src/main/resources/META-INF/spring.factories @@ -11,4 +11,5 @@ org.eclipse.hawkbit.autoconfigure.eventbus.EventBusAutoConfiguration,\ org.eclipse.hawkbit.autoconfigure.scheduling.AsyncConfigurerAutoConfiguration,\ org.eclipse.hawkbit.autoconfigure.cache.RedisAutoConfiguration,\ org.eclipse.hawkbit.autoconfigure.scheduling.ExecutorAutoConfiguration,\ -org.eclipse.hawkbit.autoconfigure.amqp.AmqpAutoConfiguration +org.eclipse.hawkbit.autoconfigure.amqp.AmqpAutoConfiguration,\ +org.eclipse.hawkbit.autoconfigure.security.InMemoryUserManagementConfiguration diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java index 8fb5a8b42..d9a964b04 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java @@ -175,11 +175,7 @@ public final class UserDetailsFormatter { private static UserDetails loadUserByUsername(final String username) { final UserDetailsService userDetailsService = SpringContextHelper.getBean(UserDetailsService.class); try { - final UserDetails loadUserByUsername = userDetailsService.loadUserByUsername(username); - if (loadUserByUsername == null) { - throw new UsernameNotFoundException("User not found " + username); - } - return loadUserByUsername; + return userDetailsService.loadUserByUsername(username); } catch (final UsernameNotFoundException e) { return new User(username, "", Collections.emptyList()); } From 8c972a89e301d5dd9d0111995be61cd884071815 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 3 Jun 2016 17:31:33 +0200 Subject: [PATCH 200/371] Register management beans Signed-off-by: SirWayne --- .../RepositoryApplicationConfiguration.java | 98 +++++++++++++++++++ .../repository/ArtifactManagement.java | 2 - .../repository/DeploymentManagement.java | 2 - .../repository/DistributionSetManagement.java | 2 - .../hawkbit/repository/ReportManagement.java | 2 - .../repository/RolloutGroupManagement.java | 2 - .../hawkbit/repository/RolloutManagement.java | 2 - .../repository/SoftwareManagement.java | 2 - .../hawkbit/repository/SystemManagement.java | 2 - .../hawkbit/repository/TagManagement.java | 2 - .../TargetFilterQueryManagement.java | 2 - .../hawkbit/repository/TargetManagement.java | 2 - .../TenantConfigurationManagement.java | 2 - .../repository/TenantStatsManagement.java | 2 - 14 files changed, 98 insertions(+), 26 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index d5e8db96f..b7330a2fb 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -12,8 +12,20 @@ import java.util.HashMap; import java.util.Map; import org.eclipse.hawkbit.aspects.ExceptionMappingAspectHandler; +import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.DeploymentManagement; +import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.ReportManagement; +import org.eclipse.hawkbit.repository.RolloutGroupManagement; +import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SystemManagement; +import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.eclipse.hawkbit.repository.model.helper.AfterTransactionCommitExecutorHolder; import org.eclipse.hawkbit.repository.model.helper.CacheManagerHolder; import org.eclipse.hawkbit.repository.model.helper.SecurityTokenGeneratorHolder; @@ -25,6 +37,7 @@ import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -172,4 +185,89 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { public PlatformTransactionManager transactionManager() { return new MultiTenantJpaTransactionManager(); } + + @Bean + @ConditionalOnMissingBean + public SystemManagement systemManagement() { + return new SystemManagement(); + } + + @Bean + @ConditionalOnMissingBean + public ReportManagement reportManagement() { + return new ReportManagement(); + } + + @Bean + @ConditionalOnMissingBean + public DistributionSetManagement distributionSetManagement() { + return new DistributionSetManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TenantStatsManagement tenantStatsManagement() { + return new TenantStatsManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TenantConfigurationManagement tenantConfigurationManagement() { + return new TenantConfigurationManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TargetManagement targetManagement() { + return new TargetManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TargetFilterQueryManagement targetFilterQueryManagement() { + return new TargetFilterQueryManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TagManagement tagManagement() { + return new TagManagement(); + } + + @Bean + @ConditionalOnMissingBean + public SoftwareManagement softwareManagement() { + return new SoftwareManagement(); + } + + @Bean + @ConditionalOnMissingBean + public RolloutManagement rolloutManagement() { + return new RolloutManagement(); + } + + @Bean + @ConditionalOnMissingBean + public RolloutGroupManagement rolloutGroupManagement() { + return new RolloutGroupManagement(); + } + + @Bean + @ConditionalOnMissingBean + public DeploymentManagement deploymentManagement() { + return new DeploymentManagement(); + } + + @Bean + @ConditionalOnMissingBean + public ControllerManagement controllerManagement() { + return new ControllerManagement(); + } + + @Bean + @ConditionalOnMissingBean + public ArtifactManagement artifactManagement() { + return new ArtifactManagement(); + } + } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java index 024ec11cb..e4b4cd5b8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ArtifactManagement.java @@ -42,7 +42,6 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.hateoas.Identifiable; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -53,7 +52,6 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class ArtifactManagement { private static final Logger LOG = LoggerFactory.getLogger(ArtifactManagement.class); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 1e58ea938..de35f48f6 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -67,7 +67,6 @@ import org.springframework.data.domain.Slice; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -82,7 +81,6 @@ import com.google.common.eventbus.EventBus; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class DeploymentManagement { private static final Logger LOG = LoggerFactory.getLogger(DeploymentManagement.class); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java index db1ade60e..40a578d2b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetManagement.java @@ -58,7 +58,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -72,7 +71,6 @@ import com.google.common.eventbus.EventBus; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class DistributionSetManagement { @Autowired diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java index 326442283..406538705 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ReportManagement.java @@ -47,7 +47,6 @@ import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -58,7 +57,6 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class ReportManagement { @Value("${spring.jpa.database}") diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java index d204154d0..401a8cb16 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupManagement.java @@ -42,7 +42,6 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -52,7 +51,6 @@ import org.springframework.validation.annotation.Validated; * the functionality based on the {@link PreAuthorize} annotation on methods. */ @Validated -@Service @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public class RolloutGroupManagement { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index 09decfc03..d59feb424 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -55,7 +55,6 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.annotation.Isolation; @@ -72,7 +71,6 @@ import org.springframework.validation.annotation.Validated; * {@link PreAuthorize} annotation on methods. */ @Validated -@Service @EnableScheduling @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public class RolloutManagement { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java index d719667ed..88af60c18 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareManagement.java @@ -51,7 +51,6 @@ import org.springframework.data.domain.SliceImpl; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -65,7 +64,6 @@ import com.google.common.collect.Sets; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class SoftwareManagement { @Autowired diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java index 49c9183a7..3da592a3e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -34,7 +34,6 @@ import org.springframework.cache.interceptor.SimpleKeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -46,7 +45,6 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class SystemManagement { @Autowired private EntityManager entityManager; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java index 8db9773e6..59fe75951 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TagManagement.java @@ -37,7 +37,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -50,7 +49,6 @@ import com.google.common.eventbus.EventBus; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class TagManagement { @Autowired diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java index 4f7c91da3..270bb3048 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryManagement.java @@ -25,7 +25,6 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specifications; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -39,7 +38,6 @@ import com.google.common.base.Strings; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class TargetFilterQueryManagement { @Autowired diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index 4d6540acf..6e96ebf6b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -61,7 +61,6 @@ import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -77,7 +76,6 @@ import com.google.common.eventbus.EventBus; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class TargetManagement { @Autowired diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java index c292b39e3..f8ee6ae8b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java @@ -24,7 +24,6 @@ import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.env.Environment; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -34,7 +33,6 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class TenantConfigurationManagement implements EnvironmentAware { @Autowired diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java index c124037fa..9d5bed905 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java @@ -12,7 +12,6 @@ import java.util.Optional; import org.eclipse.hawkbit.report.model.TenantUsage; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -22,7 +21,6 @@ import org.springframework.validation.annotation.Validated; * */ @Validated -@Service public class TenantStatsManagement { @Autowired From 7246203d9c8b4b34513590a143255eedb1bdf85b Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 3 Jun 2016 17:35:50 +0200 Subject: [PATCH 201/371] Correct ID save/cancel button Signed-off-by: Melanie Retter --- .../org/eclipse/hawkbit/ui/common/CommonDialogWindow.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 3f5364946..322829107 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -105,8 +105,8 @@ public class CommonDialogWindow extends Window { buttonsLayout.setSizeFull(); buttonsLayout.setSpacing(true); - saveButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SYSTEM_CONFIGURATION_SAVE, "save", "", "", - true, FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); + saveButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SAVE_BUTTON, "save", "", "", true, + FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); saveButton.setSizeUndefined(); saveButton.addStyleName("default-color"); if (null != saveButtonClickListener) { @@ -118,8 +118,8 @@ public class CommonDialogWindow extends Window { buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); buttonsLayout.setExpandRatio(saveButton, 1.0F); - cancelButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SYSTEM_CONFIGURATION_CANCEL, "cancel", - "", "", true, FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); + cancelButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.CANCEL_BUTTON, "cancel", "", "", true, + FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); cancelButton.setSizeUndefined(); cancelButton.addStyleName("default-color"); if (null != cancelButtonClickListener) { From 706c825909d15c0111eda2c27b51e48b60a5629a Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 3 Jun 2016 18:09:46 +0200 Subject: [PATCH 202/371] Added test for DoSFilter. Signed-off-by: Kai Zimmermann --- .../ddi/rest/resource/DosFilterTest.java | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DosFilterTest.java diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DosFilterTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DosFilterTest.java new file mode 100644 index 000000000..2c1d0ba08 --- /dev/null +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DosFilterTest.java @@ -0,0 +1,157 @@ +/** + * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ddi.rest.resource; + +import static org.fest.assertions.api.Assertions.assertThat; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; +import org.eclipse.hawkbit.rest.util.JsonBuilder; +import org.junit.Test; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.web.servlet.MvcResult; + +import com.google.common.net.HttpHeaders; + +import ru.yandex.qatools.allure.annotations.Description; +import ru.yandex.qatools.allure.annotations.Features; +import ru.yandex.qatools.allure.annotations.Stories; + +/** + * Test potential DOS attack scenarios and check if the filter prevents them. + * + */ +@ActiveProfiles({ "test" }) +@Features("Component Tests - REST Security") +@Stories("Denial of Service protection filter") +public class DosFilterTest extends AbstractRestIntegrationTest { + + @Test + @Description("Ensures that clients that are on the blacklist are forbidded ") + public void blackListedClientIsForbidden() throws Exception { + mvc.perform(get("/{tenant}/controller/v1/4711", tenantAware.getCurrentTenant()) + .header(HttpHeaders.X_FORWARDED_FOR, "192.168.0.4 , 10.0.0.1 ")).andExpect(status().isForbidden()); + } + + @Test + @Description("Ensures that a READ DoS attempt is blocked ") + public void getFloddingAttackThatisPrevented() throws Exception { + + MvcResult result = null; + + int requests = 0; + do { + result = mvc.perform(get("/{tenant}/controller/v1/4711", tenantAware.getCurrentTenant()) + .header(HttpHeaders.X_FORWARDED_FOR, "10.0.0.1")).andReturn(); + requests++; + + // we give up after 10.000 requests + assertThat(requests).isLessThan(10_000); + } while (result.getResponse().getStatus() != HttpStatus.TOO_MANY_REQUESTS.value()); + + // the filter shuts down after 100 GET requests + assertThat(requests).isGreaterThanOrEqualTo(100); + } + + @Test + @Description("Ensures that an assumed READ DoS attempt is not blocked as the client (with IPv4 address) is on a whitelist") + public void unacceptableGetLoadButOnWhitelistIPv4() throws Exception { + for (int i = 0; i < 1_000; i++) { + mvc.perform(get("/{tenant}/controller/v1/4711", tenantAware.getCurrentTenant()) + .header(HttpHeaders.X_FORWARDED_FOR, "127.0.0.1")).andExpect(status().isOk()); + } + } + + @Test + @Description("Ensures that an assumed READ DoS attempt is not blocked as the client (with IPv6 address) is on a whitelist") + public void unacceptableGetLoadButOnWhitelistIPv6() throws Exception { + for (int i = 0; i < 1_000; i++) { + mvc.perform(get("/{tenant}/controller/v1/4711", tenantAware.getCurrentTenant()) + .header(HttpHeaders.X_FORWARDED_FOR, "0:0:0:0:0:0:0:1")).andExpect(status().isOk()); + } + } + + @Test + @Description("Ensures that a relatively high number of READ requests is allowed if it is below the DoS detection threshold") + public void acceptableGetLoad() throws Exception { + + for (int x = 0; x < 3; x++) { + // sleep for one second + Thread.sleep(1100); + for (int i = 0; i < 99; i++) { + mvc.perform(get("/{tenant}/controller/v1/4711", tenantAware.getCurrentTenant()) + .header(HttpHeaders.X_FORWARDED_FOR, "10.0.0.1")).andExpect(status().isOk()); + } + } + } + + @Test + @Description("Ensures that a WRITE DoS attempt is blocked ") + public void putPostFloddingAttackThatisPrevented() throws Exception { + final Long actionId = prepareDeploymentBase(); + final String feedback = JsonBuilder.deploymentActionFeedback(actionId.toString(), "proceeding"); + + MvcResult result = null; + int requests = 0; + do { + result = mvc.perform(post("/{tenant}/controller/v1/4711/deploymentBase/" + actionId + "/feedback", + tenantAware.getCurrentTenant()).header(HttpHeaders.X_FORWARDED_FOR, "10.0.0.1").content(feedback) + .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) + .andReturn(); + requests++; + + // we give up after 500 requests + assertThat(requests).isLessThan(500); + } while (result.getResponse().getStatus() != HttpStatus.TOO_MANY_REQUESTS.value()); + + // the filter shuts down after 10 POST requests + assertThat(requests).isGreaterThanOrEqualTo(10); + + } + + @Test + @Description("Ensures that a relatively high number of WRITE requests is allowed if it is below the DoS detection threshold") + public void acceptablePutPostLoad() throws Exception { + final Long actionId = prepareDeploymentBase(); + final String feedback = JsonBuilder.deploymentActionFeedback(actionId.toString(), "proceeding"); + + for (int x = 0; x < 5; x++) { + // sleep for one second + Thread.sleep(1100); + + for (int i = 0; i < 9; i++) { + mvc.perform(post("/{tenant}/controller/v1/4711/deploymentBase/" + actionId + "/feedback", + tenantAware.getCurrentTenant()).header(HttpHeaders.X_FORWARDED_FOR, "10.0.0.1") + .content(feedback).contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + } + } + + private Long prepareDeploymentBase() { + final DistributionSet ds = testdataFactory.createDistributionSet("test"); + final Target target = targetManagement.createTarget(entityFactory.generateTarget("4711")); + final List toAssign = new ArrayList<>(); + toAssign.add(target); + + final Iterable saved = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedEntity(); + assertThat(deploymentManagement.findActiveActionsByTarget(target)).hasSize(1); + + final Action uaction = deploymentManagement.findActiveActionsByTarget(target).get(0); + + return uaction.getId(); + } + +} From a73d72bf582a2b9e57b5c4ed0bdd4beec8a759f7 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 3 Jun 2016 18:13:44 +0200 Subject: [PATCH 203/371] Fixed header. Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/ddi/rest/resource/DosFilterTest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DosFilterTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DosFilterTest.java index 2c1d0ba08..d63d9efc1 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DosFilterTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DosFilterTest.java @@ -1,5 +1,10 @@ /** - * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.ddi.rest.resource; From c8ff0d225356b918e50082ecf0680879b6750115 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 3 Jun 2016 18:42:36 +0200 Subject: [PATCH 204/371] change padding Signed-off-by: Melanie Retter --- .../ui/common/filterlayout/AbstractFilterButtons.java | 7 ++++--- .../VAADIN/themes/hawkbit/customstyles/table-common.scss | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java index b64578782..8f669318b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java @@ -42,11 +42,11 @@ import com.vaadin.ui.themes.ValoTheme; public abstract class AbstractFilterButtons extends Table { private static final long serialVersionUID = 7783305719009746375L; - + private static final String DEFAULT_GREEN = "rgb(44,151,32)"; protected static final String FILTER_BUTTON_COLUMN = "filterButton"; - + @Autowired protected transient EventBus.SessionEventBus eventBus; @@ -63,7 +63,7 @@ public abstract class AbstractFilterButtons extends Table { createTable(); eventBus.subscribe(this); } - + @PreDestroy void destroy() { eventBus.unsubscribe(this); @@ -120,6 +120,7 @@ public abstract class AbstractFilterButtons extends Table { ? item.getItemProperty(SPUILabelDefinitions.VAR_COLOR).getValue().toString() : DEFAULT_GREEN; final Button typeButton = createFilterButton(id, name, desc, color, itemId); typeButton.addClickListener(event -> filterButtonClickBehaviour.processFilterButtonClick(event)); + typeButton.addStyleName("generatedColumnPadding"); if (typeButton.getData().equals(SPUIDefinitions.NO_TAG_BUTTON_ID) && isNoTagSateSelected()) { filterButtonClickBehaviour.setDefaultClickedButton(typeButton); } else if (id != null && isClickedByDefault(name)) { diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss index 8820dbcc9..81d590248 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss @@ -181,4 +181,8 @@ visibility: hidden; float: right; } + + .v-button-generatedColumnPadding .v-button-tiny { + padding: 0 0px; + } } From e71ab4e63f7ff42fda9156497bb077b5da5ccae4 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 4 Jun 2016 21:11:19 +0200 Subject: [PATCH 205/371] Ip Address tracking configurable. Signed-off-by: Kai Zimmermann --- .../resource/DdiArtifactStoreController.java | 2 +- .../ddi/rest/resource/DdiRootController.java | 45 +++++++---------- .../rest/resource/DdiRootControllerTest.java | 22 +++++++++ .../eclipse/hawkbit/security/DosFilter.java | 2 +- .../security/HawkbitSecurityProperties.java | 16 ++++++- .../java/org/eclipse/hawkbit/util/IpUtil.java | 48 ++++++++++++++++--- .../org/eclipse/hawkbit/util/IpUtilTest.java | 23 ++++++++- 7 files changed, 119 insertions(+), 39 deletions(-) diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 85a326f9a..75d502c47 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -134,7 +134,7 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR private Action checkAndReportDownloadByTarget(final HttpServletRequest request, final String targetid, final LocalArtifact artifact) { final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader())); + IpUtil.getClientIpFromRequest(request, securityProperties)); final Action action = controllerManagement .getActionForDownloadByTargetAndSoftwareModule(target.getControllerId(), artifact.getSoftwareModule()); 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 20d1b2e29..120e6c246 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 @@ -119,16 +119,14 @@ public class DdiRootController implements DdiRootControllerRestApi { public ResponseEntity getControllerBase(@PathVariable("targetid") final String targetid) { LOG.debug("getControllerBase({})", targetid); - final Target target = controllerManagement.findOrRegisterTargetIfItDoesNotexist(targetid, - IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), - securityProperties.getClients().getRemoteIpHeader())); + final Target target = controllerManagement.findOrRegisterTargetIfItDoesNotexist(targetid, IpUtil + .getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), securityProperties)); if (target.getTargetInfo().getUpdateStatus() == TargetUpdateStatus.UNKNOWN) { LOG.debug("target with {} extsisted but was in status UNKNOWN -> REGISTERED)", targetid); controllerManagement.updateTargetStatus(target.getTargetInfo(), TargetUpdateStatus.REGISTERED, - System.currentTimeMillis(), - IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), - securityProperties.getClients().getRemoteIpHeader())); + System.currentTimeMillis(), IpUtil.getClientIpFromRequest( + requestResponseContextHolder.getHttpServletRequest(), securityProperties)); } return new ResponseEntity<>( @@ -143,9 +141,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @PathVariable("fileName") final String fileName) { ResponseEntity result; - final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), - securityProperties.getClients().getRemoteIpHeader())); + final Target target = controllerManagement.updateLastTargetQuery(targetid, IpUtil + .getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), securityProperties)); final SoftwareModule module = softwareManagement.findSoftwareModuleById(softwareModuleId); if (checkModule(fileName, module)) { @@ -200,9 +197,8 @@ public class DdiRootController implements DdiRootControllerRestApi { public ResponseEntity downloadArtifactMd5(@PathVariable("targetid") final String targetid, @PathVariable("softwareModuleId") final Long softwareModuleId, @PathVariable("fileName") final String fileName) { - controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), - securityProperties.getClients().getRemoteIpHeader())); + controllerManagement.updateLastTargetQuery(targetid, IpUtil + .getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), securityProperties)); final SoftwareModule module = softwareManagement.findSoftwareModuleById(softwareModuleId); @@ -228,9 +224,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @RequestParam(value = "c", required = false, defaultValue = "-1") final int resource) { LOG.debug("getControllerBasedeploymentAction({},{})", targetid, resource); - final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), - securityProperties.getClients().getRemoteIpHeader())); + final Target target = controllerManagement.updateLastTargetQuery(targetid, IpUtil + .getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), securityProperties)); final Action action = findActionWithExceptionIfNotFound(actionId); if (!action.getTarget().getId().equals(target.getId())) { @@ -263,9 +258,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @PathVariable("targetid") final String targetid, @PathVariable("actionId") @NotEmpty final Long actionId) { LOG.debug("provideBasedeploymentActionFeedback for target [{},{}]: {}", targetid, actionId, feedback); - final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), - securityProperties.getClients().getRemoteIpHeader())); + final Target target = controllerManagement.updateLastTargetQuery(targetid, IpUtil + .getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), securityProperties)); if (!actionId.equals(feedback.getId())) { LOG.warn( @@ -357,9 +351,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @Override public ResponseEntity putConfigData(@Valid @RequestBody final DdiConfigData configData, @PathVariable("targetid") final String targetid) { - controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), - securityProperties.getClients().getRemoteIpHeader())); + controllerManagement.updateLastTargetQuery(targetid, IpUtil + .getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), securityProperties)); controllerManagement.updateControllerAttributes(targetid, configData.getData()); @@ -372,9 +365,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @PathVariable("actionId") @NotEmpty final Long actionId) { LOG.debug("getControllerCancelAction({})", targetid); - final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), - securityProperties.getClients().getRemoteIpHeader())); + final Target target = controllerManagement.updateLastTargetQuery(targetid, IpUtil + .getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), securityProperties)); final Action action = findActionWithExceptionIfNotFound(actionId); if (!action.getTarget().getId().equals(target.getId())) { @@ -403,9 +395,8 @@ public class DdiRootController implements DdiRootControllerRestApi { @PathVariable("actionId") @NotEmpty final Long actionId) { LOG.debug("provideCancelActionFeedback for target [{}]: {}", targetid, feedback); - final Target target = controllerManagement.updateLastTargetQuery(targetid, - IpUtil.getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), - securityProperties.getClients().getRemoteIpHeader())); + final Target target = controllerManagement.updateLastTargetQuery(targetid, IpUtil + .getClientIpFromRequest(requestResponseContextHolder.getHttpServletRequest(), securityProperties)); if (!actionId.equals(feedback.getId())) { LOG.warn( diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index 135754604..98e9f6838 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -33,9 +33,11 @@ import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; +import org.eclipse.hawkbit.security.HawkbitSecurityProperties; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.hawkbit.util.IpUtil; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; @@ -50,6 +52,9 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Root Poll Resource") public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoDB { + @Autowired + private HawkbitSecurityProperties securityProperties; + @Test @Description("Ensures that targets cannot be created e.g. in plug'n play scenarios when tenant does not exists but can be created if the tenant exists.") @WithUser(tenantId = "tenantDoesNotExists", allSpPermissions = true, authorities = "ROLE_CONTROLLER", autoCreateTenant = false) @@ -257,6 +262,23 @@ public class DdiRootControllerTest extends AbstractRestIntegrationTestWithMongoD } + @Test + @Description("Ensures that the source IP address of the polling target is not stored in repository if disabled") + public void rootRsIpAddressNotStoredIfDisabled() throws Exception { + securityProperties.getClients().setTrackRemoteIp(false); + + // test + final String knownControllerId1 = "0815"; + mvc.perform(get("/{tenant}/controller/v1/{controllerId}", tenantAware.getCurrentTenant(), knownControllerId1)) + .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); + + // verify + final Target target = targetManagement.findTargetByControllerID(knownControllerId1); + assertThat(target.getTargetInfo().getAddress()).isEqualTo(IpUtil.createHttpUri("***")); + + securityProperties.getClients().setTrackRemoteIp(true); + } + @Test @Description("Controller trys to finish an update process after it has been finished by an error action status.") public void tryToFinishAnUpdateProcessAfterItHasBeenFinished() throws Exception { diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java index f0d8f7d48..961b418a0 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java @@ -110,7 +110,7 @@ public class DosFilter extends OncePerRequestFilter { boolean processChain; - final String ip = IpUtil.getClientIpFromRequest(request, forwardHeader).getHost(); + final String ip = IpUtil.getClientIpFromRequest(request, forwardHeader, true).getHost(); if (checkIpFails(ip)) { processChain = handleMissingIpAddress(response); } else { diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/HawkbitSecurityProperties.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/HawkbitSecurityProperties.java index 6192a8f31..3f0be994a 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/HawkbitSecurityProperties.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/HawkbitSecurityProperties.java @@ -82,10 +82,16 @@ public class HawkbitSecurityProperties { private String blacklist = ""; /** - * Name of the http header from which the remote ip is extracted. + * Name of the http header from which the remote ip is extracted for DDI + * connected clients. */ private String remoteIpHeader = "X-Forwarded-For"; + /** + * Set to true if DDI clients remote IP should be stored. + */ + private boolean trackRemoteIp = true; + public String getBlacklist() { return blacklist; } @@ -101,6 +107,14 @@ public class HawkbitSecurityProperties { public void setRemoteIpHeader(final String remoteIpHeader) { this.remoteIpHeader = remoteIpHeader; } + + public boolean isTrackRemoteIp() { + return trackRemoteIp; + } + + public void setTrackRemoteIp(final boolean trackRemoteIp) { + this.trackRemoteIp = trackRemoteIp; + } } /** diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java index 4e08d8bfe..96fc557aa 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java @@ -15,6 +15,8 @@ import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; +import org.eclipse.hawkbit.security.HawkbitSecurityProperties; + import com.google.common.net.HttpHeaders; /** @@ -45,17 +47,49 @@ public final class IpUtil { * @param request * the {@link HttpServletRequest} to determine the IP address * where this request has been sent from - * @param forwardHeader - * the header name containing the IP address e.g. forwarded by a - * proxy {@code x-forwarded-for} + * @param securityProperties + * hawkBit security properties. * @return the {@link URI} based IP address from the client which sent the * request */ - public static URI getClientIpFromRequest(final HttpServletRequest request, final String forwardHeader) { - String ip = request.getHeader(forwardHeader); - if (ip == null || (ip = findClientIpAddress(ip)) == null) { - ip = request.getRemoteAddr(); + public static URI getClientIpFromRequest(final HttpServletRequest request, + final HawkbitSecurityProperties securityProperties) { + + return getClientIpFromRequest(request, securityProperties.getClients().getRemoteIpHeader(), + securityProperties.getClients().isTrackRemoteIp()); + } + + /** + * Retrieves the string based IP address from a given + * {@link HttpServletRequest} by either the + * {@link HttpHeaders#X_FORWARDED_FOR} or by the + * {@link HttpServletRequest#getRemoteAddr()} methods. + * + * @param request + * the {@link HttpServletRequest} to determine the IP address + * where this request has been sent from + * @param forwardHeader + * the header name containing the IP address e.g. forwarded by a + * proxy {@code x-forwarded-for} + * + * @param trackRemoteIp + * to true if remote IP should be tracked. + * @return the {@link URI} based IP address from the client which sent the + * request + */ + public static URI getClientIpFromRequest(final HttpServletRequest request, final String forwardHeader, + final boolean trackRemoteIp) { + String ip; + + if (trackRemoteIp) { + ip = request.getHeader(forwardHeader); + if (ip == null || (ip = findClientIpAddress(ip)) == null) { + ip = request.getRemoteAddr(); + } + } else { + ip = "***"; } + return createHttpUri(ip); } diff --git a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/util/IpUtilTest.java b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/util/IpUtilTest.java index 9eb83d2a9..0f4a01d26 100644 --- a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/util/IpUtilTest.java +++ b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/util/IpUtilTest.java @@ -50,7 +50,7 @@ public class IpUtilTest { when(requestMock.getRemoteAddr()).thenReturn(knownRemoteClientIP.getHost()); // test - final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "bumlux"); + final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "bumlux", true); // verify assertThat(remoteAddr).as("The remote address should be as the known client IP address") @@ -59,6 +59,25 @@ public class IpUtilTest { verify(requestMock, times(1)).getRemoteAddr(); } + @Test + @Description("Tests create uri from request with masked IP when IP tracking is disabled") + public void maskRemoteAddrIfDisabled() { + // known values + final URI knownRemoteClientIP = IpUtil.createHttpUri("***"); + // mock + when(requestMock.getHeader(HttpHeaders.X_FORWARDED_FOR)).thenReturn(null); + when(requestMock.getRemoteAddr()).thenReturn(knownRemoteClientIP.getHost()); + + // test + final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "bumlux", false); + + // verify + assertThat(remoteAddr).as("The remote address should be as the known client IP address") + .isEqualTo(knownRemoteClientIP); + verify(requestMock, times(0)).getHeader("bumlux"); + verify(requestMock, times(0)).getRemoteAddr(); + } + @Test @Description("Tests create uri from x forward header") public void getRemoteAddrFromXForwardedForHeader() { @@ -69,7 +88,7 @@ public class IpUtilTest { when(requestMock.getRemoteAddr()).thenReturn(null); // test - final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "X-Forwarded-For"); + final URI remoteAddr = IpUtil.getClientIpFromRequest(requestMock, "X-Forwarded-For", true); // verify assertThat(remoteAddr).as("The remote address should be as the known client IP address") From d19a4666688d5597518cc697078efc2374e75a49 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 4 Jun 2016 21:42:04 +0200 Subject: [PATCH 206/371] Added missing READMEs Signed-off-by: Kai Zimmermann --- hawkbit-repository/README.md | 47 ++++++++++++++++++ .../hawkbit-repository-api/README.md | 6 +++ .../hawkbit-repository-core/README.md | 3 ++ .../hawkbit-repository-jpa/README.md | 48 +------------------ 4 files changed, 58 insertions(+), 46 deletions(-) create mode 100644 hawkbit-repository/README.md create mode 100644 hawkbit-repository/hawkbit-repository-api/README.md create mode 100644 hawkbit-repository/hawkbit-repository-core/README.md diff --git a/hawkbit-repository/README.md b/hawkbit-repository/README.md new file mode 100644 index 000000000..2d68a4e73 --- /dev/null +++ b/hawkbit-repository/README.md @@ -0,0 +1,47 @@ +# hawkBit metadata repository + +The repository is in charge for managing the meta data of the update server, e.g. provisioning targets, distribution sets, software modules etc. + +# Build + +[indent=0] +---- + $ mvn clean install +---- + +Note, in order to build correctly in your IDE, you have to add ./target/generated-sources/apt to your build path. + +#Concepts + +## Rollout +A rollout consists of the distribution set and a target-query-filter which defines the targets to be updated in this rollout. The targets within this filter are split up in configured amount of _Deployment Groups_ at creation time. + +When starting a rollout, for all targets within this rollout deployment actions will be created. The deployment actions of the first group will be started immediately all other deployment actions will be scheduled. + +> Due rollouts might include a large number of targets and deployment group, creation as well as starting a rollout might take some time and therefore the creation and starting of an rollout is executed asynchronously. The creation and starting progress is reflected by the rollout's status attribute + +### Rollout Creation +The targets reflected by the target-query-filter is interpreted at creation time. Only targets which have been created at that time are included in the rollout. Targets which are created after the rollout creation will not be included. At rollout creation time all necessary deployment groups containing the targets will be created. Dynamically adding targets to a created or running rollout is currently not supported. + +### Rollout Starting +The rollout is using the same concept based on _deployment acionts_ per target. All necessary _deployment acionts_ will be created at starting point but not all _deployment acionts_ will be set to running. Only the _deployment acionts_ of the first _deployment group_ is set to running, all other actions are created in _scheduled_ state. +If targets having not finished _deployment actions_ at rollout starting time, these action are tried to cancel (state: canceling). Scheduled actions from another rollout are canceled directly on server side because they were never running before and can be safely canceled. + +>Multiple rollouts can be running at the same time, but if the rollouts effect the same targets they will interfer the targets _deployment actions_ e.g. canceling/cancel already running/scheduled _deployment actions_. + +### Deployment Group Condition/Action +#### Success Condition/Action +A _success condition_ defines when a deployment group is interpreted as success and triggers the _success action_. E.g. a threshold of successfully updated targets within the group. + +The _success action_ is executed if the _success_condition_ is fullfilled. Currently only the _success action_ starting the next following deployment group is available. + +#### Error Condition/Action +A _error condition_ defines when a deployment group is interpreted as failure and triggers the _error action_. E.g. a threshold of update failures of targets within the group. + +The _error action_ is executed if the _error condition_ is fullfilled. Currently only the _error action_ pausing the whole rollout is available, a paused rollout can be resumed by a user. + +### Rollout Scheduler +The rollout is managed by a scheduler task which is checking for rollouts in _running_ state. This is done atomic by updating the row in the database, so only the rollouts are checked and processed for the current instance to avoid that multiple instances are processing a rollout. + +>Due the scheduler, it might take some time until a rollouts is processed and switching is state or starting the next deployment group. + diff --git a/hawkbit-repository/hawkbit-repository-api/README.md b/hawkbit-repository/hawkbit-repository-api/README.md new file mode 100644 index 000000000..8000ad390 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/README.md @@ -0,0 +1,6 @@ +# hawkBit repository API + +API for repository access. Contains: + +- Entity Model +- Management service API \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-core/README.md b/hawkbit-repository/hawkbit-repository-core/README.md new file mode 100644 index 000000000..6973d7406 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-core/README.md @@ -0,0 +1,3 @@ +# hawkBit common implementation + +Core elements that can be used by implementations. \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/README.md b/hawkbit-repository/hawkbit-repository-jpa/README.md index 2d68a4e73..6dd0217e7 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/README.md +++ b/hawkbit-repository/hawkbit-repository-jpa/README.md @@ -1,47 +1,3 @@ -# hawkBit metadata repository - -The repository is in charge for managing the meta data of the update server, e.g. provisioning targets, distribution sets, software modules etc. - -# Build - -[indent=0] ----- - $ mvn clean install ----- - -Note, in order to build correctly in your IDE, you have to add ./target/generated-sources/apt to your build path. - -#Concepts - -## Rollout -A rollout consists of the distribution set and a target-query-filter which defines the targets to be updated in this rollout. The targets within this filter are split up in configured amount of _Deployment Groups_ at creation time. - -When starting a rollout, for all targets within this rollout deployment actions will be created. The deployment actions of the first group will be started immediately all other deployment actions will be scheduled. - -> Due rollouts might include a large number of targets and deployment group, creation as well as starting a rollout might take some time and therefore the creation and starting of an rollout is executed asynchronously. The creation and starting progress is reflected by the rollout's status attribute - -### Rollout Creation -The targets reflected by the target-query-filter is interpreted at creation time. Only targets which have been created at that time are included in the rollout. Targets which are created after the rollout creation will not be included. At rollout creation time all necessary deployment groups containing the targets will be created. Dynamically adding targets to a created or running rollout is currently not supported. - -### Rollout Starting -The rollout is using the same concept based on _deployment acionts_ per target. All necessary _deployment acionts_ will be created at starting point but not all _deployment acionts_ will be set to running. Only the _deployment acionts_ of the first _deployment group_ is set to running, all other actions are created in _scheduled_ state. -If targets having not finished _deployment actions_ at rollout starting time, these action are tried to cancel (state: canceling). Scheduled actions from another rollout are canceled directly on server side because they were never running before and can be safely canceled. - ->Multiple rollouts can be running at the same time, but if the rollouts effect the same targets they will interfer the targets _deployment actions_ e.g. canceling/cancel already running/scheduled _deployment actions_. - -### Deployment Group Condition/Action -#### Success Condition/Action -A _success condition_ defines when a deployment group is interpreted as success and triggers the _success action_. E.g. a threshold of successfully updated targets within the group. - -The _success action_ is executed if the _success_condition_ is fullfilled. Currently only the _success action_ starting the next following deployment group is available. - -#### Error Condition/Action -A _error condition_ defines when a deployment group is interpreted as failure and triggers the _error action_. E.g. a threshold of update failures of targets within the group. - -The _error action_ is executed if the _error condition_ is fullfilled. Currently only the _error action_ pausing the whole rollout is available, a paused rollout can be resumed by a user. - -### Rollout Scheduler -The rollout is managed by a scheduler task which is checking for rollouts in _running_ state. This is done atomic by updating the row in the database, so only the rollouts are checked and processed for the current instance to avoid that multiple instances are processing a rollout. - ->Due the scheduler, it might take some time until a rollouts is processed and switching is state or starting the next deployment group. +# hawkBit JPA implementation +JPA implementation of the repository. Based on [EclipseLink](http://www.eclipse.org/eclipselink/) and [Spring Data Jpa](http://projects.spring.io/spring-data-jpa/). \ No newline at end of file From 44aaaab4e230f1323b58476ba61717fa0f7ca2ed Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 4 Jun 2016 22:07:26 +0200 Subject: [PATCH 207/371] Fixed sonar issues and changes package of test repo classes for easier sonar exclusion. Signed-off-by: Kai Zimmermann --- .../jpa/AbstractJpaIntegrationTest.java | 2 +- ...AbstractJpaIntegrationTestWithMongoDB.java | 2 +- .../jpa/ArtifactManagementTest.java | 4 +- .../jpa/DistributionSetManagementTest.java | 2 +- .../repository/jpa/ReportManagementTest.java | 6 +- .../repository/jpa/RolloutManagementTest.java | 2 +- .../jpa/SoftwareManagementTest.java | 2 +- .../repository/jpa/SystemManagementTest.java | 2 +- .../repository/jpa/TargetManagementTest.java | 4 +- .../rsql/RSQLDistributionSetFieldTest.java | 2 +- .../jpa/rsql/RSQLSoftwareModuleFieldTest.java | 2 +- .../RSQLSoftwareModuleMetadataFieldsTest.java | 2 +- .../jpa/rsql/RSQLTargetFieldTest.java | 2 +- .../jpa/tenancy/MultiTenancyEntityTest.java | 4 +- .../util/AbstractIntegrationTest.java | 2 +- .../AbstractIntegrationTestWithMongoDB.java | 2 +- .../{ => test}/util/CIMySqlTestDatabase.java | 2 +- .../{ => test}/util/FreePortFileWriter.java | 2 +- .../{ => test}/util/HashGeneratorUtils.java | 2 +- .../util/JpaTestRepositoryManagement.java | 2 +- .../{ => test}/util/TestConfiguration.java | 2 +- .../util/TestRepositoryManagement.java | 2 +- .../{ => test}/util/TestdataFactory.java | 2 +- .../{ => test}/util/Testdatabase.java | 2 +- .../util/WithSpringAuthorityRule.java | 2 +- .../repository/{ => test}/util/WithUser.java | 2 +- .../rest/AbstractRestIntegrationTest.java | 2 +- ...bstractRestIntegrationTestWithMongoDB.java | 2 +- .../artifacts/state/ArtifactUploadState.java | 63 +++++++++---------- .../artifacts/upload/UploadStatusObject.java | 51 ++++++++++----- .../targettable/BulkUploadHandler.java | 2 +- 31 files changed, 100 insertions(+), 82 deletions(-) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/AbstractIntegrationTest.java (99%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/AbstractIntegrationTestWithMongoDB.java (98%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/CIMySqlTestDatabase.java (98%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/FreePortFileWriter.java (97%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/HashGeneratorUtils.java (97%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/JpaTestRepositoryManagement.java (97%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/TestConfiguration.java (98%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/TestRepositoryManagement.java (91%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/TestdataFactory.java (99%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/Testdatabase.java (90%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/WithSpringAuthorityRule.java (99%) rename hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/{ => test}/util/WithUser.java (97%) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java index b4b451ecd..45831d08f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTest.java @@ -12,7 +12,7 @@ import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; -import org.eclipse.hawkbit.repository.util.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.test.util.AbstractIntegrationTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.data.mongodb.gridfs.GridFsOperations; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java index d1c433cc4..e2e755246 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/AbstractJpaIntegrationTestWithMongoDB.java @@ -12,7 +12,7 @@ import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.eclipse.hawkbit.cache.TenantAwareCacheManager; -import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.repository.test.util.AbstractIntegrationTestWithMongoDB; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java index faf7649d0..293dcdf91 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ArtifactManagementTest.java @@ -32,8 +32,8 @@ import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.util.HashGeneratorUtils; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.HashGeneratorUtils; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.junit.Test; import org.slf4j.LoggerFactory; import org.springframework.data.mongodb.core.query.Criteria; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index d26474bb4..67d5202a5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -34,12 +34,12 @@ import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.util.WithUser; import org.fest.assertions.core.Condition; import org.junit.Test; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java index 4fba80616..ca82924a8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ReportManagementTest.java @@ -37,9 +37,9 @@ import org.eclipse.hawkbit.repository.report.model.DataReportSeries; import org.eclipse.hawkbit.repository.report.model.DataReportSeriesItem; import org.eclipse.hawkbit.repository.report.model.InnerOuterDataReportSeries; import org.eclipse.hawkbit.repository.report.model.SeriesTime; -import org.eclipse.hawkbit.repository.util.TestdataFactory; -import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.TestdataFactory; +import org.eclipse.hawkbit.repository.test.util.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.junit.After; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java index 42e5de498..381e9722d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/RolloutManagementTest.java @@ -34,13 +34,13 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorAction import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.test.util.TestdataFactory; import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.repository.util.TestdataFactory; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Description; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java index 366dd6ec7..75633a85a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SoftwareManagementTest.java @@ -39,7 +39,7 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.junit.Test; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java index e697f65d8..a89486757 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/SystemManagementTest.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.report.model.TenantUsage; -import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.test.util.WithSpringAuthorityRule; import org.junit.Test; import ru.yandex.qatools.allure.annotations.Description; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java index 79a7ad89f..4a83b1054 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java @@ -38,13 +38,13 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.test.util.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; -import org.eclipse.hawkbit.repository.util.WithUser; import org.junit.Test; import org.springframework.data.domain.PageRequest; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java index 6604e3152..4eb15a78d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java @@ -20,7 +20,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.eclipse.hawkbit.repository.util.TestdataFactory; +import org.eclipse.hawkbit.repository.test.util.TestdataFactory; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java index 47732dac2..25897ccde 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java @@ -16,7 +16,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; -import org.eclipse.hawkbit.repository.util.TestdataFactory; +import org.eclipse.hawkbit.repository.test.util.TestdataFactory; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java index 3f843bffc..e04ee8c9b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleMetadataFieldsTest.java @@ -18,7 +18,7 @@ import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; -import org.eclipse.hawkbit.repository.util.TestdataFactory; +import org.eclipse.hawkbit.repository.test.util.TestdataFactory; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java index f21e4c938..2cccd655b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java @@ -24,7 +24,7 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.util.TestdataFactory; +import org.eclipse.hawkbit.repository.test.util.TestdataFactory; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java index 86a0389d5..52f314171 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/tenancy/MultiTenancyEntityTest.java @@ -16,8 +16,8 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.junit.Test; import org.springframework.data.domain.Page; import org.springframework.data.domain.Slice; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java index c2bd61676..3d09fabc3 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import org.eclipse.hawkbit.ExcludePathAwareShallowETagFilter; import org.eclipse.hawkbit.repository.ArtifactManagement; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTestWithMongoDB.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTestWithMongoDB.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTestWithMongoDB.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTestWithMongoDB.java index 28d8add3a..bb54f550c 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/AbstractIntegrationTestWithMongoDB.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTestWithMongoDB.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import java.io.IOException; import java.net.UnknownHostException; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/CIMySqlTestDatabase.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/CIMySqlTestDatabase.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/CIMySqlTestDatabase.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/CIMySqlTestDatabase.java index e6bbe1f6a..3601f896e 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/CIMySqlTestDatabase.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/CIMySqlTestDatabase.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import java.sql.Connection; import java.sql.DriverManager; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/FreePortFileWriter.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/FreePortFileWriter.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/FreePortFileWriter.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/FreePortFileWriter.java index 383722a75..149cdf2b5 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/FreePortFileWriter.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/FreePortFileWriter.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import java.io.File; import java.net.InetSocketAddress; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/HashGeneratorUtils.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/HashGeneratorUtils.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/HashGeneratorUtils.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/HashGeneratorUtils.java index e222007f1..9d1dbca7c 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/HashGeneratorUtils.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/HashGeneratorUtils.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/JpaTestRepositoryManagement.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/JpaTestRepositoryManagement.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/JpaTestRepositoryManagement.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/JpaTestRepositoryManagement.java index 7ec5bb407..eae0b9a7d 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/JpaTestRepositoryManagement.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/JpaTestRepositoryManagement.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import java.util.List; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestConfiguration.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestConfiguration.java similarity index 98% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestConfiguration.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestConfiguration.java index acbaae2b4..e6a8e7686 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestConfiguration.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import java.util.concurrent.Executor; import java.util.concurrent.Executors; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestRepositoryManagement.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestRepositoryManagement.java similarity index 91% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestRepositoryManagement.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestRepositoryManagement.java index ddad59990..482c7725c 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestRepositoryManagement.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestRepositoryManagement.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; /** * Repository support for tests. diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java index 1ed5679c8..81e2c1daf 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/TestdataFactory.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestdataFactory.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import java.io.InputStream; import java.nio.charset.Charset; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/Testdatabase.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/Testdatabase.java similarity index 90% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/Testdatabase.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/Testdatabase.java index b24d34533..e6f9be49f 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/Testdatabase.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/Testdatabase.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; /** * diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithSpringAuthorityRule.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithSpringAuthorityRule.java similarity index 99% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithSpringAuthorityRule.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithSpringAuthorityRule.java index b456cc32b..8f5f8e94b 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithSpringAuthorityRule.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithSpringAuthorityRule.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import java.lang.annotation.Annotation; import java.lang.reflect.Field; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithUser.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithUser.java similarity index 97% rename from hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithUser.java rename to hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithUser.java index 04af9196b..a6151ed4c 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/util/WithUser.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/WithUser.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.repository.util; +package org.eclipse.hawkbit.repository.test.util; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java index 14ba8556e..1708bf6cc 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTest.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rest; -import org.eclipse.hawkbit.repository.util.AbstractIntegrationTest; +import org.eclipse.hawkbit.repository.test.util.AbstractIntegrationTest; import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.eclipse.hawkbit.rest.util.FilterHttpResponse; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java index 4d952434d..70d65e141 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/AbstractRestIntegrationTestWithMongoDB.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rest; -import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.repository.test.util.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.configuration.RestConfiguration; import org.eclipse.hawkbit.rest.util.FilterHttpResponse; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java index 5399e59c8..ed2feef0a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java @@ -53,70 +53,65 @@ public class ArtifactUploadState implements ManagmentEntityState, Serializ private Set selectedSoftwareModules = Collections.emptySet(); - private boolean swTypeFilterClosed = Boolean.FALSE; + private boolean swTypeFilterClosed; - private boolean swModuleTableMaximized = Boolean.FALSE; + private boolean swModuleTableMaximized; - private boolean artifactDetailsMaximized = Boolean.FALSE; + private boolean artifactDetailsMaximized; private final Set selectedDeleteSWModuleTypes = new HashSet<>(); - private boolean noDataAvilableSoftwareModule = Boolean.FALSE; - - private boolean isStatusPopupMinimized = Boolean.FALSE; - - private boolean isUploadCompleted = Boolean.FALSE; - + private boolean noDataAvilableSoftwareModule; + + private boolean statusPopupMinimized; + + private boolean uploadCompleted; + private List uploadedFileStatusList = new ArrayList<>(); - + private final AtomicInteger numberOfFileUploadsExpected = new AtomicInteger(); private final AtomicInteger numberOfFilesActuallyUpload = new AtomicInteger(); - + private final AtomicInteger numberOfFileUploadsFailed = new AtomicInteger(); public AtomicInteger getNumberOfFileUploadsFailed() { return numberOfFileUploadsFailed; } - + public AtomicInteger getNumberOfFilesActuallyUpload() { return numberOfFilesActuallyUpload; } - + public AtomicInteger getNumberOfFileUploadsExpected() { return numberOfFileUploadsExpected; } - - + public List getUploadedFileStatusList() { return uploadedFileStatusList; } - - public void setUploadedFileStatusList(List uploadedFileStatusList) { + + public void setUploadedFileStatusList(final List uploadedFileStatusList) { this.uploadedFileStatusList = uploadedFileStatusList; } - + public boolean isUploadCompleted() { - return isUploadCompleted; - } - - public void setUploadCompleted(boolean isUploadCompleted) { - this.isUploadCompleted = isUploadCompleted; + return uploadCompleted; + } + + public void setUploadCompleted(final boolean uploadCompleted) { + this.uploadCompleted = uploadCompleted; + } + + public void setStatusPopupMinimized(final boolean statusPopupMinimized) { + this.statusPopupMinimized = statusPopupMinimized; } - - public void setStatusPopupMinimized(boolean isStatusPopupMinimized) { - this.isStatusPopupMinimized = isStatusPopupMinimized; - } - public boolean isStatusPopupMinimized() { - return isStatusPopupMinimized; - } + return statusPopupMinimized; + } - - - - /** + /** * Set software. * * @return diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java index 4ea82d7dd..db876fe3b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.artifacts.upload; +import java.io.Serializable; + import org.eclipse.hawkbit.repository.model.SoftwareModule; /** @@ -16,22 +18,24 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; * popup. * */ -public class UploadStatusObject { +public class UploadStatusObject implements Serializable { + private static final long serialVersionUID = 1L; + private String status; private Double progress; private String filename; private String reason; - private SoftwareModule selectedSoftwareModule; + private final SoftwareModule selectedSoftwareModule; public UploadStatusObject(final String status, final Double progress, final String fileName, final String reason, final SoftwareModule selectedSoftwareModule) { - this(fileName,selectedSoftwareModule); + this(fileName, selectedSoftwareModule); this.status = status; this.progress = progress; this.reason = reason; } - public UploadStatusObject(String fileName, SoftwareModule selectedSoftwareModule) { + public UploadStatusObject(final String fileName, final SoftwareModule selectedSoftwareModule) { this.filename = fileName; this.selectedSoftwareModule = selectedSoftwareModule; } @@ -44,7 +48,7 @@ public class UploadStatusObject { return status; } - public void setStatus(String status) { + public void setStatus(final String status) { this.status = status; } @@ -52,7 +56,7 @@ public class UploadStatusObject { return progress; } - public void setProgress(Double progress) { + public void setProgress(final Double progress) { this.progress = progress; } @@ -60,7 +64,7 @@ public class UploadStatusObject { return filename; } - public void setFilename(String filename) { + public void setFilename(final String filename) { this.filename = filename; } @@ -68,19 +72,38 @@ public class UploadStatusObject { return reason; } - public void setReason(String reason) { + public void setReason(final String reason) { this.reason = reason; } @Override - public boolean equals(Object obj) { - if (this == null || obj == null) { - return false; - } - if (obj instanceof UploadStatusObject && this.getFilename() == ((UploadStatusObject) obj).getFilename()) { + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((filename == null) ? 0 : filename.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { return true; } - return false; + if (obj == null) { + return false; + } + if (!(obj instanceof UploadStatusObject)) { + return false; + } + final UploadStatusObject other = (UploadStatusObject) obj; + if (filename == null) { + if (other.filename != null) { + return false; + } + } else if (!filename.equals(other.filename)) { + return false; + } + return true; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java index d6a613cf7..982e9d75b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/BulkUploadHandler.java @@ -98,7 +98,7 @@ public class BulkUploadHandler extends CustomComponent final TargetBulkUpdateWindowLayout targetBulkUpdateWindowLayout; - private final EntityFactory entityFactory; + private transient EntityFactory entityFactory; /** * From def8eafd92e874a9723f0531310c5ca970d9a20b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sun, 5 Jun 2016 16:17:58 +0200 Subject: [PATCH 208/371] Changed package name of test utils to allow sonar exclusion. Signed-off-by: Kai Zimmermann --- .../hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java | 2 +- .../hawkbit/ddi/rest/resource/DdiRootControllerTest.java | 4 ++-- .../hawkbit/amqp/AmqpMessageDispatcherServiceTest.java | 2 +- .../hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java | 2 +- .../mgmt/rest/resource/MgmtDistributionSetResourceTest.java | 4 ++-- .../rest/resource/MgmtDistributionSetTypeResourceTest.java | 2 +- .../hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java | 2 +- .../mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java | 4 ++-- .../rest/resource/MgmtSoftwareModuleTypeResourceTest.java | 2 +- .../hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java index b3828582c..7f12b78ae 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java @@ -29,11 +29,11 @@ import org.apache.commons.lang3.RandomUtils; import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.junit.Test; import org.slf4j.LoggerFactory; diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index 98e9f6838..31ec37c58 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -28,8 +28,8 @@ import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.repository.util.WithSpringAuthorityRule; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.WithSpringAuthorityRule; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java index 5faaa74f0..103dc6c57 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java @@ -37,7 +37,7 @@ import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.repository.test.util.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.util.IpUtil; import org.junit.Test; import org.mockito.ArgumentCaptor; diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index c67d6cf47..8cd92d2bd 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -16,7 +16,7 @@ import org.eclipse.hawkbit.api.UrlProtocol; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.repository.util.AbstractIntegrationTestWithMongoDB; +import org.eclipse.hawkbit.repository.test.util.AbstractIntegrationTestWithMongoDB; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index ad72aa55d..556454f93 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -29,12 +29,12 @@ import java.util.Set; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.test.util.TestdataFactory; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.util.TestdataFactory; -import org.eclipse.hawkbit.repository.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java index ad6be0854..bc6d69cd3 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java @@ -27,7 +27,7 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index ff49542ce..11536e6e1 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -29,7 +29,7 @@ import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java index e7397dd49..79a3fc2b2 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResourceTest.java @@ -41,8 +41,8 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata; -import org.eclipse.hawkbit.repository.util.HashGeneratorUtils; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.HashGeneratorUtils; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.eclipse.hawkbit.rest.util.JsonBuilder; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java index 363b12cde..36d975138 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java @@ -26,7 +26,7 @@ import java.util.List; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.util.JsonBuilder; import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index 6e50d1103..1375307d4 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -40,7 +40,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.util.WithUser; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; From 876369d816cbc0069c3cd6e6a836f893904d7a34 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 6 Jun 2016 10:49:37 +0200 Subject: [PATCH 209/371] Merge changes Signed-off-by: SirWayne --- .../RepositoryApplicationConfiguration.java | 111 ++++++++++++++++++ .../repository/jpa/JpaArtifactManagement.java | 2 - .../jpa/JpaControllerManagement.java | 2 - .../jpa/JpaDeploymentManagement.java | 2 - .../jpa/JpaDistributionSetManagement.java | 2 - .../repository/jpa/JpaReportManagement.java | 2 - .../jpa/JpaRolloutGroupManagement.java | 2 - .../repository/jpa/JpaRolloutManagement.java | 2 - .../repository/jpa/JpaSoftwareManagement.java | 2 - .../repository/jpa/JpaSystemManagement.java | 2 - .../repository/jpa/JpaTagManagement.java | 2 - .../jpa/JpaTargetFilterQueryManagement.java | 2 - .../repository/jpa/JpaTargetManagement.java | 2 - .../jpa/JpaTenantConfigurationManagement.java | 2 - .../jpa/JpaTenantStatsManagement.java | 1 - 15 files changed, 111 insertions(+), 27 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index 50207037a..313f0fd67 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -11,8 +11,34 @@ package org.eclipse.hawkbit; import java.util.HashMap; import java.util.Map; +import org.eclipse.hawkbit.repository.ArtifactManagement; +import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.DeploymentManagement; +import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.ReportManagement; +import org.eclipse.hawkbit.repository.RolloutGroupManagement; +import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SystemManagement; +import org.eclipse.hawkbit.repository.TagManagement; +import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.repository.TenantStatsManagement; +import org.eclipse.hawkbit.repository.jpa.JpaArtifactManagement; +import org.eclipse.hawkbit.repository.jpa.JpaControllerManagement; +import org.eclipse.hawkbit.repository.jpa.JpaDeploymentManagement; +import org.eclipse.hawkbit.repository.jpa.JpaDistributionSetManagement; +import org.eclipse.hawkbit.repository.jpa.JpaReportManagement; +import org.eclipse.hawkbit.repository.jpa.JpaRolloutGroupManagement; +import org.eclipse.hawkbit.repository.jpa.JpaRolloutManagement; +import org.eclipse.hawkbit.repository.jpa.JpaSoftwareManagement; +import org.eclipse.hawkbit.repository.jpa.JpaSystemManagement; +import org.eclipse.hawkbit.repository.jpa.JpaTagManagement; +import org.eclipse.hawkbit.repository.jpa.JpaTargetFilterQueryManagement; +import org.eclipse.hawkbit.repository.jpa.JpaTargetManagement; +import org.eclipse.hawkbit.repository.jpa.JpaTenantConfigurationManagement; +import org.eclipse.hawkbit.repository.jpa.JpaTenantStatsManagement; import org.eclipse.hawkbit.repository.jpa.aspects.ExceptionMappingAspectHandler; import org.eclipse.hawkbit.repository.jpa.configuration.MultiTenantJpaTransactionManager; import org.eclipse.hawkbit.repository.jpa.model.helper.AfterTransactionCommitExecutorHolder; @@ -26,6 +52,7 @@ import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -173,4 +200,88 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { public PlatformTransactionManager transactionManager() { return new MultiTenantJpaTransactionManager(); } + + @Bean + @ConditionalOnMissingBean + public SystemManagement systemManagement() { + return new JpaSystemManagement(); + } + + @Bean + @ConditionalOnMissingBean + public ReportManagement reportManagement() { + return new JpaReportManagement(); + } + + @Bean + @ConditionalOnMissingBean + public DistributionSetManagement distributionSetManagement() { + return new JpaDistributionSetManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TenantStatsManagement tenantStatsManagement() { + return new JpaTenantStatsManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TenantConfigurationManagement tenantConfigurationManagement() { + return new JpaTenantConfigurationManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TargetManagement targetManagement() { + return new JpaTargetManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TargetFilterQueryManagement targetFilterQueryManagement() { + return new JpaTargetFilterQueryManagement(); + } + + @Bean + @ConditionalOnMissingBean + public TagManagement tagManagement() { + return new JpaTagManagement(); + } + + @Bean + @ConditionalOnMissingBean + public SoftwareManagement softwareManagement() { + return new JpaSoftwareManagement(); + } + + @Bean + @ConditionalOnMissingBean + public RolloutManagement rolloutManagement() { + return new JpaRolloutManagement(); + } + + @Bean + @ConditionalOnMissingBean + public RolloutGroupManagement rolloutGroupManagement() { + return new JpaRolloutGroupManagement(); + } + + @Bean + @ConditionalOnMissingBean + public DeploymentManagement deploymentManagement() { + return new JpaDeploymentManagement(); + } + + @Bean + @ConditionalOnMissingBean + public ControllerManagement controllerManagement() { + return new JpaControllerManagement(); + } + + @Bean + @ConditionalOnMissingBean + public ArtifactManagement artifactManagement() { + return new JpaArtifactManagement(); + } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java index ea0e5c34f..3c94d885b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaArtifactManagement.java @@ -41,7 +41,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -52,7 +51,6 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaArtifactManagement implements ArtifactManagement { private static final Logger LOG = LoggerFactory.getLogger(JpaArtifactManagement.class); 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 77b71e661..255fef2ae 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 @@ -54,7 +54,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -65,7 +64,6 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaControllerManagement implements ControllerManagement { private static final Logger LOG = LoggerFactory.getLogger(ControllerManagement.class); private static final Logger LOG_DOS = LoggerFactory.getLogger("server-security.dos"); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index 4739f16a7..93d80a8ca 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -82,7 +82,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -96,7 +95,6 @@ import com.google.common.eventbus.EventBus; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaDeploymentManagement implements DeploymentManagement { private static final Logger LOG = LoggerFactory.getLogger(JpaDeploymentManagement.class); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index e5a38cf51..a580d40f3 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -60,7 +60,6 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -74,7 +73,6 @@ import com.google.common.eventbus.EventBus; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaDistributionSetManagement implements DistributionSetManagement { @Autowired diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java index 76eb04a34..c6795f600 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaReportManagement.java @@ -45,7 +45,6 @@ import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -56,7 +55,6 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaReportManagement implements ReportManagement { @Value("${spring.jpa.database}") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java index 7d176d40a..9f63204b1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutGroupManagement.java @@ -47,7 +47,6 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -56,7 +55,6 @@ import org.springframework.validation.annotation.Validated; * JPA implementation of {@link RolloutGroupManagement}. */ @Validated -@Service @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public class JpaRolloutGroupManagement implements RolloutGroupManagement { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index d412d2164..9cd0b02ac 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -61,7 +61,6 @@ import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.stereotype.Service; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.annotation.Isolation; @@ -76,7 +75,6 @@ import org.springframework.validation.annotation.Validated; * JPA implementation of {@link RolloutManagement}. */ @Validated -@Service @EnableScheduling @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public class JpaRolloutManagement implements RolloutManagement { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index 2fc057aec..50127e227 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -60,7 +60,6 @@ import org.springframework.data.domain.SliceImpl; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -74,7 +73,6 @@ import com.google.common.collect.Sets; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaSoftwareManagement implements SoftwareManagement { @Autowired diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index 3fed3d858..1cee5b892 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -37,7 +37,6 @@ import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.cache.interceptor.SimpleKeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -49,7 +48,6 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, SystemManagement { @Autowired private EntityManager entityManager; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java index 29fbb8a2b..e881d8ef8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTagManagement.java @@ -39,7 +39,6 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -52,7 +51,6 @@ import com.google.common.eventbus.EventBus; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaTagManagement implements TagManagement { @Autowired diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java index f418f5f4b..6438e19f6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java @@ -26,7 +26,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specifications; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -40,7 +39,6 @@ import com.google.common.base.Strings; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaTargetFilterQueryManagement implements TargetFilterQueryManagement { @Autowired diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java index 892ddc771..b7a2facc8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java @@ -59,7 +59,6 @@ import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -75,7 +74,6 @@ import com.google.common.eventbus.EventBus; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaTargetManagement implements TargetManagement { @Autowired diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java index 9f65091a4..d5d6a5540 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantConfigurationManagement.java @@ -23,7 +23,6 @@ import org.springframework.core.convert.support.ConfigurableConversionService; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.env.Environment; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -33,7 +32,6 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated -@Service public class JpaTenantConfigurationManagement implements EnvironmentAware, TenantConfigurationManagement { @Autowired diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java index e3866a8ad..75f99d886 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java @@ -24,7 +24,6 @@ import org.springframework.validation.annotation.Validated; * */ @Validated -@Service public class JpaTenantStatsManagement implements TenantStatsManagement { @Autowired From 0ece2b28aece58487b9836f9ae8a7790a696a870 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 6 Jun 2016 10:51:02 +0200 Subject: [PATCH 210/371] Correct IDs Signed-off-by: Melanie Retter --- .../hawkbit/ui/utils/SPUIComponentIdProvider.java | 13 +++---------- .../eclipse/hawkbit/ui/utils/SPUIDefinitions.java | 7 ++++--- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index d5fcaa265..b4e89a191 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -112,14 +112,6 @@ public final class SPUIComponentIdProvider { * ID-Dist.JVM delete icon. */ public static final String DIST_DELETE_MODULE = "dist.delete.module."; - /** - * ID-Dist.Add.save. - */ - public static final String DIST_ADD_SAVE = "dist.add.save"; - /** - * ID-Dist.Add.discard. - */ - public static final String DIST_ADD_DISCARD = "dist.add.discard"; /** * /** ID-Dist.DELETE. */ @@ -907,7 +899,7 @@ public final class SPUIComponentIdProvider { * Artifact upload status popup - close button id. */ public static final String UPLOAD_STATUS_POPUP_CLOSE_BUTTON_ID = "artifact.upload.close.button.id"; - + /** * Artifact upload status popup - resize button id. */ @@ -917,11 +909,12 @@ public final class SPUIComponentIdProvider { * Artifact upload view - upload status button id. */ public static final String UPLOAD_STATUS_BUTTON = "artficat.upload.status.button.id"; - + /** * Artifact uplaod view - uplod status popup id. */ public static final String UPLOAD_STATUS_POPUP_ID = "artifact.upload.status.popup.id"; + /** * /* Private Constructor. */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java index 75ea912a9..1a6e8c163 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java @@ -271,7 +271,7 @@ public final class SPUIDefinitions { /** * New Target discard icon id. */ - public static final String NEW_TARGET_DISCARD = "target.add.discard"; + // public static final String NEW_TARGET_DISCARD = "target.add.discard"; /** * New Target add icon id. */ @@ -347,11 +347,12 @@ public final class SPUIDefinitions { /** * New Target tag save icon id. */ - public static final String NEW_TARGET_TAG_SAVE = "target.tag.add.save"; + // public static final String NEW_TARGET_TAG_SAVE = "target.tag.add.save"; /** * New Target tag discard icon id. */ - public static final String NEW_TARGET_TAG_DISRACD = "target.tag.add.discard"; + // public static final String NEW_TARGET_TAG_DISRACD = + // "target.tag.add.discard"; /** * New Target tag add icon id. */ From 739f3eb012690e12ce184160249b56ab7ef7ad0e Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 6 Jun 2016 12:40:55 +0200 Subject: [PATCH 211/371] correct css Signed-off-by: Melanie Retter --- .../ui/common/filterlayout/AbstractFilterButtons.java | 3 ++- .../VAADIN/themes/hawkbit/customstyles/table-common.scss | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java index 8f669318b..fae68e27a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java @@ -120,7 +120,6 @@ public abstract class AbstractFilterButtons extends Table { ? item.getItemProperty(SPUILabelDefinitions.VAR_COLOR).getValue().toString() : DEFAULT_GREEN; final Button typeButton = createFilterButton(id, name, desc, color, itemId); typeButton.addClickListener(event -> filterButtonClickBehaviour.processFilterButtonClick(event)); - typeButton.addStyleName("generatedColumnPadding"); if (typeButton.getData().equals(SPUIDefinitions.NO_TAG_BUTTON_ID) && isNoTagSateSelected()) { filterButtonClickBehaviour.setDefaultClickedButton(typeButton); } else if (id != null && isClickedByDefault(name)) { @@ -181,6 +180,8 @@ public abstract class AbstractFilterButtons extends Table { button.setDescription(name); } button.setData(id == null ? SPUIDefinitions.NO_TAG_BUTTON_ID : itemId); + + button.addStyleName("generatedColumnPadding"); return button; } diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss index 81d590248..7c1d0c28c 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss @@ -182,7 +182,8 @@ float: right; } - .v-button-generatedColumnPadding .v-button-tiny { - padding: 0 0px; + .v-button-generatedColumnPadding .v-button-tiny-generatedColumnPadding { + padding: 0px 0px !important; } + } From 9baf668b3104bbc5be7ea90367e7b5a038f94407 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 6 Jun 2016 14:29:39 +0200 Subject: [PATCH 212/371] Fix header and change beand service registration Signed-off-by: SirWayne --- .../security/InMemoryUserManagementConfiguration.java | 8 ++++++++ .../autoconfigure/security/SecurityAutoConfiguration.java | 1 - .../hawkbit/RepositoryApplicationConfiguration.java | 8 ++++++++ .../hawkbit/repository/jpa/JpaDeploymentManagement.java | 1 + .../eclipse/hawkbit/repository/jpa/JpaEntityFactory.java | 2 -- .../repository/jpa/JpaTargetFilterQueryManagement.java | 1 + 6 files changed, 18 insertions(+), 3 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java index 5a745a02b..db382dd6c 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.autoconfigure.security; import java.util.ArrayList; diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java index 5009ba74f..d74b27dc8 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityAutoConfiguration.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.autoconfigure.security; import org.eclipse.hawkbit.im.authentication.PermissionService; import org.eclipse.hawkbit.security.DdiSecurityProperties; -import org.eclipse.hawkbit.security.DdiSecurityProperties; import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.SpringSecurityAuditorAware; import org.eclipse.hawkbit.tenancy.TenantAware; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index 313f0fd67..820b233ae 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -15,6 +15,7 @@ import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; +import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.ReportManagement; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; @@ -29,6 +30,7 @@ import org.eclipse.hawkbit.repository.jpa.JpaArtifactManagement; import org.eclipse.hawkbit.repository.jpa.JpaControllerManagement; import org.eclipse.hawkbit.repository.jpa.JpaDeploymentManagement; import org.eclipse.hawkbit.repository.jpa.JpaDistributionSetManagement; +import org.eclipse.hawkbit.repository.jpa.JpaEntityFactory; import org.eclipse.hawkbit.repository.jpa.JpaReportManagement; import org.eclipse.hawkbit.repository.jpa.JpaRolloutGroupManagement; import org.eclipse.hawkbit.repository.jpa.JpaRolloutManagement; @@ -284,4 +286,10 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { public ArtifactManagement artifactManagement() { return new JpaArtifactManagement(); } + + @Bean + @ConditionalOnMissingBean + public EntityFactory entityFactory() { + return new JpaEntityFactory(); + } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java index 93d80a8ca..6236e8d6f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDeploymentManagement.java @@ -82,6 +82,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java index afa3b4dc6..a3792de54 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java @@ -42,13 +42,11 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.springframework.stereotype.Service; /** * JPA Implementation of {@link EntityFactory}. * */ -@Service public class JpaEntityFactory implements EntityFactory { @Override diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java index 6438e19f6..65ed6faa4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetFilterQueryManagement.java @@ -26,6 +26,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specifications; import org.springframework.data.jpa.repository.Modifying; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; From 3e46568d2c60a8f06406d7877f0616ea4dae5cac Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 6 Jun 2016 17:50:31 +0200 Subject: [PATCH 213/371] Change button naming, fix selenium tests Signed-off-by: Melanie Retter --- .../eclipse/hawkbit/ui/common/CommonDialogWindow.java | 4 ++-- .../ui/distributions/disttype/DSTypeFilterHeader.java | 7 ++++--- .../rollout/rollout/AddUpdateRolloutWindowLayout.java | 11 ++++++----- .../hawkbit/ui/rollout/rollout/RolloutListGrid.java | 4 ++-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 322829107..5a7fdccf8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -105,7 +105,7 @@ public class CommonDialogWindow extends Window { buttonsLayout.setSizeFull(); buttonsLayout.setSpacing(true); - saveButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SAVE_BUTTON, "save", "", "", true, + saveButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SAVE_BUTTON, "Save", "", "", true, FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); saveButton.setSizeUndefined(); saveButton.addStyleName("default-color"); @@ -118,7 +118,7 @@ public class CommonDialogWindow extends Window { buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); buttonsLayout.setExpandRatio(saveButton, 1.0F); - cancelButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.CANCEL_BUTTON, "cancel", "", "", true, + cancelButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.CANCEL_BUTTON, "Cancel", "", "", true, FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); cancelButton.setSizeUndefined(); cancelButton.addStyleName("default-color"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java index 04c6e7579..5e19657d2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.distributions.disttype; import javax.annotation.PostConstruct; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; @@ -21,7 +22,6 @@ import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.UI; -import com.vaadin.ui.Window; /** * Distribution Set Type filter buttons header. @@ -38,6 +38,8 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { @Autowired private CreateUpdateDistSetTypeLayout createUpdateDistSetTypeLayout; + private CommonDialogWindow addUpdateWindow; + @Override @PostConstruct public void init() { @@ -59,9 +61,8 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { @Override protected void settingsIconClicked(final ClickEvent event) { - final Window addUpdateWindow = createUpdateDistSetTypeLayout.getWindow(); + addUpdateWindow = createUpdateDistSetTypeLayout.getWindow(); UI.getCurrent().addWindow(addUpdateWindow); - addUpdateWindow.setVisible(Boolean.TRUE); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 26a830aee..30f410e14 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -174,8 +174,10 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { setDefaultSaveStartGroupOption(); totalTargetsLabel.setVisible(false); groupSizeLabel.setVisible(false); - targetFilterQuery.setVisible(false); - targetFilterQueryCombo.setVisible(true); + removeComponent(targetFilterQuery); + if (getComponent(1, 3) == null) { + addComponent(targetFilterQueryCombo, 1, 3); + } actionTypeOptionGroupLayout.selectDefaultOption(); totalTargetsCount = 0L; rolloutForEdit = null; @@ -277,7 +279,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH); filterField.setId(SPUIComponentIdProvider.ROLLOUT_TARGET_FILTER_QUERY_FIELD); filterField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); - filterField.setVisible(false); filterField.setEnabled(false); filterField.setSizeUndefined(); return filterField; @@ -721,8 +722,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { noOfGroups.setEnabled(false); targetFilterQuery.setValue(rolloutForEdit.getTargetFilterQuery()); - targetFilterQuery.setVisible(true); - targetFilterQueryCombo.setVisible(false); + removeComponent(targetFilterQueryCombo); + addComponent(targetFilterQuery, 1, 3); totalTargetsCount = targetManagement.countTargetByTargetFilterQuery(rolloutForEdit.getTargetFilterQuery()); totalTargetsLabel.setValue(getTotalTargetMessage()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 49c3b8e76..9ec44b8b4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -96,8 +96,8 @@ public class RolloutListGrid extends AbstractGrid { @Autowired private transient RolloutManagement rolloutManagement; - // @Autowired - private final AddUpdateRolloutWindowLayout addUpdateRolloutWindow = new AddUpdateRolloutWindowLayout(); + @Autowired + private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; @Autowired private UINotification uiNotification; From 461ba38a5f87e340a679b206e9208cf32beb60fb Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 6 Jun 2016 18:08:34 +0200 Subject: [PATCH 214/371] Fix selenium test Signed-off-by: Melanie Retter --- .../disttype/CreateUpdateDistSetTypeLayout.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 2492d5e39..38a358537 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -640,4 +640,11 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout tagPreviewBtnClicked = !tagPreviewBtnClicked; } + @Override + protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePermission) { + + super.createOptionGroup(hasCreatePermission, hasUpdatePermission); + optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); + } + } From 909a809b4bc454ad011b571d8dcb45f665737f34 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 6 Jun 2016 18:57:39 +0200 Subject: [PATCH 215/371] Improve padding on the left side Signed-off-by: Melanie Retter --- .../eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java | 3 ++- .../VAADIN/themes/hawkbit/customstyles/table-common.scss | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java index 014bdbfb9..0403c0fd8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java @@ -30,8 +30,9 @@ public class SPUITagButtonStyle implements SPUIButtonDecorator { button.setCaption(buttonCaption.substring(0, SPUIButtonDefinitions.BUTTON_CAPTION_LENGTH) + "..."); } button.setImmediate(true); - button.addStyleName("button-no-border" + " " + ValoTheme.BUTTON_BORDERLESS + " " + ValoTheme.BUTTON_TINY + " " + button.addStyleName("generatedColumnPadding button-no-border" + " " + ValoTheme.BUTTON_BORDERLESS + " " + "button-tag-no-border"); + // Set Style if (null != style) { if (setStyle) { diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss index 7c1d0c28c..a619754b6 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss @@ -182,8 +182,12 @@ float: right; } - .v-button-generatedColumnPadding .v-button-tiny-generatedColumnPadding { - padding: 0px 0px !important; + .v-button-generatedColumnPadding { + height: 28px; + padding: 0 0px !important; + font-size: 12px; + border-radius: 4px; } + } From ddc6580d049c6a7daa7cb44734c636659c1fd007 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 3 Jun 2016 17:35:50 +0200 Subject: [PATCH 216/371] Correct component's IDs Correct ID save/cancel button Signed-off-by: Melanie Retter Correct IDs Signed-off-by: Melanie Retter Change button naming, fix selenium tests Signed-off-by: Melanie Retter Fix selenium test Signed-off-by: Melanie Retter --- .../hawkbit/ui/common/CommonDialogWindow.java | 8 ++++---- .../disttype/CreateUpdateDistSetTypeLayout.java | 7 +++++++ .../distributions/disttype/DSTypeFilterHeader.java | 7 ++++--- .../rollout/AddUpdateRolloutWindowLayout.java | 11 ++++++----- .../hawkbit/ui/rollout/rollout/RolloutListGrid.java | 4 ++-- .../hawkbit/ui/utils/SPUIComponentIdProvider.java | 13 +++---------- .../eclipse/hawkbit/ui/utils/SPUIDefinitions.java | 7 ++++--- 7 files changed, 30 insertions(+), 27 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 3f5364946..5a7fdccf8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -105,8 +105,8 @@ public class CommonDialogWindow extends Window { buttonsLayout.setSizeFull(); buttonsLayout.setSpacing(true); - saveButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SYSTEM_CONFIGURATION_SAVE, "save", "", "", - true, FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); + saveButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SAVE_BUTTON, "Save", "", "", true, + FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); saveButton.setSizeUndefined(); saveButton.addStyleName("default-color"); if (null != saveButtonClickListener) { @@ -118,8 +118,8 @@ public class CommonDialogWindow extends Window { buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); buttonsLayout.setExpandRatio(saveButton, 1.0F); - cancelButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SYSTEM_CONFIGURATION_CANCEL, "cancel", - "", "", true, FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); + cancelButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.CANCEL_BUTTON, "Cancel", "", "", true, + FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); cancelButton.setSizeUndefined(); cancelButton.addStyleName("default-color"); if (null != cancelButtonClickListener) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 2492d5e39..38a358537 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -640,4 +640,11 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout tagPreviewBtnClicked = !tagPreviewBtnClicked; } + @Override + protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePermission) { + + super.createOptionGroup(hasCreatePermission, hasUpdatePermission); + optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java index 04c6e7579..5e19657d2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterHeader.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.distributions.disttype; import javax.annotation.PostConstruct; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; @@ -21,7 +22,6 @@ import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.UI; -import com.vaadin.ui.Window; /** * Distribution Set Type filter buttons header. @@ -38,6 +38,8 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { @Autowired private CreateUpdateDistSetTypeLayout createUpdateDistSetTypeLayout; + private CommonDialogWindow addUpdateWindow; + @Override @PostConstruct public void init() { @@ -59,9 +61,8 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { @Override protected void settingsIconClicked(final ClickEvent event) { - final Window addUpdateWindow = createUpdateDistSetTypeLayout.getWindow(); + addUpdateWindow = createUpdateDistSetTypeLayout.getWindow(); UI.getCurrent().addWindow(addUpdateWindow); - addUpdateWindow.setVisible(Boolean.TRUE); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 26a830aee..30f410e14 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -174,8 +174,10 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { setDefaultSaveStartGroupOption(); totalTargetsLabel.setVisible(false); groupSizeLabel.setVisible(false); - targetFilterQuery.setVisible(false); - targetFilterQueryCombo.setVisible(true); + removeComponent(targetFilterQuery); + if (getComponent(1, 3) == null) { + addComponent(targetFilterQueryCombo, 1, 3); + } actionTypeOptionGroupLayout.selectDefaultOption(); totalTargetsCount = 0L; rolloutForEdit = null; @@ -277,7 +279,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { SPUILabelDefinitions.TARGET_FILTER_QUERY_TEXT_FIELD_LENGTH); filterField.setId(SPUIComponentIdProvider.ROLLOUT_TARGET_FILTER_QUERY_FIELD); filterField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); - filterField.setVisible(false); filterField.setEnabled(false); filterField.setSizeUndefined(); return filterField; @@ -721,8 +722,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { noOfGroups.setEnabled(false); targetFilterQuery.setValue(rolloutForEdit.getTargetFilterQuery()); - targetFilterQuery.setVisible(true); - targetFilterQueryCombo.setVisible(false); + removeComponent(targetFilterQueryCombo); + addComponent(targetFilterQuery, 1, 3); totalTargetsCount = targetManagement.countTargetByTargetFilterQuery(rolloutForEdit.getTargetFilterQuery()); totalTargetsLabel.setValue(getTotalTargetMessage()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 49c3b8e76..9ec44b8b4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -96,8 +96,8 @@ public class RolloutListGrid extends AbstractGrid { @Autowired private transient RolloutManagement rolloutManagement; - // @Autowired - private final AddUpdateRolloutWindowLayout addUpdateRolloutWindow = new AddUpdateRolloutWindowLayout(); + @Autowired + private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; @Autowired private UINotification uiNotification; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index d5fcaa265..b4e89a191 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -112,14 +112,6 @@ public final class SPUIComponentIdProvider { * ID-Dist.JVM delete icon. */ public static final String DIST_DELETE_MODULE = "dist.delete.module."; - /** - * ID-Dist.Add.save. - */ - public static final String DIST_ADD_SAVE = "dist.add.save"; - /** - * ID-Dist.Add.discard. - */ - public static final String DIST_ADD_DISCARD = "dist.add.discard"; /** * /** ID-Dist.DELETE. */ @@ -907,7 +899,7 @@ public final class SPUIComponentIdProvider { * Artifact upload status popup - close button id. */ public static final String UPLOAD_STATUS_POPUP_CLOSE_BUTTON_ID = "artifact.upload.close.button.id"; - + /** * Artifact upload status popup - resize button id. */ @@ -917,11 +909,12 @@ public final class SPUIComponentIdProvider { * Artifact upload view - upload status button id. */ public static final String UPLOAD_STATUS_BUTTON = "artficat.upload.status.button.id"; - + /** * Artifact uplaod view - uplod status popup id. */ public static final String UPLOAD_STATUS_POPUP_ID = "artifact.upload.status.popup.id"; + /** * /* Private Constructor. */ diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java index 75ea912a9..1a6e8c163 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java @@ -271,7 +271,7 @@ public final class SPUIDefinitions { /** * New Target discard icon id. */ - public static final String NEW_TARGET_DISCARD = "target.add.discard"; + // public static final String NEW_TARGET_DISCARD = "target.add.discard"; /** * New Target add icon id. */ @@ -347,11 +347,12 @@ public final class SPUIDefinitions { /** * New Target tag save icon id. */ - public static final String NEW_TARGET_TAG_SAVE = "target.tag.add.save"; + // public static final String NEW_TARGET_TAG_SAVE = "target.tag.add.save"; /** * New Target tag discard icon id. */ - public static final String NEW_TARGET_TAG_DISRACD = "target.tag.add.discard"; + // public static final String NEW_TARGET_TAG_DISRACD = + // "target.tag.add.discard"; /** * New Target tag add icon id. */ From 158a198cf4ed31fae853849116a606a1c5f5bb41 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 7 Jun 2016 11:28:10 +0200 Subject: [PATCH 217/371] Changed padding left/right of Simple Filter tags Signed-off-by: Melanie Retter --- .../ui/common/filterlayout/AbstractFilterButtons.java | 1 + .../hawkbit/ui/decorators/SPUITagButtonStyle.java | 9 --------- .../VAADIN/themes/hawkbit/customstyles/table-common.scss | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java index fae68e27a..5c2727c69 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java @@ -156,6 +156,7 @@ public abstract class AbstractFilterButtons extends Table { columnIds.add(FILTER_BUTTON_COLUMN); setVisibleColumns(columnIds.toArray()); setColumnHeaderMode(ColumnHeaderMode.HIDDEN); + setColumnWidth(FILTER_BUTTON_COLUMN, 137); } private Button createFilterButton(final Long id, final String name, final String description, final String color, diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java index 0403c0fd8..a95317d8a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUITagButtonStyle.java @@ -8,8 +8,6 @@ */ package org.eclipse.hawkbit.ui.decorators; -import org.eclipse.hawkbit.ui.utils.SPUIButtonDefinitions; - import com.vaadin.server.Resource; import com.vaadin.ui.Button; import com.vaadin.ui.themes.ValoTheme; @@ -22,13 +20,6 @@ public class SPUITagButtonStyle implements SPUIButtonDecorator { @Override public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { - /** - * Add ... for long name - */ - final String buttonCaption = button.getCaption(); - if (buttonCaption != null && buttonCaption.length() > SPUIButtonDefinitions.BUTTON_CAPTION_LENGTH) { - button.setCaption(buttonCaption.substring(0, SPUIButtonDefinitions.BUTTON_CAPTION_LENGTH) + "..."); - } button.setImmediate(true); button.addStyleName("generatedColumnPadding button-no-border" + " " + ValoTheme.BUTTON_BORDERLESS + " " + "button-tag-no-border"); diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss index a619754b6..3bfc12aac 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/table-common.scss @@ -184,7 +184,7 @@ .v-button-generatedColumnPadding { height: 28px; - padding: 0 0px !important; + padding: 0 6px !important; font-size: 12px; border-radius: 4px; } From 023bcf6876402a3a862d3386175cf67bd3a76a73 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 7 Jun 2016 12:41:57 +0200 Subject: [PATCH 218/371] delete duplicate style assignment Signed-off-by: Melanie Retter --- .../hawkbit/ui/common/filterlayout/AbstractFilterButtons.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java index 5c2727c69..6af66c5c0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java @@ -182,7 +182,6 @@ public abstract class AbstractFilterButtons extends Table { } button.setData(id == null ? SPUIDefinitions.NO_TAG_BUTTON_ID : itemId); - button.addStyleName("generatedColumnPadding"); return button; } From d9046bb9cc24e3caa5a3fdb37d48f8ae8dc9707f Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 7 Jun 2016 18:38:39 +0200 Subject: [PATCH 219/371] Upgraded Spring AMQP. Added task scheduler. Improved executor shutdown. Signed-off-by: Kai Zimmermann --- .../simulator/amqp/MessageService.java | 17 ------ ...ableDelegatingSecurityContextExecutor.java | 59 +++++++++++++++++++ .../scheduling/ExecutorAutoConfiguration.java | 36 ++++++++--- pom.xml | 1 + 4 files changed, 89 insertions(+), 24 deletions(-) create mode 100644 hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/CloseableDelegatingSecurityContextExecutor.java diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/MessageService.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/MessageService.java index bd48bbe12..8bb1e1292 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/MessageService.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/MessageService.java @@ -82,21 +82,4 @@ public class MessageService { clazz.getTypeName()); return (T) rabbitTemplate.getMessageConverter().fromMessage(message); } - - /** - * Method to verify if lwm2m header is set. - * - * @param message - * the message with the header - * @param header - * the header to verify - */ - public void checkIfLwm2mHeaderEmpty(final Message message, final String header) { - final Object headerObject = message.getMessageProperties().getHeaders().get(header); - if (null == headerObject) { - logAndThrowMessageError(message, "Header of " + header + "empty."); - } - - } - } diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/CloseableDelegatingSecurityContextExecutor.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/CloseableDelegatingSecurityContextExecutor.java new file mode 100644 index 000000000..1160e12e0 --- /dev/null +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/CloseableDelegatingSecurityContextExecutor.java @@ -0,0 +1,59 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.autoconfigure.scheduling; + +import java.util.List; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +import org.springframework.context.annotation.Bean; +import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; + +/** + * Extension for {@link DelegatingSecurityContextExecutor} to allow proper + * shutdown at {@link Bean} destruction time. + * + */ +public class CloseableDelegatingSecurityContextExecutor extends DelegatingSecurityContextExecutor { + + private final ThreadPoolExecutor executor; + + /** + * Creates a new {@link CloseableDelegatingSecurityContextExecutor} that + * uses the current {@link SecurityContext} from the + * {@link SecurityContextHolder} at the time the task is submitted. + * + * @param delegate + * the {@link Executor} to delegate to. Cannot be null. + */ + public CloseableDelegatingSecurityContextExecutor(final ThreadPoolExecutor delegate) { + super(delegate); + executor = delegate; + } + + /** + * Initiates an orderly shutdown in which previously submitted tasks are + * executed, but no new tasks will be accepted. + */ + public void shutdown() { + executor.shutdown(); + } + + /** + * Initiates an immediate shutdown. + * + * @return a list of the tasks that were awaiting execution + */ + public List shutdownNow() { + return executor.shutdownNow(); + } + +} diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java index 43a096e7d..d5bcdd0f1 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java @@ -21,7 +21,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; +import org.springframework.core.task.TaskExecutor; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -39,9 +42,10 @@ public class ExecutorAutoConfiguration { private AsyncConfigurerThreadpoolProperties asyncConfigurerProperties; /** - * @return ExecutorService for general purpose multi threaded operations + * @return ExecutorService for general purpose multi threaded operations. + * Tries an orderly shutdown when destroyed. */ - @Bean + @Bean(destroyMethod = "shutdown") @ConditionalOnMissingBean public Executor asyncExecutor() { final BlockingQueue blockingQueue = new ArrayBlockingQueue<>( @@ -53,20 +57,38 @@ public class ExecutorAutoConfiguration { threadPoolExecutor.setRejectedExecutionHandler((r, executor) -> LOGGER.warn( "Reject runnable for centralExecutorService, reached limit of queue size {}", executor.getQueue().size())); - return new DelegatingSecurityContextExecutor(threadPoolExecutor); + return new CloseableDelegatingSecurityContextExecutor(threadPoolExecutor); } /** - * @return the executor for UI background processes. + * @return the executor for UI background processes. Run immediate shutdown + * when destroyed. */ - @Bean(name = "uiExecutor") + @Bean(name = "uiExecutor", destroyMethod = "shutdownNow") @ConditionalOnMissingBean(name = "uiExecutor") public Executor uiExecutor() { final BlockingQueue blockingQueue = new ArrayBlockingQueue<>(20); final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 20, 10000, TimeUnit.MILLISECONDS, blockingQueue, new ThreadFactoryBuilder().setNameFormat("ui-executor-pool-%d").build()); threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return new DelegatingSecurityContextExecutor(threadPoolExecutor); + return new CloseableDelegatingSecurityContextExecutor(threadPoolExecutor); } + /** + * @return {@link TaskExecutor} for task execution + */ + @Bean + @ConditionalOnMissingBean + public TaskExecutor taskExecutor() { + return new ConcurrentTaskExecutor(asyncExecutor()); + } + + /** + * @return {@link TaskScheduler} for scheduled tasks + */ + @Bean + @ConditionalOnMissingBean + public TaskScheduler taskScheduler() { + return new ThreadPoolTaskScheduler(); + } } diff --git a/pom.xml b/pom.xml index 33ad1f81e..c535ba2d8 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,7 @@ 2.5.5 5.2.4.Final 1.2.0.RELEASE + 1.6.0.RELEASE Fowler-SR1 3.2.2 From c3f0f6e0d6d97a1d9189bcd843173c8a9193877f Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 8 Jun 2016 09:48:08 +0200 Subject: [PATCH 220/371] Extract the tenant cache key generator to an own service Signed-off-by: SirWayne --- .../repository/jpa/JpaSystemManagement.java | 43 ++++-------- .../SystemManagementCacheKeyGenerator.java | 65 +++++++++++++++++++ 2 files changed, 76 insertions(+), 32 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index 1cee5b892..ea6c99708 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.repository.jpa; -import java.lang.reflect.Method; import java.math.BigDecimal; import java.util.List; import java.util.stream.Collectors; @@ -34,8 +33,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.interceptor.KeyGenerator; -import org.springframework.cache.interceptor.SimpleKeyGenerator; -import org.springframework.context.annotation.Bean; +import org.springframework.context.ApplicationContext; import org.springframework.data.jpa.repository.Modifying; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; @@ -106,7 +104,11 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst @Autowired private TenancyCacheManager cacheManager; - private final ThreadLocal createInitialTenant = new ThreadLocal<>(); + @Autowired + private SystemManagementCacheKeyGenerator currentTenantCacheKeyGenerator; + + @Autowired + private ApplicationContext applicationContext; @Override public SystemUsageReport getSystemUsageStatistics() { @@ -152,9 +154,8 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst @Override @Transactional(propagation = Propagation.SUPPORTS) - @Bean public KeyGenerator currentTenantKeyGenerator() { - return new CurrentTenantKeyGenerator(); + return currentTenantCacheKeyGenerator.currentTenantKeyGenerator(); } @Override @@ -167,11 +168,12 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst // Create if it does not exist if (result == null) { try { - createInitialTenant.set(tenant); + currentTenantCacheKeyGenerator.getCreateInitialTenant().set(tenant); cacheManager.getCache("currentTenant").evict(currentTenantKeyGenerator().generate(null, null)); + applicationContext.getBean("currentTenantKeyGenerator"); return tenantMetaDataRepository.save(new JpaTenantMetaData(createStandardSoftwareDataSetup(), tenant)); } finally { - createInitialTenant.remove(); + currentTenantCacheKeyGenerator.getCreateInitialTenant().remove(); } } @@ -237,7 +239,7 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst // tenant is not cached anyway already. @Transactional(propagation = Propagation.NOT_SUPPORTED, isolation = Isolation.READ_UNCOMMITTED) public String currentTenant() { - final String initialTenantCreation = createInitialTenant.get(); + final String initialTenantCreation = currentTenantCacheKeyGenerator.getCreateInitialTenant().get(); if (initialTenantCreation == null) { final TenantMetaData findByTenant = tenantMetaDataRepository .findByTenantIgnoreCase(tenantAware.getCurrentTenant()); @@ -258,29 +260,6 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst return tenantMetaDataRepository.save((JpaTenantMetaData) metaData); } - /** - * A implementation of the {@link KeyGenerator} to generate a key based on - * either the {@code createInitialTenant} thread local and the - * {@link TenantAware}, but in case we are in a tenant creation with its - * default types we need to use the tenant the current tenant which is - * currently created and not the one currently in the {@link TenantAware}. - * - */ - public class CurrentTenantKeyGenerator implements KeyGenerator { - @Override - // Exception squid:S923 - override - @SuppressWarnings({ "squid:S923" }) - public Object generate(final Object target, final Method method, final Object... params) { - final String initialTenantCreation = createInitialTenant.get(); - if (initialTenantCreation == null) { - return SimpleKeyGenerator.generateKey(tenantAware.getCurrentTenant().toUpperCase(), - tenantAware.getCurrentTenant().toUpperCase()); - } - return SimpleKeyGenerator.generateKey(initialTenantCreation.toUpperCase(), - initialTenantCreation.toUpperCase()); - } - } - private DistributionSetType createStandardSoftwareDataSetup() { final SoftwareModuleType app = softwareModuleTypeRepository .save(new JpaSoftwareModuleType(Constants.SMT_DEFAULT_APP_KEY, Constants.SMT_DEFAULT_APP_NAME, diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java new file mode 100644 index 000000000..9ca8ea7fa --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.jpa; + +import java.lang.reflect.Method; + +import org.eclipse.hawkbit.tenancy.TenantAware; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.cache.interceptor.SimpleKeyGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Service; + +/** + * Implementation of {@link CurrentTenantCacheKeyGenerator}. + * + */ +@Service +public class SystemManagementCacheKeyGenerator implements CurrentTenantCacheKeyGenerator { + + @Autowired + private TenantAware tenantAware; + + private final ThreadLocal createInitialTenant = new ThreadLocal<>(); + + /** + * A implementation of the {@link KeyGenerator} to generate a key based on + * either the {@code createInitialTenant} thread local and the + * {@link TenantAware}, but in case we are in a tenant creation with its + * default types we need to use the tenant the current tenant which is + * currently created and not the one currently in the {@link TenantAware}. + * + */ + public class CurrentTenantKeyGenerator implements KeyGenerator { + @Override + // Exception squid:S923 - override + @SuppressWarnings({ "squid:S923" }) + public Object generate(final Object target, final Method method, final Object... params) { + final String initialTenantCreation = createInitialTenant.get(); + if (initialTenantCreation == null) { + return SimpleKeyGenerator.generateKey(tenantAware.getCurrentTenant().toUpperCase(), + tenantAware.getCurrentTenant().toUpperCase()); + } + return SimpleKeyGenerator.generateKey(initialTenantCreation.toUpperCase(), + initialTenantCreation.toUpperCase()); + } + } + + @Override + @Bean + public KeyGenerator currentTenantKeyGenerator() { + return new CurrentTenantKeyGenerator(); + } + + ThreadLocal getCreateInitialTenant() { + return createInitialTenant; + } + +} \ No newline at end of file From 1392798bf75081ac8bdc8f9f025b8bb7ff30cd84 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 8 Jun 2016 10:54:29 +0200 Subject: [PATCH 221/371] Fix some small clean code issues Signed-off-by: SirWayne --- .../SoftwareModuleAddUpdateWindow.java | 79 +++++-------- .../CreateUpdateSoftwareTypeLayout.java | 55 +++------ .../hawkbit/ui/common/CommonDialogWindow.java | 109 ++++++++++-------- .../SPUIButtonStyleBorderWithIcon.java | 29 ++--- 4 files changed, 116 insertions(+), 156 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 838af6611..ddf229651 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -208,35 +208,17 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> save(), event -> closeThisWindow(), null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); nameTextField.focus(); } - /** - * add a TextChangeListener to the description TextField - */ private void addDescriptionTextChangeListener() { - descTextArea.addTextChangeListener(event -> { - if (event.getText().equals(oldDescriptionValue) && vendorTextField.getValue().equals(oldVendorValue)) { - window.setSaveButtonEnabled(hasDescriptionOrVendorChanged(event)); - } else { - window.setSaveButtonEnabled(hasDescriptionOrVendorChanged(event)); - } - }); + descTextArea.addTextChangeListener(event -> window.setSaveButtonEnabled(hasDescriptionChanged(event))); } - /** - * add a TextChangeListener to the vendor TextField - */ private void addVendorTextChangeListener() { - vendorTextField.addTextChangeListener(event -> { - if (event.getText().equals(oldVendorValue) && descTextArea.getValue().equals(oldDescriptionValue)) { - window.setSaveButtonEnabled(hasDescriptionOrVendorChanged(event)); - } else { - window.setSaveButtonEnabled(hasDescriptionOrVendorChanged(event)); - } - }); + vendorTextField.addTextChangeListener(event -> window.setSaveButtonEnabled(hasVendorChanged(event))); } /** @@ -248,23 +230,25 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se final String vendor = HawkbitCommonUtil.trimAndNullIfEmpty(vendorTextField.getValue()); final String description = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); final String type = typeComboBox.getValue() != null ? typeComboBox.getValue().toString() : null; - if (mandatoryCheck(name, version, type)) { - if (HawkbitCommonUtil.isDuplicate(name, version, type)) { - uiNotifcation.displayValidationError( - i18n.get("message.duplicate.softwaremodule", new Object[] { name, version })); - } else { - final SoftwareModule newBaseSoftwareModule = HawkbitCommonUtil.addNewBaseSoftware(entityFactory, name, - version, vendor, softwareManagement.findSoftwareModuleTypeByName(type), description); - if (newBaseSoftwareModule != null) { - /* display success message */ - uiNotifcation.displaySuccess(i18n.get("message.save.success", new Object[] { - newBaseSoftwareModule.getName() + ":" + newBaseSoftwareModule.getVersion() })); - eventBus.publish(this, - new SoftwareModuleEvent(BaseEntityEventType.NEW_ENTITY, newBaseSoftwareModule)); - } - // close the window - closeThisWindow(); + + if (!mandatoryCheck(name, version, type)) { + return; + } + + if (HawkbitCommonUtil.isDuplicate(name, version, type)) { + uiNotifcation.displayValidationError( + i18n.get("message.duplicate.softwaremodule", new Object[] { name, version })); + } else { + final SoftwareModule newBaseSoftwareModule = HawkbitCommonUtil.addNewBaseSoftware(entityFactory, name, + version, vendor, softwareManagement.findSoftwareModuleTypeByName(type), description); + if (newBaseSoftwareModule != null) { + /* display success message */ + uiNotifcation.displaySuccess(i18n.get("message.save.success", + new Object[] { newBaseSoftwareModule.getName() + ":" + newBaseSoftwareModule.getVersion() })); + eventBus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.NEW_ENTITY, newBaseSoftwareModule)); } + // close the window + closeThisWindow(); } } @@ -343,29 +327,20 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se return isValid; } - /** - * saves or updates a softwareModule depending on the information if it is a - * new softwareModule or an existing one - */ - private void save() { + private void saveOrUpdate() { if (editSwModule) { updateSwModule(); } else { - /* add new or update software module */ addNewBaseSoftware(); } } - /** - * Checks if the description and vendor have changed and set the button - * enabled/disabled - * - * @param event - * TextChangeEvent - * @return Boolean - */ - private boolean hasDescriptionOrVendorChanged(final TextChangeEvent event) { + private boolean hasDescriptionChanged(final TextChangeEvent event) { return !(event.getText().equals(oldDescriptionValue) && vendorTextField.getValue().equals(oldVendorValue)); } + private boolean hasVendorChanged(final TextChangeEvent event) { + return !(event.getText().equals(oldVendorValue) && descTextArea.getValue().equals(oldDescriptionValue)); + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index f02e91d2e..85844b917 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -43,7 +43,7 @@ import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; /** - * + * Layout for the create or update software module type. * */ @SpringComponent @@ -198,25 +198,24 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout @Override protected void save(final ClickEvent event) { - if (mandatoryValuesPresent()) { - final SoftwareModuleType existingSMTypeByKey = swTypeManagementService - .findSoftwareModuleTypeByKey(typeKey.getValue()); - final SoftwareModuleType existingSMTypeByName = swTypeManagementService - .findSoftwareModuleTypeByName(tagName.getValue()); - if (optiongroup.getValue().equals(createTypeStr)) { - if (!checkIsDuplicateByKey(existingSMTypeByKey) && !checkIsDuplicate(existingSMTypeByName)) { - createNewSWModuleType(); - } - } else { + if (!mandatoryValuesPresent()) { + return; + } - updateSWModuleType(existingSMTypeByName); + final SoftwareModuleType existingSMTypeByKey = swTypeManagementService + .findSoftwareModuleTypeByKey(typeKey.getValue()); + final SoftwareModuleType existingSMTypeByName = swTypeManagementService + .findSoftwareModuleTypeByName(tagName.getValue()); + if (optiongroup.getValue().equals(createTypeStr)) { + if (!checkIsDuplicateByKey(existingSMTypeByKey) && !checkIsDuplicate(existingSMTypeByName)) { + createNewSWModuleType(); } + } else { + + updateSWModuleType(existingSMTypeByName); } } - /** - * Create new tag. - */ private void createNewSWModuleType() { int assignNumber = 0; final String colorPicked = ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview()); @@ -253,9 +252,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout } } - /** - * update tag. - */ private void updateSWModuleType(final SoftwareModuleType existingType) { final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); @@ -307,29 +303,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout tagPreviewBtnClicked = !tagPreviewBtnClicked; } - /** - * Covert RGB code to {@Color}. - * - * @param value - * RGB vale - * @return Color - */ - protected Color rgbToColorConverter(final String value) { - if (value.startsWith("rgb")) { - final String[] colors = value.substring(value.indexOf('(') + 1, value.length() - 1).split(","); - final int red = Integer.parseInt(colors[0]); - final int green = Integer.parseInt(colors[1]); - final int blue = Integer.parseInt(colors[2]); - if (colors.length > 3) { - final int alpha = (int) (Double.parseDouble(colors[3]) * 255d); - return new Color(red, green, blue, alpha); - } else { - return new Color(red, green, blue); - } - } - return null; - } - @Override public void addColorChangeListener(final ColorChangeListener listener) { LOG.debug("inside addColorChangeListener"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 5a7fdccf8..247ad0c8f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -8,14 +8,12 @@ */ package org.eclipse.hawkbit.ui.common; +import static com.google.common.base.Preconditions.checkNotNull; + import org.apache.commons.lang3.StringUtils; -import org.eclipse.hawkbit.ui.UiProperties; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleBorderWithIcon; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.server.FontAwesome; @@ -39,15 +37,13 @@ public class CommonDialogWindow extends Window { private static final long serialVersionUID = -1321949234316858703L; - private static final Logger LOG = LoggerFactory.getLogger(CommonDialogWindow.class); - private final VerticalLayout mainLayout = new VerticalLayout(); - private String caption; + private final String caption; - private Component content; + private final Component content; - private String helpLink; + private final String helpLink; private Button saveButton; @@ -57,25 +53,38 @@ public class CommonDialogWindow extends Window { protected ValueChangeListener buttonEnableListener; - @Autowired - private transient UiProperties uiProperties; + private final ClickListener saveButtonClickListener; - public CommonDialogWindow() { - - init(null, null); - } + private final ClickListener cancelButtonClickListener; + /** + * Constructor. + * + * @param caption + * the caption + * @param content + * the content + * @param helpLink + * the helpLinks + * @param saveButtonClickListener + * the saveButtonClickListener + * @param cancelButtonClickListener + * the cancelButtonClickListener + */ public CommonDialogWindow(final String caption, final Component content, final String helpLink, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener) { - + checkNotNull(saveButtonClickListener); + checkNotNull(cancelButtonClickListener); this.caption = caption; this.content = content; this.helpLink = helpLink; + this.saveButtonClickListener = saveButtonClickListener; + this.cancelButtonClickListener = cancelButtonClickListener; - init(saveButtonClickListener, cancelButtonClickListener); + init(); } - public void init(final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener) { + private final void init() { if (content instanceof AbstractOrderedLayout) { ((AbstractOrderedLayout) content).setSpacing(true); @@ -85,8 +94,7 @@ public class CommonDialogWindow extends Window { if (null != content) { mainLayout.addComponent(content); } - final HorizontalLayout buttonLayout = createActionButtonsLayout(saveButtonClickListener, - cancelButtonClickListener); + final HorizontalLayout buttonLayout = createActionButtonsLayout(); mainLayout.addComponent(buttonLayout); mainLayout.setComponentAlignment(buttonLayout, Alignment.TOP_CENTER); @@ -98,38 +106,15 @@ public class CommonDialogWindow extends Window { addStyleName("fontsize"); } - private HorizontalLayout createActionButtonsLayout(final ClickListener saveButtonClickListener, - final ClickListener cancelButtonClickListener) { + private HorizontalLayout createActionButtonsLayout() { buttonsLayout = new HorizontalLayout(); buttonsLayout.setSizeFull(); buttonsLayout.setSpacing(true); - saveButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SAVE_BUTTON, "Save", "", "", true, - FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); - saveButton.setSizeUndefined(); - saveButton.addStyleName("default-color"); - if (null != saveButtonClickListener) { - saveButton.addClickListener(saveButtonClickListener); - } else { - throw new IllegalArgumentException("no ClickListener for save button specified"); - } - buttonsLayout.addComponent(saveButton); - buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); - buttonsLayout.setExpandRatio(saveButton, 1.0F); + createSaveButton(); - cancelButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.CANCEL_BUTTON, "Cancel", "", "", true, - FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); - cancelButton.setSizeUndefined(); - cancelButton.addStyleName("default-color"); - if (null != cancelButtonClickListener) { - cancelButton.addClickListener(cancelButtonClickListener); - } else { - throw new IllegalArgumentException("no ClickListener for cancel button specified"); - } - buttonsLayout.addComponent(cancelButton); - buttonsLayout.setComponentAlignment(cancelButton, Alignment.MIDDLE_LEFT); - buttonsLayout.setExpandRatio(cancelButton, 1.0F); + createCancelButton(); buttonsLayout.addStyleName("actionButtonsMargin"); addHelpLink(); @@ -137,13 +122,37 @@ public class CommonDialogWindow extends Window { return buttonsLayout; } + private void createCancelButton() { + cancelButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.CANCEL_BUTTON, "Cancel", "", "", true, + FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); + cancelButton.setSizeUndefined(); + cancelButton.addStyleName("default-color"); + cancelButton.addClickListener(cancelButtonClickListener); + + buttonsLayout.addComponent(cancelButton); + buttonsLayout.setComponentAlignment(cancelButton, Alignment.MIDDLE_LEFT); + buttonsLayout.setExpandRatio(cancelButton, 1.0F); + } + + private void createSaveButton() { + saveButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.SAVE_BUTTON, "Save", "", "", true, + FontAwesome.SAVE, SPUIButtonStyleBorderWithIcon.class); + saveButton.setSizeUndefined(); + saveButton.addStyleName("default-color"); + saveButton.addClickListener(saveButtonClickListener); + buttonsLayout.addComponent(saveButton); + buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); + buttonsLayout.setExpandRatio(saveButton, 1.0F); + } + private void addHelpLink() { - if (StringUtils.isNotEmpty(helpLink)) { - final Link helpLinkComponent = SPUIComponentProvider.getHelpLink(helpLink); - buttonsLayout.addComponent(helpLinkComponent); - buttonsLayout.setComponentAlignment(helpLinkComponent, Alignment.MIDDLE_RIGHT); + if (StringUtils.isEmpty(helpLink)) { + return; } + final Link helpLinkComponent = SPUIComponentProvider.getHelpLink(helpLink); + buttonsLayout.addComponent(helpLinkComponent); + buttonsLayout.setComponentAlignment(helpLinkComponent, Alignment.MIDDLE_RIGHT); } public void setSaveButtonEnabled(final boolean enabled) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java index be72dd700..17aece6a7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIButtonStyleBorderWithIcon.java @@ -12,13 +12,13 @@ import com.vaadin.server.Resource; import com.vaadin.ui.Button; import com.vaadin.ui.themes.ValoTheme; +/** + * Button with icon decorator. + * + */ public class SPUIButtonStyleBorderWithIcon implements SPUIButtonDecorator { - Button button; - - /** - * Style for button: Primary. - */ + private Button button; @Override public Button decorate(final Button button, final String style, final boolean setStyle, final Resource icon) { @@ -36,19 +36,22 @@ public class SPUIButtonStyleBorderWithIcon implements SPUIButtonDecorator { private void setButtonStyle(final String style, final boolean setStyle) { - if (null != style) { - if (setStyle) { - button.setStyleName(style); - } else { - button.addStyleName(style); - } + if (style == null) { + return; + } + + if (setStyle) { + button.setStyleName(style); + } else { + button.addStyleName(style); } } private void setButtonIcon(final Resource icon) { - if (null != icon) { - button.setIcon(icon); + if (icon == null) { + return; } + button.setIcon(icon); } } From 4f23fb1377c61a81d2d6b8d83f98ce3c9f1d1b2c Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 8 Jun 2016 11:58:59 +0200 Subject: [PATCH 222/371] Created separate bean for poolexecutor. Signed-off-by: Kai Zimmermann --- ...ableDelegatingSecurityContextExecutor.java | 59 ------------------- .../scheduling/ExecutorAutoConfiguration.java | 26 +++++--- 2 files changed, 18 insertions(+), 67 deletions(-) delete mode 100644 hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/CloseableDelegatingSecurityContextExecutor.java diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/CloseableDelegatingSecurityContextExecutor.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/CloseableDelegatingSecurityContextExecutor.java deleted file mode 100644 index 1160e12e0..000000000 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/CloseableDelegatingSecurityContextExecutor.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.autoconfigure.scheduling; - -import java.util.List; -import java.util.concurrent.Executor; -import java.util.concurrent.ThreadPoolExecutor; - -import org.springframework.context.annotation.Bean; -import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; - -/** - * Extension for {@link DelegatingSecurityContextExecutor} to allow proper - * shutdown at {@link Bean} destruction time. - * - */ -public class CloseableDelegatingSecurityContextExecutor extends DelegatingSecurityContextExecutor { - - private final ThreadPoolExecutor executor; - - /** - * Creates a new {@link CloseableDelegatingSecurityContextExecutor} that - * uses the current {@link SecurityContext} from the - * {@link SecurityContextHolder} at the time the task is submitted. - * - * @param delegate - * the {@link Executor} to delegate to. Cannot be null. - */ - public CloseableDelegatingSecurityContextExecutor(final ThreadPoolExecutor delegate) { - super(delegate); - executor = delegate; - } - - /** - * Initiates an orderly shutdown in which previously submitted tasks are - * executed, but no new tasks will be accepted. - */ - public void shutdown() { - executor.shutdown(); - } - - /** - * Initiates an immediate shutdown. - * - * @return a list of the tasks that were awaiting execution - */ - public List shutdownNow() { - return executor.shutdownNow(); - } - -} diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java index d5bcdd0f1..4fd55cbaa 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java @@ -25,6 +25,7 @@ import org.springframework.core.task.TaskExecutor; import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; import com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -42,12 +43,21 @@ public class ExecutorAutoConfiguration { private AsyncConfigurerThreadpoolProperties asyncConfigurerProperties; /** - * @return ExecutorService for general purpose multi threaded operations. - * Tries an orderly shutdown when destroyed. + * @return ExecutorService with security context availability in thread + * execution.. */ - @Bean(destroyMethod = "shutdown") + @Bean @ConditionalOnMissingBean public Executor asyncExecutor() { + return new DelegatingSecurityContextExecutor(threadPoolExecutor()); + } + + /** + * @return central ThreadPoolExecutor for general purpose multi threaded + * operations. Tries an orderly shutdown when destroyed. + */ + @Bean(destroyMethod = "shutdown") + public ThreadPoolExecutor threadPoolExecutor() { final BlockingQueue blockingQueue = new ArrayBlockingQueue<>( asyncConfigurerProperties.getQueuesize()); final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(asyncConfigurerProperties.getCorethreads(), @@ -57,21 +67,21 @@ public class ExecutorAutoConfiguration { threadPoolExecutor.setRejectedExecutionHandler((r, executor) -> LOGGER.warn( "Reject runnable for centralExecutorService, reached limit of queue size {}", executor.getQueue().size())); - return new CloseableDelegatingSecurityContextExecutor(threadPoolExecutor); + + return threadPoolExecutor; } /** - * @return the executor for UI background processes. Run immediate shutdown - * when destroyed. + * @return the executor for UI background processes. */ - @Bean(name = "uiExecutor", destroyMethod = "shutdownNow") + @Bean(name = "uiExecutor") @ConditionalOnMissingBean(name = "uiExecutor") public Executor uiExecutor() { final BlockingQueue blockingQueue = new ArrayBlockingQueue<>(20); final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 20, 10000, TimeUnit.MILLISECONDS, blockingQueue, new ThreadFactoryBuilder().setNameFormat("ui-executor-pool-%d").build()); threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return new CloseableDelegatingSecurityContextExecutor(threadPoolExecutor); + return new DelegatingSecurityContextExecutor(threadPoolExecutor); } /** From 1047219ad2701624e39a555e4264fbdab83d1ace Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 8 Jun 2016 13:02:29 +0200 Subject: [PATCH 223/371] STRG+A for selecting all table rows, remove contextMenu, remove empty lines Signed-off-by: Melanie Retter --- .../smtable/SoftwareModuleTable.java | 11 --- .../smtable/SoftwareModuleTableLayout.java | 3 - .../filterlayout/AbstractFilterButtons.java | 35 +------- .../table/AbstractNamedVersionTable.java | 17 +--- .../ui/common/table/AbstractTable.java | 1 - .../ui/common/table/AbstractTableHeader.java | 4 - .../ui/common/table/AbstractTableLayout.java | 4 - .../disttype/DSTypeFilterButtons.java | 3 - .../dstable/DistributionSetTable.java | 16 ---- .../dstable/DistributionSetTableLayout.java | 5 +- .../distributions/smtable/SwModuleTable.java | 17 +--- .../smtable/SwModuleTableLayout.java | 3 - .../management/dstable/DistributionTable.java | 12 +-- .../dstable/DistributionTableLayout.java | 3 - .../management/targettable/TargetTable.java | 89 +------------------ .../targettable/TargetTableHeader.java | 21 ++--- .../targettable/TargetTableLayout.java | 9 -- .../src/main/resources/messages_de.properties | 4 - 18 files changed, 18 insertions(+), 239 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java index 060aff55b..99fe185e5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java @@ -35,7 +35,6 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; -import com.vaadin.event.Action; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; @@ -213,14 +212,4 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable * i is the id of the table */ -public abstract class AbstractNamedVersionTable extends AbstractTable - implements Handler { +public abstract class AbstractNamedVersionTable extends AbstractTable { private static final long serialVersionUID = 780050712209750719L; - protected ShortcutAction actionSelectAll; - - protected ShortcutAction actionUnSelectAll; - /** * Initialize the component. */ @Override protected void init() { super.init(); - actionSelectAll = new ShortcutAction(i18n.get("action.target.table.selectall")); - actionUnSelectAll = new ShortcutAction(i18n.get("action.target.table.clear")); setMultiSelect(true); setSelectable(true); } @@ -64,11 +54,6 @@ public abstract class AbstractNamedVersionTable extends Table { private static final Logger LOG = LoggerFactory.getLogger(AbstractTable.class); - // TODO MR should be private and use with getter/setter @Autowired protected transient EventBus.SessionEventBus eventBus; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java index b137594f8..3a12ca23e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableHeader.java @@ -36,10 +36,6 @@ import com.vaadin.ui.VerticalLayout; /** * Parent class for table header. - * - * - * - * */ public abstract class AbstractTableHeader extends VerticalLayout { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java index fa847b4ba..9406dcb93 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java @@ -21,10 +21,6 @@ import com.vaadin.ui.themes.ValoTheme; /** * Parent class for table layout. - * - * - * - * */ public abstract class AbstractTableLayout extends VerticalLayout { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java index 25e081fa0..9b819e1b4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DSTypeFilterButtons.java @@ -31,9 +31,6 @@ import com.vaadin.spring.annotation.ViewScope; /** * Distribution Set Type filter buttons. - * - * - * */ @SpringComponent @ViewScope diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index e305039fd..a52c0b683 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -30,8 +30,6 @@ import org.eclipse.hawkbit.ui.common.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.table.AbstractNamedVersionTable; import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; -import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent; -import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent.DistributionSetComponentEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; import org.eclipse.hawkbit.ui.distributions.event.DragEvent; @@ -56,7 +54,6 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; -import com.vaadin.event.Action; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; @@ -68,7 +65,6 @@ import com.vaadin.ui.UI; /** * Distribution set table. - * */ @SpringComponent @ViewScope @@ -471,18 +467,6 @@ public class DistributionSetTable extends AbstractNamedVersionTable implements Handler { +public class SwModuleTable extends AbstractNamedVersionTable { private static final long serialVersionUID = 6785314784507424750L; @@ -392,15 +388,4 @@ public class SwModuleTable extends AbstractNamedVersionTable implements Handler { +public class TargetTable extends AbstractTable { private static final Logger LOG = LoggerFactory.getLogger(TargetTable.class); private static final String TARGET_PINNED = "targetPinned"; @@ -127,15 +119,10 @@ public class TargetTable extends AbstractTable implements private Button targetPinnedBtn; private Boolean isTargetPinned = Boolean.FALSE; - private ShortcutAction actionSelectAll; - private ShortcutAction actionUnSelectAll; @Override protected void init() { super.init(); - addActionHandler(this); - actionSelectAll = new ShortcutAction(i18n.get("action.target.table.selectall")); - actionUnSelectAll = new ShortcutAction(i18n.get("action.target.table.clear")); setItemDescriptionGenerator(new AssignInstalledDSTooltipGenerator()); } @@ -260,22 +247,6 @@ public class TargetTable extends AbstractTable implements HawkbitCommonUtil.addTargetTableContainerProperties(container); } - @Override - public Action[] getActions(final Object target, final Object sender) { - return new Action[] { actionSelectAll, actionUnSelectAll }; - } - - @Override - public void handleAction(final Action action, final Object sender, final Object target) { - if (actionSelectAll.equals(action)) { - selectAll(); - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.SELLECT_ALL)); - } - if (actionUnSelectAll.equals(action)) { - unSelectAll(); - } - } - @Override protected void addCustomGeneratedColumns() { addGeneratedColumn(SPUIDefinitions.TARGET_STATUS_PIN_TOGGLE_ICON, @@ -354,7 +325,6 @@ public class TargetTable extends AbstractTable implements }; } - // TODO MR private void onTargetDeletedEvent(final List events) { final LazyQueryContainer targetContainer = (LazyQueryContainer) getContainerDataSource(); final List visibleItemIds = (List) getVisibleItemIds(); @@ -454,7 +424,7 @@ public class TargetTable extends AbstractTable implements pinBtn.setHeightUndefined(); pinBtn.setData(itemId); pinBtn.setId(SPUIComponentIdProvider.TARGET_PIN_ICON + "." + itemId); - pinBtn.addClickListener(event -> addPinClickListener(event)); + pinBtn.addClickListener(this::addPinClickListener); if (isPinned(((TargetIdName) itemId).getControllerId())) { pinBtn.addStyleName(TARGET_PINNED); isTargetPinned = Boolean.TRUE; @@ -931,62 +901,11 @@ public class TargetTable extends AbstractTable implements */ public void selectAll() { - // final PageRequest pageRequest = new OffsetBasedPageRequest(0, size(), - // new Sort(SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER, - // "createdAt")); - // List targetIdList; - // // is custom filter selected - // if - // (managementUIState.getTargetTableFilters().getTargetFilterQuery().isPresent()) - // { - // targetIdList = getTargetIdsByCustomFilters(pageRequest); - // } else { - // targetIdList = getTargetIdsBySimpleFilters(pageRequest); - // } - // setValue(targetIdList); - - // TODO MR // As Vaadin Table only returns the current ItemIds which are visible // you don't need to search explicit for them. setValue(getItemIds()); } - private List getTargetIdsBySimpleFilters(final PageRequest pageRequest) { - final Long filterByDistId = managementUIState.getTargetTableFilters().getDistributionSet().isPresent() - ? managementUIState.getTargetTableFilters().getDistributionSet().get().getId() : null; - final List statusList = new ArrayList<>(); - if (isFilteredByStatus()) { - statusList.addAll(managementUIState.getTargetTableFilters().getClickedStatusTargetTags()); - } - final List tagList = new ArrayList<>(); - if (isFilteredByTags()) { - tagList.addAll(managementUIState.getTargetTableFilters().getClickedTargetTags()); - } - String searchText = managementUIState.getTargetTableFilters().getSearchText().isPresent() - ? managementUIState.getTargetTableFilters().getSearchText().get() : null; - if (!Strings.isNullOrEmpty(searchText)) { - searchText = String.format("%%%s%%", searchText); - } - final Boolean noTagSelected = managementUIState.getTargetTableFilters().isNoTagSelected(); - - final String[] tagArray = tagList.toArray(new String[tagList.size()]); - - List targetIdList; - targetIdList = targetManagement.findAllTargetIdsByFilters(pageRequest, statusList, searchText, filterByDistId, - noTagSelected, tagList.toArray(tagArray)); - Collections.reverse(targetIdList); - return targetIdList; - } - - private List getTargetIdsByCustomFilters(final PageRequest pageRequest) { - List targetIdList; - final TargetFilterQuery targetFilterQuery = managementUIState.getTargetTableFilters().getTargetFilterQuery() - .isPresent() ? managementUIState.getTargetTableFilters().getTargetFilterQuery().get() : null; - targetIdList = targetManagement.findAllTargetIdsByTargetFilterQuery(pageRequest, targetFilterQuery); - Collections.reverse(targetIdList); - return targetIdList; - } - /** * Clear all selections in the table. */ @@ -1073,10 +992,6 @@ public class TargetTable extends AbstractTable implements return targetManagement.countTargetsAll(); } - private static TargetIdName getLastSelectedItem(final Set values) { - return Iterables.getLast(values); - } - private boolean isFilteredByStatus() { return !managementUIState.getTargetTableFilters().getClickedStatusTargetTags().isEmpty(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java index b6379729b..5b0aa285a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java @@ -65,9 +65,6 @@ public class TargetTableHeader extends AbstractTableHeader { @Autowired private ManagementUIState managementUIState; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private ManagementViewAcceptCriteria managementViewAcceptCriteria; @@ -231,14 +228,14 @@ public class TargetTableHeader extends AbstractTableHeader { @Override protected void showFilterButtonsLayout() { managementUIState.setTargetTagFilterClosed(false); - eventBus.publish(this, ManagementUIEvent.SHOW_TARGET_TAG_LAYOUT); + eventbus.publish(this, ManagementUIEvent.SHOW_TARGET_TAG_LAYOUT); } @Override protected void resetSearchText() { if (managementUIState.getTargetTableFilters().getSearchText().isPresent()) { managementUIState.getTargetTableFilters().setSearchText(null); - eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_TEXT); + eventbus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_TEXT); } } @@ -255,13 +252,13 @@ public class TargetTableHeader extends AbstractTableHeader { @Override public void maximizeTable() { managementUIState.setTargetTableMaximized(Boolean.TRUE); - eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.MAXIMIZED,null)); + eventbus.publish(this, new TargetTableEvent(BaseEntityEventType.MAXIMIZED,null)); } @Override public void minimizeTable() { managementUIState.setTargetTableMaximized(Boolean.FALSE); - eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.MINIMIZED,null)); + eventbus.publish(this, new TargetTableEvent(BaseEntityEventType.MINIMIZED,null)); } @Override @@ -277,12 +274,12 @@ public class TargetTableHeader extends AbstractTableHeader { @Override protected void searchBy(final String newSearchText) { managementUIState.getTargetTableFilters().setSearchText(newSearchText); - eventBus.publish(this, TargetFilterEvent.FILTER_BY_TEXT); + eventbus.publish(this, TargetFilterEvent.FILTER_BY_TEXT); } @Override protected void addNewItem(final ClickEvent event) { - eventBus.publish(this, DragEvent.HIDE_DROP_HINT); + eventbus.publish(this, DragEvent.HIDE_DROP_HINT); targetAddUpdateWindow.resetComponents(); final Window addTargetWindow = targetAddUpdateWindow.getWindow(); addTargetWindow.setCaption(i18n.get("caption.add.new.target")); @@ -402,12 +399,12 @@ public class TargetTableHeader extends AbstractTableHeader { getFilterDroppedInfo().addComponent(filteredDistLabel); getFilterDroppedInfo().addComponent(filterLabelClose); getFilterDroppedInfo().setExpandRatio(filteredDistLabel, 1.0f); - eventBus.publish(this, TargetFilterEvent.FILTER_BY_DISTRIBUTION); + eventbus.publish(this, TargetFilterEvent.FILTER_BY_DISTRIBUTION); } private void closeFilterByDistribution() { - eventBus.publish(this, DragEvent.HIDE_DROP_HINT); + eventbus.publish(this, DragEvent.HIDE_DROP_HINT); /* Remove filter by distribution information. */ getFilterDroppedInfo().removeAllComponents(); getFilterDroppedInfo().setSizeUndefined(); @@ -415,7 +412,7 @@ public class TargetTableHeader extends AbstractTableHeader { managementUIState.getTargetTableFilters().setDistributionSet(null); /* Reload the table */ - eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_DISTRIBUTION); + eventbus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_DISTRIBUTION); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java index aaf5c6a9f..2bd86868c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java @@ -18,26 +18,17 @@ import org.vaadin.spring.events.EventBus; import com.vaadin.event.Action; import com.vaadin.event.Action.Handler; -import com.vaadin.event.ShortcutAction; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; /** * Target table layout. - * - * - * */ @SpringComponent @ViewScope public class TargetTableLayout extends AbstractTableLayout { private static final long serialVersionUID = 2248703121998709112L; - /** - * action for the shortcut key ctrl + 'A'. - */ - private static final ShortcutAction ACTION_CTRL_A = new ShortcutAction("Select All", ShortcutAction.KeyCode.A, - new int[] { ShortcutAction.ModifierKey.CTRL }); @Autowired private transient EventBus.SessionEventBus eventBus; diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 1ced68c43..d48303ae2 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -299,10 +299,6 @@ message.tag.use.bulk.upload = {0} cannot be deleted .It is in use in targets bul message.bulk.upload.tag.assignment.failed = Tag {0} assignment failed as tag no longer exists message.bulk.upload.tag.assignments.failed= Few tag assignments failed as tags no longer exists -# action info -action.target.table.selectall = Select all (Ctrl+A) -action.target.table.clear = Clear selections - #reused messages soft.module.jvm =Runtime soft.module.application =Application From c2d1e37a16a00433f45e378df6936b676d78140b Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 8 Jun 2016 13:15:38 +0200 Subject: [PATCH 224/371] Add License and JavaDoc Signed-off-by: Melanie Retter --- .../event/SoftwareModuleTableEvent.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java index 70108acef..f722c3a23 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.ui.distributions.event; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -5,9 +13,7 @@ import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; /** - * - * - * + * Class which contains the Event when selecting all entries of a table */ public class SoftwareModuleTableEvent extends BaseEntityEvent { @@ -36,7 +42,7 @@ public class SoftwareModuleTableEvent extends BaseEntityEvent { /** * The component event. * - * @param SoftwareModuleComponentEvent + * @param softwareModuleComponentEvent * the softwareModule component event. */ public SoftwareModuleTableEvent(final SoftwareModuleComponentEvent softwareModuleComponentEvent) { From 83dc9471dcaf2d0ba9c057853ca5cf1e8b94698d Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 8 Jun 2016 16:05:48 +0200 Subject: [PATCH 225/371] Enable save button if all mandatory fields are filled (softwareModule) Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 68 +++++++++++++++--- .../CreateUpdateSoftwareTypeLayout.java | 4 +- .../hawkbit/ui/common/CommonDialogWindow.java | 69 ++++++++++++++++++- .../ui/components/SPUIComponentProvider.java | 5 +- .../ui/decorators/SPUIWindowDecorator.java | 7 +- .../CreateUpdateDistSetTypeLayout.java | 3 +- .../AbstractCreateUpdateTagLayout.java | 3 +- .../DistributionAddUpdateWindowLayout.java | 3 +- .../TargetAddUpdateWindowLayout.java | 3 +- .../rollout/AddUpdateRolloutWindowLayout.java | 3 +- 10 files changed, 146 insertions(+), 22 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index ddf229651..0dd85d08b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -9,7 +9,11 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.io.Serializable; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -29,10 +33,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.spring.events.EventBus; +import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.AbstractField; import com.vaadin.ui.ComboBox; +import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.Label; @@ -129,12 +136,14 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); nameTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_NAME); + nameTextField.addTextChangeListener(this::nameTextFieldChanged); /* version text field */ versionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); versionTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VERSION); + versionTextField.addTextChangeListener(this::versionTextFieldChanged); /* Vendor text field */ vendorTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.vendor"), "", ValoTheme.TEXTFIELD_TINY, @@ -159,15 +168,40 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se typeComboBox.setStyleName(SPUIDefinitions.COMBO_BOX_SPECIFIC_STYLE + " " + ValoTheme.COMBOBOX_TINY); typeComboBox.setNewItemsAllowed(Boolean.FALSE); typeComboBox.setImmediate(Boolean.TRUE); + typeComboBox.addValueChangeListener(this::typeComboBoxChanged); populateTypeNameCombo(); resetOldValues(); } - /** - * - */ + private void nameTextFieldChanged(final TextChangeEvent event) { + if (StringUtils.isNotBlank(event.getText())) { + window.getRequiredFields().put(nameTextField.getCaption(), Boolean.TRUE); + } else { + window.getRequiredFields().put(nameTextField.getCaption(), Boolean.FALSE); + } + window.checkMandatoryFields(); + } + + private void versionTextFieldChanged(final TextChangeEvent event) { + if (StringUtils.isNotBlank(event.getText())) { + window.getRequiredFields().put(versionTextField.getCaption(), Boolean.TRUE); + } else { + window.getRequiredFields().put(versionTextField.getCaption(), Boolean.FALSE); + } + window.checkMandatoryFields(); + } + + private void typeComboBoxChanged(final ValueChangeEvent event) { + if (event.getProperty().getValue() != null) { + window.getRequiredFields().put(typeComboBox.getCaption(), Boolean.TRUE); + } else { + window.getRequiredFields().put(typeComboBox.getCaption(), Boolean.FALSE); + } + window.checkMandatoryFields(); + } + private void populateTypeNameCombo() { typeComboBox.setContainerDataSource(HawkbitCommonUtil.createLazyQueryContainer( new BeanQueryFactory(SoftwareModuleTypeBeanQuery.class))); @@ -180,10 +214,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se oldVendorValue = null; } - /** - * Build the window content and get an instance of customDialogWindow - * - */ private void createWindow() { final Label madatoryStarLabel = new Label("*"); @@ -197,7 +227,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se addStyleName("lay-color"); final FormLayout formLayout = new FormLayout(); - formLayout.addComponent(mandatoryLabel); + // formLayout.addComponent(mandatoryLabel); formLayout.addComponent(typeComboBox); formLayout.addComponent(nameTextField); formLayout.addComponent(versionTextField); @@ -208,11 +238,31 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null, + getMandatoryFields(formLayout)); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); nameTextField.focus(); } + private Map getMandatoryFields(final FormLayout formLayout) { + final Map requiredFields = new HashMap<>(); + final Iterator iterate = formLayout.iterator(); + while (iterate.hasNext()) { + final Component c = iterate.next(); + if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { + requiredFields.put(c.getCaption(), null); + } + // else if (c instanceof TextField && ((TextField) c).isRequired()) + // { + // requiredFields.put(c.getCaption(), null); + // } else if (c instanceof TextArea && ((TextArea) c).isRequired()) + // { + // requiredFields.put(c.getCaption(), null); + // } + } + return requiredFields; + } + private void addDescriptionTextChangeListener() { descTextArea.addTextChangeListener(event -> window.setSaveButtonEnabled(hasDescriptionChanged(event))); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 85844b917..ad78e09e7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -112,11 +112,13 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout getFormLayout().addComponent(assignOptiongroup); } + // TODO MR requiredFields + @Override public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, null); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 247ad0c8f..d14830aa4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -10,29 +10,38 @@ package org.eclipse.hawkbit.ui.common; import static com.google.common.base.Preconditions.checkNotNull; +import java.util.Map; + import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleBorderWithIcon; +import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.server.FontAwesome; +import com.vaadin.spring.annotation.SpringComponent; +import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.AbstractOrderedLayout; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; import com.vaadin.ui.Link; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; +import com.vaadin.ui.themes.ValoTheme; /** - * * Superclass for pop-up-windows including a minimize and close icon in the * upper right corner and a save and cancel button at the bottom. - * */ +@SpringComponent +@ViewScope public class CommonDialogWindow extends Window { private static final long serialVersionUID = -1321949234316858703L; @@ -57,6 +66,11 @@ public class CommonDialogWindow extends Window { private final ClickListener cancelButtonClickListener; + private Map requiredFields; + + @Autowired + private I18N i18n; + /** * Constructor. * @@ -72,7 +86,8 @@ public class CommonDialogWindow extends Window { * the cancelButtonClickListener */ public CommonDialogWindow(final String caption, final Component content, final String helpLink, - final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener) { + final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, + final Map requiredFields) { checkNotNull(saveButtonClickListener); checkNotNull(cancelButtonClickListener); this.caption = caption; @@ -80,10 +95,27 @@ public class CommonDialogWindow extends Window { this.helpLink = helpLink; this.saveButtonClickListener = saveButtonClickListener; this.cancelButtonClickListener = cancelButtonClickListener; + this.requiredFields = requiredFields; init(); } + /** + * Checks the mandatory fields in the pop-up-window content. If all + * mandatory fields are filled the save button is enabled. Otherwise the + * save button is disabled. + */ + public void checkMandatoryFields() { + + for (final Map.Entry entry : requiredFields.entrySet()) { + if (entry.getValue() == null || entry.getValue().equals(Boolean.FALSE)) { + saveButton.setEnabled(false); + return; + } + } + saveButton.setEnabled(true); + } + private final void init() { if (content instanceof AbstractOrderedLayout) { @@ -94,6 +126,9 @@ public class CommonDialogWindow extends Window { if (null != content) { mainLayout.addComponent(content); } + + createMandatoryLabel(); + final HorizontalLayout buttonLayout = createActionButtonsLayout(); mainLayout.addComponent(buttonLayout); mainLayout.setComponentAlignment(buttonLayout, Alignment.TOP_CENTER); @@ -122,6 +157,17 @@ public class CommonDialogWindow extends Window { return buttonsLayout; } + private void createMandatoryLabel() { + + if (existsMandatoryFieldsInWindowContent()) { + // final Label madatoryLabel = new + // Label(i18n.get("label.mandatory.field")); + final Label madatoryLabel = new Label("* Mandatory Field"); + madatoryLabel.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_TINY); + mainLayout.addComponent(madatoryLabel); + } + } + private void createCancelButton() { cancelButton = SPUIComponentProvider.getButton(SPUIComponentIdProvider.CANCEL_BUTTON, "Cancel", "", "", true, FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); @@ -140,11 +186,20 @@ public class CommonDialogWindow extends Window { saveButton.setSizeUndefined(); saveButton.addStyleName("default-color"); saveButton.addClickListener(saveButtonClickListener); + saveButton.setEnabled(!existsMandatoryFieldsInWindowContent()); buttonsLayout.addComponent(saveButton); buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); buttonsLayout.setExpandRatio(saveButton, 1.0F); } + private boolean existsMandatoryFieldsInWindowContent() { + + if (requiredFields != null && requiredFields.size() > 0) { + return true; + } + return false; + } + private void addHelpLink() { if (StringUtils.isEmpty(helpLink)) { @@ -167,4 +222,12 @@ public class CommonDialogWindow extends Window { return buttonsLayout; } + public Map getRequiredFields() { + return requiredFields; + } + + public void setRequiredFields(final Map requiredFields) { + this.requiredFields = requiredFields; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 170ea8dcc..2b743d2a8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -153,9 +153,10 @@ public final class SPUIComponentProvider { */ public static CommonDialogWindow getWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, - final ClickListener cancelButtonClickListener, final String helpLink) { + final ClickListener cancelButtonClickListener, final String helpLink, + final Map requiredFields) { return SPUIWindowDecorator.getDeocratedWindow(caption, id, type, content, saveButtonClickListener, - cancelButtonClickListener, helpLink); + cancelButtonClickListener, helpLink, requiredFields); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java index 9f436fd65..f9ce37158 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.ui.decorators; +import java.util.Map; + import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -44,10 +46,11 @@ public final class SPUIWindowDecorator { */ public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, - final ClickListener cancelButtonClickListener, final String helpLink) { + final ClickListener cancelButtonClickListener, final String helpLink, + final Map requiredFields) { final CommonDialogWindow window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, - cancelButtonClickListener); + cancelButtonClickListener, requiredFields); if (null != id) { window.setId(id); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index a4a9eee35..48cdbfc6a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -610,11 +610,12 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } } + // TODO MR requiredFields @Override public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, null); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index d564accd3..d5f9fef94 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -105,10 +105,11 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected String tagNameValue; protected String tagDescValue; + // TODO MR requiredFields protected void createWindow() { reset(); setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null)); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, null)); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 5b5d53524..c0a4dc165 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -504,13 +504,14 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { } } + // TODO MR requiredFields public CommonDialogWindow getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); populateRequiredComponents(); resetComponents(); addDistributionWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), - null); + null, null); addDistributionWindow.getButtonsLayout().removeStyleName("actionButtonsMargin"); return addDistributionWindow; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 5a26df572..a5a562c11 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -241,10 +241,11 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { } } + // TODO MR requiredFields public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, null); return window; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 2d180f67b..41742d5f7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -157,11 +157,12 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { buildLayout(); } + // TODO MR requiredFields public CommonDialogWindow getWindow() { addUpdateRolloutWindow = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), - uiProperties.getLinks().getDocumentation().getRolloutView()); + uiProperties.getLinks().getDocumentation().getRolloutView(), null); return addUpdateRolloutWindow; } From 0beef57df77e37346bf7ad5a79aa30330e27f9b8 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 9 Jun 2016 11:57:44 +0200 Subject: [PATCH 226/371] Added rabbit connection heartbeat for DMF. Signed-off-by: Kai Zimmermann --- .../scheduling/ExecutorAutoConfiguration.java | 17 ++++-- .../hawkbit/amqp/AmqpConfiguration.java | 54 +++++++++++++++++-- .../eclipse/hawkbit/amqp/AmqpProperties.java | 16 ++++++ 3 files changed, 80 insertions(+), 7 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java index 4fd55cbaa..4f606f1b1 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.autoconfigure.scheduling; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -22,7 +23,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.task.TaskExecutor; -import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; @@ -94,11 +94,22 @@ public class ExecutorAutoConfiguration { } /** - * @return {@link TaskScheduler} for scheduled tasks + * @return {@link ScheduledExecutorService} based on + * {@link #threadPoolTaskScheduler()}. */ @Bean @ConditionalOnMissingBean - public TaskScheduler taskScheduler() { + public ScheduledExecutorService scheduledExecutorService() { + return threadPoolTaskScheduler().getScheduledExecutor(); + } + + /** + * @return {@link ThreadPoolTaskScheduler} for scheduled operations. + */ + @Bean + @ConditionalOnMissingBean + public ThreadPoolTaskScheduler threadPoolTaskScheduler() { return new ThreadPoolTaskScheduler(); } + } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index 20a11713f..adf56e10f 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -8,21 +8,28 @@ */ package org.eclipse.hawkbit.amqp; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadPoolExecutor; + import org.eclipse.hawkbit.dmf.amqp.api.AmqpSettings; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.amqp.RabbitProperties; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; /** * The spring AMQP configuration which is enabled by using the profile @@ -39,7 +46,46 @@ public class AmqpConfiguration { protected AmqpDeadletterProperties amqpDeadletterProperties; @Autowired - private ConnectionFactory connectionFactory; + private ConnectionFactory rabbitConnectionFactory; + + @Configuration + protected static class HawkBitRabbitConnectionFactoryCreator { + @Autowired + @Qualifier("threadPoolExecutor") + private ThreadPoolExecutor threadPoolExecutor; + + @Autowired + private ScheduledExecutorService scheduledExecutorService; + + @Autowired + protected AmqpProperties amqpProperties; + + @Bean + public ConnectionFactory rabbitConnectionFactory(final RabbitProperties config) { + final CachingConnectionFactory factory = new CachingConnectionFactory(); + factory.setRequestedHeartBeat(amqpProperties.getRequestedHeartBeat()); + factory.setExecutor(threadPoolExecutor); + factory.getRabbitConnectionFactory().setHeartbeatExecutor(scheduledExecutorService); + + final String addresses = config.getAddresses(); + factory.setAddresses(addresses); + if (config.getHost() != null) { + factory.setHost(config.getHost()); + factory.setPort(config.getPort()); + } + if (config.getUsername() != null) { + factory.setUsername(config.getUsername()); + } + if (config.getPassword() != null) { + factory.setPassword(config.getPassword()); + } + if (config.getVirtualHost() != null) { + factory.setVirtualHost(config.getVirtualHost()); + } + return factory; + } + + } /** * Create a {@link RabbitAdmin} and ignore declaration exceptions. @@ -49,7 +95,7 @@ public class AmqpConfiguration { */ @Bean public RabbitAdmin rabbitAdmin() { - final RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + final RabbitAdmin rabbitAdmin = new RabbitAdmin(rabbitConnectionFactory); rabbitAdmin.setIgnoreDeclarationExceptions(true); return rabbitAdmin; } @@ -61,7 +107,7 @@ public class AmqpConfiguration { */ @Bean public RabbitTemplate rabbitTemplate() { - final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); + final RabbitTemplate rabbitTemplate = new RabbitTemplate(rabbitConnectionFactory); rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); return rabbitTemplate; } @@ -159,7 +205,7 @@ public class AmqpConfiguration { public SimpleRabbitListenerContainerFactory listenerContainerFactory() { final SimpleRabbitListenerContainerFactory containerFactory = new SimpleRabbitListenerContainerFactory(); containerFactory.setDefaultRequeueRejected(false); - containerFactory.setConnectionFactory(connectionFactory); + containerFactory.setConnectionFactory(rabbitConnectionFactory); containerFactory.setMissingQueuesFatal(amqpProperties.isMissingQueuesFatal()); return containerFactory; } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java index ce6068ce8..5b06c3318 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.amqp; +import java.util.concurrent.TimeUnit; + import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -38,6 +40,11 @@ public class AmqpProperties { */ private boolean missingQueuesFatal = false; + /** + * Requested heartbeat interval from broker in {@link TimeUnit#SECONDS}. + */ + private int requestedHeartBeat = 60; + /** * Is missingQueuesFatal enabled * @@ -102,4 +109,13 @@ public class AmqpProperties { public void setReceiverQueue(final String receiverQueue) { this.receiverQueue = receiverQueue; } + + public int getRequestedHeartBeat() { + return requestedHeartBeat; + } + + public void setRequestedHeartBeat(final int requestedHeartBeat) { + this.requestedHeartBeat = requestedHeartBeat; + } + } From 00013a7f36034648544143149d2f9a6288c2a5c1 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 9 Jun 2016 13:00:47 +0200 Subject: [PATCH 227/371] Added executor config to tests. Signed-off-by: Kai Zimmermann --- .../hawkbit/AmqpTestConfiguration.java | 68 +++++++++++++++++++ .../PropertyBasedArtifactUrlHandlerTest.java | 1 + 2 files changed, 69 insertions(+) diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java index c9be9ffa6..075313a19 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java @@ -8,6 +8,14 @@ */ package org.eclipse.hawkbit; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.eclipse.hawkbit.amqp.AmqpProperties; import org.eclipse.hawkbit.amqp.AmqpSenderService; import org.eclipse.hawkbit.amqp.DefaultAmqpSenderService; import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder; @@ -16,13 +24,22 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.task.TaskExecutor; +import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; /** * */ @Configuration +@EnableConfigurationProperties({ AmqpProperties.class }) public class AmqpTestConfiguration { /** * @return the {@link SystemSecurityContext} singleton bean which make it @@ -56,4 +73,55 @@ public class AmqpTestConfiguration { public AmqpSenderService amqpSenderServiceBean(final RabbitTemplate rabbitTemplate) { return new DefaultAmqpSenderService(rabbitTemplate); } + + /** + * @return ExecutorService with security context availability in thread + * execution.. + */ + @Bean + @ConditionalOnMissingBean + public Executor asyncExecutor() { + return new DelegatingSecurityContextExecutor(threadPoolExecutor()); + } + + /** + * @return central ThreadPoolExecutor for general purpose multi threaded + * operations. Tries an orderly shutdown when destroyed. + */ + @Bean(destroyMethod = "shutdown") + public ThreadPoolExecutor threadPoolExecutor() { + final BlockingQueue blockingQueue = new ArrayBlockingQueue<>(10); + final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 10, 1000, TimeUnit.MILLISECONDS, + blockingQueue, new ThreadFactoryBuilder().setNameFormat("central-executor-pool-%d").build()); + + return threadPoolExecutor; + } + + /** + * @return {@link TaskExecutor} for task execution + */ + @Bean + @ConditionalOnMissingBean + public TaskExecutor taskExecutor() { + return new ConcurrentTaskExecutor(asyncExecutor()); + } + + /** + * @return {@link ScheduledExecutorService} based on + * {@link #threadPoolTaskScheduler()}. + */ + @Bean + @ConditionalOnMissingBean + public ScheduledExecutorService scheduledExecutorService() { + return threadPoolTaskScheduler().getScheduledExecutor(); + } + + /** + * @return {@link ThreadPoolTaskScheduler} for scheduled operations. + */ + @Bean + @ConditionalOnMissingBean + public ThreadPoolTaskScheduler threadPoolTaskScheduler() { + return new ThreadPoolTaskScheduler(); + } } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index c67d6cf47..4d7912211 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -33,6 +33,7 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Test to generate the artifact download URL") @SpringApplicationConfiguration(classes = { AmqpTestConfiguration.class, org.eclipse.hawkbit.RepositoryApplicationConfiguration.class }) + public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTestWithMongoDB { private static final String HTTPS_LOCALHOST = "https://localhost:8080/"; From bbaa6baa728a7ffae079c3cdd83b277a4ed9692a Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 9 Jun 2016 13:24:40 +0200 Subject: [PATCH 228/371] Improved enable save button functionality when update tag Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 55 +++------ .../CreateUpdateSoftwareTypeLayout.java | 41 ++++++- .../hawkbit/ui/common/CommonDialogWindow.java | 74 +++++++++++- .../ui/components/SPUIComponentProvider.java | 2 + .../CreateUpdateDistSetTypeLayout.java | 49 ++++++-- .../AbstractCreateUpdateTagLayout.java | 71 +++++++++-- .../ui/layouts/CreateUpdateTypeLayout.java | 9 +- .../DistributionAddUpdateWindowLayout.java | 64 ++++++---- ...eateUpdateDistributionTagLayoutWindow.java | 5 + .../TargetAddUpdateWindowLayout.java | 43 +++++-- .../CreateUpdateTargetTagLayoutWindow.java | 4 + .../rollout/AddUpdateRolloutWindowLayout.java | 113 ++++++++++++------ 12 files changed, 384 insertions(+), 146 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 0dd85d08b..309c111ea 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -13,7 +13,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -73,8 +72,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se @Autowired private transient EntityFactory entityFactory; - private Label mandatoryLabel; - private TextField nameTextField; private TextField versionTextField; @@ -136,14 +133,14 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); nameTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_NAME); - nameTextField.addTextChangeListener(this::nameTextFieldChanged); + nameTextField.addTextChangeListener(this::listenerNameTextFieldChanged); /* version text field */ versionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); versionTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VERSION); - versionTextField.addTextChangeListener(this::versionTextFieldChanged); + versionTextField.addTextChangeListener(this::listenerVersionTextFieldChanged); /* Vendor text field */ vendorTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.vendor"), "", ValoTheme.TEXTFIELD_TINY, @@ -157,49 +154,29 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se addDescriptionTextChangeListener(); addVendorTextChangeListener(); - /* Label for mandatory symbol */ - mandatoryLabel = new Label(i18n.get("label.mandatory.field")); - mandatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); - mandatoryLabel.addStyleName(ValoTheme.LABEL_SMALL); - typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, true, null, i18n.get("upload.swmodule.type")); typeComboBox.setId(SPUIComponentIdProvider.SW_MODULE_TYPE); typeComboBox.setStyleName(SPUIDefinitions.COMBO_BOX_SPECIFIC_STYLE + " " + ValoTheme.COMBOBOX_TINY); typeComboBox.setNewItemsAllowed(Boolean.FALSE); typeComboBox.setImmediate(Boolean.TRUE); - typeComboBox.addValueChangeListener(this::typeComboBoxChanged); + typeComboBox.addValueChangeListener(this::listenerTypeComboBoxChanged); populateTypeNameCombo(); resetOldValues(); } - private void nameTextFieldChanged(final TextChangeEvent event) { - if (StringUtils.isNotBlank(event.getText())) { - window.getRequiredFields().put(nameTextField.getCaption(), Boolean.TRUE); - } else { - window.getRequiredFields().put(nameTextField.getCaption(), Boolean.FALSE); - } - window.checkMandatoryFields(); + private void listenerNameTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, nameTextField); } - private void versionTextFieldChanged(final TextChangeEvent event) { - if (StringUtils.isNotBlank(event.getText())) { - window.getRequiredFields().put(versionTextField.getCaption(), Boolean.TRUE); - } else { - window.getRequiredFields().put(versionTextField.getCaption(), Boolean.FALSE); - } - window.checkMandatoryFields(); + private void listenerVersionTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, versionTextField); } - private void typeComboBoxChanged(final ValueChangeEvent event) { - if (event.getProperty().getValue() != null) { - window.getRequiredFields().put(typeComboBox.getCaption(), Boolean.TRUE); - } else { - window.getRequiredFields().put(typeComboBox.getCaption(), Boolean.FALSE); - } - window.checkMandatoryFields(); + private void listenerTypeComboBoxChanged(final ValueChangeEvent event) { + window.checkMandatoryComboBox(event, typeComboBox); } private void populateTypeNameCombo() { @@ -212,6 +189,10 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se private void resetOldValues() { oldDescriptionValue = null; oldVendorValue = null; + + if (window != null) { + window.resetRequiredFieldsValues(); + } } private void createWindow() { @@ -227,7 +208,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se addStyleName("lay-color"); final FormLayout formLayout = new FormLayout(); - // formLayout.addComponent(mandatoryLabel); formLayout.addComponent(typeComboBox); formLayout.addComponent(nameTextField); formLayout.addComponent(versionTextField); @@ -252,13 +232,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { requiredFields.put(c.getCaption(), null); } - // else if (c instanceof TextField && ((TextField) c).isRequired()) - // { - // requiredFields.put(c.getCaption(), null); - // } else if (c instanceof TextArea && ((TextArea) c).isRequired()) - // { - // requiredFields.put(c.getCaption(), null); - // } } return requiredFields; } @@ -347,6 +320,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se private void closeThisWindow() { window.close(); UI.getCurrent().removeWindow(window); + window.setSaveButtonEnabled(false); } /** @@ -383,6 +357,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se } else { addNewBaseSoftware(); } + window.setSaveButtonEnabled(false); } private boolean hasDescriptionChanged(final TextChangeEvent event) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index ad78e09e7..7473d5509 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -9,7 +9,10 @@ package org.eclipse.hawkbit.ui.artifacts.smtype; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.EntityFactory; @@ -31,11 +34,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.AbstractField; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Component; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.components.colorpicker.ColorChangeListener; @@ -69,7 +75,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout @Override protected void addListeners() { super.addListeners(); - optiongroup.addValueChangeListener(this::createOptionValueChanged); + optiongroup.addValueChangeListener(this::optionValueChanged); } @Override @@ -86,11 +92,13 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); tagName.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_NAME); + tagName.addTextChangeListener(this::listenerTagNameTextFieldChanged); typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_KEY, true, "", i18n.get("textfield.key"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeKey.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_KEY); + typeKey.addTextChangeListener(this::typeKeyTextFieldChanged); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, false, "", @@ -103,6 +111,14 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout singleMultiOptionGroup(); } + private void listenerTagNameTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, tagName); + } + + private void typeKeyTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, typeKey); + } + @Override protected void buildLayout() { @@ -112,13 +128,23 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout getFormLayout().addComponent(assignOptiongroup); } - // TODO MR requiredFields - @Override public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields()); + } + + private Map getMandatoryFields() { + final Map requiredFields = new HashMap<>(); + final Iterator iterate = getFormLayout().iterator(); + while (iterate.hasNext()) { + final Component c = iterate.next(); + if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { + requiredFields.put(c.getCaption(), null); + } + } + return requiredFields; } /** @@ -128,9 +154,9 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout * ValueChangeEvent */ @Override - protected void createOptionValueChanged(final ValueChangeEvent event) { + protected void optionValueChanged(final ValueChangeEvent event) { - super.createOptionValueChanged(event); + super.optionValueChanged(event); if (updateTypeStr.equals(event.getProperty().getValue())) { assignOptiongroup.setEnabled(false); @@ -172,6 +198,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout .findSoftwareModuleTypeByName(targetTagSelected); if (null != selectedTypeTag) { tagDesc.setValue(selectedTypeTag.getDescription()); + setTagDescOriginal(selectedTypeTag.getDescription()); typeKey.setValue(selectedTypeTag.getKey()); if (selectedTypeTag.getMaxAssignments() == Integer.MAX_VALUE) { assignOptiongroup.setValue(multiAssignStr); @@ -201,6 +228,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout @Override protected void save(final ClickEvent event) { if (!mandatoryValuesPresent()) { + window.setSaveButtonEnabled(false); return; } @@ -216,6 +244,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout updateSWModuleType(existingSMTypeByName); } + window.setSaveButtonEnabled(false); } private void createNewSWModuleType() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index d14830aa4..7b5df4a8f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.common; import static com.google.common.base.Preconditions.checkNotNull; +import java.io.Serializable; import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -20,11 +21,14 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; +import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.server.FontAwesome; -import com.vaadin.spring.annotation.SpringComponent; -import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.ui.AbstractOrderedLayout; +import com.vaadin.ui.AbstractSelect; +import com.vaadin.ui.AbstractTextField; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; @@ -40,9 +44,7 @@ import com.vaadin.ui.themes.ValoTheme; * Superclass for pop-up-windows including a minimize and close icon in the * upper right corner and a save and cancel button at the bottom. */ -@SpringComponent -@ViewScope -public class CommonDialogWindow extends Window { +public class CommonDialogWindow extends Window implements Serializable { private static final long serialVersionUID = -1321949234316858703L; @@ -100,12 +102,38 @@ public class CommonDialogWindow extends Window { init(); } + public void checkMandatoryTextField(final TextChangeEvent event, final AbstractTextField textfield) { + + if (StringUtils.isNotBlank(event.getText())) { + getRequiredFields().put(textfield.getCaption(), Boolean.TRUE); + } else { + getRequiredFields().put(textfield.getCaption(), Boolean.FALSE); + } + checkMandatoryFields(); + } + + public void checkMandatoryComboBox(final ValueChangeEvent event, final AbstractSelect select) { + + if (event.getProperty().getValue() != null) { + if (StringUtils.isNotBlank(select.getCaption())) { + getRequiredFields().put(select.getCaption(), Boolean.TRUE); + } + getRequiredFields().put(select.getId(), Boolean.TRUE); + } else { + if (StringUtils.isNotBlank(select.getCaption())) { + getRequiredFields().put(select.getCaption(), Boolean.FALSE); + } + getRequiredFields().put(select.getId(), Boolean.FALSE); + } + checkMandatoryFields(); + } + /** * Checks the mandatory fields in the pop-up-window content. If all * mandatory fields are filled the save button is enabled. Otherwise the * save button is disabled. */ - public void checkMandatoryFields() { + private void checkMandatoryFields() { for (final Map.Entry entry : requiredFields.entrySet()) { if (entry.getValue() == null || entry.getValue().equals(Boolean.FALSE)) { @@ -116,6 +144,40 @@ public class CommonDialogWindow extends Window { saveButton.setEnabled(true); } + public void updateRequiredFields(final String fieldId, final Boolean filled) { + + getRequiredFields().put(fieldId, Boolean.TRUE); + checkMandatoryFields(); + } + + public void checkChanges(final String newText, final String oldText) { + + if ((StringUtils.isNotBlank(newText) && !newText.equals(oldText)) + || (StringUtils.isNotBlank(oldText) && !oldText.equals(newText))) { + saveButton.setEnabled(true); + } else { + saveButton.setEnabled(false); + } + } + + public void checkColorChange(final Color newColor, final Color oldColor) { + + if (newColor.equals(oldColor)) { + setSaveButtonEnabled(false); + } else { + setSaveButtonEnabled(true); + } + } + + public void resetRequiredFieldsValues() { + // Reset mandatory fields are filled marker + if (getRequiredFields() != null) { + for (final Map.Entry entry : getRequiredFields().entrySet()) { + entry.setValue(null); + } + } + } + private final void init() { if (content instanceof AbstractOrderedLayout) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 2b743d2a8..3ba71fce5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -205,6 +205,8 @@ public final class SPUIComponentProvider { /** * Get Label UI component. * * + * @param caption + * set the caption of the textArea * @param style * set style * @param styleName diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 48cdbfc6a..a04136a48 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -8,7 +8,10 @@ */ package org.eclipse.hawkbit.ui.distributions.disttype; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -37,9 +40,11 @@ import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; import com.vaadin.data.Item; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.util.IndexedContainer; +import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.AbstractField; import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; @@ -94,11 +99,13 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_NAME, true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); tagName.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_NAME); + tagName.addTextChangeListener(this::listenerTagNameTextFieldChanged); typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_KEY, true, "", i18n.get("textfield.key"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeKey.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_KEY); + typeKey.addTextChangeListener(this::listenerTypeKeyTextFieldChanged); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_DESC, false, "", @@ -109,6 +116,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout tagDesc.setNullRepresentation(""); } + private void listenerTagNameTextFieldChanged(final TextChangeEvent event) { + + window.checkMandatoryTextField(event, tagName); + } + + private void listenerTypeKeyTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, typeKey); + } + @Override protected void buildLayout() { @@ -247,10 +263,12 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout private void addSMType() { final Set selectedIds = (Set) sourceTable.getValue(); - if (null != selectedIds && !selectedIds.isEmpty()) { + if (selectedIds != null && !selectedIds.isEmpty()) { for (final Long id : selectedIds) { addTargetTableData(id); } + + window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE); } } @@ -264,6 +282,9 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout selectedTable.removeItem(id); } } + if (selectedIds == null || selectedIds.isEmpty()) { + window.updateRequiredFields(selectedTable.getId(), Boolean.FALSE); + } } @SuppressWarnings("unchecked") @@ -484,9 +505,9 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout * ValueChangeEvent */ @Override - protected void createOptionValueChanged(final ValueChangeEvent event) { + protected void optionValueChanged(final ValueChangeEvent event) { - super.createOptionValueChanged(event); + super.optionValueChanged(event); if (updateTypeStr.equals(event.getProperty().getValue())) { selectedTable.getContainerDataSource().removeAllItems(); @@ -551,18 +572,17 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout final DistributionSetType selectedTypeTag = fetchDistributionSetType(distSetTypeSelected); if (null != selectedTypeTag) { tagDesc.setValue(selectedTypeTag.getDescription()); + setTagDescOriginal(selectedTypeTag.getDescription()); typeKey.setValue(selectedTypeTag.getKey()); if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) { distTypeSelectLayout.setEnabled(true); selectedTable.setEnabled(true); - window.setSaveButtonEnabled(true); } else { uiNotification.displayValidationError( selectedTypeTag.getName() + " " + i18n.get("message.error.dist.set.type.update")); distTypeSelectLayout.setEnabled(false); selectedTable.setEnabled(false); - window.setSaveButtonEnabled(false); } for (final SoftwareModuleType swModuleType : selectedTypeTag.getOptionalModuleTypes()) { addTargetTableforUpdate(swModuleType, false); @@ -607,15 +627,30 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } else { updateDistributionSetType(existingDistTypeByKey); } + window.setSaveButtonEnabled(false); } } - // TODO MR requiredFields @Override public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields()); + } + + private Map getMandatoryFields() { + final Map requiredFields = new HashMap<>(); + final Iterator iterate = getFormLayout().iterator(); + while (iterate.hasNext()) { + final Component c = iterate.next(); + if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { + requiredFields.put(c.getCaption(), null); + } + } + // Selected SoftwareModulesType + requiredFields.put(selectedTable.getId(), null); + + return requiredFields; } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index d5f9fef94..f8fb5c3e0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -8,6 +8,10 @@ */ package org.eclipse.hawkbit.ui.layouts; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; @@ -25,7 +29,6 @@ import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -33,11 +36,14 @@ import org.vaadin.spring.events.EventBus; import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.server.Page; import com.vaadin.shared.ui.colorpicker.Color; +import com.vaadin.ui.AbstractField; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; +import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.GridLayout; @@ -87,7 +93,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected CommonDialogWindow window; protected Label colorLabel; - protected Label madatoryLabel; protected TextField tagName; protected TextArea tagDesc; protected Button tagColorPreviewBtn; @@ -105,11 +110,25 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected String tagNameValue; protected String tagDescValue; - // TODO MR requiredFields + private Color selectedColorOriginal; + private String tagDescOriginal; + protected void createWindow() { reset(); setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, null)); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields())); + } + + private Map getMandatoryFields() { + final Map requiredFields = new HashMap<>(); + final Iterator iterate = formLayout.iterator(); + while (iterate.hasNext()) { + final Component c = iterate.next(); + if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { + requiredFields.put(c.getCaption(), null); + } + } + return requiredFields; } /** @@ -158,7 +177,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent createTagStr = i18n.get("label.create.tag"); updateTagStr = i18n.get("label.update.tag"); comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag"), null); - madatoryLabel = getMandatoryLabel(); colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag.color"), null); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); @@ -166,6 +184,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_NAME, true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); tagName.setId(SPUIDefinitions.NEW_TARGET_TAG_NAME); + tagName.addTextChangeListener(this::listenerTagNameTextFieldChanged); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, false, "", i18n.get("textfield.description"), @@ -174,6 +193,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent tagDesc.setId(SPUIDefinitions.NEW_TARGET_TAG_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); + tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged); tagNameComboBox = SPUIComponentProvider.getComboBox(null, "", "", null, null, false, "", i18n.get("label.combobox.tag")); @@ -186,6 +206,16 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); } + private void listenerTagNameTextFieldChanged(final TextChangeEvent event) { + + window.checkMandatoryTextField(event, tagName); + } + + private void listenerTagDescTextAreaChanged(final TextChangeEvent event) { + + window.checkChanges(event.getText(), tagDescOriginal); + } + protected void buildLayout() { mainLayout = new GridLayout(3, 2); @@ -201,7 +231,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent formLayout.addComponent(optiongroup); formLayout.addComponent(comboLayout); - formLayout.addComponent(madatoryLabel); formLayout.addComponent(tagName); formLayout.addComponent(tagDesc); formLayout.addStyleName("form-lastrow"); @@ -269,12 +298,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent } } - protected Label getMandatoryLabel() { - final Label label = new Label(i18n.get("label.mandatory.field")); - label.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); - return label; - } - private void tagNameChosen(final ValueChangeEvent event) { final String tagSelected = (String) event.getProperty().getValue(); if (null != tagSelected) { @@ -319,6 +342,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(tagNameComboBox); } + window.setSaveButtonEnabled(false); // close the color picker layout tagPreviewBtnClicked = false; // reset the selected color - Set default color @@ -347,6 +371,10 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); tagPreviewBtnClicked = false; + + if (window != null) { + window.resetRequiredFieldsValues(); + } } /** @@ -434,11 +462,14 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent createDynamicStyleForComponents(tagName, tagDesc, colorPickedPreview); colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor()); } + + window.checkColorChange(colorPickerLayout.getSelectedColor(), selectedColorOriginal); } protected void closeWindow() { window.close(); UI.getCurrent().removeWindow(window); + window.setSaveButtonEnabled(false); } /** @@ -643,4 +674,20 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent return formLayout; } + public Color getSelectedColorOriginal() { + return selectedColorOriginal; + } + + public void setSelectedColorOriginal(final Color selectedColorOriginal) { + this.selectedColorOriginal = selectedColorOriginal; + } + + public String getTagDescOriginal() { + return tagDescOriginal; + } + + public void setTagDescOriginal(final String tagDescOriginal) { + this.tagDescOriginal = tagDescOriginal; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index 1987d6053..c67d35321 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -52,7 +52,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { @Override protected void addListeners() { super.addListeners(); - optiongroup.addValueChangeListener(this::createOptionValueChanged); + optiongroup.addValueChangeListener(this::optionValueChanged); } @Override @@ -61,7 +61,6 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { createTypeStr = i18n.get("label.create.type"); updateTypeStr = i18n.get("label.update.type"); comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); - madatoryLabel = getMandatoryLabel(); colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); @@ -137,7 +136,8 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { * @param event * ValueChangeEvent */ - protected void createOptionValueChanged(final ValueChangeEvent event) { + @Override + protected void optionValueChanged(final ValueChangeEvent event) { if (updateTypeStr.equals(event.getProperty().getValue())) { tagName.clear(); @@ -158,6 +158,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(tagNameComboBox); } + window.setSaveButtonEnabled(false); restoreComponentStyles(); getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); getColorPickerLayout().getSelPreview() @@ -236,12 +237,14 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); createDynamicStyleForComponents(tagName, typeKey, tagDesc, ColorPickerConstants.DEFAULT_COLOR); getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); + setSelectedColorOriginal(getColorPickerLayout().getDefaultColor()); } else { getColorPickerLayout().setSelectedColor(ColorPickerHelper.rgbToColorConverter(color)); getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); createDynamicStyleForComponents(tagName, typeKey, tagDesc, color); getPreviewButtonColor(color); + setSelectedColorOriginal(ColorPickerHelper.rgbToColorConverter(color)); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index c0a4dc165..82cf2390c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.management.dstable; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -49,12 +50,12 @@ import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.AbstractField; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; -import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; @@ -92,13 +93,12 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { private TextField distNameTextField; private TextField distVersionTextField; - private Label madatoryLabel; private TextArea descTextArea; private CheckBox reqMigStepCheckbox; private ComboBox distsetTypeNameComboBox; private boolean editDistribution = Boolean.FALSE; private Long editDistId; - private CommonDialogWindow addDistributionWindow; + private CommonDialogWindow window; private String originalDistName; private String originalDistVersion; private String originalDistDescription; @@ -132,7 +132,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { setSizeUndefined(); formLayout = new FormLayout(); - formLayout.addComponent(madatoryLabel); formLayout.addComponent(distsetTypeNameComboBox); formLayout.addComponent(distNameTextField); formLayout.addComponent(distVersionTextField); @@ -152,12 +151,14 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); distNameTextField.setId(SPUIComponentIdProvider.DIST_ADD_NAME); distNameTextField.setNullRepresentation(""); + distNameTextField.addTextChangeListener(this::listenerDistNameTextFieldChanged); distVersionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); distVersionTextField.setId(SPUIComponentIdProvider.DIST_ADD_VERSION); distVersionTextField.setNullRepresentation(""); + distVersionTextField.addTextChangeListener(this::listenerDistVersionTextFieldChanged); distsetTypeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, "", false, "", i18n.get("label.combobox.type")); @@ -171,16 +172,20 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { descTextArea.setId(SPUIComponentIdProvider.DIST_ADD_DESC); descTextArea.setNullRepresentation(""); - /* Label for mandatory symbol */ - madatoryLabel = new Label(i18n.get("label.mandatory.field")); - madatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); - reqMigStepCheckbox = SPUIComponentProvider.getCheckBox(i18n.get("checkbox.dist.required.migration.step"), "dist-checkbox-style", null, false, ""); reqMigStepCheckbox.addStyleName(ValoTheme.CHECKBOX_SMALL); reqMigStepCheckbox.setId(SPUIComponentIdProvider.DIST_ADD_MIGRATION_CHECK); } + private void listenerDistNameTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, distNameTextField); + } + + private void listenerDistVersionTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, distVersionTextField); + } + /** * Get the LazyQueryContainer instance for DistributionSetTypes. * @@ -201,7 +206,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { } private void enableSaveButton() { - addDistributionWindow.setSaveButtonEnabled(true); + window.setSaveButtonEnabled(true); } private DistributionSetType getDefaultDistributionSetType() { @@ -210,17 +215,16 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { } private void disableSaveButton() { - addDistributionWindow.setSaveButtonEnabled(false); + window.setSaveButtonEnabled(false); } private void saveDistribution() { - /* add new or update target */ if (editDistribution) { updateDistribution(); } else { addNewDistribution(); } - + window.setSaveButtonEnabled(false); } /** @@ -298,8 +302,9 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { * Close window. */ private void closeThisWindow() { - addDistributionWindow.close(); - UI.getCurrent().removeWindow(addDistributionWindow); + window.close(); + UI.getCurrent().removeWindow(window); + window.setSaveButtonEnabled(false); } /** @@ -398,11 +403,15 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { distsetTypeNameComboBox.removeStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR); descTextArea.clear(); reqMigStepCheckbox.clear(); - if (addDistributionWindow != null) { - addDistributionWindow.setSaveButtonEnabled(true); + if (window != null) { + window.setSaveButtonEnabled(true); } removeListeners(); changedComponents.clear(); + + if (window != null) { + window.resetRequiredFieldsValues(); + } } private void populateRequiredComponents() { @@ -482,7 +491,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { public void populateValuesOfDistribution(final Long editDistId) { this.editDistId = editDistId; editDistribution = Boolean.TRUE; - addDistributionWindow.setSaveButtonEnabled(false); + window.setSaveButtonEnabled(false); final DistributionSet distSet = distributionSetManagement.findDistributionSetByIdWithDetails(editDistId); if (distSet != null) { distNameTextField.setValue(distSet.getName()); @@ -504,17 +513,28 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { } } - // TODO MR requiredFields public CommonDialogWindow getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); populateRequiredComponents(); resetComponents(); - addDistributionWindow = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, + window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), - null, null); - addDistributionWindow.getButtonsLayout().removeStyleName("actionButtonsMargin"); + null, getMandatoryFields()); + window.getButtonsLayout().removeStyleName("actionButtonsMargin"); - return addDistributionWindow; + return window; + } + + private Map getMandatoryFields() { + final Map requiredFields = new HashMap<>(); + final Iterator iterate = formLayout.iterator(); + while (iterate.hasNext()) { + final Component c = iterate.next(); + if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { + requiredFields.put(c.getCaption(), null); + } + } + return requiredFields; } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 0d4da54e8..3bee67345 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -98,6 +98,7 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat updateExistingTag(existingDistTag); } } + window.setSaveButtonEnabled(false); } /** @@ -159,11 +160,14 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat final DistributionSetTag selectedDistTag = tagManagement.findDistributionSetTag(distTagSelected); if (null != selectedDistTag) { tagDesc.setValue(selectedDistTag.getDescription()); + setTagDescOriginal(selectedDistTag.getDescription()); if (null == selectedDistTag.getColour()) { setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); + setSelectedColorOriginal(getColorPickerLayout().getDefaultColor()); } else { setTagColor(ColorPickerHelper.rgbToColorConverter(selectedDistTag.getColour()), selectedDistTag.getColour()); + setSelectedColorOriginal(ColorPickerHelper.rgbToColorConverter(selectedDistTag.getColour())); } } } @@ -181,4 +185,5 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat setOptionGroupDefaultValue(permChecker.hasCreateDistributionPermission(), permChecker.hasUpdateDistributionPermission()); } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index a5a562c11..e5d65295b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -8,9 +8,13 @@ */ package org.eclipse.hawkbit.ui.management.targettable; +import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; import java.util.Set; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; @@ -35,6 +39,8 @@ import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.VaadinSessionScope; +import com.vaadin.ui.AbstractField; +import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.Label; @@ -73,7 +79,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private TextField controllerIDTextField; private TextField nameTextField; private TextArea descTextArea; - private Label madatoryLabel; private boolean editTarget = Boolean.FALSE; private String controllerId; private FormLayout formLayout; @@ -100,6 +105,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { controllerIDTextField = SPUIComponentProvider.getTextField( i18n.get("prompt.target.id"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.target.id"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); controllerIDTextField.setId(SPUIComponentIdProvider.TARGET_ADD_CONTROLLER_ID); + controllerIDTextField.addTextChangeListener(this::listenerControllerIDTextFieldChanged); /* Textfield for target name */ nameTextField = SPUIComponentProvider.getTextField( i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, false, null, @@ -111,10 +117,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descTextArea.setId(SPUIComponentIdProvider.TARGET_ADD_DESC); descTextArea.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); - - /* Label for mandatory symbol */ - madatoryLabel = new Label(i18n.get("label.mandatory.field")); - madatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); + } + + private void listenerControllerIDTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, controllerIDTextField); } private void buildLayout() { @@ -125,14 +131,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { */ formLayout = new FormLayout(); - formLayout.addComponent(madatoryLabel); formLayout.addComponent(controllerIDTextField); formLayout.addComponent(nameTextField); formLayout.addComponent(descTextArea); - if (Boolean.TRUE.equals(editTarget)) { - madatoryLabel.setVisible(Boolean.FALSE); - } nameTextField.focus(); } @@ -211,6 +213,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { } else { addNewTarget(); } + window.setSaveButtonEnabled(false); } private void discardTargetListner() { @@ -241,13 +244,24 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { } } - // TODO MR requiredFields public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, getMandatoryFields()); return window; } + + private Map getMandatoryFields() { + final Map requiredFields = new HashMap<>(); + final Iterator iterate = formLayout.iterator(); + while (iterate.hasNext()) { + final Component c = iterate.next(); + if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { + requiredFields.put(c.getCaption(), null); + } + } + return requiredFields; + } /** * clear all fields of Target Edit Window. @@ -261,12 +275,17 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { controllerIDTextField.clear(); descTextArea.clear(); editTarget = Boolean.FALSE; + + if (window != null) { + window.resetRequiredFieldsValues(); + } } private void closeThisWindow() { editTarget = Boolean.FALSE; window.close(); UI.getCurrent().removeWindow(window); + window.setSaveButtonEnabled(false); } private void setTargetValues(final Target target, final String name, final String description) { @@ -287,7 +306,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private boolean duplicateCheck(final String newControlllerId) { final Target existingTarget = targetManagement.findTargetByControllerID(newControlllerId.trim()); if (existingTarget != null) { - uINotification.displayValidationError(i18n.get("message.target.duplicate.check")); + uINotification.displayValidationError(i18n.get("message.target.duplicate.check", new Object[] {newControlllerId})); return false; } else { return true; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java index a7d612f72..81c0c72ae 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java @@ -91,11 +91,14 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa final TargetTag selectedTargetTag = tagManagement.findTargetTag(targetTagSelected); if (null != selectedTargetTag) { tagDesc.setValue(selectedTargetTag.getDescription()); + setTagDescOriginal(selectedTargetTag.getDescription()); if (null == selectedTargetTag.getColour()) { setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); + setSelectedColorOriginal(getColorPickerLayout().getDefaultColor()); } else { setTagColor(ColorPickerHelper.rgbToColorConverter(selectedTargetTag.getColour()), selectedTargetTag.getColour()); + setSelectedColorOriginal(ColorPickerHelper.rgbToColorConverter(selectedTargetTag.getColour())); } } } @@ -112,6 +115,7 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa updateExistingTag(existingTag); } } + window.setSaveButtonEnabled(false); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 41742d5f7..1226ec5fb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -10,7 +10,9 @@ package org.eclipse.hawkbit.ui.rollout.rollout; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.EntityFactory; @@ -58,6 +60,7 @@ import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Validator; import com.vaadin.data.validator.IntegerRangeValidator; import com.vaadin.data.validator.RegexpValidator; +import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.ComboBox; @@ -115,8 +118,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { @Autowired private transient EventBus.SessionEventBus eventBus; - private Label mandatoryLabel; - private TextField rolloutName; private ComboBox distributionSet; @@ -135,7 +136,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private OptionGroup errorThresholdOptionGroup; - private CommonDialogWindow addUpdateRolloutWindow; + private CommonDialogWindow window; private Boolean editRolloutEnabled; @@ -157,13 +158,25 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { buildLayout(); } - // TODO MR requiredFields public CommonDialogWindow getWindow() { - addUpdateRolloutWindow = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null, + window = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), - uiProperties.getLinks().getDocumentation().getRolloutView(), null); - return addUpdateRolloutWindow; + uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields()); + return window; + } + + private Map getMandatoryFields() { + + final Map requiredFields = new HashMap<>(); + requiredFields.put(rolloutName.getId(), null); + requiredFields.put(distributionSet.getId(), null); + requiredFields.put(targetFilterQueryCombo.getId(), null); + requiredFields.put(noOfGroups.getId(), null); + requiredFields.put(triggerThreshold.getId(), null); + requiredFields.put(errorThreshold.getId(), null); + + return requiredFields; } /** @@ -187,6 +200,10 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { actionTypeOptionGroupLayout.selectDefaultOption(); totalTargetsCount = 0L; rolloutForEdit = null; + + if (window != null) { + window.resetRequiredFieldsValues(); + } } private void resetFields() { @@ -208,26 +225,25 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { setRows(9); setColumns(3); - addComponent(mandatoryLabel, 1, 0, 2, 0); - addComponent(getLabel("textfield.name"), 0, 1); - addComponent(rolloutName, 1, 1); - addComponent(getLabel("prompt.distribution.set"), 0, 2); - addComponent(distributionSet, 1, 2); - addComponent(getLabel("prompt.target.filter"), 0, 3); - addComponent(targetFilterQueryCombo, 1, 3); - addComponent(totalTargetsLabel, 2, 3); - addComponent(getLabel("prompt.number.of.groups"), 0, 4); - addComponent(noOfGroups, 1, 4); - addComponent(groupSizeLabel, 2, 4); - addComponent(getLabel("prompt.tigger.threshold"), 0, 5); - addComponent(triggerThreshold, 1, 5); - addComponent(getPercentHintLabel(), 2, 5); - addComponent(getLabel("prompt.error.threshold"), 0, 6); - addComponent(errorThreshold, 1, 6); - addComponent(errorThresholdOptionGroup, 2, 6); - addComponent(getLabel("textfield.description"), 0, 7); - addComponent(description, 1, 7, 2, 7); - addComponent(actionTypeOptionGroupLayout, 0, 8, 2, 8); + addComponent(getLabel("textfield.name"), 0, 0); + addComponent(rolloutName, 1, 0); + addComponent(getLabel("prompt.distribution.set"), 0, 1); + addComponent(distributionSet, 1, 1); + addComponent(getLabel("prompt.target.filter"), 0, 2); + addComponent(targetFilterQueryCombo, 1, 2); + addComponent(totalTargetsLabel, 2, 2); + addComponent(getLabel("prompt.number.of.groups"), 0, 3); + addComponent(noOfGroups, 1, 3); + addComponent(groupSizeLabel, 2, 3); + addComponent(getLabel("prompt.tigger.threshold"), 0, 4); + addComponent(triggerThreshold, 1, 4); + addComponent(getPercentHintLabel(), 2, 4); + addComponent(getLabel("prompt.error.threshold"), 0, 5); + addComponent(errorThreshold, 1, 5); + addComponent(errorThresholdOptionGroup, 2, 5); + addComponent(getLabel("textfield.description"), 0, 6); + addComponent(description, 1, 6, 2, 6); + addComponent(actionTypeOptionGroupLayout, 0, 7, 2, 7); rolloutName.focus(); } @@ -249,7 +265,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void createRequiredComponents() { - mandatoryLabel = createMandatoryLabel(); rolloutName = createRolloutNameField(); distributionSet = createDistributionSetCombo(); populateDistributionSet(); @@ -308,11 +323,11 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { errorThresoldOptions.addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL); errorThresoldOptions.addStyleName(SPUIStyleDefinitions.ROLLOUT_OPTION_GROUP); errorThresoldOptions.setSizeUndefined(); - errorThresoldOptions.addValueChangeListener(this::onErrorThresoldOptionChange); + errorThresoldOptions.addValueChangeListener(this::listenerOnErrorThresoldOptionChange); return errorThresoldOptions; } - private void onErrorThresoldOptionChange(final ValueChangeEvent event) { + private void listenerOnErrorThresoldOptionChange(final ValueChangeEvent event) { errorThreshold.clear(); errorThreshold.removeAllValidators(); if (event.getProperty().getValue().equals(ERRORTHRESOLDOPTIONS.COUNT.getValue())) { @@ -331,11 +346,11 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { targetFilter.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); targetFilter.setId(SPUIComponentIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID); targetFilter.setSizeUndefined(); - targetFilter.addValueChangeListener(event -> onTargetFilterChange()); + targetFilter.addValueChangeListener(this::onTargetFilterChange); return targetFilter; } - private void onTargetFilterChange() { + private void onTargetFilterChange(final ValueChangeEvent event) { final String filterQueryString = getTargetFilterQuery(); if (!Strings.isNullOrEmpty(filterQueryString)) { totalTargetsCount = targetManagement.countTargetByTargetFilterQuery(filterQueryString); @@ -346,6 +361,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { totalTargetsLabel.setVisible(false); } onGroupNumberChange(); + + window.checkMandatoryComboBox(event, targetFilterQueryCombo); } private String getTotalTargetMessage() { @@ -490,8 +507,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void closeThisWindow() { - addUpdateRolloutWindow.close(); - UI.getCurrent().removeWindow(addUpdateRolloutWindow); + window.close(); + UI.getCurrent().removeWindow(window); } private boolean mandatoryCheck() { @@ -560,18 +577,29 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { errorField.setId(SPUIComponentIdProvider.ROLLOUT_ERROR_THRESOLD_ID); errorField.setMaxLength(7); errorField.setSizeUndefined(); + errorField.addTextChangeListener(this::listenerErrorThresholdTextFieldChanged); return errorField; } + private void listenerErrorThresholdTextFieldChanged(final TextChangeEvent event) { + + window.checkMandatoryTextField(event, errorThreshold); + } + private TextField createTriggerThresold() { final TextField thresholdField = getTextfield("prompt.tigger.threshold"); thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); thresholdField.addValidator(new ThresholdFieldValidator()); thresholdField.setSizeUndefined(); thresholdField.setMaxLength(3); + thresholdField.addTextChangeListener(this::listenerTriggerThresholdTextFieldChanged); return thresholdField; } + private void listenerTriggerThresholdTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, triggerThreshold); + } + private TextField createNoOfGroupsField() { final TextField noOfGroupsField = getTextfield("prompt.number.of.groups"); noOfGroupsField.setId(SPUIComponentIdProvider.ROLLOUT_NO_OF_GROUPS_ID); @@ -579,9 +607,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { noOfGroupsField.setSizeUndefined(); noOfGroupsField.setMaxLength(3); noOfGroupsField.addValueChangeListener(evevt -> onGroupNumberChange()); + noOfGroupsField.addTextChangeListener(this::listenerNoOfGroupsTextFieldChanged); return noOfGroupsField; } + private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, noOfGroups); + } + private void onGroupNumberChange() { if (noOfGroups.isValid() && !Strings.isNullOrEmpty(noOfGroups.getValue())) { groupSizeLabel.setValue(getTargetPerGroupMessage(String.valueOf(getGroupSize()))); @@ -599,9 +632,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { dsSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); dsSet.setId(SPUIComponentIdProvider.ROLLOUT_DS_ID); dsSet.setSizeUndefined(); + dsSet.addValueChangeListener(this::listenerDistributionSetChanged); return dsSet; } + private void listenerDistributionSetChanged(final ValueChangeEvent event) { + window.checkMandatoryComboBox(event, distributionSet); + } + private void populateDistributionSet() { final Container container = createDsComboContainer(); distributionSet.setContainerDataSource(container); @@ -620,13 +658,12 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { final TextField rolloutNameField = getTextfield("textfield.name"); rolloutNameField.setId(SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID); rolloutNameField.setSizeUndefined(); + rolloutNameField.addTextChangeListener(this::listenerRolloutNameTextFieldChanged); return rolloutNameField; } - private Label createMandatoryLabel() { - final Label madatoryLbl = new Label(i18n.get("label.mandatory.field")); - madatoryLbl.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); - return madatoryLbl; + private void listenerRolloutNameTextFieldChanged(final TextChangeEvent event) { + window.checkMandatoryTextField(event, rolloutName); } private String getRolloutName() { From 8ae8696dfa4b2dc464c34c97d3760a1078c2e20d Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 9 Jun 2016 13:40:24 +0200 Subject: [PATCH 229/371] remove maximize button Signed-off-by: Melanie Retter --- .../java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 247ad0c8f..29519f162 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -100,7 +100,7 @@ public class CommonDialogWindow extends Window { setCaption(caption); setContent(mainLayout); - setResizable(true); + setResizable(false); center(); setModal(true); addStyleName("fontsize"); From c7ab3fe06d33a34441d33ee5e82e9568bc7c86fa Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 9 Jun 2016 16:49:03 +0200 Subject: [PATCH 230/371] ColorPicker closes when second click on previewButton Signed-off-by: Melanie Retter --- .../ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java | 2 ++ .../distributions/disttype/CreateUpdateDistSetTypeLayout.java | 2 ++ .../hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java | 2 ++ 3 files changed, 6 insertions(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 85844b917..d6ecd70dd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -299,6 +299,8 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); mainLayout.addComponent(colorPickerLayout, 1, 0); mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); + } else { + mainLayout.removeComponent(colorPickerLayout); } tagPreviewBtnClicked = !tagPreviewBtnClicked; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index a4a9eee35..cf4c09def 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -638,6 +638,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); mainLayout.addComponent(colorPickerLayout, 1, 0); mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); + } else { + mainLayout.removeComponent(colorPickerLayout); } tagPreviewBtnClicked = !tagPreviewBtnClicked; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index d564accd3..7a083d52f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -237,6 +237,8 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent mainLayout.getComponent(1, 0); mainLayout.addComponent(colorPickerLayout, 1, 0); mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); + } else { + mainLayout.removeComponent(colorPickerLayout); } tagPreviewBtnClicked = !tagPreviewBtnClicked; } From 8e17400d93028b9edb06391f69c5385ded10c0b4 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 9 Jun 2016 16:54:38 +0200 Subject: [PATCH 231/371] ControllerID is focused when opening the configure target dialog Signed-off-by: Melanie Retter --- .../ui/management/targettable/TargetAddUpdateWindowLayout.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 5a26df572..3d1caa6e7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -133,7 +133,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { if (Boolean.TRUE.equals(editTarget)) { madatoryLabel.setVisible(Boolean.FALSE); } - nameTextField.focus(); + controllerIDTextField.focus(); } private void addListeners() { From ed8827726cf7773ba4a366e4f6e975824133750c Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 9 Jun 2016 17:31:34 +0200 Subject: [PATCH 232/371] Refactor auditore aware Signed-off-by: SirWayne --- .../security/SpringSecurityAuditorAware.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java index 2d225c1dc..783d5344c 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java @@ -14,12 +14,8 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; /** - * Auditor class that allows {@link BaseEntity}s to insert currenlt logged in - * user for repository changes. - * - * - * - * + * Auditor class that allows BaseEntitys to insert current logged in user for + * repository changes. * */ public class SpringSecurityAuditorAware implements AuditorAware { @@ -29,16 +25,21 @@ public class SpringSecurityAuditorAware implements AuditorAware { final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication == null || !authentication.isAuthenticated()) { + if (isAuthentifactionInvalid(authentication)) { return null; } - if (authentication.getPrincipal() != null) { - if (authentication.getPrincipal() instanceof UserDetails) { - return ((UserDetails) authentication.getPrincipal()).getUsername(); - } - return authentication.getPrincipal().toString(); + return getCurrentAuditor(authentication); + } + + private String getCurrentAuditor(final Authentication authentication) { + if (authentication.getPrincipal() instanceof UserDetails) { + return ((UserDetails) authentication.getPrincipal()).getUsername(); } - return null; + return authentication.getPrincipal().toString(); + } + + private static boolean isAuthentifactionInvalid(final Authentication authentication) { + return authentication == null || !authentication.isAuthenticated() || authentication.getPrincipal() == null; } } From cc7cb20b3eac6d025cb7ac3ef007678680cd17f8 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 9 Jun 2016 17:50:45 +0200 Subject: [PATCH 233/371] Upgrade hateoas that removes transitive dependency that failed IP check. Signed-off-by: Kai Zimmermann --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 33ad1f81e..af5151124 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,7 @@ 2.5.5 5.2.4.Final 1.2.0.RELEASE + 0.18.0.RELEASE Fowler-SR1 3.2.2 From d5e591a4a6f38d73e3e1efd23714b95789227837 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 10 Jun 2016 08:37:56 +0200 Subject: [PATCH 234/371] Configurable basic scenario. Signed-off-by: Kai Zimmermann --- .../builder/DistributionSetBuilder.java | 32 +++-- .../builder/DistributionSetTypeBuilder.java | 10 +- .../builder/SoftwareModuleBuilder.java | 10 +- .../builder/SoftwareModuleTypeBuilder.java | 10 +- .../resource/builder/TargetBuilder.java | 53 +++++-- .../hawkbit/mgmt/client/Application.java | 10 +- .../client/ClientConfigurationProperties.java | 76 ++++++++++ .../scenarios/ConfigurableScenario.java | 92 ++++++++++++ .../CreateStartedRolloutExample.java | 2 +- .../GettingStartedDefaultScenario.java | 135 ------------------ .../src/main/resources/application.properties | 11 +- 11 files changed, 264 insertions(+), 177 deletions(-) create mode 100644 examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java delete mode 100644 examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java index 1e58b8415..a51d96d88 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetBuilder.java @@ -84,32 +84,48 @@ public class DistributionSetBuilder { * @return a single entry list of {@link MgmtDistributionSetRequestBodyPost} */ public List build() { - return Lists.newArrayList(doBuild(name)); + return Lists.newArrayList(doBuild("")); } /** * Builds a list of multiple {@link MgmtDistributionSetRequestBodyPost} to * create multiple distribution sets at once. An increasing number will be - * added to the name of the distribution set. The version and type will - * remain the same. + * used for version of the distribution set. The name and type will remain + * the same. * * @param count * the amount of distribution sets body which should be created * @return a list of {@link MgmtDistributionSetRequestBodyPost} */ public List buildAsList(final int count) { + return buildAsList(0, count); + } + + /** + * Builds a list of multiple {@link MgmtDistributionSetRequestBodyPost} to + * create multiple distribution sets at once. An increasing number will be + * used for version of the distribution set starting from given offset. The + * name and type will remain the same. + * + * @param count + * the amount of distribution sets body which should be created + * @param offset + * for for index start + * @return a list of {@link MgmtDistributionSetRequestBodyPost} + */ + public List buildAsList(final int offset, final int count) { final ArrayList bodyList = Lists.newArrayList(); - for (int index = 0; index < count; index++) { - bodyList.add(doBuild(name + index)); + for (int index = offset; index < count + offset; index++) { + bodyList.add(doBuild(String.valueOf(index))); } return bodyList; } - private MgmtDistributionSetRequestBodyPost doBuild(final String prefixName) { + private MgmtDistributionSetRequestBodyPost doBuild(final String suffix) { final MgmtDistributionSetRequestBodyPost body = new MgmtDistributionSetRequestBodyPost(); - body.setName(prefixName); - body.setVersion(version); + body.setName(name); + body.setVersion(version + suffix); body.setType(type); body.setDescription(description); body.setModules(modules); diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java index 1ce2ff270..028060f37 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/DistributionSetTypeBuilder.java @@ -101,7 +101,7 @@ public class DistributionSetTypeBuilder { * {@link MgmtDistributionSetTypeRequestBodyPost} */ public List build() { - return Lists.newArrayList(doBuild(name, key)); + return Lists.newArrayList(doBuild("")); } /** @@ -118,16 +118,16 @@ public class DistributionSetTypeBuilder { public List buildAsList(final int count) { final ArrayList bodyList = Lists.newArrayList(); for (int index = 0; index < count; index++) { - bodyList.add(doBuild(name + index, key + index)); + bodyList.add(doBuild(String.valueOf(index))); } return bodyList; } - private MgmtDistributionSetTypeRequestBodyPost doBuild(final String prefixName, final String prefixKey) { + private MgmtDistributionSetTypeRequestBodyPost doBuild(final String suffix) { final MgmtDistributionSetTypeRequestBodyPost body = new MgmtDistributionSetTypeRequestBodyPost(); - body.setKey(prefixKey); - body.setName(prefixName); + body.setKey(key + suffix); + body.setName(name + suffix); body.setDescription(description); body.setMandatorymodules(mandatorymodules); body.setOptionalmodules(optionalmodules); diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java index b2e544f88..1d633e440 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java @@ -96,7 +96,7 @@ public class SoftwareModuleBuilder { /** * Builds a list of multiple {@link MgmtSoftwareModuleRequestBodyPost} to * create multiple software module at once. An increasing number will be - * added to the name of the software module. The version and type will + * added to the version of the software module. The name and type will * remain the same. * * @param count @@ -106,16 +106,16 @@ public class SoftwareModuleBuilder { public List buildAsList(final int count) { final ArrayList bodyList = Lists.newArrayList(); for (int index = 0; index < count; index++) { - bodyList.add(doBuild(name + index)); + bodyList.add(doBuild(String.valueOf(index))); } return bodyList; } - private MgmtSoftwareModuleRequestBodyPost doBuild(final String prefixName) { + private MgmtSoftwareModuleRequestBodyPost doBuild(final String suffix) { final MgmtSoftwareModuleRequestBodyPost body = new MgmtSoftwareModuleRequestBodyPost(); - body.setName(prefixName); - body.setVersion(version); + body.setName(name); + body.setVersion(version + suffix); body.setType(type); body.setVendor(vendor); body.setDescription(description); diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java index 7981e61cf..7807d0f11 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleTypeBuilder.java @@ -69,7 +69,7 @@ public class SoftwareModuleTypeBuilder { * {@link MgmtSoftwareModuleTypeRequestBodyPost} */ public List build() { - return Lists.newArrayList(doBuild(key, name)); + return Lists.newArrayList(doBuild("")); } /** @@ -85,15 +85,15 @@ public class SoftwareModuleTypeBuilder { public List buildAsList(final int count) { final ArrayList bodyList = Lists.newArrayList(); for (int index = 0; index < count; index++) { - bodyList.add(doBuild(key + index, name + index)); + bodyList.add(doBuild(String.valueOf(index))); } return bodyList; } - private MgmtSoftwareModuleTypeRequestBodyPost doBuild(final String prefixKey, final String prefixName) { + private MgmtSoftwareModuleTypeRequestBodyPost doBuild(final String suffix) { final MgmtSoftwareModuleTypeRequestBodyPost body = new MgmtSoftwareModuleTypeRequestBodyPost(); - body.setKey(prefixKey); - body.setName(prefixName); + body.setKey(key + suffix); + body.setName(name + suffix); body.setDescription(description); body.setMaxAssignments(maxAssignments); return body; diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java index 7bcc0af09..de81f5354 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.mgmt.client.resource.builder; -import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleTypeRequestBodyPost; @@ -65,32 +64,62 @@ public class TargetBuilder { * * @return a single entry list of {@link MgmtTargetRequestBody} */ - public List build() { - return Lists.newArrayList(doBuild(controllerId)); + public List buildAsList() { + return Lists.newArrayList(doBuild("")); + } + + /** + * Builds a single {@link MgmtTargetRequestBody}. + * + * @return build {@link MgmtTargetRequestBody} + */ + public MgmtTargetRequestBody build() { + return doBuild(""); } /** * Builds a list of multiple {@link MgmtTargetRequestBody} to create * multiple targets at once. An increasing number will be added to the - * controllerId of the target. The name and description will remain. + * controllerId and name of the target. The description will remain. * * @param count - * the amount of software module type bodies which should be - * created + * the amount of target bodies which should be created + * @param offset + * for * @return a list of {@link MgmtSoftwareModuleTypeRequestBodyPost} */ public List buildAsList(final int count) { - final ArrayList bodyList = Lists.newArrayList(); - for (int index = 0; index < count; index++) { - bodyList.add(doBuild(controllerId + index)); + + return buildAsList(0, count); + } + + /** + * Builds a list of multiple {@link MgmtTargetRequestBody} to create + * multiple targets at once. An increasing number will be added to the + * controllerId and name of the target starting from the provided offset. + * The description will remain. + * + * @param count + * the amount of target bodies which should be created + * @param offset + * for for index start + * @return a list of {@link MgmtSoftwareModuleTypeRequestBodyPost} + */ + public List buildAsList(final int offset, final int count) { + final List bodyList = Lists.newArrayList(); + for (int index = offset; index < count + offset; index++) { + bodyList.add(doBuild(String.valueOf(index))); } return bodyList; } - private MgmtTargetRequestBody doBuild(final String prefixControllerId) { + private MgmtTargetRequestBody doBuild(final String suffix) { final MgmtTargetRequestBody body = new MgmtTargetRequestBody(); - body.setControllerId(prefixControllerId); - body.setName(name); + body.setControllerId(controllerId + suffix); + if (name == null) { + name = controllerId; + } + body.setName(name + suffix); body.setDescription(description); return body; } 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 7e1f191a9..c6d9ca08c 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,8 +9,8 @@ package org.eclipse.hawkbit.mgmt.client; import org.eclipse.hawkbit.feign.core.client.FeignClientConfiguration; +import org.eclipse.hawkbit.mgmt.client.scenarios.ConfigurableScenario; import org.eclipse.hawkbit.mgmt.client.scenarios.CreateStartedRolloutExample; -import org.eclipse.hawkbit.mgmt.client.scenarios.GettingStartedDefaultScenario; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -36,7 +36,7 @@ public class Application implements CommandLineRunner { private ClientConfigurationProperties configuration; @Autowired - private GettingStartedDefaultScenario gettingStarted; + private ConfigurableScenario configurableScenario; @Autowired private CreateStartedRolloutExample gettingStartedRolloutScenario; @@ -53,7 +53,7 @@ public class Application implements CommandLineRunner { } else { // run the getting started scenario which creates a setup of // distribution set and software modules to be used - gettingStarted.run(); + configurableScenario.run(); } } @@ -63,8 +63,8 @@ public class Application implements CommandLineRunner { } @Bean - public GettingStartedDefaultScenario gettingStartedDefaultScenario() { - return new GettingStartedDefaultScenario(); + public ConfigurableScenario configurableScenario() { + return new ConfigurableScenario(); } @Bean diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java index 68f35b550..255f813f9 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java @@ -8,6 +8,9 @@ */ package org.eclipse.hawkbit.mgmt.client; +import java.util.ArrayList; +import java.util.List; + import org.springframework.boot.context.properties.ConfigurationProperties; /** @@ -34,6 +37,79 @@ public class ClientConfigurationProperties { private String password = "admin"; // NOSONAR this password is only used for // examples + private final List scenarios = new ArrayList<>(); + + public static class Scenario { + private int targets = 100; + private int distributionSets = 10; + private int appModulesPerDistributionSet = 2; + private String dsName = "Package"; + private String smSwName = "Application"; + private String smFwName = "Firmware"; + private String targetName = "Device"; + + public String getTargetName() { + return targetName; + } + + public void setTargetName(final String targetName) { + this.targetName = targetName; + } + + public String getDsName() { + return dsName; + } + + public void setDsName(final String dsName) { + this.dsName = dsName; + } + + public String getSmSwName() { + return smSwName; + } + + public void setSmSwName(final String smSwName) { + this.smSwName = smSwName; + } + + public String getSmFwName() { + return smFwName; + } + + public void setSmFwName(final String smFwName) { + this.smFwName = smFwName; + } + + public int getTargets() { + return targets; + } + + public int getDistributionSets() { + return distributionSets; + } + + public int getAppModulesPerDistributionSet() { + return appModulesPerDistributionSet; + } + + public void setTargets(final int targets) { + this.targets = targets; + } + + public void setDistributionSets(final int distributionSets) { + this.distributionSets = distributionSets; + } + + public void setAppModulesPerDistributionSet(final int appModulesPerDistributionSet) { + this.appModulesPerDistributionSet = appModulesPerDistributionSet; + } + + } + + public List getScenarios() { + return scenarios; + } + public String getUrl() { return url; } 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 new file mode 100644 index 000000000..640c12a97 --- /dev/null +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/ConfigurableScenario.java @@ -0,0 +1,92 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.client.scenarios; + +import java.util.List; + +import org.eclipse.hawkbit.mgmt.client.ClientConfigurationProperties; +import org.eclipse.hawkbit.mgmt.client.ClientConfigurationProperties.Scenario; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetBuilder; +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.json.model.softwaremodule.MgmtSoftwareModule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * + * Default getting started scenario. + * + */ +public class ConfigurableScenario { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurableScenario.class); + + @Autowired + private MgmtDistributionSetClientResource distributionSetResource; + + @Autowired + private MgmtSoftwareModuleClientResource softwareModuleResource; + + @Autowired + private MgmtTargetClientResource targetResource; + + @Autowired + private ClientConfigurationProperties clientConfigurationProperties; + + /** + * Run the default getting started scenario. + */ + public void run() { + + LOGGER.info("Running Configurable Scenario..."); + + clientConfigurationProperties.getScenarios().parallelStream().forEach(this::createScenario); + } + + private void createScenario(final Scenario scenario) { + createTargets(scenario); + createDistributionSets(scenario); + } + + private void createDistributionSets(final Scenario scenario) { + distributionSetResource + .createDistributionSets(new DistributionSetBuilder().name(scenario.getDsName()).type("os_app") + .version("1.0.").buildAsList(scenario.getDistributionSets())) + .getBody().parallelStream().forEach(dsSet -> { + final List modules = softwareModuleResource + .createSoftwareModules(new SoftwareModuleBuilder().name(scenario.getSmFwName()) + .version(dsSet.getVersion()).type("os").build()) + .getBody(); + modules.addAll( + softwareModuleResource + .createSoftwareModules(new SoftwareModuleBuilder().name(scenario.getSmSwName()) + .version(dsSet.getVersion() + ".").type("application") + .buildAsList(scenario.getAppModulesPerDistributionSet())) + .getBody()); + + final SoftwareModuleAssigmentBuilder assign = new SoftwareModuleAssigmentBuilder(); + modules.forEach(module -> assign.id(module.getModuleId())); + + distributionSetResource.assignSoftwareModules(dsSet.getDsId(), assign.build()); + }); + } + + private void createTargets(final Scenario scenario) { + for (int i = 0; i < scenario.getTargets() / 100; i++) { + targetResource.createTargets(new TargetBuilder().controllerId(scenario.getTargetName()).buildAsList(i * 100, + (i + 1) * 100 > scenario.getTargets() ? scenario.getTargets() : (i + 1) * 100)); + } + } +} 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 90d61471e..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 @@ -36,7 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired; public class CreateStartedRolloutExample { /* known software module type name and key */ - private static final String SM_MODULE_TYPE = "firmware"; + private static final String SM_MODULE_TYPE = "gettingstarted-rollout-example"; /* known distribution set type name and key */ private static final String DS_MODULE_TYPE = SM_MODULE_TYPE; diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java deleted file mode 100644 index fdb824e8e..000000000 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/GettingStartedDefaultScenario.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.mgmt.client.scenarios; - -import java.util.List; - -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetTypeClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleTypeClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetBuilder; -import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetTypeBuilder; -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.SoftwareModuleTypeBuilder; -import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; -import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; -import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -/** - * - * Default getting started scenario. - * - */ -public class GettingStartedDefaultScenario { - - private static final Logger LOGGER = LoggerFactory.getLogger(GettingStartedDefaultScenario.class); - - /* known software module type name and key */ - private static final String SM_MODULE_TYPE = "gettingstarted"; - - /* known distribution set type name and key */ - private static final String DS_MODULE_TYPE = SM_MODULE_TYPE; - - /* known distribution name of this getting started example */ - private static final String SM_EXAMPLE_NAME = "gettingstarted-example"; - - /* known distribution name of this getting started example */ - private static final String DS_EXAMPLE_NAME = SM_EXAMPLE_NAME; - - @Autowired - private MgmtDistributionSetClientResource distributionSetResource; - - @Autowired - private MgmtDistributionSetTypeClientResource distributionSetTypeResource; - - @Autowired - private MgmtSoftwareModuleClientResource softwareModuleResource; - - @Autowired - private MgmtSoftwareModuleTypeClientResource softwareModuleTypeResource; - - /** - * Run the default getting started scenario. - */ - public void run() { - - LOGGER.info("Running Getting-Started-Scenario..."); - - // create one SoftwareModuleTypes - LOGGER.info("Creating software module type {}", SM_MODULE_TYPE); - final List createdSoftwareModuleTypes = softwareModuleTypeResource - .createSoftwareModuleTypes(new SoftwareModuleTypeBuilder().key(SM_MODULE_TYPE).name(SM_MODULE_TYPE) - .maxAssignments(1).build()) - .getBody(); - - // create one DistributionSetType - LOGGER.info("Creating distribution set type {}", DS_MODULE_TYPE); - distributionSetTypeResource.createDistributionSetTypes(new DistributionSetTypeBuilder().key(DS_MODULE_TYPE) - .name(DS_MODULE_TYPE).mandatorymodules(createdSoftwareModuleTypes.get(0).getModuleId()).build()); - - // create three DistributionSet - final String dsVersion1 = "1.0.0"; - final String dsVersion2 = "2.0.0"; - final String dsVersion3 = "2.1.0"; - - LOGGER.info("Creating distribution set {}:{}", DS_EXAMPLE_NAME, dsVersion1); - final List distributionSetsRest1 = distributionSetResource.createDistributionSets( - new DistributionSetBuilder().name(DS_EXAMPLE_NAME).version(dsVersion1).type(DS_MODULE_TYPE).build()) - .getBody(); - - LOGGER.info("Creating distribution set {}:{}", DS_EXAMPLE_NAME, dsVersion2); - final List distributionSetsRest2 = distributionSetResource.createDistributionSets( - new DistributionSetBuilder().name(DS_EXAMPLE_NAME).version(dsVersion2).type(DS_MODULE_TYPE).build()) - .getBody(); - - LOGGER.info("Creating distribution set {}:{}", DS_EXAMPLE_NAME, dsVersion3); - final List distributionSetsRest3 = distributionSetResource.createDistributionSets( - new DistributionSetBuilder().name(DS_EXAMPLE_NAME).version(dsVersion3).type(DS_MODULE_TYPE).build()) - .getBody(); - - // create three SoftwareModules - final String swVersion1 = "1"; - final String swVersion2 = "2"; - final String swVersion3 = "3"; - - LOGGER.info("Creating distribution set {}:{}", SM_EXAMPLE_NAME, swVersion1); - final List softwareModulesRest1 = softwareModuleResource.createSoftwareModules( - new SoftwareModuleBuilder().name(SM_EXAMPLE_NAME).version(swVersion1).type(SM_MODULE_TYPE).build()) - .getBody(); - LOGGER.info("Creating distribution set {}:{}", SM_EXAMPLE_NAME, swVersion2); - final List softwareModulesRest2 = softwareModuleResource.createSoftwareModules( - new SoftwareModuleBuilder().name(SM_EXAMPLE_NAME).version(swVersion2).type(SM_MODULE_TYPE).build()) - .getBody(); - LOGGER.info("Creating distribution set {}:{}", SM_EXAMPLE_NAME, swVersion3); - final List softwareModulesRest3 = softwareModuleResource.createSoftwareModules( - new SoftwareModuleBuilder().name(SM_EXAMPLE_NAME).version(swVersion3).type(SM_MODULE_TYPE).build()) - .getBody(); - - // Assign SoftwareModules to DistributionSet - LOGGER.info("Assign software module {}:{} to distribution set {}:{}", SM_EXAMPLE_NAME, swVersion1, - DS_EXAMPLE_NAME, dsVersion1); - distributionSetResource.assignSoftwareModules(distributionSetsRest1.get(0).getDsId(), - new SoftwareModuleAssigmentBuilder().id(softwareModulesRest1.get(0).getModuleId()).build()); - - LOGGER.info("Assign software module {}:{} to distribution set {}:{}", SM_EXAMPLE_NAME, swVersion2, - DS_EXAMPLE_NAME, dsVersion2); - distributionSetResource.assignSoftwareModules(distributionSetsRest2.get(0).getDsId(), - new SoftwareModuleAssigmentBuilder().id(softwareModulesRest2.get(0).getModuleId()).build()); - - LOGGER.info("Assign software module {}:{} to distribution set {}:{}", SM_EXAMPLE_NAME, swVersion3, - DS_EXAMPLE_NAME, dsVersion3); - distributionSetResource.assignSoftwareModules(distributionSetsRest3.get(0).getDsId(), - new SoftwareModuleAssigmentBuilder().id(softwareModulesRest3.get(0).getModuleId()).build()); - } -} diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties index d3a3eb969..d989dcf3d 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties +++ b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties @@ -11,4 +11,13 @@ hawkbit.url=localhost:8080 hawkbit.username=admin hawkbit.password=admin -spring.main.show-banner=false \ No newline at end of file +spring.main.show-banner=false + +#hawkbit.scenarios.[0].targets=0 +#hawkbit.scenarios.[0].ds-name=gettingstarted-example +#hawkbit.scenarios.[0].distribution-sets=3 +#hawkbit.scenarios.[0].sm-fw-name=gettingstarted-example +#hawkbit.scenarios.[0].sm-sw-name=gettingstarted-example + +hawkbit.scenarios.[0].targets=10000 +hawkbit.scenarios.[0].distribution-sets=100 \ No newline at end of file From 72940d854aeefff501f8fb2f0cab45fa5578d527 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 10 Jun 2016 09:40:05 +0200 Subject: [PATCH 235/371] Optimize layout Configure new Rollout Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 1 + .../hawkbit/ui/common/CommonDialogWindow.java | 2 +- .../rollout/AddUpdateRolloutWindowLayout.java | 56 ++++++++++++------- .../hawkbit/customstyles/popup-common.scss | 4 ++ 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 309c111ea..85b55d69d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -208,6 +208,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se addStyleName("lay-color"); final FormLayout formLayout = new FormLayout(); + formLayout.setCaption(null); formLayout.addComponent(typeComboBox); formLayout.addComponent(nameTextField); formLayout.addComponent(versionTextField); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 7b5df4a8f..754f61ed2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -197,7 +197,7 @@ public class CommonDialogWindow extends Window implements Serializable { setCaption(caption); setContent(mainLayout); - setResizable(true); + setResizable(false); center(); setModal(true); addStyleName("fontsize"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 1226ec5fb..2e419724b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.RolloutManagement; @@ -61,6 +62,7 @@ import com.vaadin.data.Validator; import com.vaadin.data.validator.IntegerRangeValidator; import com.vaadin.data.validator.RegexpValidator; import com.vaadin.event.FieldEvents.TextChangeEvent; +import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.ComboBox; @@ -224,21 +226,22 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { setSizeUndefined(); setRows(9); setColumns(3); + setStyleName("marginTop"); - addComponent(getLabel("textfield.name"), 0, 0); + addComponent(getMandatoryLabel("textfield.name"), 0, 0); addComponent(rolloutName, 1, 0); - addComponent(getLabel("prompt.distribution.set"), 0, 1); + addComponent(getMandatoryLabel("prompt.distribution.set"), 0, 1); addComponent(distributionSet, 1, 1); - addComponent(getLabel("prompt.target.filter"), 0, 2); + addComponent(getMandatoryLabel("prompt.target.filter"), 0, 2); addComponent(targetFilterQueryCombo, 1, 2); addComponent(totalTargetsLabel, 2, 2); - addComponent(getLabel("prompt.number.of.groups"), 0, 3); + addComponent(getMandatoryLabel("prompt.number.of.groups"), 0, 3); addComponent(noOfGroups, 1, 3); addComponent(groupSizeLabel, 2, 3); - addComponent(getLabel("prompt.tigger.threshold"), 0, 4); + addComponent(getMandatoryLabel("prompt.tigger.threshold"), 0, 4); addComponent(triggerThreshold, 1, 4); addComponent(getPercentHintLabel(), 2, 4); - addComponent(getLabel("prompt.error.threshold"), 0, 5); + addComponent(getMandatoryLabel("prompt.error.threshold"), 0, 5); addComponent(errorThreshold, 1, 5); addComponent(errorThresholdOptionGroup, 2, 5); addComponent(getLabel("textfield.description"), 0, 6); @@ -248,12 +251,19 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { rolloutName.focus(); } + private Label getMandatoryLabel(final String key) { + final Label mandatoryLabel = getLabel(i18n.get(key)); + mandatoryLabel.setContentMode(ContentMode.HTML); + mandatoryLabel.setValue(mandatoryLabel.getValue().concat(" *")); + return mandatoryLabel; + } + private Label getLabel(final String key) { return SPUIComponentProvider.getLabel(i18n.get(key), SPUILabelDefinitions.SP_LABEL_SIMPLE); } private TextField getTextfield(final String key) { - return SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get(key), true, + return SPUIComponentProvider.getTextField(null, "", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get(key), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); } @@ -340,7 +350,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private ComboBox createTargetFilterQueryCombo() { final ComboBox targetFilter = SPUIComponentProvider.getComboBox(null, "", "", null, ValoTheme.COMBOBOX_SMALL, - true, "", i18n.get("prompt.target.filter")); + false, "", i18n.get("prompt.target.filter")); targetFilter.setImmediate(true); targetFilter.setPageLength(7); targetFilter.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); @@ -625,8 +635,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private ComboBox createDistributionSetCombo() { - final ComboBox dsSet = SPUIComponentProvider.getComboBox(null, "", "", null, ValoTheme.COMBOBOX_SMALL, true, "", - i18n.get("prompt.distribution.set")); + final ComboBox dsSet = SPUIComponentProvider.getComboBox(null, "", "", null, ValoTheme.COMBOBOX_SMALL, false, + "", i18n.get("prompt.distribution.set")); dsSet.setImmediate(true); dsSet.setPageLength(7); dsSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); @@ -685,10 +695,12 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { uiNotification .displayValidationError(i18n.get("message.rollout.noofgroups.or.targetfilter.missing")); } else { - new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); - final int groupSize = getGroupSize(); - new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, groupSize), 0, groupSize) - .validate(Integer.valueOf(value.toString())); + if (StringUtils.isNotBlank(value.toString())) { + new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); + final int groupSize = getGroupSize(); + new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, groupSize), 0, + groupSize).validate(Integer.valueOf(value.toString())); + } } } // suppress the need of preserve original exception, will blow @@ -710,9 +722,11 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { @Override public void validate(final Object value) { try { - new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); - new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, 100), 0, 100) - .validate(Integer.valueOf(value.toString())); + if (StringUtils.isNotBlank(value.toString())) { + new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); + new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, 100), 0, 100) + .validate(Integer.valueOf(value.toString())); + } } // suppress the need of preserve original exception, will blow // up the @@ -729,9 +743,11 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { @Override public void validate(final Object value) { try { - new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); - new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, 500), 0, 500) - .validate(Integer.valueOf(value.toString())); + if (StringUtils.isNotBlank(value.toString())) { + new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); + new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, 500), 0, 500) + .validate(Integer.valueOf(value.toString())); + } } // suppress the need of preserve original exception, will blow // up the diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss index 457fc266d..602298766 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss @@ -53,4 +53,8 @@ font-size: 16px; } + .v-gridlayout .v-gridlayout-marginTop { + padding-top: 20px !important; + } + } From 496fb5ff350a31e705ba1c5bb89e2b0254a962cb Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Fri, 10 Jun 2016 10:45:28 +0200 Subject: [PATCH 236/371] Fixed line endings Signed-off-by: Dominic Schabel --- .../ui/artifacts/event/UploadFileStatus.java | 140 +++++++------- .../ui/artifacts/event/UploadStatusEvent.java | 84 ++++----- .../artifacts/upload/UploadStatusObject.java | 172 +++++++++--------- 3 files changed, 198 insertions(+), 198 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java index 81b096c3e..90ad5c0f0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadFileStatus.java @@ -1,70 +1,70 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.artifacts.event; - -import java.io.Serializable; - -import org.eclipse.hawkbit.repository.model.SoftwareModule; - -/** - * - * Holds file and upload status details.Meta data sent with upload events. - * - */ -public class UploadFileStatus implements Serializable { - - private static final long serialVersionUID = -3599629192216760811L; - - private String fileName; - - private long contentLength; - - private long bytesRead; - - private String failureReason; - - private SoftwareModule softwareModule; - - public UploadFileStatus(String fileName) { - this.fileName = fileName; - } - - public UploadFileStatus(String fileName, long bytesRead, long contentLength,SoftwareModule softwareModule) { - this.fileName = fileName; - this.contentLength = contentLength; - this.bytesRead = bytesRead; - this.softwareModule = softwareModule; - } - - public UploadFileStatus(String fileName, String failureReason,SoftwareModule selectedSw) { - this.failureReason = failureReason; - this.fileName = fileName; - this.softwareModule = selectedSw; - } - - public String getFileName() { - return fileName; - } - - public long getContentLength() { - return contentLength; - } - - public long getBytesRead() { - return bytesRead; - } - - public String getFailureReason() { - return failureReason; - } - - public SoftwareModule getSoftwareModule() { - return softwareModule; - } -} +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.artifacts.event; + +import java.io.Serializable; + +import org.eclipse.hawkbit.repository.model.SoftwareModule; + +/** + * + * Holds file and upload status details.Meta data sent with upload events. + * + */ +public class UploadFileStatus implements Serializable { + + private static final long serialVersionUID = -3599629192216760811L; + + private String fileName; + + private long contentLength; + + private long bytesRead; + + private String failureReason; + + private SoftwareModule softwareModule; + + public UploadFileStatus(String fileName) { + this.fileName = fileName; + } + + public UploadFileStatus(String fileName, long bytesRead, long contentLength,SoftwareModule softwareModule) { + this.fileName = fileName; + this.contentLength = contentLength; + this.bytesRead = bytesRead; + this.softwareModule = softwareModule; + } + + public UploadFileStatus(String fileName, String failureReason,SoftwareModule selectedSw) { + this.failureReason = failureReason; + this.fileName = fileName; + this.softwareModule = selectedSw; + } + + public String getFileName() { + return fileName; + } + + public long getContentLength() { + return contentLength; + } + + public long getBytesRead() { + return bytesRead; + } + + public String getFailureReason() { + return failureReason; + } + + public SoftwareModule getSoftwareModule() { + return softwareModule; + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java index 8a4da9f6d..3b4767c60 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/UploadStatusEvent.java @@ -1,42 +1,42 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.artifacts.event; -/** - * - * Holds the upload file status. - * - */ -public class UploadStatusEvent { - - public enum UploadStatusEventType { - UPLOAD_FAILED, UPLOAD_IN_PROGRESS, UPLOAD_STARTED, UPLOAD_FINISHED, UPLOAD_SUCCESSFUL, UPLOAD_STREAMING_FAILED, UPLOAD_STREAMING_FINISHED, ABORT_UPLOAD - } - - private UploadStatusEventType uploadProgressEventType; - - private UploadFileStatus uploadStatus; - - public UploadStatusEvent(UploadStatusEventType eventType, UploadFileStatus entity) { - this.uploadProgressEventType = eventType; - this.uploadStatus = entity; - } - - public UploadFileStatus getUploadStatus() { - return uploadStatus; - } - - public void setUploadStatus(UploadFileStatus uploadStatus) { - this.uploadStatus = uploadStatus; - } - - public UploadStatusEventType getUploadProgressEventType() { - return uploadProgressEventType; - } - -} +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.artifacts.event; +/** + * + * Holds the upload file status. + * + */ +public class UploadStatusEvent { + + public enum UploadStatusEventType { + UPLOAD_FAILED, UPLOAD_IN_PROGRESS, UPLOAD_STARTED, UPLOAD_FINISHED, UPLOAD_SUCCESSFUL, UPLOAD_STREAMING_FAILED, UPLOAD_STREAMING_FINISHED, ABORT_UPLOAD + } + + private UploadStatusEventType uploadProgressEventType; + + private UploadFileStatus uploadStatus; + + public UploadStatusEvent(UploadStatusEventType eventType, UploadFileStatus entity) { + this.uploadProgressEventType = eventType; + this.uploadStatus = entity; + } + + public UploadFileStatus getUploadStatus() { + return uploadStatus; + } + + public void setUploadStatus(UploadFileStatus uploadStatus) { + this.uploadStatus = uploadStatus; + } + + public UploadStatusEventType getUploadProgressEventType() { + return uploadProgressEventType; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java index 4ea82d7dd..584d89ace 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/upload/UploadStatusObject.java @@ -1,86 +1,86 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.artifacts.upload; - -import org.eclipse.hawkbit.repository.model.SoftwareModule; - -/** - * - * Holds uploaded file status.Used to display the details in upload status - * popup. - * - */ -public class UploadStatusObject { - private String status; - private Double progress; - private String filename; - private String reason; - private SoftwareModule selectedSoftwareModule; - - public UploadStatusObject(final String status, final Double progress, final String fileName, final String reason, - final SoftwareModule selectedSoftwareModule) { - this(fileName,selectedSoftwareModule); - this.status = status; - this.progress = progress; - this.reason = reason; - } - - public UploadStatusObject(String fileName, SoftwareModule selectedSoftwareModule) { - this.filename = fileName; - this.selectedSoftwareModule = selectedSoftwareModule; - } - - public SoftwareModule getSelectedSoftwareModule() { - return selectedSoftwareModule; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public Double getProgress() { - return progress; - } - - public void setProgress(Double progress) { - this.progress = progress; - } - - public String getFilename() { - return filename; - } - - public void setFilename(String filename) { - this.filename = filename; - } - - public String getReason() { - return reason; - } - - public void setReason(String reason) { - this.reason = reason; - } - - @Override - public boolean equals(Object obj) { - if (this == null || obj == null) { - return false; - } - if (obj instanceof UploadStatusObject && this.getFilename() == ((UploadStatusObject) obj).getFilename()) { - return true; - } - return false; - } - -} +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.artifacts.upload; + +import org.eclipse.hawkbit.repository.model.SoftwareModule; + +/** + * + * Holds uploaded file status.Used to display the details in upload status + * popup. + * + */ +public class UploadStatusObject { + private String status; + private Double progress; + private String filename; + private String reason; + private SoftwareModule selectedSoftwareModule; + + public UploadStatusObject(final String status, final Double progress, final String fileName, final String reason, + final SoftwareModule selectedSoftwareModule) { + this(fileName,selectedSoftwareModule); + this.status = status; + this.progress = progress; + this.reason = reason; + } + + public UploadStatusObject(String fileName, SoftwareModule selectedSoftwareModule) { + this.filename = fileName; + this.selectedSoftwareModule = selectedSoftwareModule; + } + + public SoftwareModule getSelectedSoftwareModule() { + return selectedSoftwareModule; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Double getProgress() { + return progress; + } + + public void setProgress(Double progress) { + this.progress = progress; + } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + + @Override + public boolean equals(Object obj) { + if (this == null || obj == null) { + return false; + } + if (obj instanceof UploadStatusObject && this.getFilename() == ((UploadStatusObject) obj).getFilename()) { + return true; + } + return false; + } + +} From 93ce7e9bf4bfdcf4935bb65a557bc1211c4095ba Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Fri, 10 Jun 2016 10:59:45 +0200 Subject: [PATCH 237/371] Constant for security log prefix introduced. Signed-off-by: Dominic Schabel --- .../eclipse/hawkbit/security/DosFilter.java | 36 +++++++------------ .../hawkbit/security/SecurityConstants.java | 24 +++++++++++++ 2 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityConstants.java diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java index f0d8f7d48..3f5d8437e 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/DosFilter.java @@ -8,8 +8,10 @@ */ package org.eclipse.hawkbit.security; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.eclipse.hawkbit.security.SecurityConstants.SECURITY_LOG_PREFIX; + import java.io.IOException; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Pattern; @@ -31,25 +33,21 @@ import com.google.common.cache.CacheBuilder; /** * Filter for protection against denial of service attacks. It reduces the * maximum number of request per seconds which can be separately configured for - * read (GET) and write (PUT/POST/DELETE) requests. requests - * - * - * - * + * read (GET) and write (PUT/POST/DELETE) requests. */ public class DosFilter extends OncePerRequestFilter { private static final Logger LOG = LoggerFactory.getLogger(DosFilter.class); - private static final Logger LOG_DOS = LoggerFactory.getLogger("server-security.dos"); - private static final Logger LOG_BLACKLIST = LoggerFactory.getLogger("server-security.blacklist"); + private static final Logger LOG_DOS = LoggerFactory.getLogger(SECURITY_LOG_PREFIX + ".dos"); + private static final Logger LOG_BLACKLIST = LoggerFactory.getLogger(SECURITY_LOG_PREFIX + ".blacklist"); private final Pattern ipAdressBlacklist; - private final Cache readCountCache = CacheBuilder.newBuilder() - .expireAfterAccess(1, TimeUnit.SECONDS).build(); + private final Cache readCountCache = CacheBuilder.newBuilder().expireAfterAccess(1, SECONDS) + .build(); - private final Cache writeCountCache = CacheBuilder.newBuilder() - .expireAfterAccess(1, TimeUnit.SECONDS).build(); + private final Cache writeCountCache = CacheBuilder.newBuilder().expireAfterAccess(1, SECONDS) + .build(); private final Integer maxRead; private final Integer maxWrite; @@ -78,7 +76,7 @@ public class DosFilter extends OncePerRequestFilter { */ public DosFilter(final Integer maxRead, final Integer maxWrite, final String ipDosWhiteListPattern, final String ipBlackListPattern, final String forwardHeader) { - super(); + this.maxRead = maxRead; this.maxWrite = maxWrite; this.forwardHeader = forwardHeader; @@ -96,14 +94,6 @@ public class DosFilter extends OncePerRequestFilter { } } - /* - * (non-Javadoc) - * - * @see - * org.springframework.web.filter.OncePerRequestFilter#doFilterInternal( - * javax.servlet.http. HttpServletRequest, - * javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain) - */ @Override protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain filterChain) throws ServletException, IOException { @@ -152,11 +142,9 @@ public class DosFilter extends OncePerRequestFilter { } private static boolean handleMissingIpAddress(final HttpServletResponse response) { - boolean processChain; LOG.error("Failed to get peer IP adress"); response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); - processChain = false; - return processChain; + return false; } private boolean handleWriteRequest(final HttpServletResponse response, final String ip) { diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityConstants.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityConstants.java new file mode 100644 index 000000000..dc30411d0 --- /dev/null +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityConstants.java @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2016 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.security; + +/** + * Constants related to security. + */ +public final class SecurityConstants { + + /** + * Logger prefix used for security logging. + */ + public static final String SECURITY_LOG_PREFIX = "server-security"; + + private SecurityConstants() { + + } +} From 2b2ba523f5ef4a3dee396e5f55381d095aef8adb Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 10 Jun 2016 11:00:58 +0200 Subject: [PATCH 238/371] Fixed bug where DS could not be delete as it was assigned to a rollout. Signed-off-by: Kai Zimmermann --- .../jpa/DistributionSetRepository.java | 21 ++++++-- .../jpa/JpaDistributionSetManagement.java | 4 +- .../jpa/DistributionSetManagementTest.java | 48 ++++++++++++++----- 3 files changed, 57 insertions(+), 16 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java index 1ab6cbe08..83791a66d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java @@ -16,7 +16,9 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; +import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Tag; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -82,15 +84,26 @@ public interface DistributionSetRepository List findByModules(JpaSoftwareModule module); /** - * Finds {@link DistributionSet}s based on given ID if they are not assigned - * yet to an {@link UpdateAction}, i.e. unused. + * Finds {@link DistributionSet}s based on given ID that are assigned yet to + * an {@link Action}, i.e. in use. * * @param ids * to search for - * @return + * @return list of {@link DistributionSet#getId()} */ @Query("select ac.distributionSet.id from JpaAction ac where ac.distributionSet.id in :ids") - List findAssignedDistributionSetsById(@Param("ids") Long... ids); + List findAssignedToTargetDistributionSetsById(@Param("ids") Long... ids); + + /** + * Finds {@link DistributionSet}s based on given ID that are assigned yet to + * an {@link Rollout}, i.e. in use. + * + * @param ids + * to search for + * @return list of {@link DistributionSet#getId()} + */ + @Query("select ra.distributionSet.id from JpaRollout ra where ra.distributionSet.id in :ids") + List findAssignedToRolloutDistributionSetsById(@Param("ids") Long... ids); /** * Saves all given {@link DistributionSet}s. diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java index e5a38cf51..f3ecbcf1b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaDistributionSetManagement.java @@ -173,7 +173,9 @@ public class JpaDistributionSetManagement implements DistributionSetManagement { public void deleteDistributionSet(final Long... distributionSetIDs) { final List toHardDelete = new ArrayList<>(); - final List assigned = distributionSetRepository.findAssignedDistributionSetsById(distributionSetIDs); + final List assigned = distributionSetRepository + .findAssignedToTargetDistributionSetsById(distributionSetIDs); + assigned.addAll(distributionSetRepository.findAssignedToRolloutDistributionSetsById(distributionSetIDs)); // soft delete assigned if (!assigned.isEmpty()) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index 67d5202a5..104f2260d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -27,6 +27,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; +import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; @@ -34,12 +35,18 @@ import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder; -import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorAction; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupErrorCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCondition; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditionBuilder; +import org.eclipse.hawkbit.repository.model.RolloutGroupConditions; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.fest.assertions.core.Condition; import org.junit.Test; import org.springframework.data.domain.Page; @@ -777,36 +784,55 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { } @Test - @Description("Deltes a DS that is no in use. Expected behaviour is a soft delete on the database, i.e. only marked as " - + "deleted, kept eas refernce and unavailable for future use..") + @Description("Deletes a DS that is in use by either target assignment or rollout. Expected behaviour is a soft delete on the database, i.e. only marked as " + + "deleted, kept as refernce but unavailable for future use..") public void deleteAssignedDistributionSet() { DistributionSet ds1 = testdataFactory.createDistributionSet("ds-1"); DistributionSet ds2 = testdataFactory.createDistributionSet("ds-2"); - DistributionSet dsAssigned = testdataFactory.createDistributionSet("ds-3"); + DistributionSet dsToTargetAssigned = testdataFactory.createDistributionSet("ds-3"); + final DistributionSet dsToRolloutAssigned = testdataFactory.createDistributionSet("ds-4"); ds1 = distributionSetManagement.findDistributionSetByNameAndVersion(ds1.getName(), ds1.getVersion()); ds2 = distributionSetManagement.findDistributionSetByNameAndVersion(ds2.getName(), ds2.getVersion()); // create assigned DS - dsAssigned = distributionSetManagement.findDistributionSetByNameAndVersion(dsAssigned.getName(), - dsAssigned.getVersion()); + dsToTargetAssigned = distributionSetManagement.findDistributionSetByNameAndVersion(dsToTargetAssigned.getName(), + dsToTargetAssigned.getVersion()); final Target target = new JpaTarget("4712"); final Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList<>(); toAssign.add(savedTarget); - deploymentManagement.assignDistributionSet(dsAssigned, toAssign); + deploymentManagement.assignDistributionSet(dsToTargetAssigned, toAssign); - // delete a ds - assertThat(distributionSetRepository.findAll()).hasSize(3); - distributionSetManagement.deleteDistributionSet(dsAssigned.getId()); + // create assigned rollout + createRolloutByVariables("test", "test", 5, "name==*", dsToRolloutAssigned, "50", "5"); + + // delete assigned ds + assertThat(distributionSetRepository.findAll()).hasSize(4); + distributionSetManagement.deleteDistributionSet(dsToTargetAssigned.getId(), dsToRolloutAssigned.getId()); // not assigned so not marked as deleted - assertThat(distributionSetRepository.findAll()).hasSize(3); + assertThat(distributionSetRepository.findAll()).hasSize(4); assertThat(distributionSetManagement .findDistributionSetsByDeletedAndOrCompleted(pageReq, Boolean.FALSE, Boolean.TRUE).getTotalElements()) .isEqualTo(2); } + private Rollout createRolloutByVariables(final String rolloutName, final String rolloutDescription, + final int groupSize, final String filterQuery, final DistributionSet distributionSet, + final String successCondition, final String errorCondition) { + final RolloutGroupConditions conditions = new RolloutGroupConditionBuilder() + .successCondition(RolloutGroupSuccessCondition.THRESHOLD, successCondition) + .errorCondition(RolloutGroupErrorCondition.THRESHOLD, errorCondition) + .errorAction(RolloutGroupErrorAction.PAUSE, null).build(); + final Rollout rolloutToCreate = new JpaRollout(); + rolloutToCreate.setName(rolloutName); + rolloutToCreate.setDescription(rolloutDescription); + rolloutToCreate.setTargetFilterQuery(filterQuery); + rolloutToCreate.setDistributionSet(distributionSet); + return rolloutManagement.createRollout(rolloutToCreate, groupSize, conditions); + } + private Target sendUpdateActionStatusToTarget(final Status status, final Action updActA, final Target t, final String... msgs) { updActA.setStatus(status); From 06ccd125f97a5bc41f3f7e114a691615c0a05a10 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Fri, 10 Jun 2016 13:11:12 +0200 Subject: [PATCH 239/371] Year of licence header fixed. Signed-off-by: Dominic Schabel --- .../java/org/eclipse/hawkbit/security/SecurityConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityConstants.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityConstants.java index dc30411d0..7285404a8 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityConstants.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityConstants.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2016 Bosch Software Innovations GmbH and others. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 From 64f3acfa2b2f666cc890231bc671b3cbac7b04ad Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 10 Jun 2016 15:45:20 +0200 Subject: [PATCH 240/371] Improved documentation of time value. Signed-off-by: Kai Zimmermann --- .../src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java index 5b06c3318..f9b4cceb6 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java @@ -43,7 +43,7 @@ public class AmqpProperties { /** * Requested heartbeat interval from broker in {@link TimeUnit#SECONDS}. */ - private int requestedHeartBeat = 60; + private int requestedHeartBeat = (int) TimeUnit.SECONDS.toSeconds(60); /** * Is missingQueuesFatal enabled From 3e5f1f75a07e2b7d148cff211a3990be3e896601 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 10 Jun 2016 15:47:40 +0200 Subject: [PATCH 241/371] Improve code select all table entries Signed-off-by: Melanie Retter --- .../artifacts/event/SoftwareModuleEvent.java | 6 +- .../event/SoftwareModuleTypeEvent.java | 8 +-- .../smtable/SoftwareModuleTableLayout.java | 3 +- .../filterlayout/AbstractFilterButtons.java | 24 ++++---- .../table/AbstractNamedVersionTable.java | 7 --- .../dstable/DistributionSetTableLayout.java | 7 +-- .../event/DistributionSetTableEvent.java | 60 ------------------- .../event/DistributionSetTypeEvent.java | 8 +-- 8 files changed, 19 insertions(+), 104 deletions(-) delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java index 1764f8998..c01257154 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java @@ -23,15 +23,11 @@ public class SoftwareModuleEvent extends BaseEntityEvent { * */ public enum SoftwareModuleEventType { - ARTIFACTS_CHANGED, ASSIGN_SOFTWARE_MODULE + ARTIFACTS_CHANGED, ASSIGN_SOFTWARE_MODULE, SELECT_ALL } private SoftwareModuleEventType softwareModuleEventType; - public SoftwareModuleEvent() { - super(null, null); - } - /** * Creates software module event. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java index f1b8deb72..7262aee72 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleTypeEvent.java @@ -12,20 +12,14 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType; /** * Event to represent software module type add, update or delete. - * - * - * */ public class SoftwareModuleTypeEvent { /** * Software module type events in the Upload UI. - * - * - * */ public enum SoftwareModuleTypeEnum { - ADD_SOFTWARE_MODULE_TYPE, DELETE_SOFTWARE_MODULE_TYPE, UPDATE_SOFTWARE_MODULE_TYPE, SELECT_ALL + ADD_SOFTWARE_MODULE_TYPE, DELETE_SOFTWARE_MODULE_TYPE, UPDATE_SOFTWARE_MODULE_TYPE } private SoftwareModuleType softwareModuleType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java index 096550d7c..ec6b41e23 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; +import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.common.table.AbstractTableLayout; import org.springframework.beans.factory.annotation.Autowired; @@ -72,7 +73,7 @@ public class SoftwareModuleTableLayout extends AbstractTableLayout { public void handleAction(final Action action, final Object sender, final Object target) { if (ACTION_CTRL_A.equals(action)) { smTable.selectAll(); - getEventBus().publish(this, new SoftwareModuleEvent()); + getEventBus().publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.SELECT_ALL, null)); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java index b637c88f6..2b0eee279 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java @@ -16,7 +16,6 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUITagButtonStyle; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -49,9 +48,6 @@ public abstract class AbstractFilterButtons extends Table { private AbstractFilterButtonClickBehaviour filterButtonClickBehaviour; - @Autowired - protected I18N i18n; - /** * Initialize layout of filter buttons. * @@ -198,16 +194,16 @@ public abstract class AbstractFilterButtons extends Table { setContainerDataSource(createButtonsLazyQueryContainer()); } - /** - * Select all rows in the table. - */ - public void selectAll() { - setValue(createButtonsLazyQueryContainer().getItemIds()); - } - - public void unSelectAll() { - setValue(null); - } + // /** + // * Select all rows in the table. + // */ + // public void selectAll() { + // setValue(createButtonsLazyQueryContainer().getItemIds()); + // } + // + // public void unSelectAll() { + // setValue(null); + // } /** * Id of the buttons table to be used in test cases. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java index f99e01fe7..3122841ae 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java @@ -62,11 +62,4 @@ public abstract class AbstractNamedVersionTable { - - /** - * DistributionSet table components events. - * - */ - public enum DistributionSetComponentEvent { - SELECT_ALL - } - - private DistributionSetComponentEvent distributionSetComponentEvent; - - /** - * Constructor. - * - * @param eventType - * the event type. - * @param entity - * the entity - */ - public DistributionSetTableEvent(final BaseEntityEventType eventType, final DistributionSet entity) { - super(eventType, entity); - } - - /** - * The component event. - * - * @param DistributionSetTableEvent - * the distributionSet component event. - */ - public DistributionSetTableEvent(final DistributionSetComponentEvent distributionSetComponentEvent) { - super(null, null); - this.distributionSetComponentEvent = distributionSetComponentEvent; - } - - public DistributionSetComponentEvent getDistributionSetComponentEvent() { - return distributionSetComponentEvent; - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java index 798d2a43d..3df0a7dd3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java @@ -11,19 +11,15 @@ package org.eclipse.hawkbit.ui.distributions.event; import org.eclipse.hawkbit.repository.model.DistributionSetType; /** - * - * + * DistributionSetTypeEvent */ public class DistributionSetTypeEvent { /** * DistributionSet type events in the Distribution UI. - * - * - * */ public enum DistributionSetTypeEnum { - ADD_DIST_SET_TYPE, DELETE_DIST_SET_TYPE, UPDATE_DIST_SET_TYPE, ON_VALUE_CHANGE + ADD_DIST_SET_TYPE, DELETE_DIST_SET_TYPE, UPDATE_DIST_SET_TYPE, ON_VALUE_CHANGE, SELECT_ALL } private DistributionSetType distributionSetType; From c0b118d5f9906a89f626f6764963b221b34630d1 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 10 Jun 2016 16:18:54 +0200 Subject: [PATCH 242/371] Move filter chain cause of autowiring problems Signed-off-by: SirWayne --- .../InMemoryUserManagementConfiguration.java | 30 ------------------- .../SecurityManagedConfiguration.java | 28 +++++++++++++++++ 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java index db382dd6c..84846908e 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java @@ -13,23 +13,18 @@ import java.util.ArrayList; import org.eclipse.hawkbit.im.authentication.MultitenancyIndicator; import org.eclipse.hawkbit.im.authentication.PermissionUtils; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; -import org.eclipse.hawkbit.im.authentication.UserAuthenticationFilter; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter; import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; -import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; /** * Auto-configuration for the in-memory-user-management. @@ -39,9 +34,6 @@ import org.springframework.security.web.authentication.www.BasicAuthenticationFi @ConditionalOnMissingBean(UserDetailsService.class) public class InMemoryUserManagementConfiguration extends GlobalAuthenticationConfigurerAdapter { - @Autowired - private AuthenticationConfiguration configuration; - @Override public void configure(final AuthenticationManagerBuilder auth) throws Exception { final DaoAuthenticationProvider userDaoAuthenticationProvider = new TenantDaoAuthenticationProvider(); @@ -81,26 +73,4 @@ public class InMemoryUserManagementConfiguration extends GlobalAuthenticationCon return result; } } - - /** - * @return the {@link UserAuthenticationFilter} to include into the SP - * security configuration. - * @throws Exception - * lazy bean exception maybe if the authentication manager - * cannot be instantiated - */ - @Bean - @ConditionalOnMissingBean - public UserAuthenticationFilter userAuthenticationFilter() throws Exception { - return new UserAuthenticationFilterBasicAuth(configuration.getAuthenticationManager()); - } - - private static final class UserAuthenticationFilterBasicAuth extends BasicAuthenticationFilter - implements UserAuthenticationFilter { - - private UserAuthenticationFilterBasicAuth(final AuthenticationManager authenticationManager) { - super(authenticationManager); - } - - } } \ No newline at end of file diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java index 07aaffe24..fc7a0a1e4 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java @@ -50,6 +50,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.boot.context.embedded.FilterRegistrationBean; import org.springframework.boot.context.embedded.ServletListenerRegistrationBean; @@ -61,6 +62,7 @@ import org.springframework.http.HttpStatus; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.WebSecurityConfigurer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -76,6 +78,7 @@ import org.springframework.security.web.authentication.AnonymousAuthenticationFi import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; import org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter; import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint; +import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import org.springframework.security.web.header.writers.frameoptions.StaticAllowFromStrategy; import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter; import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter.XFrameOptionsMode; @@ -103,6 +106,31 @@ public class SecurityManagedConfiguration { @Autowired private HawkbitSecurityProperties securityProperties; + @Autowired + private AuthenticationConfiguration configuration; + + /** + * @return the {@link UserAuthenticationFilter} to include into the SP + * security configuration. + * @throws Exception + * lazy bean exception maybe if the authentication manager + * cannot be instantiated + */ + @Bean + @ConditionalOnMissingBean + public UserAuthenticationFilter userAuthenticationFilter() throws Exception { + return new UserAuthenticationFilterBasicAuth(configuration.getAuthenticationManager()); + } + + private static final class UserAuthenticationFilterBasicAuth extends BasicAuthenticationFilter + implements UserAuthenticationFilter { + + private UserAuthenticationFilterBasicAuth(final AuthenticationManager authenticationManager) { + super(authenticationManager); + } + + } + /** * {@link WebSecurityConfigurer} for the internal SP controller API. */ From a81ecb418ecaf6e4155ab7bfb44c2da99ab16016 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Fri, 10 Jun 2016 17:21:19 +0200 Subject: [PATCH 243/371] Fixed some maven warnings and introduced compiler output within a maven build Signed-off-by: Dominic Schabel --- pom.xml | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 33ad1f81e..85a48704b 100644 --- a/pom.xml +++ b/pom.xml @@ -86,6 +86,9 @@ 4.5 + 3.1.0 + 2.17 + 1.1.0.Final 1.4 @@ -152,6 +155,15 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + -Xlint:all + true + true + + com.mycila license-maven-plugin @@ -190,7 +202,6 @@ org.jacoco jacoco-maven-plugin - ${jacoco.version} prepare-ut-agent @@ -231,6 +242,7 @@ + @@ -274,7 +286,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.17 + ${maven.surefire.plugin.version} true 1 @@ -348,9 +360,13 @@ org.jacoco jacoco-maven-plugin - ${jacoco.maven.version} + ${jacoco.version} + + + org.bsc.maven + maven-processor-plugin + ${maven.processor.plugin.version} - From 12ce60f72a2835da02c3306d536c64f0533a6347 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sun, 12 Jun 2016 08:09:28 +0200 Subject: [PATCH 244/371] Rabbit publisherConfirms Signed-off-by: Kai Zimmermann --- .../simulator/amqp/AmqpConfiguration.java | 22 ++++++-- .../src/main/resources/logback.xml | 1 - .../AsyncConfigurerAutoConfiguration.java | 1 - .../hawkbit/amqp/AmqpConfiguration.java | 55 +++++++++++++++---- .../amqp/DefaultAmqpSenderService.java | 16 +++++- 5 files changed, 76 insertions(+), 19 deletions(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java index bf5d723a8..e954cec96 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.simulator.amqp; +import java.time.Duration; import java.util.HashMap; import java.util.Map; @@ -15,6 +16,7 @@ import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -65,9 +67,12 @@ public class AmqpConfiguration { * @return the queue */ @Bean - public Queue receiverConnectorQueueFromSp() { - return new Queue(amqpProperties.getReceiverConnectorQueueFromSp(), true, false, false, - getDeadLetterExchangeArgs()); + public Queue receiverConnectorQueueFromHawkBit() { + final Map arguments = getDeadLetterExchangeArgs(); + arguments.putAll(getTTLMaxArgs()); + + return QueueBuilder.nonDurable(amqpProperties.getReceiverConnectorQueueFromSp()).withArguments(arguments) + .build(); } /** @@ -89,7 +94,7 @@ public class AmqpConfiguration { */ @Bean public Binding bindReceiverQueueToSpExchange() { - return BindingBuilder.bind(receiverConnectorQueueFromSp()).to(exchangeQueueToConnector()); + return BindingBuilder.bind(receiverConnectorQueueFromHawkBit()).to(exchangeQueueToConnector()); } /** @@ -99,7 +104,7 @@ public class AmqpConfiguration { */ @Bean public Queue deadLetterQueue() { - return new Queue(amqpProperties.getDeadLetterQueue(), true, false, true); + return QueueBuilder.nonDurable(amqpProperties.getDeadLetterQueue()).withArguments(getTTLMaxArgs()).build(); } /** @@ -145,4 +150,11 @@ public class AmqpConfiguration { return args; } + private static Map getTTLMaxArgs() { + final Map args = new HashMap<>(); + args.put("x-message-ttl", Duration.ofDays(1).toMillis()); + args.put("x-max-length", 100_000); + return args; + } + } diff --git a/examples/hawkbit-device-simulator/src/main/resources/logback.xml b/examples/hawkbit-device-simulator/src/main/resources/logback.xml index da64e62d1..469c7bde3 100644 --- a/examples/hawkbit-device-simulator/src/main/resources/logback.xml +++ b/examples/hawkbit-device-simulator/src/main/resources/logback.xml @@ -19,7 +19,6 @@ - diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerAutoConfiguration.java index cdbbcba5b..7e2b780b4 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerAutoConfiguration.java @@ -23,7 +23,6 @@ import org.springframework.scheduling.annotation.EnableAsync; * * */ - @Configuration @EnableAsync @ConditionalOnMissingBean(AsyncConfigurer.class) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index adf56e10f..541ae414c 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -12,6 +12,8 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadPoolExecutor; import org.eclipse.hawkbit.dmf.amqp.api.AmqpSettings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; @@ -30,6 +32,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.retry.backoff.ExponentialBackOffPolicy; +import org.springframework.retry.support.RetryTemplate;; /** * The spring AMQP configuration which is enabled by using the profile @@ -39,17 +43,27 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties({ AmqpProperties.class, AmqpDeadletterProperties.class }) public class AmqpConfiguration { - @Autowired - protected AmqpProperties amqpProperties; + private static final Logger LOGGER = LoggerFactory.getLogger(AmqpConfiguration.class); @Autowired - protected AmqpDeadletterProperties amqpDeadletterProperties; + private AmqpProperties amqpProperties; + + @Autowired + private AmqpDeadletterProperties amqpDeadletterProperties; + + @Autowired + @Qualifier("threadPoolExecutor") + private ThreadPoolExecutor threadPoolExecutor; @Autowired private ConnectionFactory rabbitConnectionFactory; @Configuration - protected static class HawkBitRabbitConnectionFactoryCreator { + protected static class RabbitConnectionFactoryCreator { + + @Autowired + private AmqpProperties amqpProperties; + @Autowired @Qualifier("threadPoolExecutor") private ThreadPoolExecutor threadPoolExecutor; @@ -57,15 +71,21 @@ public class AmqpConfiguration { @Autowired private ScheduledExecutorService scheduledExecutorService; - @Autowired - protected AmqpProperties amqpProperties; - + /** + * {@link ConnectionFactory} with enabled publisher confirms and + * heartbeat. + * + * @param config + * with standard {@link RabbitProperties} + * @return {@link ConnectionFactory} + */ @Bean public ConnectionFactory rabbitConnectionFactory(final RabbitProperties config) { final CachingConnectionFactory factory = new CachingConnectionFactory(); factory.setRequestedHeartBeat(amqpProperties.getRequestedHeartBeat()); factory.setExecutor(threadPoolExecutor); factory.getRabbitConnectionFactory().setHeartbeatExecutor(scheduledExecutorService); + factory.setPublisherConfirms(true); final String addresses = config.getAddresses(); factory.setAddresses(addresses); @@ -84,7 +104,6 @@ public class AmqpConfiguration { } return factory; } - } /** @@ -101,14 +120,28 @@ public class AmqpConfiguration { } /** - * Method to set the Jackson2JsonMessageConverter. - * - * @return the Jackson2JsonMessageConverter + * @return {@link RabbitTemplate} with automatic retry, published confirms + * and {@link Jackson2JsonMessageConverter}. */ @Bean public RabbitTemplate rabbitTemplate() { final RabbitTemplate rabbitTemplate = new RabbitTemplate(rabbitConnectionFactory); rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); + + final RetryTemplate retryTemplate = new RetryTemplate(); + retryTemplate.setBackOffPolicy(new ExponentialBackOffPolicy()); + rabbitTemplate.setRetryTemplate(retryTemplate); + + rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> { + if (ack) { + LOGGER.debug("Message with correlation ID {} confirmed by broker.", correlationData.getId()); + } else { + LOGGER.error("Broker is unable to handle message with correlation ID {} : {}", correlationData.getId(), + cause); + } + + }); + return rabbitTemplate; } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java index 244544b64..afb3e7ff2 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java @@ -9,10 +9,14 @@ package org.eclipse.hawkbit.amqp; import java.net.URI; +import java.util.UUID; import org.eclipse.hawkbit.util.IpUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.rabbit.support.CorrelationData; /** * A default implementation for the sender service. The service sends all amqp @@ -20,6 +24,7 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate; * extracted from the uri. */ public class DefaultAmqpSenderService implements AmqpSenderService { + private static final Logger LOGGER = LoggerFactory.getLogger(DefaultAmqpSenderService.class); private final RabbitTemplate internalAmqpTemplate; @@ -39,7 +44,16 @@ public class DefaultAmqpSenderService implements AmqpSenderService { return; } - internalAmqpTemplate.send(extractExchange(replyTo), null, message); + final String correlationId = UUID.randomUUID().toString(); + final String exchange = extractExchange(replyTo); + + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Sending message {} to exchange {} with correlationId {}", message, exchange, correlationId); + } else { + LOGGER.debug("Sending message to exchange {} with correlationId {}", exchange, correlationId); + } + + internalAmqpTemplate.send(exchange, null, message, new CorrelationData(correlationId)); } } From a9c5dcef6975bcc581117cce350b34473b06b52b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 13 Jun 2016 09:03:01 +0200 Subject: [PATCH 245/371] Added integration option with device simulator. Signed-off-by: Kai Zimmermann --- .../resource/builder/TargetBuilder.java | 12 ++ .../hawkbit/mgmt/client/Application.java | 27 +++ .../client/ClientConfigurationProperties.java | 41 +++++ .../scenarios/ConfigurableScenario.java | 78 +++++++-- .../CreateStartedRolloutExample.java | 2 + .../client/scenarios/upload/ArtifactFile.java | 103 +++++++++++ .../upload/FeignMultipartEncoder.java | 160 ++++++++++++++++++ .../src/main/resources/application.properties | 5 +- .../model/target/MgmtTargetRequestBody.java | 11 ++ .../mgmt/rest/resource/MgmtTargetMapper.java | 1 + .../rest/resource/MgmtTargetResourceTest.java | 8 +- .../hawkbit/repository/TargetManagement.java | 19 --- .../hawkbit/repository/model/TargetInfo.java | 11 +- .../repository/jpa/JpaTargetManagement.java | 19 +-- .../repository/jpa/model/JpaTargetInfo.java | 2 +- .../hawkbit/rest/util/JsonBuilder.java | 36 ++-- 16 files changed, 459 insertions(+), 76 deletions(-) create mode 100644 examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/ArtifactFile.java create mode 100644 examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java index de81f5354..023557829 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/TargetBuilder.java @@ -27,6 +27,7 @@ public class TargetBuilder { private String controllerId; private String name; private String description; + private String address; /** * @param controllerId @@ -48,6 +49,16 @@ public class TargetBuilder { return this; } + /** + * @param address + * the address of the target + * @return the builder itself + */ + public TargetBuilder address(final String address) { + this.address = address; + return this; + } + /** * @param description * the description of the target @@ -121,6 +132,7 @@ public class TargetBuilder { } body.setName(name + suffix); body.setDescription(description); + body.setAddress(address); return body; } 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 c6d9ca08c..036c19ed1 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,8 +9,12 @@ 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.MgmtSoftwareModuleClientResource; 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.boot.CommandLineRunner; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -18,11 +22,19 @@ 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; @SpringBootApplication @EnableFeignClients @@ -72,6 +84,21 @@ public class Application implements CommandLineRunner { return new CreateStartedRolloutExample(); } + @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 Logger.ErrorLogger()).encoder(new FeignMultipartEncoder()) + .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper))) + .target(MgmtSoftwareModuleClientResource.class, + configuration.getUrl() + MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING); + } + private 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/ClientConfigurationProperties.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java index 255f813f9..cc5fe27e9 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java @@ -40,6 +40,7 @@ public class ClientConfigurationProperties { private final List scenarios = new ArrayList<>(); public static class Scenario { + private String tenant = "DEFAULT"; private int targets = 100; private int distributionSets = 10; private int appModulesPerDistributionSet = 2; @@ -47,6 +48,46 @@ public class ClientConfigurationProperties { private String smSwName = "Application"; private String smFwName = "Firmware"; private String targetName = "Device"; + private int artifactsPerSM = 1; + private String targetAddress = "amqp:/simulator.replyTo"; + + /** + * Artifact size. Values can use the suffixed "MB" or "KB" to indicate a + * Megabyte or Kilobyte size. + */ + private String artifactSize = "1MB"; + + public String getTargetAddress() { + return targetAddress; + } + + public void setTargetAddress(final String targetAddress) { + this.targetAddress = targetAddress; + } + + public String getTenant() { + return tenant; + } + + public void setTenant(final String tenant) { + this.tenant = tenant; + } + + public int getArtifactsPerSM() { + return artifactsPerSM; + } + + public void setArtifactsPerSM(final int artifactsPerSM) { + this.artifactsPerSM = artifactsPerSM; + } + + public String getArtifactSize() { + return artifactSize; + } + + public void setArtifactSize(final String artifactSize) { + this.artifactSize = artifactSize; + } public String getTargetName() { return targetName; 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 640c12a97..60144a88e 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,20 +9,25 @@ package org.eclipse.hawkbit.mgmt.client.scenarios; import java.util.List; +import java.util.Random; import org.eclipse.hawkbit.mgmt.client.ClientConfigurationProperties; import org.eclipse.hawkbit.mgmt.client.ClientConfigurationProperties.Scenario; import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; +import org.eclipse.hawkbit.mgmt.client.resource.MgmtSystemManagementClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetBuilder; 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.distributionset.MgmtDistributionSet; import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; /** * @@ -37,11 +42,19 @@ public class ConfigurableScenario { private MgmtDistributionSetClientResource distributionSetResource; @Autowired + @Qualifier("mgmtSoftwareModuleClientResource") private MgmtSoftwareModuleClientResource softwareModuleResource; + @Autowired + @Qualifier("uploadSoftwareModule") + private MgmtSoftwareModuleClientResource uploadSoftwareModule; + @Autowired private MgmtTargetClientResource targetResource; + @Autowired + private MgmtSystemManagementClientResource systemManagementResource; + @Autowired private ClientConfigurationProperties clientConfigurationProperties; @@ -56,37 +69,76 @@ public class ConfigurableScenario { } private void createScenario(final Scenario scenario) { + systemManagementResource.deleteTenant(scenario.getTenant()); createTargets(scenario); createDistributionSets(scenario); } private void createDistributionSets(final Scenario scenario) { + final byte[] artifact = generateArtifact(scenario); + distributionSetResource .createDistributionSets(new DistributionSetBuilder().name(scenario.getDsName()).type("os_app") .version("1.0.").buildAsList(scenario.getDistributionSets())) .getBody().parallelStream().forEach(dsSet -> { - final List modules = softwareModuleResource - .createSoftwareModules(new SoftwareModuleBuilder().name(scenario.getSmFwName()) - .version(dsSet.getVersion()).type("os").build()) - .getBody(); - modules.addAll( - softwareModuleResource - .createSoftwareModules(new SoftwareModuleBuilder().name(scenario.getSmSwName()) - .version(dsSet.getVersion() + ".").type("application") - .buildAsList(scenario.getAppModulesPerDistributionSet())) - .getBody()); + final List modules = addModules(scenario, dsSet, artifact); final SoftwareModuleAssigmentBuilder assign = new SoftwareModuleAssigmentBuilder(); modules.forEach(module -> assign.id(module.getModuleId())); - distributionSetResource.assignSoftwareModules(dsSet.getDsId(), assign.build()); }); } + private List addModules(final Scenario scenario, final MgmtDistributionSet dsSet, + final byte[] artifact) { + final List modules = softwareModuleResource.createSoftwareModules( + new SoftwareModuleBuilder().name(scenario.getSmFwName()).version(dsSet.getVersion()).type("os").build()) + .getBody(); + modules.addAll(softwareModuleResource + .createSoftwareModules( + new SoftwareModuleBuilder().name(scenario.getSmSwName()).version(dsSet.getVersion() + ".") + .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; + } + + private byte[] generateArtifact(final Scenario scenario) { + // create random object + 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) { for (int i = 0; i < scenario.getTargets() / 100; i++) { - targetResource.createTargets(new TargetBuilder().controllerId(scenario.getTargetName()).buildAsList(i * 100, - (i + 1) * 100 > scenario.getTargets() ? scenario.getTargets() : (i + 1) * 100)); + targetResource.createTargets(new TargetBuilder().controllerId(scenario.getTargetName()) + .address(scenario.getTargetAddress()).buildAsList(i * 100, + (i + 1) * 100 > scenario.getTargets() ? scenario.getTargets() - i * 100 : 100)); } } + + private int parseSize(final String s) { + final String size = s.toUpperCase(); + if (size.endsWith("KB")) { + return Integer.valueOf(size.substring(0, size.length() - 2)) * 1024; + } + if (size.endsWith("MB")) { + return Integer.valueOf(size.substring(0, size.length() - 2)) * 1024 * 1024; + } + return Integer.valueOf(size); + } } 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 913d2eaa4..b450bbde2 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,6 +28,7 @@ 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. @@ -45,6 +46,7 @@ public class CreateStartedRolloutExample { private MgmtDistributionSetClientResource distributionSetResource; @Autowired + @Qualifier("mgmtSoftwareModuleClientResource") private MgmtSoftwareModuleClientResource softwareModuleResource; @Autowired diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/ArtifactFile.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/ArtifactFile.java new file mode 100644 index 000000000..adad1fe77 --- /dev/null +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/ArtifactFile.java @@ -0,0 +1,103 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.client.scenarios.upload; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +import org.springframework.util.Assert; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; + +public class ArtifactFile implements MultipartFile { + + private final String name; + + private final String originalFilename; + + private final String contentType; + + private final byte[] content; + + /** + * Create a new ArtifactFile with the given content. + * + * @param name + * the name of the file + * @param content + * the content of the file + */ + public ArtifactFile(final String name, final byte[] content) { + this(name, "", null, content); + } + + /** + * Create a new ArtifactFile with the given content. + * + * @param name + * of the file + * @param originalFilename + * the original filename (as on the client's machine) + * @param contentType + * the content type + * @param content + * of the file + */ + public ArtifactFile(final String name, final String originalFilename, final String contentType, + final byte[] content) { + Assert.hasLength(name, "Name must not be null"); + this.name = name; + this.originalFilename = originalFilename != null ? originalFilename : ""; + this.contentType = contentType; + this.content = content != null ? content : new byte[0]; + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getOriginalFilename() { + return this.originalFilename; + } + + @Override + public String getContentType() { + return this.contentType; + } + + @Override + public boolean isEmpty() { + return this.content.length == 0; + } + + @Override + public long getSize() { + return this.content.length; + } + + @Override + public byte[] getBytes() throws IOException { + return this.content; + } + + @Override + public InputStream getInputStream() throws IOException { + return new ByteArrayInputStream(this.content); + } + + @Override + public void transferTo(final File dest) throws IOException { + FileCopyUtils.copy(this.content, dest); + } + +} diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java new file mode 100644 index 000000000..fdf5462da --- /dev/null +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java @@ -0,0 +1,160 @@ +/** + * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.mgmt.client.scenarios.upload; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.Type; +import java.nio.charset.Charset; +import java.util.List; +import java.util.Map.Entry; + +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpOutputMessage; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.multipart.MultipartFile; + +import feign.RequestTemplate; +import feign.codec.EncodeException; +import feign.codec.Encoder; + +/** + * A feign encoder implementation which handles {@link MultipartFile} body. + */ +public class FeignMultipartEncoder implements Encoder { + + private final List> converters = new RestTemplate().getMessageConverters(); + private final HttpHeaders multipartHeaders = new HttpHeaders(); + private final HttpHeaders jsonHeaders = new HttpHeaders(); + + public static final Charset UTF_8 = Charset.forName("UTF-8"); + + public FeignMultipartEncoder() { + multipartHeaders.setContentType(MediaType.MULTIPART_FORM_DATA); + jsonHeaders.setContentType(MediaType.APPLICATION_JSON); + } + + @Override + public void encode(final Object object, final Type bodyType, final RequestTemplate template) + throws EncodeException { + + encodeMultipartFormRequest(object, template); + + } + + private void encodeMultipartFormRequest(final Object value, final RequestTemplate template) { + if (value == null) { + throw new EncodeException("Cannot encode request with null value."); + } + if (!isMultipartFile(value)) { + throw new EncodeException("Only multipart can be handled by this encoder"); + } + encodeRequest(encodeMultipartFile((MultipartFile) value), multipartHeaders, template); + } + + @SuppressWarnings("unchecked") + private void encodeRequest(final Object value, final HttpHeaders requestHeaders, final RequestTemplate template) + throws EncodeException { + final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + final HttpOutputMessage dummyRequest = new HttpOutputMessageImpl(outputStream, requestHeaders); + try { + final Class requestType = value.getClass(); + final MediaType requestContentType = requestHeaders.getContentType(); + for (final HttpMessageConverter messageConverter : converters) { + if (messageConverter.canWrite(requestType, requestContentType)) { + ((HttpMessageConverter) messageConverter).write(value, requestContentType, dummyRequest); + break; + } + } + } catch (final IOException ex) { + throw new EncodeException("Cannot encode request.", ex); + } + final HttpHeaders headers = dummyRequest.getHeaders(); + if (headers != null) { + for (final Entry> entry : headers.entrySet()) { + template.header(entry.getKey(), entry.getValue()); + } + } + /* + * we should use a template output stream... this will cause issues if + * files are too big, since the whole request will be in memory. + */ + template.body(outputStream.toByteArray(), UTF_8); + } + + private MultiValueMap encodeMultipartFile(final MultipartFile file) { + try { + final MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); + multiValueMap.add("file", new MultipartFileResource(file.getName(), file.getSize(), file.getInputStream())); + return multiValueMap; + } catch (final IOException ex) { + throw new EncodeException("Cannot encode request.", ex); + } + } + + private boolean isMultipartFile(final Object object) { + return object instanceof MultipartFile; + } + + private class HttpOutputMessageImpl implements HttpOutputMessage { + + private final OutputStream body; + private final HttpHeaders headers; + + public HttpOutputMessageImpl(final OutputStream body, final HttpHeaders headers) { + this.body = body; + this.headers = headers; + } + + @Override + public OutputStream getBody() throws IOException { + return body; + } + + @Override + public HttpHeaders getHeaders() { + return headers; + } + + } + + /** + * Dummy resource class. Wraps file content and its original name. + */ + static class MultipartFileResource extends InputStreamResource { + + private final String filename; + private final long size; + + public MultipartFileResource(final String filename, final long size, final InputStream inputStream) { + super(inputStream); + this.size = size; + this.filename = filename; + } + + @Override + public String getFilename() { + return this.filename; + } + + @Override + public InputStream getInputStream() throws IOException, IllegalStateException { + return super.getInputStream(); // To change body of generated + // methods, choose Tools | Templates. + } + + @Override + public long contentLength() throws IOException { + return size; + } + + } +} diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties index d989dcf3d..f538bb1cb 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties +++ b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties @@ -7,7 +7,7 @@ # http://www.eclipse.org/legal/epl-v10.html # -hawkbit.url=localhost:8080 +hawkbit.url=http://localhost:8080 hawkbit.username=admin hawkbit.password=admin @@ -20,4 +20,5 @@ spring.main.show-banner=false #hawkbit.scenarios.[0].sm-sw-name=gettingstarted-example hawkbit.scenarios.[0].targets=10000 -hawkbit.scenarios.[0].distribution-sets=100 \ No newline at end of file +hawkbit.scenarios.[0].distribution-sets=100 +hawkbit.scenarios.[0].artifactsPerSM=0 \ No newline at end of file diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java index bc40326e4..b9c0b001a 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java @@ -18,6 +18,9 @@ public class MgmtTargetRequestBody { @JsonProperty(required = true) private String controllerId; + @JsonProperty + private String address; + /** * @return the name */ @@ -66,4 +69,12 @@ public class MgmtTargetRequestBody { return this; } + public String getAddress() { + return address; + } + + public void setAddress(final String address) { + this.address = address; + } + } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java index f00998d29..d77cbaa53 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java @@ -182,6 +182,7 @@ public final class MgmtTargetMapper { final Target target = entityFactory.generateTarget(targetRest.getControllerId()); target.setDescription(targetRest.getDescription()); target.setName(targetRest.getName()); + target.getTargetInfo().setAddress(targetRest.getAddress()); return target; } diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index 1375307d4..ed6ee4a93 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -40,11 +40,11 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaTargetInfo; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTest; import org.eclipse.hawkbit.rest.exception.MessageNotReadableException; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; @@ -109,8 +109,8 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final String knownTargetId = "targetId"; final List actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId); actions.get(0).setStatus(Status.FINISHED); - controllerManagament.addUpdateActionStatus(entityFactory.generateActionStatus(actions.get(0), - Status.FINISHED, System.currentTimeMillis(), "testmessage")); + controllerManagament.addUpdateActionStatus(entityFactory.generateActionStatus(actions.get(0), Status.FINISHED, + System.currentTimeMillis(), "testmessage")); final PageRequest pageRequest = new PageRequest(0, 1000, Direction.ASC, ActionFields.ID.getFieldName()); final ActionStatus status = deploymentManagement @@ -682,6 +682,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { final Target test1 = entityFactory.generateTarget("id1"); test1.setDescription("testid1"); test1.setName("testname1"); + test1.getTargetInfo().setAddress("amqp://test123/foobar"); final Target test2 = entityFactory.generateTarget("id2"); test2.setDescription("testid2"); test2.setName("testname2"); @@ -704,6 +705,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { .andExpect(jsonPath("[0].description", equalTo("testid1"))) .andExpect(jsonPath("[0].createdAt", not(equalTo(0)))) .andExpect(jsonPath("[0].createdBy", equalTo("bumlux"))) + .andExpect(jsonPath("[0].address", equalTo("amqp://test123/foobar"))) .andExpect(jsonPath("[1].name", equalTo("testname2"))) .andExpect(jsonPath("[1].createdBy", equalTo("bumlux"))) .andExpect(jsonPath("[1].controllerId", equalTo("id2"))) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java index 9054127ef..5fdfb318e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TargetManagement.java @@ -179,25 +179,6 @@ public interface TargetManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) List createTargets(@NotNull Collection targets); - /** - * creating a new {@link Target} including poll status data. useful - * especially in plug and play scenarios. - * - * @param targets - * to be created * - * @param status - * of the target - * @param lastTargetQuery - * if a plug and play case - * @param address - * if a plug and play case - * - * @return newly created target - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) - List createTargets(@NotNull Collection targets, @NotNull TargetUpdateStatus status, - Long lastTargetQuery, URI address); - /** * Deletes all targets with the given IDs. * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java index 6317f9783..2eb2f05c7 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java @@ -16,10 +16,19 @@ import java.util.concurrent.TimeUnit; public interface TargetInfo extends Serializable { /** - * @return the address under whioch the target can be reached + * @return the address under which the target can be reached */ URI getAddress(); + /** + * @param address + * the target address to set + * + * @throws IllegalArgumentException + * If the given string violates RFC 2396 + */ + void setAddress(String address); + /** * @return {@link Target} this info element belongs to. */ diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java index 892ddc771..f318962bf 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTargetManagement.java @@ -608,24 +608,7 @@ public class JpaTargetManagement implements TargetManagement { } final List savedTargets = new ArrayList<>(); for (final Target t : targets) { - final Target myTarget = createTarget(t); - savedTargets.add(myTarget); - } - return savedTargets; - } - - @Override - @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public List createTargets(final Collection targets, final TargetUpdateStatus status, - final Long lastTargetQuery, final URI address) { - if (targetRepository.countByControllerIdIn( - targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList())) > 0) { - throw new EntityAlreadyExistsException(); - } - final List savedTargets = new ArrayList<>(); - for (final Target t : targets) { - final Target myTarget = createTarget(t, status, lastTargetQuery, address); + final Target myTarget = createTarget(t, TargetUpdateStatus.UNKNOWN, null, t.getTargetInfo().getAddress()); savedTargets.add(myTarget); } return savedTargets; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java index 6b5a3d1af..15abc2d61 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java @@ -168,7 +168,7 @@ public class JpaTargetInfo implements Persistable, TargetInfo { /** * @param address - * the ipAddress to set + * the target address to set * * @throws IllegalArgumentException * If the given string violates RFC 2396 diff --git a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java index f67f15815..51cbd7a99 100644 --- a/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java +++ b/hawkbit-rest-core/src/test/java/org/eclipse/hawkbit/rest/util/JsonBuilder.java @@ -41,9 +41,9 @@ public abstract class JsonBuilder { try { builder.append(new JSONObject().put("name", module.getName()) .put("description", module.getDescription()).put("type", module.getType().getKey()) - .put("id", Long.MAX_VALUE).put("vendor", module.getVendor()) - .put("version", module.getVersion()).put("createdAt", "0").put("updatedAt", "0") - .put("createdBy", "fghdfkjghdfkjh").put("updatedBy", "fghdfkjghdfkjh").toString()); + .put("id", Long.MAX_VALUE).put("vendor", module.getVendor()).put("version", module.getVersion()) + .put("createdAt", "0").put("updatedAt", "0").put("createdBy", "fghdfkjghdfkjh") + .put("updatedBy", "fghdfkjghdfkjh").toString()); } catch (final Exception e) { e.printStackTrace(); } @@ -185,15 +185,13 @@ public abstract class JsonBuilder { final List messages = new ArrayList(); messages.add(message); - return new JSONObject() - .put("id", id) - .put("time", "20140511T121314") + return new JSONObject().put("id", id).put("time", "20140511T121314") .put("status", - new JSONObject() - .put("execution", execution) + new JSONObject().put("execution", execution) .put("result", new JSONObject().put("finished", finished).put("progress", - new JSONObject().put("cnt", 2).put("of", 5))).put("details", messages)) + new JSONObject().put("cnt", 2).put("of", 5))) + .put("details", messages)) .toString(); } @@ -380,10 +378,13 @@ public abstract class JsonBuilder { int i = 0; for (final Target target : targets) { try { + final String address = target.getTargetInfo().getAddress() != null + ? target.getTargetInfo().getAddress().toString() : null; + builder.append(new JSONObject().put("controllerId", target.getControllerId()) - .put("description", target.getDescription()).put("name", target.getName()) - .put("createdAt", "0").put("updatedAt", "0").put("createdBy", "fghdfkjghdfkjh") - .put("updatedBy", "fghdfkjghdfkjh").toString()); + .put("description", target.getDescription()).put("name", target.getName()).put("createdAt", "0") + .put("updatedAt", "0").put("createdBy", "fghdfkjghdfkjh").put("updatedBy", "fghdfkjghdfkjh") + .put("address", address).toString()); } catch (final Exception e) { e.printStackTrace(); } @@ -441,9 +442,7 @@ public abstract class JsonBuilder { throws JSONException { final List messages = new ArrayList(); messages.add(message); - return new JSONObject() - .put("id", id) - .put("time", "20140511T121314") + return new JSONObject().put("id", id).put("time", "20140511T121314") .put("status", new JSONObject().put("execution", execution) .put("result", new JSONObject().put("finished", "success")).put("details", messages)) @@ -453,13 +452,12 @@ public abstract class JsonBuilder { public static String configData(final String id, final Map attributes, final String execution) throws JSONException { - return new JSONObject() - .put("id", id) - .put("time", "20140511T121314") + return new JSONObject().put("id", id).put("time", "20140511T121314") .put("status", new JSONObject().put("execution", execution) .put("result", new JSONObject().put("finished", "success")) - .put("details", new ArrayList())).put("data", attributes).toString(); + .put("details", new ArrayList())) + .put("data", attributes).toString(); } From 3726aac6db875eaf00d9ca9cd937f915b3325a8a Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 13 Jun 2016 12:38:08 +0200 Subject: [PATCH 246/371] Cleaned up default mismatch. Signed-off-by: Kai Zimmermann --- .../scheduling/AsyncConfigurerThreadpoolProperties.java | 4 ++-- .../src/main/resources/hawkbitdefaults.properties | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerThreadpoolProperties.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerThreadpoolProperties.java index 35996a114..4425c7278 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerThreadpoolProperties.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerThreadpoolProperties.java @@ -20,7 +20,7 @@ public class AsyncConfigurerThreadpoolProperties { /** * Max queue size for central event executor. */ - private Integer queuesize = 250; + private Integer queuesize = 5_000; /** * Core processing threads for central event executor. @@ -30,7 +30,7 @@ public class AsyncConfigurerThreadpoolProperties { /** * Maximum thread pool size for central event executor. */ - private Integer maxthreads = 50; + private Integer maxthreads = 20; /** * When the number of threads is greater than the core, this is the maximum diff --git a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties index 488777b8d..488559383 100644 --- a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties +++ b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties @@ -27,12 +27,6 @@ vaadin.servlet.urlMapping=/UI/* vaadin.servlet.heartbeatInterval=60 vaadin.servlet.closeIdleSessions=false -# Defines the thread pool executor -hawkbit.threadpool.corethreads=5 -hawkbit.threadpool.maxthreads=20 -hawkbit.threadpool.idletimeout=10000 -hawkbit.threadpool.queuesize=20000 - # Defines the polling time for the controllers in HH:MM:SS notation hawkbit.controller.pollingTime=00:05:00 hawkbit.controller.pollingOverdueTime=00:05:00 From 2b245aec823ea9ae0103eda19e92e1bb6376b750 Mon Sep 17 00:00:00 2001 From: Jonathan Knoblauch Date: Mon, 13 Jun 2016 14:50:45 +0200 Subject: [PATCH 247/371] Misspelling Changed refernce to reference --- .../hawkbit/repository/jpa/DistributionSetManagementTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index 104f2260d..b7da2ff06 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -785,7 +785,7 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { @Test @Description("Deletes a DS that is in use by either target assignment or rollout. Expected behaviour is a soft delete on the database, i.e. only marked as " - + "deleted, kept as refernce but unavailable for future use..") + + "deleted, kept as reference but unavailable for future use..") public void deleteAssignedDistributionSet() { DistributionSet ds1 = testdataFactory.createDistributionSet("ds-1"); DistributionSet ds2 = testdataFactory.createDistributionSet("ds-2"); From 8230a476205535df059144f6d6a121c314dd67ed Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 13 Jun 2016 16:02:04 +0200 Subject: [PATCH 248/371] Fixed typos in repo default setup and logging. Signed-off-by: Kai Zimmermann --- .../main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java | 2 +- .../main/java/org/eclipse/hawkbit/repository/Constants.java | 2 +- .../repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java index 76870ac93..2c8feda13 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java @@ -109,7 +109,7 @@ public class BaseAmqpService { } protected final void logAndThrowMessageError(final Message message, final String error) { - LOGGER.warn("Error \"{}\" reported by message: {}", error, message); + LOGGER.warn("Warning! \"{}\" reported by message: {}", error, message); throw new IllegalArgumentException(error); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java index 9a1e442b0..5dcb26638 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/Constants.java @@ -33,7 +33,7 @@ public final class Constants { * generated by repository for every new account for "Firmware/Operating * System" . */ - public static final String SMT_DEFAULT_OS_NAME = "Firmware"; + public static final String SMT_DEFAULT_OS_NAME = "OS"; /** * {@link SoftwareModuleType#getName()} of a {@link SoftwareModuleType} * generated by repository for every new account for "applications/apps". diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java index e1538aaee..344d0e320 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa.rsql; import static org.fest.assertions.api.Assertions.assertThat; +import org.eclipse.hawkbit.repository.Constants; import org.eclipse.hawkbit.repository.SoftwareModuleTypeFields; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @@ -34,7 +35,7 @@ public class RSQLSoftwareModuleTypeFieldsTest extends AbstractJpaIntegrationTest @Test @Description("Test filter software module test type by name") public void testFilterByParameterName() { - assertRSQLQuery(SoftwareModuleTypeFields.NAME.name() + "==Firmware", 1); + assertRSQLQuery(SoftwareModuleTypeFields.NAME.name() + "==" + Constants.SMT_DEFAULT_OS_NAME, 1); } @Test From 4523032e972007d8963ad54d60bb72f8962aaa04 Mon Sep 17 00:00:00 2001 From: Dominic Schabel Date: Mon, 13 Jun 2016 16:44:31 +0200 Subject: [PATCH 249/371] Property for maven scm plugin introduced Signed-off-by: Dominic Schabel --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 85a48704b..56e5a87c5 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,6 @@ examples - ${release.scm.connection} ${release.scm.developerConnection} @@ -88,6 +87,7 @@ 3.1.0 2.17 + 1.9.4 1.1.0.Final @@ -194,7 +194,7 @@ maven-scm-plugin - 1.9.4 + ${maven.scm.plugin.version} ${project.version} From 1b5975523947795ecd5e38e2d20992e90448b23e Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 13 Jun 2016 17:49:09 +0200 Subject: [PATCH 250/371] Optimize multiselect Signed-off-by: Melanie Retter --- .../filterlayout/AbstractFilterButtons.java | 12 --------- .../dstable/DistributionSetTableLayout.java | 7 +++--- .../event/DistributionSetTableEvent.java | 25 +++++++++++++++++++ .../event/DistributionSetTypeEvent.java | 2 +- .../event/SoftwareModuleTableEvent.java | 25 +++---------------- .../dstable/DistributionTableLayout.java | 7 +++--- .../event/DistributionTableEvent.java | 23 ++--------------- .../ui/management/event/TargetTableEvent.java | 4 +-- 8 files changed, 41 insertions(+), 64 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java index 2b0eee279..aec0029d0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterButtons.java @@ -77,7 +77,6 @@ public abstract class AbstractFilterButtons extends Table { setDragMode(TableDragMode.NONE); setSelectable(false); setSizeFull(); - setMultiSelect(true); } private void setStyle() { @@ -194,17 +193,6 @@ public abstract class AbstractFilterButtons extends Table { setContainerDataSource(createButtonsLazyQueryContainer()); } - // /** - // * Select all rows in the table. - // */ - // public void selectAll() { - // setValue(createButtonsLazyQueryContainer().getItemIds()); - // } - // - // public void unSelectAll() { - // setValue(null); - // } - /** * Id of the buttons table to be used in test cases. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java index ef6d3ae4a..cf365b081 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java @@ -11,8 +11,8 @@ package org.eclipse.hawkbit.ui.distributions.dstable; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.common.table.AbstractTableLayout; -import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent; -import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent.DistributionSetTypeEnum; +import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent; +import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent.DistributionTableComponentEvent; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.event.Action; @@ -77,7 +77,8 @@ public class DistributionSetTableLayout extends AbstractTableLayout { public void handleAction(final Action action, final Object sender, final Object target) { if (ACTION_CTRL_A.equals(action)) { dsTable.selectAll(); - getEventBus().publish(this, new DistributionSetTypeEvent(DistributionSetTypeEnum.SELECT_ALL)); + getEventBus().publish(this, + new DistributionSetTableEvent(DistributionTableComponentEvent.SELECT_ALL)); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java new file mode 100644 index 000000000..d1a5643a1 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java @@ -0,0 +1,25 @@ +package org.eclipse.hawkbit.ui.distributions.event; + +public class DistributionSetTableEvent { + + private final DistributionTableComponentEvent distributionSetTableEvent; + + /** + * The component event. + * + * @param distributionSetTableEvent + * the distributionSet component event. + */ + public DistributionSetTableEvent(final DistributionTableComponentEvent distributionSetTableEvent) { + this.distributionSetTableEvent = distributionSetTableEvent; + } + + /** + * DistributionSet table components events. + * + */ + public enum DistributionTableComponentEvent { + SELECT_ALL + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java index 3df0a7dd3..c6a625b10 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTypeEvent.java @@ -19,7 +19,7 @@ public class DistributionSetTypeEvent { * DistributionSet type events in the Distribution UI. */ public enum DistributionSetTypeEnum { - ADD_DIST_SET_TYPE, DELETE_DIST_SET_TYPE, UPDATE_DIST_SET_TYPE, ON_VALUE_CHANGE, SELECT_ALL + ADD_DIST_SET_TYPE, DELETE_DIST_SET_TYPE, UPDATE_DIST_SET_TYPE, ON_VALUE_CHANGE } private DistributionSetType distributionSetType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java index f722c3a23..772afd927 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java @@ -8,36 +8,20 @@ */ package org.eclipse.hawkbit.ui.distributions.event; -import org.eclipse.hawkbit.repository.model.SoftwareModule; -import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; -import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; - /** - * Class which contains the Event when selecting all entries of a table + * Class which contains the Event when selecting all entries of the + * softwareModule table */ -public class SoftwareModuleTableEvent extends BaseEntityEvent { +public class SoftwareModuleTableEvent { /** * SoftwareModule table components events. - * */ public enum SoftwareModuleComponentEvent { SELECT_ALL } - private SoftwareModuleComponentEvent softwareModuleComponentEvent; - - /** - * Constructor. - * - * @param eventType - * the event type. - * @param entity - * the entity - */ - public SoftwareModuleTableEvent(final BaseEntityEventType eventType, final SoftwareModule entity) { - super(eventType, entity); - } + private final SoftwareModuleComponentEvent softwareModuleComponentEvent; /** * The component event. @@ -46,7 +30,6 @@ public class SoftwareModuleTableEvent extends BaseEntityEvent { * the softwareModule component event. */ public SoftwareModuleTableEvent(final SoftwareModuleComponentEvent softwareModuleComponentEvent) { - super(null, null); this.softwareModuleComponentEvent = softwareModuleComponentEvent; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java index 213dda654..2cd34d3fa 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java @@ -11,8 +11,8 @@ package org.eclipse.hawkbit.ui.management.dstable; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.common.table.AbstractTableLayout; -import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; -import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionTableComponentEvent; +import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent; +import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent.DistributionTableComponentEvent; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.event.Action; @@ -73,7 +73,8 @@ public class DistributionTableLayout extends AbstractTableLayout { public void handleAction(final Action action, final Object sender, final Object target) { if (ACTION_CTRL_A.equals(action)) { dsTable.selectAll(); - getEventBus().publish(this, new DistributionTableEvent(DistributionTableComponentEvent.SELECT_ALL)); + getEventBus().publish(this, + new DistributionSetTableEvent(DistributionTableComponentEvent.SELECT_ALL)); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java index e60f432e7..c35942682 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/DistributionTableEvent.java @@ -13,20 +13,11 @@ import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; /** - * - * - * + * Class which contains the Event when selecting all entries of the + * distributions table */ public class DistributionTableEvent extends BaseEntityEvent { - /** - * DistributionSet table components events. - * - */ - public enum DistributionTableComponentEvent { - SELECT_ALL - } - /** * Constructor. * @@ -39,14 +30,4 @@ public class DistributionTableEvent extends BaseEntityEvent { super(eventType, entity); } - /** - * The component event. - * - * @param DistributionSetTableEvent - * the distributionSet component event. - */ - public DistributionTableEvent(final DistributionTableComponentEvent distributionComponentEvent) { - super(null, null); - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java index 04dd917a9..4cfbeecf5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java @@ -13,9 +13,7 @@ import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; /** - * - * - * + * Class which contains the Event when selecting all entries of the target table */ public class TargetTableEvent extends BaseEntityEvent { From 23b00999e66a72b7619e22df131a5a4aadcf1dc7 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 14 Jun 2016 11:02:16 +0200 Subject: [PATCH 251/371] fix softwaremodule Event Signed-off-by: Melanie Retter --- .../hawkbit/ui/artifacts/event/SoftwareModuleEvent.java | 2 +- .../ui/artifacts/smtable/SoftwareModuleTableLayout.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java index c01257154..95770cb8f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/event/SoftwareModuleEvent.java @@ -23,7 +23,7 @@ public class SoftwareModuleEvent extends BaseEntityEvent { * */ public enum SoftwareModuleEventType { - ARTIFACTS_CHANGED, ASSIGN_SOFTWARE_MODULE, SELECT_ALL + ARTIFACTS_CHANGED, ASSIGN_SOFTWARE_MODULE } private SoftwareModuleEventType softwareModuleEventType; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java index ec6b41e23..a0ed1b4ec 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java @@ -10,9 +10,9 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import javax.annotation.PostConstruct; -import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; -import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.common.table.AbstractTableLayout; +import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleTableEvent; +import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleTableEvent.SoftwareModuleComponentEvent; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.event.Action; @@ -73,7 +73,7 @@ public class SoftwareModuleTableLayout extends AbstractTableLayout { public void handleAction(final Action action, final Object sender, final Object target) { if (ACTION_CTRL_A.equals(action)) { smTable.selectAll(); - getEventBus().publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.SELECT_ALL, null)); + getEventBus().publish(this, new SoftwareModuleTableEvent(SoftwareModuleComponentEvent.SELECT_ALL)); } } From c3f2c4fc70bb582ae61fe5a73eaffe8474c8d086 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 14 Jun 2016 13:24:58 +0200 Subject: [PATCH 252/371] Refactor multiselect code Signed-off-by: Melanie Retter --- .../smtable/SoftwareModuleTableLayout.java | 40 +---------------- .../table/AbstractNamedVersionTable.java | 8 ---- .../ui/common/table/AbstractTable.java | 8 ++++ .../ui/common/table/AbstractTableLayout.java | 27 ++++++++++-- .../dstable/DistributionSetTableLayout.java | 43 ++----------------- .../event/DistributionSetTableEvent.java | 25 ----------- .../event/SoftwareModuleTableEvent.java | 40 ----------------- .../smtable/SwModuleTableLayout.java | 42 ++---------------- .../dstable/DistributionTableLayout.java | 41 +----------------- .../ui/management/event/TargetTableEvent.java | 2 +- .../management/footer/CountMessageLabel.java | 2 +- .../targettable/TargetTableLayout.java | 39 ++--------------- 12 files changed, 47 insertions(+), 270 deletions(-) delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java index a0ed1b4ec..2672c4546 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java @@ -11,12 +11,8 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.common.table.AbstractTableLayout; -import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleTableEvent; -import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleTableEvent.SoftwareModuleComponentEvent; import org.springframework.beans.factory.annotation.Autowired; -import com.vaadin.event.Action; -import com.vaadin.event.Action.Handler; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -46,41 +42,9 @@ public class SoftwareModuleTableLayout extends AbstractTableLayout { super.init(smTableHeader, smTable, softwareModuleDetails); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * isShortCutKeysRequired() - */ @Override - protected boolean isShortCutKeysRequired() { - return true; + protected void publishEvent() { + // nothing to publish } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * getShortCutKeysHandler() - */ - @Override - protected Handler getShortCutKeysHandler() { - return new Handler() { - - private static final long serialVersionUID = 1L; - - @Override - public void handleAction(final Action action, final Object sender, final Object target) { - if (ACTION_CTRL_A.equals(action)) { - smTable.selectAll(); - getEventBus().publish(this, new SoftwareModuleTableEvent(SoftwareModuleComponentEvent.SELECT_ALL)); - } - } - - @Override - public Action[] getActions(final Object target, final Object sender) { - return new Action[] { ACTION_CTRL_A }; - } - }; - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java index 3122841ae..ae185a70f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java @@ -54,12 +54,4 @@ public abstract class AbstractNamedVersionTable extends Table { } } + /** + * Select all rows in the table. + */ + protected void selectAll() { + // only contains the ItemIds of the visible items in the table + setValue(getItemIds()); + } + private void setColumnProperties() { final List columnList = getTableVisibleColumns(); final List swColumnIds = new ArrayList<>(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java index 9406dcb93..b85006468 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java @@ -12,6 +12,7 @@ import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; +import com.vaadin.event.Action; import com.vaadin.event.Action.Handler; import com.vaadin.event.ShortcutAction; import com.vaadin.ui.Alignment; @@ -89,10 +90,10 @@ public abstract class AbstractTableLayout extends VerticalLayout { /** * If any short cut keys required on the table. * - * @return true if required else false. Default is 'false'. + * @return true if required else false. Default is 'true'. */ protected boolean isShortCutKeysRequired() { - return false; + return true; } /** @@ -101,7 +102,27 @@ public abstract class AbstractTableLayout extends VerticalLayout { * @return reference of {@link Handler} to handler the short cut keys. * Default is null. */ - protected abstract Handler getShortCutKeysHandler(); + protected Handler getShortCutKeysHandler() { + return new Handler() { + + private static final long serialVersionUID = 1L; + + @Override + public void handleAction(final Action action, final Object sender, final Object target) { + if (ACTION_CTRL_A.equals(action)) { + table.selectAll(); + publishEvent(); + } + } + + @Override + public Action[] getActions(final Object target, final Object sender) { + return new Action[] { ACTION_CTRL_A }; + } + }; + } + + protected abstract void publishEvent(); public void setShowFilterButtonVisible(final boolean visible) { tableHeader.setFilterButtonsIconVisible(visible); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java index cf365b081..66c8aff0e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java @@ -11,17 +11,13 @@ package org.eclipse.hawkbit.ui.distributions.dstable; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.common.table.AbstractTableLayout; -import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent; -import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent.DistributionTableComponentEvent; import org.springframework.beans.factory.annotation.Autowired; -import com.vaadin.event.Action; -import com.vaadin.event.Action.Handler; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; /** - * DistributionSet table layout. + * DistributionSet table layout */ @SpringComponent @ViewScope @@ -50,42 +46,9 @@ public class DistributionSetTableLayout extends AbstractTableLayout { super.init(dsTableHeader, dsTable, distributionDetails); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * isShortCutKeysRequired() - */ @Override - protected boolean isShortCutKeysRequired() { - return true; + protected void publishEvent() { + // nothing to publish } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * getShortCutKeysHandler() - */ - @Override - protected Handler getShortCutKeysHandler() { - return new Handler() { - - private static final long serialVersionUID = 1L; - - @Override - public void handleAction(final Action action, final Object sender, final Object target) { - if (ACTION_CTRL_A.equals(action)) { - dsTable.selectAll(); - getEventBus().publish(this, - new DistributionSetTableEvent(DistributionTableComponentEvent.SELECT_ALL)); - } - } - - @Override - public Action[] getActions(final Object target, final Object sender) { - return new Action[] { ACTION_CTRL_A }; - } - }; - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java deleted file mode 100644 index d1a5643a1..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/DistributionSetTableEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.eclipse.hawkbit.ui.distributions.event; - -public class DistributionSetTableEvent { - - private final DistributionTableComponentEvent distributionSetTableEvent; - - /** - * The component event. - * - * @param distributionSetTableEvent - * the distributionSet component event. - */ - public DistributionSetTableEvent(final DistributionTableComponentEvent distributionSetTableEvent) { - this.distributionSetTableEvent = distributionSetTableEvent; - } - - /** - * DistributionSet table components events. - * - */ - public enum DistributionTableComponentEvent { - SELECT_ALL - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java deleted file mode 100644 index 772afd927..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/event/SoftwareModuleTableEvent.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.distributions.event; - -/** - * Class which contains the Event when selecting all entries of the - * softwareModule table - */ -public class SoftwareModuleTableEvent { - - /** - * SoftwareModule table components events. - */ - public enum SoftwareModuleComponentEvent { - SELECT_ALL - } - - private final SoftwareModuleComponentEvent softwareModuleComponentEvent; - - /** - * The component event. - * - * @param softwareModuleComponentEvent - * the softwareModule component event. - */ - public SoftwareModuleTableEvent(final SoftwareModuleComponentEvent softwareModuleComponentEvent) { - this.softwareModuleComponentEvent = softwareModuleComponentEvent; - } - - public SoftwareModuleComponentEvent getSoftwareModuleComponentEvent() { - return softwareModuleComponentEvent; - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java index b2fab5cc9..e0d4b8ac6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java @@ -11,17 +11,13 @@ package org.eclipse.hawkbit.ui.distributions.smtable; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.common.table.AbstractTableLayout; -import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleTableEvent; -import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleTableEvent.SoftwareModuleComponentEvent; import org.springframework.beans.factory.annotation.Autowired; -import com.vaadin.event.Action; -import com.vaadin.event.Action.Handler; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; /** - * Implementation of software module Layout . + * Implementation of software module Layout */ @SpringComponent @ViewScope @@ -46,41 +42,9 @@ public class SwModuleTableLayout extends AbstractTableLayout { super.init(swModuleTableHeader, swModuleTable, swModuleDetails); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * isShortCutKeysRequired() - */ @Override - protected boolean isShortCutKeysRequired() { - return true; + protected void publishEvent() { + // nothing to publish } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * getShortCutKeysHandler() - */ - @Override - protected Handler getShortCutKeysHandler() { - return new Handler() { - - private static final long serialVersionUID = 1L; - - @Override - public void handleAction(final Action action, final Object sender, final Object target) { - if (ACTION_CTRL_A.equals(action)) { - swModuleTable.selectAll(); - getEventBus().publish(this, new SoftwareModuleTableEvent(SoftwareModuleComponentEvent.SELECT_ALL)); - } - } - - @Override - public Action[] getActions(final Object target, final Object sender) { - return new Action[] { ACTION_CTRL_A }; - } - }; - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java index 2cd34d3fa..fefbca972 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java @@ -11,12 +11,8 @@ package org.eclipse.hawkbit.ui.management.dstable; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.common.table.AbstractTableLayout; -import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent; -import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTableEvent.DistributionTableComponentEvent; import org.springframework.beans.factory.annotation.Autowired; -import com.vaadin.event.Action; -import com.vaadin.event.Action.Handler; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -46,42 +42,9 @@ public class DistributionTableLayout extends AbstractTableLayout { super.init(dsTableHeader, dsTable, distributionDetails); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * isShortCutKeysRequired() - */ @Override - protected boolean isShortCutKeysRequired() { - return true; + protected void publishEvent() { + // nothing to publish } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * getShortCutKeysHandler() - */ - @Override - protected Handler getShortCutKeysHandler() { - return new Handler() { - - private static final long serialVersionUID = 1L; - - @Override - public void handleAction(final Action action, final Object sender, final Object target) { - if (ACTION_CTRL_A.equals(action)) { - dsTable.selectAll(); - getEventBus().publish(this, - new DistributionSetTableEvent(DistributionTableComponentEvent.SELECT_ALL)); - } - } - - @Override - public Action[] getActions(final Object target, final Object sender) { - return new Action[] { ACTION_CTRL_A }; - } - }; - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java index 4cfbeecf5..214d12106 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/event/TargetTableEvent.java @@ -22,7 +22,7 @@ public class TargetTableEvent extends BaseEntityEvent { * */ public enum TargetComponentEvent { - REFRESH_TARGETS, SELLECT_ALL, BULK_TARGET_CREATED, BULK_UPLOAD_COMPLETED, BULK_TARGET_UPLOAD_STARTED, BULK_UPLOAD_PROCESS_STARTED + REFRESH_TARGETS, SELECT_ALL, BULK_TARGET_CREATED, BULK_UPLOAD_COMPLETED, BULK_TARGET_UPLOAD_STARTED, BULK_UPLOAD_PROCESS_STARTED } private TargetComponentEvent targetComponentEvent; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java index ed6d033bd..fccee7cb5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/CountMessageLabel.java @@ -95,7 +95,7 @@ public class CountMessageLabel extends Label { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final TargetTableEvent event) { - if (TargetTableEvent.TargetComponentEvent.SELLECT_ALL == event.getTargetComponentEvent() + if (TargetTableEvent.TargetComponentEvent.SELECT_ALL == event.getTargetComponentEvent() || TargetComponentEvent.REFRESH_TARGETS == event.getTargetComponentEvent()) { displayTargetCountStatus(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java index 2bd86868c..8c3ec3a1a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableLayout.java @@ -16,8 +16,6 @@ import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentE import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; -import com.vaadin.event.Action; -import com.vaadin.event.Action.Handler; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -47,45 +45,14 @@ public class TargetTableLayout extends AbstractTableLayout { */ @PostConstruct void init() { + super.init(targetTableHeader, targetTable, targetDetails); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * isShortCutKeysRequired() - */ @Override - protected boolean isShortCutKeysRequired() { - return true; - } + protected void publishEvent() { - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout# - * getShortCutKeysHandler() - */ - @Override - protected Handler getShortCutKeysHandler() { - return new Handler() { - - private static final long serialVersionUID = 1L; - - @Override - public void handleAction(final Action action, final Object sender, final Object target) { - if (ACTION_CTRL_A.equals(action)) { - targetTable.selectAll(); - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.SELLECT_ALL)); - } - } - - @Override - public Action[] getActions(final Object target, final Object sender) { - return new Action[] { ACTION_CTRL_A }; - } - }; + eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.SELECT_ALL)); } } From 2b33f3646b5f221556a4af92a381292affe3f755 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 14 Jun 2016 13:28:29 +0200 Subject: [PATCH 253/371] remove EventBus from AbstractTableLayout Signed-off-by: Melanie Retter --- .../hawkbit/ui/common/table/AbstractTableLayout.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java index b85006468..98874626d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.common.table; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.event.Action; import com.vaadin.event.Action.Handler; @@ -33,9 +32,6 @@ public abstract class AbstractTableLayout extends VerticalLayout { protected static final ShortcutAction ACTION_CTRL_A = new ShortcutAction("Select All", ShortcutAction.KeyCode.A, new int[] { ShortcutAction.ModifierKey.CTRL }); - @Autowired - private transient EventBus.SessionEventBus eventBus; - private AbstractTableHeader tableHeader; private AbstractTable table; @@ -128,8 +124,4 @@ public abstract class AbstractTableLayout extends VerticalLayout { tableHeader.setFilterButtonsIconVisible(visible); } - public EventBus.SessionEventBus getEventBus() { - return eventBus; - } - } From a690ff2b7067c76581291dc312c741c404886281 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 14 Jun 2016 17:50:54 +0200 Subject: [PATCH 254/371] Fixed new factory configuration. It was non optional which in result will not work if the factory comes from another source, e.g. cloud foundry. Signed-off-by: Kai Zimmermann --- .../main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index 541ae414c..dcf7e9e99 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -59,6 +59,7 @@ public class AmqpConfiguration { private ConnectionFactory rabbitConnectionFactory; @Configuration + @ConditionalOnMissingBean(ConnectionFactory.class) protected static class RabbitConnectionFactoryCreator { @Autowired From e35ef0f7db8f780c03045d6a60e69c386621a694 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 14 Jun 2016 19:10:21 +0200 Subject: [PATCH 255/371] only select all rows if table is multiselect Signed-off-by: Melanie Retter --- .../org/eclipse/hawkbit/ui/common/table/AbstractTable.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java index 89e8be799..1121ac8a7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java @@ -157,8 +157,10 @@ public abstract class AbstractTable extends Table { * Select all rows in the table. */ protected void selectAll() { - // only contains the ItemIds of the visible items in the table - setValue(getItemIds()); + if (isMultiSelect()) { + // only contains the ItemIds of the visible items in the table + setValue(getItemIds()); + } } private void setColumnProperties() { From ecd56474382d73ca9e628d916cefb5b93c06874b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 15 Jun 2016 10:45:34 +0200 Subject: [PATCH 256/371] extends mgmt simulator. Extended scalabaility of dmf listener. Signed-off-by: Kai Zimmermann --- .../simulator/amqp/AmqpConfiguration.java | 45 +++++--- .../hawkbit/simulator/amqp/SenderService.java | 22 +++- .../simulator/amqp/SpReceiverService.java | 11 +- .../{logback.xml => logback-spring.xml} | 4 +- .../hawkbit/mgmt/client/Application.java | 9 +- .../client/ClientConfigurationProperties.java | 31 +++++ .../scenarios/ConfigurableScenario.java | 108 ++++++++++++++++-- .../src/main/resources/application.properties | 14 +-- .../{logback.xml => logback-spring.xml} | 0 .../hawkbit/amqp/AmqpConfiguration.java | 7 ++ .../eclipse/hawkbit/amqp/AmqpProperties.java | 15 ++- .../mgmt/rest/api/MgmtTargetRestApi.java | 83 +++++++------- .../mgmt/rest/resource/MgmtTargetMapper.java | 5 +- .../rest/resource/MgmtTargetResource.java | 66 +++++------ .../java/org/eclipse/hawkbit/util/IpUtil.java | 16 ++- 15 files changed, 315 insertions(+), 121 deletions(-) rename examples/hawkbit-device-simulator/src/main/resources/{logback.xml => logback-spring.xml} (94%) rename examples/hawkbit-example-mgmt-simulator/src/main/resources/{logback.xml => logback-spring.xml} (100%) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java index e954cec96..57d4762b0 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java @@ -12,6 +12,8 @@ import java.time.Duration; import java.util.HashMap; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; @@ -22,42 +24,53 @@ import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; -import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.retry.backoff.ExponentialBackOffPolicy; +import org.springframework.retry.support.RetryTemplate; /** * The spring AMQP configuration to use a AMQP for communication with SP update * server. - * - * - * */ @Configuration @EnableConfigurationProperties(AmqpProperties.class) public class AmqpConfiguration { + private static final Logger LOGGER = LoggerFactory.getLogger(AmqpConfiguration.class); + @Autowired protected AmqpProperties amqpProperties; @Autowired private ConnectionFactory connectionFactory; - @Autowired - private RabbitTemplate rabbitTemplate; - /** - * Create jackson message converter bean. - * - * @return the jackson message converter + * @return {@link RabbitTemplate} with automatic retry, published confirms + * and {@link Jackson2JsonMessageConverter}. */ @Bean - public MessageConverter jsonMessageConverter() { - final Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter(); - rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter); - return jackson2JsonMessageConverter; + public RabbitTemplate rabbitTemplate() { + final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); + rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); + + final RetryTemplate retryTemplate = new RetryTemplate(); + retryTemplate.setBackOffPolicy(new ExponentialBackOffPolicy()); + rabbitTemplate.setRetryTemplate(retryTemplate); + + rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> { + if (ack) { + LOGGER.debug("Message with correlation ID {} confirmed by broker.", correlationData.getId()); + } else { + LOGGER.error("Broker is unable to handle message with correlation ID {} : {}", correlationData.getId(), + cause); + } + + }); + + return rabbitTemplate; } /** @@ -138,8 +151,8 @@ public class AmqpConfiguration { final SimpleRabbitListenerContainerFactory containerFactory = new SimpleRabbitListenerContainerFactory(); containerFactory.setDefaultRequeueRejected(false); containerFactory.setConnectionFactory(connectionFactory); - containerFactory.setConcurrentConsumers(20); - containerFactory.setMaxConcurrentConsumers(20); + containerFactory.setConcurrentConsumers(3); + containerFactory.setMaxConcurrentConsumers(10); containerFactory.setPrefetchCount(20); return containerFactory; } diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java index 6ed6ff0cb..6f16ac736 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java @@ -8,9 +8,14 @@ */ package org.eclipse.hawkbit.simulator.amqp; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.rabbit.support.CorrelationData; import org.springframework.amqp.support.converter.AbstractJavaTypeMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -22,6 +27,8 @@ import org.springframework.beans.factory.annotation.Autowired; */ public abstract class SenderService extends MessageService { + private static final Logger LOGGER = LoggerFactory.getLogger(SenderService.class); + /** * Constructor for sender service. * @@ -40,18 +47,25 @@ public abstract class SenderService extends MessageService { /** * Send a message if the message is not null. * - * @param adress + * @param address * the exchange name * @param message * the amqp message which will be send if its not null */ - public void sendMessage(final String adress, final Message message) { + public void sendMessage(final String address, final Message message) { if (message == null) { return; } message.getMessageProperties().getHeaders().remove(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME); - rabbitTemplate.setExchange(adress); - rabbitTemplate.send(message); + final String correlationId = UUID.randomUUID().toString(); + + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Sending message {} to exchange {} with correlationId {}", message, address, correlationId); + } else { + LOGGER.debug("Sending message to exchange {} with correlationId {}", address, correlationId); + } + + rabbitTemplate.send(address, null, message, new CorrelationData(correlationId)); } /** diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpReceiverService.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpReceiverService.java index e06b2baf3..4f2981be1 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpReceiverService.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpReceiverService.java @@ -35,14 +35,21 @@ import com.google.common.collect.Lists; public class SpReceiverService extends ReceiverService { private static final Logger LOGGER = LoggerFactory.getLogger(ReceiverService.class); - public static final String SOFTWARE_MODULE_FIRMWARE = "firmware"; - private final SpSenderService spSenderService; private final DeviceSimulatorUpdater deviceUpdater; /** * Constructor. + * + * @param rabbitTemplate + * for sending messages + * @param amqpProperties + * for amqp configuration + * @param spSenderService + * to send messages + * @param deviceUpdater + * simulator service for updates */ @Autowired public SpReceiverService(final RabbitTemplate rabbitTemplate, final AmqpProperties amqpProperties, diff --git a/examples/hawkbit-device-simulator/src/main/resources/logback.xml b/examples/hawkbit-device-simulator/src/main/resources/logback-spring.xml similarity index 94% rename from examples/hawkbit-device-simulator/src/main/resources/logback.xml rename to examples/hawkbit-device-simulator/src/main/resources/logback-spring.xml index 469c7bde3..f25a61cd1 100644 --- a/examples/hawkbit-device-simulator/src/main/resources/logback.xml +++ b/examples/hawkbit-device-simulator/src/main/resources/logback-spring.xml @@ -19,7 +19,9 @@ - + + + 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 036c19ed1..e89f3211b 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 @@ -48,7 +48,7 @@ public class Application implements CommandLineRunner { private ClientConfigurationProperties configuration; @Autowired - private ConfigurableScenario configurableScenario; + private ConfigurableScenario configuredScenario; @Autowired private CreateStartedRolloutExample gettingStartedRolloutScenario; @@ -63,9 +63,8 @@ public class Application implements CommandLineRunner { // run the create and start rollout example gettingStartedRolloutScenario.run(); } else { - // run the getting started scenario which creates a setup of - // distribution set and software modules to be used - configurableScenario.run(); + // run the configured scenario from properties + configuredScenario.run(); } } @@ -107,4 +106,4 @@ public class Application implements CommandLineRunner { } return false; } -} \ No newline at end of file +} diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java index cc5fe27e9..8a5c61575 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java @@ -39,8 +39,13 @@ public class ClientConfigurationProperties { private final List scenarios = new ArrayList<>(); + /** + * Simulation {@link Scenario}. + * + */ public static class Scenario { private String tenant = "DEFAULT"; + private boolean cleanRepository; private int targets = 100; private int distributionSets = 10; private int appModulesPerDistributionSet = 2; @@ -50,6 +55,8 @@ public class ClientConfigurationProperties { private String targetName = "Device"; private int artifactsPerSM = 1; private String targetAddress = "amqp:/simulator.replyTo"; + private boolean runRollouts = true; + private int rolloutDeploymentGroups = 4; /** * Artifact size. Values can use the suffixed "MB" or "KB" to indicate a @@ -57,6 +64,30 @@ public class ClientConfigurationProperties { */ private String artifactSize = "1MB"; + public boolean isCleanRepository() { + return cleanRepository; + } + + public void setCleanRepository(final boolean cleanRepository) { + this.cleanRepository = cleanRepository; + } + + public int getRolloutDeploymentGroups() { + return rolloutDeploymentGroups; + } + + public void setRolloutDeploymentGroups(final int rolloutDeploymentGroups) { + this.rolloutDeploymentGroups = rolloutDeploymentGroups; + } + + public boolean isRunRollouts() { + return runRollouts; + } + + public void setRunRollouts(final boolean runRollouts) { + this.runRollouts = runRollouts; + } + public String getTargetAddress() { return targetAddress; } 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 60144a88e..84b3da6ee 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 @@ -1,5 +1,5 @@ /** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. +x * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -10,20 +10,25 @@ 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; import org.eclipse.hawkbit.mgmt.client.ClientConfigurationProperties.Scenario; 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.MgmtSystemManagementClientResource; import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; import org.eclipse.hawkbit.mgmt.client.resource.builder.DistributionSetBuilder; +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; 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.Autowired; @@ -53,7 +58,7 @@ public class ConfigurableScenario { private MgmtTargetClientResource targetResource; @Autowired - private MgmtSystemManagementClientResource systemManagementResource; + private MgmtRolloutClientResource rolloutResource; @Autowired private ClientConfigurationProperties clientConfigurationProperties; @@ -65,16 +70,93 @@ public class ConfigurableScenario { LOGGER.info("Running Configurable Scenario..."); - clientConfigurationProperties.getScenarios().parallelStream().forEach(this::createScenario); + clientConfigurationProperties.getScenarios().forEach(this::createScenario); } private void createScenario(final Scenario scenario) { - systemManagementResource.deleteTenant(scenario.getTenant()); + if (scenario.isCleanRepository()) { + cleanRepository(); + } + createTargets(scenario); createDistributionSets(scenario); + + if (scenario.isRunRollouts()) { + runRollouts(scenario); + } + } + + private void cleanRepository() { + LOGGER.info("Cleaning repository"); + deleteTargets(); + deleteRollouts(); + deleteDistributionSets(); + deleteSoftwareModules(); + LOGGER.info("Cleaning repository -> Done"); + } + + private void deleteRollouts() { + // TODO: complete this as soon as rollouts can be deleted + + } + + private void deleteSoftwareModules() { + PagedList modules; + do { + modules = softwareModuleResource.getSoftwareModules(0, 100, null, null).getBody(); + modules.getContent().forEach(module -> softwareModuleResource.deleteSoftwareModule(module.getModuleId())); + } while (modules.getTotal() > 100); + } + + private void deleteDistributionSets() { + PagedList distributionSets; + do { + distributionSets = distributionSetResource.getDistributionSets(0, 100, null, null).getBody(); + distributionSets.getContent().forEach(set -> distributionSetResource.deleteDistributionSet(set.getDsId())); + } while (distributionSets.getTotal() > 100); + } + + private void deleteTargets() { + PagedList targets; + do { + targets = targetResource.getTargets(0, 100, null, null).getBody(); + targets.getContent().forEach(target -> targetResource.deleteTarget(target.getControllerId())); + } while (targets.getTotal() > 100); + } + + private void runRollouts(final Scenario scenario) { + distributionSetResource.getDistributionSets(0, scenario.getDistributionSets(), null, null).getBody() + .getContent().forEach(set -> runRollout(set, scenario)); + + } + + private void runRollout(final MgmtDistributionSet set, final Scenario scenario) { + LOGGER.info("Run rollout for set {}", set.getDsId()); + // create a Rollout + final MgmtRolloutResponseBody rolloutResponseBody = rolloutResource + .create(new RolloutBuilder().name("Rollout" + set.getName() + set.getVersion()) + .groupSize(scenario.getRolloutDeploymentGroups()).targetFilterQuery("name==*") + .distributionSetId(set.getDsId()).successThreshold("80").errorThreshold("5").build()) + .getBody(); + + // start the created Rollout + rolloutResource.start(rolloutResponseBody.getRolloutId(), true); + + // wait until rollout is complete + do { + try { + TimeUnit.SECONDS.sleep(35); + } catch (final InterruptedException e) { + LOGGER.warn("Interrupted!"); + Thread.currentThread().interrupt(); + } + } while (targetResource.getTargets(0, 1, null, "updateStatus==IN_SYNC").getBody().getTotal() < scenario + .getTargets()); + LOGGER.info("Run rollout for set {} -> Done", set.getDsId()); } private void createDistributionSets(final Scenario scenario) { + LOGGER.info("Creating {} distribution sets", scenario.getDistributionSets()); final byte[] artifact = generateArtifact(scenario); distributionSetResource @@ -87,6 +169,8 @@ public class ConfigurableScenario { modules.forEach(module -> assign.id(module.getModuleId())); distributionSetResource.assignSoftwareModules(dsSet.getDsId(), assign.build()); }); + + LOGGER.info("Creating {} distribution sets -> Done", scenario.getDistributionSets()); } private List addModules(final Scenario scenario, final MgmtDistributionSet dsSet, @@ -110,8 +194,10 @@ public class ConfigurableScenario { return modules; } - private byte[] generateArtifact(final Scenario scenario) { - // create random object + 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 @@ -124,14 +210,18 @@ public class ConfigurableScenario { } private void createTargets(final Scenario scenario) { + LOGGER.info("Creating {} targets", scenario.getTargets()); + for (int i = 0; i < scenario.getTargets() / 100; i++) { targetResource.createTargets(new TargetBuilder().controllerId(scenario.getTargetName()) .address(scenario.getTargetAddress()).buildAsList(i * 100, - (i + 1) * 100 > scenario.getTargets() ? scenario.getTargets() - i * 100 : 100)); + (i + 1) * 100 > scenario.getTargets() ? (scenario.getTargets() - (i * 100)) : 100)); } + + LOGGER.info("Creating {} targets -> Done", scenario.getTargets()); } - private int parseSize(final String s) { + private static int parseSize(final String s) { final String size = s.toUpperCase(); if (size.endsWith("KB")) { return Integer.valueOf(size.substring(0, size.length() - 2)) * 1024; diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties index f538bb1cb..e19b83e19 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties +++ b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties @@ -13,12 +13,8 @@ hawkbit.password=admin spring.main.show-banner=false -#hawkbit.scenarios.[0].targets=0 -#hawkbit.scenarios.[0].ds-name=gettingstarted-example -#hawkbit.scenarios.[0].distribution-sets=3 -#hawkbit.scenarios.[0].sm-fw-name=gettingstarted-example -#hawkbit.scenarios.[0].sm-sw-name=gettingstarted-example - -hawkbit.scenarios.[0].targets=10000 -hawkbit.scenarios.[0].distribution-sets=100 -hawkbit.scenarios.[0].artifactsPerSM=0 \ No newline at end of file +hawkbit.scenarios.[0].targets=0 +hawkbit.scenarios.[0].ds-name=gettingstarted-example +hawkbit.scenarios.[0].distribution-sets=3 +hawkbit.scenarios.[0].sm-fw-name=gettingstarted-example +hawkbit.scenarios.[0].sm-sw-name=gettingstarted-example \ No newline at end of file diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/resources/logback.xml b/examples/hawkbit-example-mgmt-simulator/src/main/resources/logback-spring.xml similarity index 100% rename from examples/hawkbit-example-mgmt-simulator/src/main/resources/logback.xml rename to examples/hawkbit-example-mgmt-simulator/src/main/resources/logback-spring.xml diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index 541ae414c..3fbc6aee2 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -32,6 +32,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.task.TaskExecutor; import org.springframework.retry.backoff.ExponentialBackOffPolicy; import org.springframework.retry.support.RetryTemplate;; @@ -58,6 +59,9 @@ public class AmqpConfiguration { @Autowired private ConnectionFactory rabbitConnectionFactory; + @Autowired + private TaskExecutor taskExecutor; + @Configuration protected static class RabbitConnectionFactoryCreator { @@ -240,6 +244,9 @@ public class AmqpConfiguration { containerFactory.setDefaultRequeueRejected(false); containerFactory.setConnectionFactory(rabbitConnectionFactory); containerFactory.setMissingQueuesFatal(amqpProperties.isMissingQueuesFatal()); + containerFactory.setTaskExecutor(taskExecutor); + containerFactory.setConcurrentConsumers(3); + containerFactory.setMaxConcurrentConsumers(amqpProperties.getMaxConcurrentConsumers()); return containerFactory; } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java index f9b4cceb6..a20c59792 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java @@ -38,13 +38,26 @@ public class AmqpProperties { /** * Missing queue fatal. */ - private boolean missingQueuesFatal = false; + private boolean missingQueuesFatal; /** * Requested heartbeat interval from broker in {@link TimeUnit#SECONDS}. */ private int requestedHeartBeat = (int) TimeUnit.SECONDS.toSeconds(60); + /** + * Sets an upper limit to the number of consumers. + */ + private int maxConcurrentConsumers = 10; + + public int getMaxConcurrentConsumers() { + return maxConcurrentConsumers; + } + + public void setMaxConcurrentConsumers(final int maxConcurrentConsumers) { + this.maxConcurrentConsumers = maxConcurrentConsumers; + } + /** * Is missingQueuesFatal enabled * 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 bf4e169a0..97a0eae5c 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 @@ -35,14 +35,14 @@ public interface MgmtTargetRestApi { /** * Handles the GET request of retrieving a single target. * - * @param targetId + * @param controllerId * the ID of the target to retrieve * @return a single target with status OK. */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetId}", produces = { "application/hal+json", + @RequestMapping(method = RequestMethod.GET, value = "/{controllerId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getTarget(@PathVariable("targetId") final String targetId); + ResponseEntity getTarget(@PathVariable("controllerId") final String controllerId); /** * Handles the GET request of retrieving all targets. @@ -91,7 +91,7 @@ public interface MgmtTargetRestApi { * path of the request. A given ID in the request body is ignored. It's not * possible to set fields to {@code null} values. * - * @param targetId + * @param controllerId * the path parameter which contains the ID of the target * @param targetRest * the request body which contains the fields which should be @@ -100,40 +100,40 @@ public interface MgmtTargetRestApi { * @return the updated target response which contains all fields also fields * which have not updated */ - @RequestMapping(method = RequestMethod.PUT, value = "/{targetId}", consumes = { "application/hal+json", + @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("targetId") final String targetId, + ResponseEntity updateTarget(@PathVariable("controllerId") final String controllerId, @RequestBody final MgmtTargetRequestBody targetRest); /** * Handles the DELETE request of deleting a target. * - * @param targetId + * @param controllerId * the ID of the target to be deleted - * @return If the given targetId could exists and could be deleted Http OK. - * In any failure the JsonResponseExceptionHandler is handling the - * response. + * @return If the given controllerId could exists and could be deleted Http + * OK. In any failure the JsonResponseExceptionHandler is handling + * the response. */ - @RequestMapping(method = RequestMethod.DELETE, value = "/{targetId}", produces = { "application/hal+json", + @RequestMapping(method = RequestMethod.DELETE, value = "/{controllerId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity deleteTarget(@PathVariable("targetId") final String targetId); + ResponseEntity deleteTarget(@PathVariable("controllerId") final String controllerId); /** * Handles the GET request of retrieving the attributes of a specific * target. * - * @param targetId + * @param controllerId * the ID of the target to retrieve the attributes. * @return the target attributes as map response with status OK */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/attributes", produces = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getAttributes(@PathVariable("targetId") final String targetId); + @RequestMapping(method = RequestMethod.GET, value = "/{controllerId}/attributes", produces = { + "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity getAttributes(@PathVariable("controllerId") final String controllerId); /** * Handles the GET request of retrieving the Actions of a specific target. * - * @param targetId + * @param controllerId * to load actions for * @param pagingOffsetParam * the offset of list of targets for pagination, might not be @@ -151,9 +151,9 @@ public interface MgmtTargetRestApi { * status OK. The response is always paged. In any failure the * JsonResponseExceptionHandler is handling the response. */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/actions", produces = { "application/hal+json", + @RequestMapping(method = RequestMethod.GET, value = "/{controllerId}/actions", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> getActionHistory(@PathVariable("targetId") final String targetId, + ResponseEntity> getActionHistory(@PathVariable("controllerId") final String controllerId, @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, @@ -163,22 +163,22 @@ public interface MgmtTargetRestApi { * Handles the GET request of retrieving a specific Actions of a specific * Target. * - * @param targetId + * @param controllerId * to load the action for * @param actionId * to load * @return the action */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/actions/{actionId}", produces = { + @RequestMapping(method = RequestMethod.GET, value = "/{controllerId}/actions/{actionId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getAction(@PathVariable("targetId") final String targetId, + ResponseEntity getAction(@PathVariable("controllerId") final String controllerId, @PathVariable("actionId") final Long actionId); /** * Handles the DELETE request of canceling an specific Actions of a specific * Target. * - * @param targetId + * @param controllerId * the ID of the target in the URL path parameter * @param actionId * the ID of the action in the URL path parameter @@ -186,8 +186,8 @@ public interface MgmtTargetRestApi { * optional parameter, which indicates a force cancel * @return status no content in case cancellation was successful */ - @RequestMapping(method = RequestMethod.DELETE, value = "/{targetId}/actions/{actionId}") - ResponseEntity cancelAction(@PathVariable("targetId") final String targetId, + @RequestMapping(method = RequestMethod.DELETE, value = "/{controllerId}/actions/{actionId}") + ResponseEntity cancelAction(@PathVariable("controllerId") final String controllerId, @PathVariable("actionId") final Long actionId, @RequestParam(value = "force", required = false, defaultValue = "false") final boolean force); @@ -195,7 +195,7 @@ public interface MgmtTargetRestApi { * Handles the GET request of retrieving the ActionStatus of a specific * target and action. * - * @param targetId + * @param controllerId * of the the action * @param actionId * of the status we are intend to load @@ -212,10 +212,10 @@ public interface MgmtTargetRestApi { * with status OK. The response is always paged. In any failure the * JsonResponseExceptionHandler is handling the response. */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/actions/{actionId}/status", produces = { + @RequestMapping(method = RequestMethod.GET, value = "/{controllerId}/actions/{actionId}/status", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> getActionStatusList(@PathVariable("targetId") final String targetId, - @PathVariable("actionId") final Long actionId, + ResponseEntity> getActionStatusList( + @PathVariable("controllerId") final String controllerId, @PathVariable("actionId") final Long actionId, @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); @@ -224,40 +224,43 @@ public interface MgmtTargetRestApi { * Handles the GET request of retrieving the assigned distribution set of an * specific target. * - * @param targetId + * @param controllerId * the ID of the target to retrieve the assigned distribution * @return the assigned distribution set with status OK, if none is assigned * than {@code null} content (e.g. "{}") */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/assignedDS", produces = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getAssignedDistributionSet(@PathVariable("targetId") final String targetId); + @RequestMapping(method = RequestMethod.GET, value = "/{controllerId}/assignedDS", produces = { + "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity getAssignedDistributionSet( + @PathVariable("controllerId") final String controllerId); /** * Changes the assigned distribution set of a target. * - * @param targetId + * @param controllerId * of the target to change * @param dsId * of the distributionset that is to be assigned * @return http status */ - @RequestMapping(method = RequestMethod.POST, value = "/{targetId}/assignedDS", consumes = { "application/hal+json", + @RequestMapping(method = RequestMethod.POST, value = "/{controllerId}/assignedDS", consumes = { + "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity postAssignedDistributionSet(@PathVariable("targetId") final String targetId, + ResponseEntity postAssignedDistributionSet(@PathVariable("controllerId") final String controllerId, @RequestBody final MgmtDistributionSetAssigment dsId); /** * Handles the GET request of retrieving the installed distribution set of * an specific target. * - * @param targetId + * @param controllerId * the ID of the target to retrieve * @return the assigned installed set with status OK, if none is installed * than {@code null} content (e.g. "{}") */ - @RequestMapping(method = RequestMethod.GET, value = "/{targetId}/installedDS", produces = { "application/hal+json", - MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getInstalledDistributionSet(@PathVariable("targetId") final String targetId); + @RequestMapping(method = RequestMethod.GET, value = "/{controllerId}/installedDS", produces = { + "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity getInstalledDistributionSet( + @PathVariable("controllerId") final String controllerId); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java index d77cbaa53..f6cf9f54b 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java @@ -32,6 +32,7 @@ import org.eclipse.hawkbit.repository.model.PollStatus; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.rest.data.SortDirection; +import org.eclipse.hawkbit.util.IpUtil; /** * A mapper which maps repository model to RESTful model representation and @@ -141,7 +142,9 @@ public final class MgmtTargetMapper { final URI address = target.getTargetInfo().getAddress(); if (address != null) { - targetRest.setIpAddress(address.getHost()); + if (IpUtil.isIpAddresKnown(address)) { + targetRest.setIpAddress(address.getHost()); + } targetRest.setAddress(address.toString()); } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java index cc7bbcde6..c41dadd27 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java @@ -68,8 +68,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi { private EntityFactory entityFactory; @Override - public ResponseEntity getTarget(@PathVariable("targetId") final String targetId) { - final Target findTarget = findTargetWithExceptionIfNotFound(targetId); + public ResponseEntity getTarget(@PathVariable("controllerId") final String controllerId) { + final Target findTarget = findTargetWithExceptionIfNotFound(controllerId); // to single response include poll status final MgmtTarget response = MgmtTargetMapper.toResponse(findTarget); MgmtTargetMapper.addPollStatus(findTarget, response); @@ -115,9 +115,9 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity updateTarget(@PathVariable("targetId") final String targetId, + public ResponseEntity updateTarget(@PathVariable("controllerId") final String controllerId, @RequestBody final MgmtTargetRequestBody targetRest) { - final Target existingTarget = findTargetWithExceptionIfNotFound(targetId); + final Target existingTarget = findTargetWithExceptionIfNotFound(controllerId); LOG.debug("updating target {}", existingTarget.getId()); if (targetRest.getDescription() != null) { existingTarget.setDescription(targetRest.getDescription()); @@ -131,16 +131,16 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity deleteTarget(@PathVariable("targetId") final String targetId) { - final Target target = findTargetWithExceptionIfNotFound(targetId); + public ResponseEntity deleteTarget(@PathVariable("controllerId") final String controllerId) { + final Target target = findTargetWithExceptionIfNotFound(controllerId); this.targetManagement.deleteTargets(target.getId()); - LOG.debug("{} target deleted, return status {}", targetId, HttpStatus.OK); + LOG.debug("{} target deleted, return status {}", controllerId, HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK); } @Override - public ResponseEntity getAttributes(@PathVariable("targetId") final String targetId) { - final Target foundTarget = findTargetWithExceptionIfNotFound(targetId); + public ResponseEntity getAttributes(@PathVariable("controllerId") final String controllerId) { + final Target foundTarget = findTargetWithExceptionIfNotFound(controllerId); final Map controllerAttributes = foundTarget.getTargetInfo().getControllerAttributes(); if (controllerAttributes.isEmpty()) { return new ResponseEntity<>(HttpStatus.NO_CONTENT); @@ -153,13 +153,14 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity> getActionHistory(@PathVariable("targetId") final String targetId, + public ResponseEntity> getActionHistory( + @PathVariable("controllerId") final String controllerId, @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) { - final Target foundTarget = findTargetWithExceptionIfNotFound(targetId); + final Target foundTarget = findTargetWithExceptionIfNotFound(controllerId); final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -177,14 +178,15 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } return new ResponseEntity<>( - new PagedList<>(MgmtTargetMapper.toResponse(targetId, activeActions.getContent()), totalActionCount), + new PagedList<>(MgmtTargetMapper.toResponse(controllerId, activeActions.getContent()), + totalActionCount), HttpStatus.OK); } @Override - public ResponseEntity getAction(@PathVariable("targetId") final String targetId, + public ResponseEntity getAction(@PathVariable("controllerId") final String controllerId, @PathVariable("actionId") final Long actionId) { - final Target target = findTargetWithExceptionIfNotFound(targetId); + final Target target = findTargetWithExceptionIfNotFound(controllerId); final Action action = findActionWithExceptionIfNotFound(actionId); if (!action.getTarget().getId().equals(target.getId())) { @@ -192,18 +194,18 @@ public class MgmtTargetResource implements MgmtTargetRestApi { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } - final MgmtAction result = MgmtTargetMapper.toResponse(targetId, action, action.isActive()); + final MgmtAction result = MgmtTargetMapper.toResponse(controllerId, action, action.isActive()); if (!action.isCancelingOrCanceled()) { result.add(linkTo( methodOn(MgmtDistributionSetRestApi.class).getDistributionSet(action.getDistributionSet().getId())) .withRel("distributionset")); } else if (action.isCancelingOrCanceled()) { - result.add(linkTo(methodOn(MgmtTargetRestApi.class).getAction(targetId, action.getId())) + result.add(linkTo(methodOn(MgmtTargetRestApi.class).getAction(controllerId, action.getId())) .withRel(MgmtRestConstants.TARGET_V1_CANCELED_ACTION)); } - result.add(linkTo(methodOn(MgmtTargetRestApi.class).getActionStatusList(targetId, action.getId(), 0, + result.add(linkTo(methodOn(MgmtTargetRestApi.class).getActionStatusList(controllerId, action.getId(), 0, MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, ActionStatusFields.ID.getFieldName() + ":" + SortDirection.DESC)) .withRel(MgmtRestConstants.TARGET_V1_ACTION_STATUS)); @@ -212,10 +214,10 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity cancelAction(@PathVariable("targetId") final String targetId, + public ResponseEntity cancelAction(@PathVariable("controllerId") final String controllerId, @PathVariable("actionId") final Long actionId, @RequestParam(value = "force", required = false, defaultValue = "false") final boolean force) { - final Target target = findTargetWithExceptionIfNotFound(targetId); + final Target target = findTargetWithExceptionIfNotFound(controllerId); final Action action = findActionWithExceptionIfNotFound(actionId); if (force) { @@ -231,12 +233,12 @@ public class MgmtTargetResource implements MgmtTargetRestApi { @Override public ResponseEntity> getActionStatusList( - @PathVariable("targetId") final String targetId, @PathVariable("actionId") final Long actionId, + @PathVariable("controllerId") final String controllerId, @PathVariable("actionId") final Long actionId, @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) { - final Target target = findTargetWithExceptionIfNotFound(targetId); + final Target target = findTargetWithExceptionIfNotFound(controllerId); final Action action = findActionWithExceptionIfNotFound(actionId); if (!action.getTarget().getId().equals(target.getId())) { @@ -260,8 +262,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi { @Override public ResponseEntity getAssignedDistributionSet( - @PathVariable("targetId") final String targetId) { - final Target findTarget = findTargetWithExceptionIfNotFound(targetId); + @PathVariable("controllerId") final String controllerId) { + final Target findTarget = findTargetWithExceptionIfNotFound(controllerId); final MgmtDistributionSet distributionSetRest = MgmtDistributionSetMapper .toResponse(findTarget.getAssignedDistributionSet()); final HttpStatus retStatus; @@ -274,29 +276,29 @@ public class MgmtTargetResource implements MgmtTargetRestApi { } @Override - public ResponseEntity postAssignedDistributionSet(@PathVariable("targetId") final String targetId, + public ResponseEntity postAssignedDistributionSet(@PathVariable("controllerId") final String controllerId, @RequestBody final MgmtDistributionSetAssigment dsId) { - findTargetWithExceptionIfNotFound(targetId); + findTargetWithExceptionIfNotFound(controllerId); final ActionType type = (dsId.getType() != null) ? MgmtRestModelMapper.convertActionType(dsId.getType()) : ActionType.FORCED; final Iterator changed = this.deploymentManagement - .assignDistributionSet(dsId.getId(), type, dsId.getForcetime(), targetId).getAssignedEntity() + .assignDistributionSet(dsId.getId(), type, dsId.getForcetime(), controllerId).getAssignedEntity() .iterator(); if (changed.hasNext()) { return new ResponseEntity<>(HttpStatus.OK); } LOG.error("Target update (ds {} assigment to target {}) failed! Returnd target list is empty.", dsId.getId(), - targetId); + controllerId); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } @Override public ResponseEntity getInstalledDistributionSet( - @PathVariable("targetId") final String targetId) { - final Target findTarget = findTargetWithExceptionIfNotFound(targetId); + @PathVariable("controllerId") final String controllerId) { + final Target findTarget = findTargetWithExceptionIfNotFound(controllerId); final MgmtDistributionSet distributionSetRest = MgmtDistributionSetMapper .toResponse(findTarget.getTargetInfo().getInstalledDistributionSet()); final HttpStatus retStatus; @@ -308,10 +310,10 @@ public class MgmtTargetResource implements MgmtTargetRestApi { return new ResponseEntity<>(distributionSetRest, retStatus); } - private Target findTargetWithExceptionIfNotFound(final String targetId) { - final Target findTarget = this.targetManagement.findTargetByControllerID(targetId); + private Target findTargetWithExceptionIfNotFound(final String controllerId) { + final Target findTarget = this.targetManagement.findTargetByControllerID(controllerId); if (findTarget == null) { - throw new EntityNotFoundException("Target with Id {" + targetId + "} does not exist"); + throw new EntityNotFoundException("Target with Id {" + controllerId + "} does not exist"); } return findTarget; } diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java index 96fc557aa..c7778f776 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/util/IpUtil.java @@ -26,6 +26,7 @@ import com.google.common.net.HttpHeaders; */ public final class IpUtil { + private static final String HIDDEN_IP = "***"; private static final String SCHEME_SEPERATOR = "://"; private static final String HTTP_SCHEME = "http"; private static final String AMPQP_SCHEME = "amqp"; @@ -87,7 +88,7 @@ public final class IpUtil { ip = request.getRemoteAddr(); } } else { - ip = "***"; + ip = HIDDEN_IP; } return createHttpUri(ip); @@ -178,4 +179,17 @@ public final class IpUtil { public static boolean isAmqpUri(final URI uri) { return uri != null && AMPQP_SCHEME.equals(uri.getScheme()); } + + /** + * Check if the IP address of that {@link URI} is known, i.e. not an AQMP + * exchange in DMF case and not HIDDEN_IP in DDI case. + * + * @param uri + * the uri + * @return true if IP address is actually known by the server + */ + public static boolean isIpAddresKnown(final URI uri) { + return uri != null && !(AMPQP_SCHEME.equals(uri.getScheme()) || HIDDEN_IP.equals(uri.getHost())); + } + } From 7345855a44b2a964c5ff72ee929bd164769ca420 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 15 Jun 2016 10:49:43 +0200 Subject: [PATCH 257/371] Add line ending Signed-off-by: SirWayne --- .../security/InMemoryUserManagementConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java index 84846908e..fc979fd67 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/InMemoryUserManagementConfiguration.java @@ -73,4 +73,4 @@ public class InMemoryUserManagementConfiguration extends GlobalAuthenticationCon return result; } } -} \ No newline at end of file +} From f5f07e4af2f783642eb80da1d58b3600a4eae73b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 15 Jun 2016 10:57:06 +0200 Subject: [PATCH 258/371] Add line ending Signed-off-by: SirWayne --- .../repository/jpa/SystemManagementCacheKeyGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java index 9ca8ea7fa..2bed4aeff 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java @@ -62,4 +62,4 @@ public class SystemManagementCacheKeyGenerator implements CurrentTenantCacheKeyG return createInitialTenant; } -} \ No newline at end of file +} From 4e91b87aed4cbd90437eee9d01b166ca08cb86af Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 15 Jun 2016 11:10:29 +0200 Subject: [PATCH 259/371] mandatoryLabel inserted in content Signed-off-by: Melanie Retter --- .../smtable/SoftwareModuleAddUpdateWindow.java | 8 +++++++- .../hawkbit/ui/common/CommonDialogWindow.java | 18 +++++++++++++++--- .../layouts/AbstractCreateUpdateTagLayout.java | 4 ++++ .../TargetAddUpdateWindowLayout.java | 4 ++++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 85b55d69d..7fe8e25de 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -92,6 +92,8 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se private Long baseSwModuleId; + private FormLayout formLayout; + /** * Create window for new software module. * @@ -207,7 +209,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se */ addStyleName("lay-color"); - final FormLayout formLayout = new FormLayout(); + formLayout = new FormLayout(); formLayout.setCaption(null); formLayout.addComponent(typeComboBox); formLayout.addComponent(nameTextField); @@ -369,4 +371,8 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se return !(event.getText().equals(oldVendorValue) && descTextArea.getValue().equals(oldDescriptionValue)); } + public FormLayout getFormLayout() { + return formLayout; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 754f61ed2..d3153ee9a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -14,8 +14,11 @@ import java.io.Serializable; import java.util.Map; import org.apache.commons.lang3.StringUtils; +import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleBorderWithIcon; +import org.eclipse.hawkbit.ui.layouts.AbstractCreateUpdateTagLayout; +import org.eclipse.hawkbit.ui.management.targettable.TargetAddUpdateWindowLayout; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -224,9 +227,18 @@ public class CommonDialogWindow extends Window implements Serializable { if (existsMandatoryFieldsInWindowContent()) { // final Label madatoryLabel = new // Label(i18n.get("label.mandatory.field")); - final Label madatoryLabel = new Label("* Mandatory Field"); - madatoryLabel.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_TINY); - mainLayout.addComponent(madatoryLabel); + final Label mandatoryLabel = new Label("* Mandatory Field"); + mandatoryLabel.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_TINY); + + if (content instanceof TargetAddUpdateWindowLayout) { + ((TargetAddUpdateWindowLayout) content).getFormLayout().addComponent(mandatoryLabel); + } else if (content instanceof SoftwareModuleAddUpdateWindow) { + ((SoftwareModuleAddUpdateWindow) content).getFormLayout().addComponent(mandatoryLabel); + } else if (content instanceof AbstractCreateUpdateTagLayout) { + ((AbstractCreateUpdateTagLayout) content).getMainLayout().addComponent(mandatoryLabel); + } + + mainLayout.addComponent(mandatoryLabel); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index f8fb5c3e0..85847ccc5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -690,4 +690,8 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent this.tagDescOriginal = tagDescOriginal; } + public GridLayout getMainLayout() { + return mainLayout; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index e5d65295b..287df14b3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -334,4 +334,8 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { window.addStyleName("target-update-window"); } + public FormLayout getFormLayout() { + return formLayout; + } + } From f04c3655edc58661f7de61089b55d929de53a5dd Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Wed, 15 Jun 2016 11:25:46 +0200 Subject: [PATCH 260/371] Fixed problem where correlation data is null. Signed-off-by: kaizimmerm --- .../java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index dcf7e9e99..e40d9bd3c 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -135,12 +135,10 @@ public class AmqpConfiguration { rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> { if (ack) { - LOGGER.debug("Message with correlation ID {} confirmed by broker.", correlationData.getId()); + LOGGER.debug("Message with {} confirmed by broker.", correlationData); } else { - LOGGER.error("Broker is unable to handle message with correlation ID {} : {}", correlationData.getId(), - cause); + LOGGER.error("Broker is unable to handle message with {} : {}", correlationData, cause); } - }); return rabbitTemplate; From ebedcc2df0a72afeac83769b0b47367a48fdc9cf Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 15 Jun 2016 11:25:58 +0200 Subject: [PATCH 261/371] fix display problems in different browsers Signed-off-by: Melanie Retter --- .../ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java | 1 + .../ui/management/targettable/TargetAddUpdateWindowLayout.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index ddf229651..6a5a07a40 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -195,6 +195,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se * (controller Id, name & description) and action buttons layout */ addStyleName("lay-color"); + setSizeUndefined(); final FormLayout formLayout = new FormLayout(); formLayout.addComponent(mandatoryLabel); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 3d1caa6e7..c9afddebf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -123,7 +123,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { * The main layout of the window contains mandatory info, textboxes * (controller Id, name & description) and action buttons layout */ - + setSizeUndefined(); formLayout = new FormLayout(); formLayout.addComponent(madatoryLabel); formLayout.addComponent(controllerIDTextField); From f65ca18bda7f7b1818b8ddd87a20d35741eac404 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Wed, 15 Jun 2016 12:03:55 +0200 Subject: [PATCH 262/371] Set new policy for central executor pool to avoid loosing data. Signed-off-by: kaizimmerm --- .../scheduling/ExecutorAutoConfiguration.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java index 4f606f1b1..dcda15a36 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java @@ -13,6 +13,7 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; @@ -63,14 +64,22 @@ public class ExecutorAutoConfiguration { final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(asyncConfigurerProperties.getCorethreads(), asyncConfigurerProperties.getMaxthreads(), asyncConfigurerProperties.getIdletimeout(), TimeUnit.MILLISECONDS, blockingQueue, - new ThreadFactoryBuilder().setNameFormat("central-executor-pool-%d").build()); - threadPoolExecutor.setRejectedExecutionHandler((r, executor) -> LOGGER.warn( - "Reject runnable for centralExecutorService, reached limit of queue size {}", - executor.getQueue().size())); + new ThreadFactoryBuilder().setNameFormat("central-executor-pool-%d").build(), + new PoolSizeExceededPolicy()); return threadPoolExecutor; } + private static class PoolSizeExceededPolicy extends CallerRunsPolicy { + @Override + public void rejectedExecution(final Runnable r, final ThreadPoolExecutor executor) { + LOGGER.warn( + "Caller has to run on its own instead of centralExecutorService, reached limit of queue size {}", + executor.getQueue().size()); + super.rejectedExecution(r, executor); + } + } + /** * @return the executor for UI background processes. */ From 6fc3b2ab94227ced78d8df05eb63ddfee9c258ec Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Wed, 15 Jun 2016 12:17:26 +0200 Subject: [PATCH 263/371] Immediate return. Signed-off-by: kaizimmerm --- .../autoconfigure/scheduling/ExecutorAutoConfiguration.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java index dcda15a36..0aeaf75bb 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java @@ -61,13 +61,11 @@ public class ExecutorAutoConfiguration { public ThreadPoolExecutor threadPoolExecutor() { final BlockingQueue blockingQueue = new ArrayBlockingQueue<>( asyncConfigurerProperties.getQueuesize()); - final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(asyncConfigurerProperties.getCorethreads(), + return new ThreadPoolExecutor(asyncConfigurerProperties.getCorethreads(), asyncConfigurerProperties.getMaxthreads(), asyncConfigurerProperties.getIdletimeout(), TimeUnit.MILLISECONDS, blockingQueue, new ThreadFactoryBuilder().setNameFormat("central-executor-pool-%d").build(), new PoolSizeExceededPolicy()); - - return threadPoolExecutor; } private static class PoolSizeExceededPolicy extends CallerRunsPolicy { From c76bca3c41a83e475440b84a513bd98ed4550815 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 15 Jun 2016 13:12:59 +0200 Subject: [PATCH 264/371] Add Javadoc and fix typo Signed-off-by: SirWayne --- .../RepositoryApplicationConfiguration.java | 76 +++++++++++++++++++ .../security/SpringSecurityAuditorAware.java | 4 +- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index 820b233ae..5c9440957 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -203,90 +203,166 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { return new MultiTenantJpaTransactionManager(); } + /** + * {@link JpaSystemManagement} bean. + * + * @return a new {@link SystemManagement} + */ @Bean @ConditionalOnMissingBean public SystemManagement systemManagement() { return new JpaSystemManagement(); } + /** + * {@link JpaReportManagement} bean. + * + * @return a new {@link ReportManagement} + */ @Bean @ConditionalOnMissingBean public ReportManagement reportManagement() { return new JpaReportManagement(); } + /** + * {@link JpaDistributionSetManagement} bean. + * + * @return a new {@link DistributionSetManagement} + */ @Bean @ConditionalOnMissingBean public DistributionSetManagement distributionSetManagement() { return new JpaDistributionSetManagement(); } + /** + * {@link JpaTenantStatsManagement} bean. + * + * @return a new {@link TenantStatsManagement} + */ @Bean @ConditionalOnMissingBean public TenantStatsManagement tenantStatsManagement() { return new JpaTenantStatsManagement(); } + /** + * {@link JpaTenantConfigurationManagement} bean. + * + * @return a new {@link TenantConfigurationManagement} + */ @Bean @ConditionalOnMissingBean public TenantConfigurationManagement tenantConfigurationManagement() { return new JpaTenantConfigurationManagement(); } + /** + * {@link JpaTenantConfigurationManagement} bean. + * + * @return a new {@link TenantConfigurationManagement} + */ @Bean @ConditionalOnMissingBean public TargetManagement targetManagement() { return new JpaTargetManagement(); } + /** + * {@link JpaTargetFilterQueryManagement} bean. + * + * @return a new {@link TargetFilterQueryManagement} + */ @Bean @ConditionalOnMissingBean public TargetFilterQueryManagement targetFilterQueryManagement() { return new JpaTargetFilterQueryManagement(); } + /** + * {@link JpaTagManagement} bean. + * + * @return a new {@link TagManagement} + */ @Bean @ConditionalOnMissingBean public TagManagement tagManagement() { return new JpaTagManagement(); } + /** + * {@link JpaSoftwareManagement} bean. + * + * @return a new {@link SoftwareManagement} + */ @Bean @ConditionalOnMissingBean public SoftwareManagement softwareManagement() { return new JpaSoftwareManagement(); } + /** + * {@link JpaRolloutManagement} bean. + * + * @return a new {@link RolloutManagement} + */ @Bean @ConditionalOnMissingBean public RolloutManagement rolloutManagement() { return new JpaRolloutManagement(); } + /** + * {@link JpaRolloutGroupManagement} bean. + * + * @return a new {@link RolloutGroupManagement} + */ @Bean @ConditionalOnMissingBean public RolloutGroupManagement rolloutGroupManagement() { return new JpaRolloutGroupManagement(); } + /** + * {@link JpaDeploymentManagement} bean. + * + * @return a new {@link DeploymentManagement} + */ @Bean @ConditionalOnMissingBean public DeploymentManagement deploymentManagement() { return new JpaDeploymentManagement(); } + /** + * {@link JpaControllerManagement} bean. + * + * @return a new {@link ControllerManagement} + */ @Bean @ConditionalOnMissingBean public ControllerManagement controllerManagement() { return new JpaControllerManagement(); } + /** + * {@link JpaArtifactManagement} bean. + * + * @return a new {@link ArtifactManagement} + */ + @Bean @ConditionalOnMissingBean public ArtifactManagement artifactManagement() { return new JpaArtifactManagement(); } + /** + * {@link JpaEntityFactory} bean. + * + * @return a new {@link EntityFactory} + */ @Bean @ConditionalOnMissingBean public EntityFactory entityFactory() { diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java index 783d5344c..472e32493 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java @@ -25,7 +25,7 @@ public class SpringSecurityAuditorAware implements AuditorAware { final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (isAuthentifactionInvalid(authentication)) { + if (isAuthenticationInvalid(authentication)) { return null; } @@ -39,7 +39,7 @@ public class SpringSecurityAuditorAware implements AuditorAware { return authentication.getPrincipal().toString(); } - private static boolean isAuthentifactionInvalid(final Authentication authentication) { + private static boolean isAuthenticationInvalid(final Authentication authentication) { return authentication == null || !authentication.isAuthenticated() || authentication.getPrincipal() == null; } } From c3d04a530f03afbec2e29fc2bd849d3febb98965 Mon Sep 17 00:00:00 2001 From: Jonathan Knoblauch Date: Wed, 15 Jun 2016 13:45:50 +0200 Subject: [PATCH 265/371] Changed f to F --- .../hawkbit/ui/management/targettable/TargetTableHeader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java index 5b0aa285a..16dc584ed 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTableHeader.java @@ -398,7 +398,7 @@ public class TargetTableHeader extends AbstractTableHeader { getFilterDroppedInfo().setSizeFull(); getFilterDroppedInfo().addComponent(filteredDistLabel); getFilterDroppedInfo().addComponent(filterLabelClose); - getFilterDroppedInfo().setExpandRatio(filteredDistLabel, 1.0f); + getFilterDroppedInfo().setExpandRatio(filteredDistLabel, 1.0F); eventbus.publish(this, TargetFilterEvent.FILTER_BY_DISTRIBUTION); } From c3843196860cce5929070ead78163da2b69ae4a8 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 15 Jun 2016 16:56:51 +0200 Subject: [PATCH 266/371] Move @EnableScheduling to RepositoryConfig Signed-off-by: SirWayne --- .../org/eclipse/hawkbit/RepositoryApplicationConfiguration.java | 2 ++ .../eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index 5c9440957..469e84681 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -64,6 +64,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter; import org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; @@ -79,6 +80,7 @@ import org.springframework.validation.beanvalidation.MethodValidationPostProcess @Configuration @ComponentScan @EnableAutoConfiguration +@EnableScheduling public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { /** * @return the {@link SystemSecurityContext} singleton bean which make it diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java index 9cd0b02ac..239302a70 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutManagement.java @@ -60,7 +60,6 @@ import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.annotation.Isolation; @@ -75,7 +74,6 @@ import org.springframework.validation.annotation.Validated; * JPA implementation of {@link RolloutManagement}. */ @Validated -@EnableScheduling @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public class JpaRolloutManagement implements RolloutManagement { private static final Logger LOGGER = LoggerFactory.getLogger(RolloutManagement.class); From bcd496a1f49f9bc609bf3dd17eda6639d482ce5f Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 16 Jun 2016 15:33:00 +0200 Subject: [PATCH 267/371] Add Base Entity Matcher Signed-off-by: SirWayne --- .../test/matcher/BaseEntityMatcher.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/BaseEntityMatcher.java diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/BaseEntityMatcher.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/BaseEntityMatcher.java new file mode 100644 index 000000000..cb3f5476f --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/matcher/BaseEntityMatcher.java @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.test.matcher; + +import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.hamcrest.Factory; +import org.hamcrest.FeatureMatcher; +import org.hamcrest.Matcher; +import org.hamcrest.Matchers; + +/** + * Matcher for {@link BaseEntity}. + */ +public class BaseEntityMatcher { + + private BaseEntityMatcher() { + } + + @Factory + public static Matcher hasId(final Long id) { + return new HasIdMatcher(Matchers.equalTo(id)); + } + + private static class HasIdMatcher extends FeatureMatcher { + + public HasIdMatcher(final Matcher subMatcher) { + super(subMatcher, "getId()", "id"); + } + + @Override + protected Long featureValueOf(final BaseEntity baseEntity) { + return baseEntity.getId(); + } + } + +} From 20ebbed27f773235ea41c778d5f7dfac1c3ec42d Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Fri, 17 Jun 2016 11:32:04 +0200 Subject: [PATCH 268/371] Set separate handling for invalid message handling and internal server errors which should result in requeue instead of reject Signed-off-by: kaizimmerm --- .../org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java | 2 +- .../org/eclipse/hawkbit/simulator/amqp/ReceiverService.java | 3 ++- .../main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java | 2 +- .../main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java | 3 ++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java index 57d4762b0..8ae2d87bd 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java @@ -149,7 +149,7 @@ public class AmqpConfiguration { @Bean(name = { "listenerContainerFactory" }) public SimpleRabbitListenerContainerFactory listenerContainerFactory() { final SimpleRabbitListenerContainerFactory containerFactory = new SimpleRabbitListenerContainerFactory(); - containerFactory.setDefaultRequeueRejected(false); + containerFactory.setDefaultRequeueRejected(true); containerFactory.setConnectionFactory(connectionFactory); containerFactory.setConcurrentConsumers(3); containerFactory.setMaxConcurrentConsumers(10); diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/ReceiverService.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/ReceiverService.java index f5c02789e..2e8833bab 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/ReceiverService.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/ReceiverService.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.simulator.amqp; +import org.springframework.amqp.AmqpRejectAndDontRequeueException; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -55,7 +56,7 @@ public abstract class ReceiverService extends MessageService { if (contentType != null && contentType.contains("json")) { return; } - throw new IllegalArgumentException("Content-Type is not JSON compatible"); + throw new AmqpRejectAndDontRequeueException("Content-Type is not JSON compatible"); } } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index 3fbc6aee2..9435e8860 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -241,7 +241,7 @@ public class AmqpConfiguration { @Bean(name = { "listenerContainerFactory" }) public SimpleRabbitListenerContainerFactory listenerContainerFactory() { final SimpleRabbitListenerContainerFactory containerFactory = new SimpleRabbitListenerContainerFactory(); - containerFactory.setDefaultRequeueRejected(false); + containerFactory.setDefaultRequeueRejected(true); containerFactory.setConnectionFactory(rabbitConnectionFactory); containerFactory.setMissingQueuesFatal(amqpProperties.isMissingQueuesFatal()); containerFactory.setTaskExecutor(taskExecutor); diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java index 2c8feda13..88c88f264 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java @@ -15,6 +15,7 @@ import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.amqp.AmqpRejectAndDontRequeueException; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.converter.AbstractJavaTypeMapper; @@ -110,7 +111,7 @@ public class BaseAmqpService { protected final void logAndThrowMessageError(final Message message, final String error) { LOGGER.warn("Warning! \"{}\" reported by message: {}", error, message); - throw new IllegalArgumentException(error); + throw new AmqpRejectAndDontRequeueException(error); } protected RabbitTemplate getRabbitTemplate() { From 581748228edecfacd985d80724aa1da78ee403a3 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 17 Jun 2016 18:17:48 +0200 Subject: [PATCH 269/371] Distribution Filter by type view: save button enabled when changes exist Signed-off-by: Melanie Retter --- .../CreateUpdateSoftwareTypeLayout.java | 2 +- .../hawkbit/ui/common/CommonDialogWindow.java | 2 +- .../CreateUpdateDistSetTypeLayout.java | 133 ++++++++++++------ .../AbstractCreateUpdateTagLayout.java | 6 +- .../ui/layouts/CreateUpdateTypeLayout.java | 20 +++ 5 files changed, 113 insertions(+), 50 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 7473d5509..c8a0c650e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -103,10 +103,10 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - tagDesc.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); + tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged); singleMultiOptionGroup(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index d3153ee9a..7818953b0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -149,7 +149,7 @@ public class CommonDialogWindow extends Window implements Serializable { public void updateRequiredFields(final String fieldId, final Boolean filled) { - getRequiredFields().put(fieldId, Boolean.TRUE); + getRequiredFields().put(fieldId, filled); checkMandatoryFields(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index a04136a48..facf6e008 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -87,8 +88,10 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout private Table sourceTable; private Table selectedTable; - private IndexedContainer selectedTablecontainer; - private IndexedContainer sourceTablecontainer; + private IndexedContainer selectedTableContainer; + private IndexedContainer sourceTableContainer; + + private IndexedContainer originalSelectedTableContainer; @Override protected void createRequiredComponents() { @@ -114,6 +117,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout tagDesc.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); + tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged); } private void listenerTagNameTextFieldChanged(final TextChangeEvent event) { @@ -175,9 +179,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout return twinColumnLayout; } - /** - * - */ private void buildSelectedTable() { selectedTable = new Table(); @@ -192,7 +193,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout selectedTable.addStyleName("dist_type_twin-table"); selectedTable.setSizeFull(); createSelectedTableContainer(); - selectedTable.setContainerDataSource(selectedTablecontainer); + selectedTable.setContainerDataSource(selectedTableContainer); addTooltTipToSelectedTable(); selectedTable.setImmediate(true); selectedTable.setVisibleColumns(DIST_TYPE_NAME, DIST_TYPE_MANDATORY); @@ -234,14 +235,13 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout sourceTable.addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); sourceTable.addStyleName(ValoTheme.TABLE_SMALL); sourceTable.setImmediate(true); - // sourceTable sourceTable.setSizeFull(); sourceTable.addStyleName("dist_type_twin-table"); sourceTable.setSortEnabled(false); - sourceTablecontainer = new IndexedContainer(); - sourceTablecontainer.addContainerProperty(DIST_TYPE_NAME, String.class, ""); - sourceTablecontainer.addContainerProperty(DIST_TYPE_DESCRIPTION, String.class, ""); - sourceTable.setContainerDataSource(sourceTablecontainer); + sourceTableContainer = new IndexedContainer(); + sourceTableContainer.addContainerProperty(DIST_TYPE_NAME, String.class, ""); + sourceTableContainer.addContainerProperty(DIST_TYPE_DESCRIPTION, String.class, ""); + sourceTable.setContainerDataSource(sourceTableContainer); sourceTable.setVisibleColumns(new Object[] { DIST_TYPE_NAME }); sourceTable.setColumnHeaders(i18n.get("header.dist.twintable.available")); @@ -253,10 +253,23 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout private void createSelectedTableContainer() { - selectedTablecontainer = new IndexedContainer(); - selectedTablecontainer.addContainerProperty(DIST_TYPE_NAME, String.class, ""); - selectedTablecontainer.addContainerProperty(DIST_TYPE_DESCRIPTION, String.class, ""); - selectedTablecontainer.addContainerProperty(DIST_TYPE_MANDATORY, CheckBox.class, null); + selectedTableContainer = new IndexedContainer(); + selectedTableContainer.addContainerProperty(DIST_TYPE_NAME, String.class, ""); + selectedTableContainer.addContainerProperty(DIST_TYPE_DESCRIPTION, String.class, ""); + selectedTableContainer.addContainerProperty(DIST_TYPE_MANDATORY, CheckBox.class, null); + } + + private void listenerMandatoryCheckboxChanged(final ValueChangeEvent event) { + + window.setSaveButtonEnabled(true); + } + + private void createOriginalSelectedTableContainer() { + + originalSelectedTableContainer = new IndexedContainer(); + originalSelectedTableContainer.addContainerProperty(DIST_TYPE_NAME, String.class, ""); + originalSelectedTableContainer.addContainerProperty(DIST_TYPE_DESCRIPTION, String.class, ""); + originalSelectedTableContainer.addContainerProperty(DIST_TYPE_MANDATORY, CheckBox.class, null); } @SuppressWarnings("unchecked") @@ -267,8 +280,14 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout for (final Long id : selectedIds) { addTargetTableData(id); } - - window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE); + if (optiongroup.getValue().equals(updateTypeStr)) { + updateMandatoryFields(); + window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); + } else { + if (!selectedTableContainer.getItemIds().isEmpty()) { + window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE); + } + } } } @@ -276,26 +295,57 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout @SuppressWarnings("unchecked") final Set selectedIds = (Set) selectedTable.getValue(); - if (null != selectedIds && !selectedIds.isEmpty()) { + if (selectedIds != null && !selectedIds.isEmpty()) { for (final Long id : selectedIds) { addSourceTableData(id); selectedTable.removeItem(id); + if (optiongroup.getValue().equals(updateTypeStr)) { + updateMandatoryFields(); + window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); + } } } - if (selectedIds == null || selectedIds.isEmpty()) { - window.updateRequiredFields(selectedTable.getId(), Boolean.FALSE); + } + + private Boolean hasContentChanged() { + + for (final Iterator itemIterator = selectedTableContainer.getItemIds().iterator(); itemIterator.hasNext();) { + final long itemId = (Long) itemIterator.next(); + if (!originalSelectedTableContainer.containsId(itemId)) { + return Boolean.TRUE; + } + } + + for (final Iterator itemIterator = originalSelectedTableContainer.getItemIds().iterator(); itemIterator + .hasNext();) { + final long itemId = (Long) itemIterator.next(); + if (!selectedTableContainer.containsId(itemId)) { + return Boolean.TRUE; + } + } + + return Boolean.FALSE; + } + + private void updateMandatoryFields() { + + if (StringUtils.isNotBlank(tagName.getValue())) { + window.getRequiredFields().put("Name", Boolean.TRUE); + } + if (StringUtils.isNotBlank(typeKey.getValue())) { + window.getRequiredFields().put("Key", Boolean.TRUE); } } @SuppressWarnings("unchecked") private void getSourceTableData() { - sourceTablecontainer.removeAllItems(); + sourceTableContainer.removeAllItems(); final Iterable moduleTypeBeans = softwareManagement .findSoftwareModuleTypesAll(new PageRequest(0, 1_000)); Item saveTblitem; for (final SoftwareModuleType swTypeTag : moduleTypeBeans) { - saveTblitem = sourceTablecontainer.addItem(swTypeTag.getId()); + saveTblitem = sourceTableContainer.addItem(swTypeTag.getId()); saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(swTypeTag.getName()); saveTblitem.getItemProperty(DIST_TYPE_DESCRIPTION).setValue(swTypeTag.getDescription()); } @@ -328,8 +378,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout private void getSelectedTableItemData(final Long id) { Item saveTblitem; - if (null != selectedTablecontainer) { - saveTblitem = selectedTablecontainer.addItem(id); + if (selectedTableContainer != null) { + saveTblitem = selectedTableContainer.addItem(id); saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue( sourceTable.getContainerDataSource().getItem(id).getItemProperty(DIST_TYPE_NAME).getValue()); saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox()); @@ -341,9 +391,9 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout @SuppressWarnings("unchecked") private void addSourceTableData(final Long selectedId) { - if (null != sourceTablecontainer) { + if (sourceTableContainer != null) { Item saveTblitem; - saveTblitem = sourceTablecontainer.addItem(selectedId); + saveTblitem = sourceTableContainer.addItem(selectedId); selectedTable.getContainerDataSource().getItem(selectedId).getItemProperty(DIST_TYPE_NAME); saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(selectedTable.getContainerDataSource() .getItem(selectedId).getItemProperty(DIST_TYPE_NAME).getValue()); @@ -387,7 +437,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } else { uiNotification.displayValidationError(i18n.get("message.error.missing.typenameorkey")); - } } @@ -432,7 +481,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } else { uiNotification.displayValidationError(i18n.get("message.tag.update.mandatory")); } - } private void checkMandatoryAndAddMandatoryModuleType(final DistributionSetType updateDistSetType, @@ -461,26 +509,12 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout return distSetType; } - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.components.colorpicker.HasColorChangeListener# - * addColorChangeListener(com.vaadin - * .ui.components.colorpicker.ColorChangeListener) - */ @Override public void addColorChangeListener(final ColorChangeListener listener) { LOG.info("in side addColorChangeListener() "); } - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.components.colorpicker.HasColorChangeListener# - * removeColorChangeListener(com. - * vaadin.ui.components.colorpicker.ColorChangeListener) - */ @Override public void removeColorChangeListener(final ColorChangeListener listener) { @@ -574,7 +608,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout tagDesc.setValue(selectedTypeTag.getDescription()); setTagDescOriginal(selectedTypeTag.getDescription()); typeKey.setValue(selectedTypeTag.getKey()); - + setTypeKeyOriginal(selectedTypeTag.getKey()); if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) { distTypeSelectLayout.setEnabled(true); selectedTable.setEnabled(true); @@ -584,6 +618,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout distTypeSelectLayout.setEnabled(false); selectedTable.setEnabled(false); } + + createOriginalSelectedTableContainer(); for (final SoftwareModuleType swModuleType : selectedTypeTag.getOptionalModuleTypes()) { addTargetTableforUpdate(swModuleType, false); } @@ -604,11 +640,18 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout private void addTargetTableforUpdate(final SoftwareModuleType swModuleType, final boolean mandatory) { Item saveTblitem; - if (null != selectedTablecontainer) { - saveTblitem = selectedTablecontainer.addItem(swModuleType.getId()); + if (selectedTableContainer != null) { + saveTblitem = selectedTableContainer.addItem(swModuleType.getId()); sourceTable.removeItem(swModuleType.getId()); saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName()); saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory)); + final CheckBox mandatoryCheckbox = (CheckBox) selectedTableContainer + .getContainerProperty(swModuleType.getId(), DIST_TYPE_MANDATORY).getValue(); + mandatoryCheckbox.addValueChangeListener(this::listenerMandatoryCheckboxChanged); + + final Item originalItem = originalSelectedTableContainer.addItem(swModuleType.getId()); + originalItem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName()); + originalItem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory)); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index 85847ccc5..a6fc1accb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -110,7 +110,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected String tagNameValue; protected String tagDescValue; - private Color selectedColorOriginal; + protected Color selectedColorOriginal; private String tagDescOriginal; protected void createWindow() { @@ -189,7 +189,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - tagDesc.setId(SPUIDefinitions.NEW_TARGET_TAG_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); @@ -211,7 +210,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent window.checkMandatoryTextField(event, tagName); } - private void listenerTagDescTextAreaChanged(final TextChangeEvent event) { + protected void listenerTagDescTextAreaChanged(final TextChangeEvent event) { window.checkChanges(event.getText(), tagDescOriginal); } @@ -416,6 +415,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent */ protected void createDynamicStyleForComponents(final TextField tagName, final TextArea tagDesc, final String taregtTagColor) { + tagName.removeStyleName(SPUIDefinitions.TAG_NAME); tagDesc.removeStyleName(SPUIDefinitions.TAG_DESC); getTargetDynamicStyles(taregtTagColor); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index c67d35321..f2ef71af1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -45,6 +45,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { protected String createTypeStr; protected String updateTypeStr; protected TextField typeKey; + protected String typeKeyOriginal; public static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; @@ -185,6 +186,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor()); } + window.checkColorChange(colorPickerLayout.getSelectedColor(), selectedColorOriginal); } /** @@ -321,4 +323,22 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { // is implemented in the inherited class } + @Override + public Color getSelectedColorOriginal() { + return selectedColorOriginal; + } + + @Override + public void setSelectedColorOriginal(final Color selectedColorOriginal) { + this.selectedColorOriginal = selectedColorOriginal; + } + + public String getTypeKeyOriginal() { + return typeKeyOriginal; + } + + public void setTypeKeyOriginal(final String typeKeyOriginal) { + this.typeKeyOriginal = typeKeyOriginal; + } + } From 58b883d773a4da83d76a18ed0eb1f35982b6bc82 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Sun, 19 Jun 2016 20:42:23 +0200 Subject: [PATCH 270/371] Added polling for DMF simulated devices. Signed-off-by: kaizimmerm --- examples/hawkbit-device-simulator/pom.xml | 24 ++---------- .../simulator/AbstractSimulatedDevice.java | 17 ++++++++- .../hawkbit/simulator/DDISimulatedDevice.java | 10 +---- .../hawkbit/simulator/DMFSimulatedDevice.java | 14 ++++++- .../simulator/DeviceSimulatorRepository.java | 4 +- .../simulator/NextPollTimeController.java | 12 +++--- .../simulator/SimulatedDeviceFactory.java | 8 +++- .../simulator/SimulationController.java | 2 +- .../simulator/SimulationProperties.java | 5 ++- .../simulator/amqp/AmqpConfiguration.java | 38 +++++++++++++++++++ .../event/NextPollCounterUpdate.java | 8 ++-- .../hawkbit/simulator/ui/SimulatorView.java | 4 +- .../src/main/resources/application.properties | 1 - .../{logback-spring.xml => logback.xml} | 5 --- 14 files changed, 94 insertions(+), 58 deletions(-) rename examples/hawkbit-device-simulator/src/main/resources/{logback-spring.xml => logback.xml} (86%) diff --git a/examples/hawkbit-device-simulator/pom.xml b/examples/hawkbit-device-simulator/pom.xml index 3c3df9486..035bcebfc 100644 --- a/examples/hawkbit-device-simulator/pom.xml +++ b/examples/hawkbit-device-simulator/pom.xml @@ -71,6 +71,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-logging + org.springframework.security spring-security-web @@ -83,26 +87,6 @@ org.springframework.boot spring-boot-starter - - - org.apache.logging.log4j - log4j-api - - - - org.slf4j - jul-to-slf4j - - - - org.slf4j - jcl-over-slf4j - - - - org.slf4j - log4j-over-slf4j - com.vaadin vaadin-spring-boot-starter diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/AbstractSimulatedDevice.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/AbstractSimulatedDevice.java index 890f43367..c70d4f584 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/AbstractSimulatedDevice.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/AbstractSimulatedDevice.java @@ -27,7 +27,7 @@ public abstract class AbstractSimulatedDevice { private UpdateStatus updateStatus = new UpdateStatus(ResponseStatus.SUCCESSFUL, "Simulation complete!"); private Protocol protocol = Protocol.DMF_AMQP; private String targetSecurityToken; - + private int pollDelaySec; private int nextPollCounterSec; /** @@ -84,13 +84,26 @@ public abstract class AbstractSimulatedDevice { * the ID of the simulated device * @param tenant * the tenant of the simulated device + * @param int + * pollDelaySec */ - AbstractSimulatedDevice(final String id, final String tenant, final Protocol protocol) { + AbstractSimulatedDevice(final String id, final String tenant, final Protocol protocol, final int pollDelaySec) { this.id = id; this.tenant = tenant; this.status = Status.UNKNWON; this.progress = 0.0; this.protocol = protocol; + this.pollDelaySec = pollDelaySec; + } + + abstract public void poll(); + + public int getPollDelaySec() { + return pollDelaySec; + } + + public void setPollDelaySec(final int pollDelaySec) { + this.pollDelaySec = pollDelaySec; } /** diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DDISimulatedDevice.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DDISimulatedDevice.java index 26e613dd9..677d77a37 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DDISimulatedDevice.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DDISimulatedDevice.java @@ -23,7 +23,6 @@ public class DDISimulatedDevice extends AbstractSimulatedDevice { private static final Logger LOGGER = LoggerFactory.getLogger(DDISimulatedDevice.class); - private final int pollDelaySec; private final ControllerResource controllerResource; private final DeviceSimulatorUpdater deviceUpdater; @@ -45,11 +44,9 @@ public class DDISimulatedDevice extends AbstractSimulatedDevice { */ public DDISimulatedDevice(final String id, final String tenant, final int pollDelaySec, final ControllerResource controllerResource, final DeviceSimulatorUpdater deviceUpdater) { - super(id, tenant, Protocol.DDI_HTTP); - this.pollDelaySec = pollDelaySec; + super(id, tenant, Protocol.DDI_HTTP, pollDelaySec); this.controllerResource = controllerResource; this.deviceUpdater = deviceUpdater; - setNextPollCounterSec(pollDelaySec); } @Override @@ -58,13 +55,10 @@ public class DDISimulatedDevice extends AbstractSimulatedDevice { removed = true; } - public int getPollDelaySec() { - return pollDelaySec; - } - /** * Polls the base URL for the DDI API interface. */ + @Override public void poll() { if (!removed) { final String basePollJson = controllerResource.get(getTenant(), getId()); diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DMFSimulatedDevice.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DMFSimulatedDevice.java index 6b79a85b8..65227b55d 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DMFSimulatedDevice.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DMFSimulatedDevice.java @@ -8,10 +8,13 @@ */ package org.eclipse.hawkbit.simulator; +import org.eclipse.hawkbit.simulator.amqp.SpSenderService; + /** * A simulated device using the DMF API of the hawkBit update server. */ public class DMFSimulatedDevice extends AbstractSimulatedDevice { + private final SpSenderService spSenderService; /** * @param id @@ -19,8 +22,15 @@ public class DMFSimulatedDevice extends AbstractSimulatedDevice { * @param tenant * the tenant of the simulated device */ - public DMFSimulatedDevice(final String id, final String tenant) { - super(id, tenant, Protocol.DMF_AMQP); + public DMFSimulatedDevice(final String id, final String tenant, final SpSenderService spSenderService, + final int pollDelaySec) { + super(id, tenant, Protocol.DMF_AMQP, pollDelaySec); + this.spSenderService = spSenderService; + } + + @Override + public void poll() { + spSenderService.createOrUpdateThing(super.getTenant(), super.getId()); } } diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorRepository.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorRepository.java index 68db9df45..66ceacc8e 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorRepository.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorRepository.java @@ -9,8 +9,8 @@ package org.eclipse.hawkbit.simulator; import java.util.Collection; -import java.util.LinkedHashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -25,7 +25,7 @@ import org.springframework.stereotype.Service; @Service public class DeviceSimulatorRepository { - private final Map devices = new LinkedHashMap<>(); + private final Map devices = new ConcurrentHashMap<>(); @Autowired private SimulatedDeviceFactory deviceFactory; diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/NextPollTimeController.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/NextPollTimeController.java index 956d6d36a..96b4a1e97 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/NextPollTimeController.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/NextPollTimeController.java @@ -8,12 +8,11 @@ */ package org.eclipse.hawkbit.simulator; -import java.util.List; +import java.util.Collection; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import org.eclipse.hawkbit.simulator.event.NextPollCounterUpdate; import org.slf4j.Logger; @@ -51,18 +50,17 @@ public class NextPollTimeController { private class NextPollUpdaterRunnable implements Runnable { @Override public void run() { - final List devices = repository.getAll().stream() - .filter(device -> device instanceof DDISimulatedDevice).collect(Collectors.toList()); + final Collection devices = repository.getAll(); devices.forEach(device -> { int nextCounter = device.getNextPollCounterSec() - 1; - if (nextCounter < 0 && device instanceof DDISimulatedDevice) { + if (nextCounter < 0) { try { - pollService.submit(() -> ((DDISimulatedDevice) device).poll()); + pollService.submit(() -> device.poll()); } catch (final IllegalStateException e) { LOGGER.trace("Device could not be polled", e); } - nextCounter = ((DDISimulatedDevice) device).getPollDelaySec(); + nextCounter = device.getPollDelaySec(); } device.setNextPollCounterSec(nextCounter); diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatedDeviceFactory.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatedDeviceFactory.java index f29aad001..35829c673 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatedDeviceFactory.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatedDeviceFactory.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.simulator; import java.net.URL; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Protocol; +import org.eclipse.hawkbit.simulator.amqp.SpSenderService; import org.eclipse.hawkbit.simulator.http.ControllerResource; import org.eclipse.hawkbit.simulator.http.GatewayTokenInterceptor; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +29,9 @@ public class SimulatedDeviceFactory { @Autowired private DeviceSimulatorUpdater deviceUpdater; + @Autowired + private SpSenderService spSenderService; + /** * Creating a simulated devices. * @@ -55,7 +59,7 @@ public class SimulatedDeviceFactory { * the protocol which should be used be the simulated device * @param pollDelaySec * the poll delay time in seconds which should be used for - * {@link DDISimulatedDevice}s + * {@link DDISimulatedDevice}s and {@link DMFSimulatedDevice} * @param baseEndpoint * the http base endpoint which should be used for * {@link DDISimulatedDevice}s @@ -68,7 +72,7 @@ public class SimulatedDeviceFactory { final int pollDelaySec, final URL baseEndpoint, final String gatewayToken) { switch (protocol) { case DMF_AMQP: - return new DMFSimulatedDevice(id, tenant); + return new DMFSimulatedDevice(id, tenant, spSenderService, pollDelaySec); case DDI_HTTP: final ControllerResource controllerResource = Feign.builder().logger(new Logger.ErrorLogger()) .requestInterceptor(new GatewayTokenInterceptor(gatewayToken)).logLevel(Logger.Level.BASIC) 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 649d88477..3bd6b41f2 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 @@ -66,7 +66,7 @@ public class SimulationController { @RequestParam(value = "tenant", defaultValue = "DEFAULT") final String tenant, @RequestParam(value = "api", defaultValue = "dmf") final String api, @RequestParam(value = "endpoint", defaultValue = "http://localhost:8080") final String endpoint, - @RequestParam(value = "polldelay", defaultValue = "30") final int pollDelay, + @RequestParam(value = "polldelay", defaultValue = "1800") final int pollDelay, @RequestParam(value = "gatewaytoken", defaultValue = "") final String gatewayToken) throws MalformedURLException { diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationProperties.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationProperties.java index 354263934..fb98ff67e 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationProperties.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationProperties.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.simulator; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Protocol; import org.hibernate.validator.constraints.NotEmpty; @@ -68,9 +69,9 @@ public class SimulationProperties { private String endpoint = "http://localhost:8080"; /** - * Poll time in case of DDI API based simulation. + * Poll time in {@link TimeUnit#SECONDS} for simulated devices. */ - private int pollDelay = 30; + private int pollDelay = (int) TimeUnit.MINUTES.toSeconds(30); /** * Optional gateway token for DDI API based simulation. diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java index 8ae2d87bd..5be5c7dcb 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpConfiguration.java @@ -20,11 +20,13 @@ import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.QueueBuilder; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.amqp.RabbitProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -73,6 +75,42 @@ public class AmqpConfiguration { return rabbitTemplate; } + @Configuration + protected static class RabbitConnectionFactoryCreator { + + /** + * {@link ConnectionFactory} with enabled publisher confirms and + * heartbeat. + * + * @param config + * with standard {@link RabbitProperties} + * @return {@link ConnectionFactory} + */ + @Bean + public ConnectionFactory rabbitConnectionFactory(final RabbitProperties config) { + final CachingConnectionFactory factory = new CachingConnectionFactory(); + factory.setRequestedHeartBeat(60); + factory.setPublisherConfirms(true); + + final String addresses = config.getAddresses(); + factory.setAddresses(addresses); + if (config.getHost() != null) { + factory.setHost(config.getHost()); + factory.setPort(config.getPort()); + } + if (config.getUsername() != null) { + factory.setUsername(config.getUsername()); + } + if (config.getPassword() != null) { + factory.setPassword(config.getPassword()); + } + if (config.getVirtualHost() != null) { + factory.setVirtualHost(config.getVirtualHost()); + } + return factory; + } + } + /** * Creates the receiver queue from update server for receiving message from * update server. diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/event/NextPollCounterUpdate.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/event/NextPollCounterUpdate.java index b9d7b9027..5e98ebb64 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/event/NextPollCounterUpdate.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/event/NextPollCounterUpdate.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.simulator.event; -import java.util.List; +import java.util.Collection; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice; @@ -20,7 +20,7 @@ import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice; */ public class NextPollCounterUpdate { - private final List devices; + private final Collection devices; /** * Creates poll timer update event. @@ -28,14 +28,14 @@ public class NextPollCounterUpdate { * @param devices * the devices which progress has been updated */ - public NextPollCounterUpdate(final List devices) { + public NextPollCounterUpdate(final Collection devices) { this.devices = devices; } /** * @return the devices of the event */ - public List getDevices() { + public Collection getDevices() { return devices; } diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/SimulatorView.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/SimulatorView.java index 4834bece9..9405edd2b 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/SimulatorView.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/SimulatorView.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.simulator.ui; -import java.util.List; +import java.util.Collection; import java.util.Locale; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice; @@ -167,7 +167,7 @@ public class SimulatorView extends VerticalLayout implements View { @SuppressWarnings("unchecked") @Subscribe public void pollCounterUpdate(final NextPollCounterUpdate update) { - final List devices = update.getDevices(); + final Collection devices = update.getDevices(); this.getUI().access(() -> devices.forEach(device -> { final BeanItem item = beanContainer.getItem(device.getId()); if (item != null) { diff --git a/examples/hawkbit-device-simulator/src/main/resources/application.properties b/examples/hawkbit-device-simulator/src/main/resources/application.properties index fbe7261be..5d3f04be7 100644 --- a/examples/hawkbit-device-simulator/src/main/resources/application.properties +++ b/examples/hawkbit-device-simulator/src/main/resources/application.properties @@ -24,7 +24,6 @@ spring.rabbitmq.virtualHost=/ spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.dynamic=true -spring.rabbitmq.listener.prefetch=100 security.basic.enabled=false server.port=8083 diff --git a/examples/hawkbit-device-simulator/src/main/resources/logback-spring.xml b/examples/hawkbit-device-simulator/src/main/resources/logback.xml similarity index 86% rename from examples/hawkbit-device-simulator/src/main/resources/logback-spring.xml rename to examples/hawkbit-device-simulator/src/main/resources/logback.xml index f25a61cd1..5f3f1dbef 100644 --- a/examples/hawkbit-device-simulator/src/main/resources/logback-spring.xml +++ b/examples/hawkbit-device-simulator/src/main/resources/logback.xml @@ -20,11 +20,6 @@ - - - - - From cc1dc0951602b02a8f7f5d25bff13ecedd62c576 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Sun, 19 Jun 2016 20:43:12 +0200 Subject: [PATCH 271/371] Configurable prefetch and consumer pool. Signed-off-by: kaizimmerm --- hawkbit-dmf-amqp/pom.xml | 10 +++++++ .../hawkbit/amqp/AmqpConfiguration.java | 12 +++----- .../amqp/AmqpMessageHandlerService.java | 25 +++++++++-------- .../eclipse/hawkbit/amqp/AmqpProperties.java | 28 +++++++++++++++++++ .../amqp/AmqpMessageHandlerServiceTest.java | 17 +++++------ 5 files changed, 65 insertions(+), 27 deletions(-) diff --git a/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf-amqp/pom.xml index c2ed7c213..322dd5047 100644 --- a/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf-amqp/pom.xml @@ -49,6 +49,11 @@ org.springframework.amqp spring-rabbit + + com.rabbitmq + amqp-client + 3.6.2 + org.springframework.security spring-security-web @@ -154,6 +159,11 @@ spring-context-support test + + org.scala-lang + scala-library + 2.10.4 + \ No newline at end of file diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index 9435e8860..0e7e766e8 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -32,7 +32,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.task.TaskExecutor; import org.springframework.retry.backoff.ExponentialBackOffPolicy; import org.springframework.retry.support.RetryTemplate;; @@ -59,9 +58,6 @@ public class AmqpConfiguration { @Autowired private ConnectionFactory rabbitConnectionFactory; - @Autowired - private TaskExecutor taskExecutor; - @Configuration protected static class RabbitConnectionFactoryCreator { @@ -201,8 +197,8 @@ public class AmqpConfiguration { } /** - * Create the Binding {@link AmqpConfiguration#receiverQueueFromSp()} to - * {@link AmqpConfiguration#senderConnectorToSpExchange()}. + * Create the Binding {@link AmqpConfiguration#receiverQueue()} to + * {@link AmqpConfiguration#senderExchange()}. * * @return the binding and create the queue and exchange */ @@ -244,9 +240,9 @@ public class AmqpConfiguration { containerFactory.setDefaultRequeueRejected(true); containerFactory.setConnectionFactory(rabbitConnectionFactory); containerFactory.setMissingQueuesFatal(amqpProperties.isMissingQueuesFatal()); - containerFactory.setTaskExecutor(taskExecutor); - containerFactory.setConcurrentConsumers(3); + containerFactory.setConcurrentConsumers(amqpProperties.getInitialConcurrentConsumers()); containerFactory.setMaxConcurrentConsumers(amqpProperties.getMaxConcurrentConsumers()); + containerFactory.setPrefetchCount(amqpProperties.getPrefetchCount()); return containerFactory; } 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 107850fc1..caa11ab3d 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 @@ -37,6 +37,7 @@ import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.EntityFactory; 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.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -47,6 +48,7 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.util.IpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.amqp.AmqpRejectAndDontRequeueException; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.annotation.RabbitListener; @@ -111,12 +113,6 @@ public class AmqpMessageHandlerService extends BaseAmqpService { super(defaultTemplate); } - @RabbitListener(queues = "${hawkbit.dmf.rabbitmq.receiverQueue}", containerFactory = "listenerContainerFactory") - private Message onMessage(final Message message, @Header(MessageHeaderKey.TYPE) final String type, - @Header(MessageHeaderKey.TENANT) final String tenant) { - return onMessage(message, type, tenant, getRabbitTemplate().getConnectionFactory().getVirtualHost()); - } - /** * Method to handle all incoming amqp messages. * @@ -124,14 +120,17 @@ public class AmqpMessageHandlerService extends BaseAmqpService { * incoming message * @param type * the message type - * @param contentType - * the contentType of the message * @param tenant * the contentType of the message - * @param virtualHost - * the virtual host + * * @return a message if no message is send back to sender */ + @RabbitListener(queues = "${hawkbit.dmf.rabbitmq.receiverQueue}", containerFactory = "listenerContainerFactory") + public Message onMessage(final Message message, @Header(MessageHeaderKey.TYPE) final String type, + @Header(MessageHeaderKey.TENANT) final String tenant) { + return onMessage(message, type, tenant, getRabbitTemplate().getConnectionFactory().getVirtualHost()); + } + public Message onMessage(final Message message, final String type, final String tenant, final String virtualHost) { checkContentTypeJson(message); final SecurityContext oldContext = SecurityContextHolder.getContext(); @@ -153,6 +152,10 @@ public class AmqpMessageHandlerService extends BaseAmqpService { default: logAndThrowMessageError(message, "No handle method was found for the given message type."); } + } catch (final IllegalArgumentException ex) { + throw new AmqpRejectAndDontRequeueException("Invalid message!", ex); + } catch (final TenantNotExistException teex) { + throw new AmqpRejectAndDontRequeueException(teex); } finally { SecurityContextHolder.setContext(oldContext); } @@ -421,7 +424,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } } - private void checkContentTypeJson(final Message message) { + private static void checkContentTypeJson(final Message message) { final MessageProperties messageProperties = message.getMessageProperties(); if (messageProperties.getContentType() != null && messageProperties.getContentType().contains("json")) { return; diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java index a20c59792..ace1fefa2 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java @@ -50,6 +50,34 @@ public class AmqpProperties { */ private int maxConcurrentConsumers = 10; + /** + * Tells the broker how many messages to send to each consumer in a single + * request. Often this can be set quite high to improve throughput. + */ + private int prefetchCount = 10; + + /** + * Initial number of consumers. Is scaled up if necessary up to + * {@link #maxConcurrentConsumers}. + */ + private int initialConcurrentConsumers = 3; + + public int getPrefetchCount() { + return prefetchCount; + } + + public void setPrefetchCount(final int prefetchCount) { + this.prefetchCount = prefetchCount; + } + + public int getInitialConcurrentConsumers() { + return initialConcurrentConsumers; + } + + public void setInitialConcurrentConsumers(final int initialConcurrentConsumers) { + this.initialConcurrentConsumers = initialConcurrentConsumers; + } + public int getMaxConcurrentConsumers() { return maxConcurrentConsumers; } 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 a0515a871..338feea62 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 @@ -59,6 +59,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.amqp.AmqpRejectAndDontRequeueException; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -170,7 +171,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted since no replyTo header was set"); - } catch (final IllegalArgumentException exception) { + } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } @@ -184,7 +185,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted since no thingID was set"); - } catch (final IllegalArgumentException exception) { + } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } } @@ -200,7 +201,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, type, TENANT, "vHost"); fail("IllegalArgumentException was excepeted due to unknown message type"); - } catch (final IllegalArgumentException exception) { + } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } } @@ -213,21 +214,21 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted due to unknown message type"); - } catch (final IllegalArgumentException e) { + } catch (final AmqpRejectAndDontRequeueException e) { } try { messageProperties.setHeader(MessageHeaderKey.TOPIC, "wrongTopic"); amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted due to unknown topic"); - } catch (final IllegalArgumentException e) { + } catch (final AmqpRejectAndDontRequeueException e) { } messageProperties.setHeader(MessageHeaderKey.TOPIC, EventTopic.CANCEL_DOWNLOAD.name()); try { amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted because there was no event topic"); - } catch (final IllegalArgumentException exception) { + } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } @@ -246,7 +247,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted since no action id was set"); - } catch (final IllegalArgumentException exception) { + } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } } @@ -263,7 +264,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted since no action id was set"); - } catch (final IllegalArgumentException exception) { + } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } From eac44899f2a357c20161afa66e86a8cb476917b3 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Sun, 19 Jun 2016 20:43:47 +0200 Subject: [PATCH 272/371] Completed configurable mgmt simulation scenario. Signed-off-by: kaizimmerm --- .../MgmtDistributionSetClientResource.java | 2 +- .../MgmtDistributionSetTagClientResource.java | 2 +- ...MgmtDistributionSetTypeClientResource.java | 2 +- .../MgmtDownloadArtifactClientResource.java | 2 +- .../resource/MgmtDownloadClientResource.java | 2 +- .../resource/MgmtRolloutClientResource.java | 2 +- .../MgmtSoftwareModuleClientResource.java | 3 ++- .../MgmtSoftwareModuleTypeClientResource.java | 2 +- .../resource/MgmtSystemClientResource.java | 2 +- .../MgmtSystemManagementClientResource.java | 2 +- .../resource/MgmtTargetClientResource.java | 2 +- .../resource/MgmtTargetTagClientResource.java | 2 +- .../builder/SoftwareModuleBuilder.java | 2 +- .../hawkbit/mgmt/client/Application.java | 12 ++++++++--- .../client/ClientConfigurationProperties.java | 9 -------- .../scenarios/ConfigurableScenario.java | 21 +++++++++---------- .../upload/FeignMultipartEncoder.java | 13 ++++++++---- .../src/main/resources/application.properties | 4 +++- .../{logback-spring.xml => logback.xml} | 12 +++-------- .../artifact/repository/ArtifactStore.java | 16 ++++---------- .../ArtifactStoreAutoConfiguration.java | 5 ----- 21 files changed, 52 insertions(+), 67 deletions(-) rename examples/hawkbit-example-mgmt-simulator/src/main/resources/{logback-spring.xml => logback.xml} (57%) 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 7bf696a8f..40eb13b55 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 @@ -15,7 +15,7 @@ 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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING) 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 783cc09fa..1070bbd9c 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 @@ -15,6 +15,6 @@ 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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING) 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 35f26781f..451c53942 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 @@ -16,7 +16,7 @@ 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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING) 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 d25a609b2..5c93edce5 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 @@ -16,7 +16,7 @@ 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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) 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 9a1dcee61..330d3908f 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 @@ -15,6 +15,6 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * */ -@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE) +@FeignClient(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING_BASE) 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 d2643a938..acc00d6fe 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 @@ -15,6 +15,6 @@ 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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.ROLLOUT_V1_REQUEST_MAPPING) 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 16ea188bd..7a2267e24 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 @@ -24,9 +24,10 @@ 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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING) public interface MgmtSoftwareModuleClientResource extends MgmtSoftwareModuleRestApi { + @Override @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts") ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @Param("file") final MultipartFile file, 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 1e9462c47..603e82f10 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 @@ -15,6 +15,6 @@ 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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING) 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 7d6967fed..e1bbd909c 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 @@ -16,6 +16,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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING) 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 d1974b43f..802194fe8 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 @@ -16,7 +16,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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.SYSTEM_ADMIN_MAPPING) 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 872c4251a..c0a0193af 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 @@ -15,6 +15,6 @@ 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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING) 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 7b0c213af..3f9264337 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 @@ -15,6 +15,6 @@ 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(url = "${hawkbit.url:localhost:8080}" + MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING) public interface MgmtTargetTagClientResource extends MgmtTargetTagRestApi { } diff --git a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java index 1d633e440..db7941bfc 100644 --- a/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java +++ b/examples/hawkbit-example-mgmt-feign-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/builder/SoftwareModuleBuilder.java @@ -90,7 +90,7 @@ public class SoftwareModuleBuilder { * @return a single entry list of {@link MgmtSoftwareModuleRequestBodyPost} */ public List build() { - return Lists.newArrayList(doBuild(name)); + return Lists.newArrayList(doBuild("")); } /** 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 e89f3211b..8ebd8830a 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 @@ -35,9 +35,10 @@ import feign.Feign; import feign.Logger; import feign.auth.BasicAuthRequestInterceptor; import feign.jackson.JacksonDecoder; +import feign.slf4j.Slf4jLogger; @SpringBootApplication -@EnableFeignClients +@EnableFeignClients("org.eclipse.hawkbit.mgmt.client.resource") @EnableConfigurationProperties(ClientConfigurationProperties.class) @Configuration @AutoConfigureAfter(FeignClientConfiguration.class) @@ -83,6 +84,11 @@ public class Application implements CommandLineRunner { return new CreateStartedRolloutExample(); } + @Bean + public Logger.Level feignLoggerLevel() { + return Logger.Level.FULL; + } + @Bean public MgmtSoftwareModuleClientResource uploadSoftwareModule() { final ObjectMapper mapper = new ObjectMapper() @@ -92,13 +98,13 @@ public class Application implements CommandLineRunner { return Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) .requestInterceptor( new BasicAuthRequestInterceptor(configuration.getUsername(), configuration.getPassword())) - .logger(new Logger.ErrorLogger()).encoder(new FeignMultipartEncoder()) + .logger(new Slf4jLogger()).encoder(new FeignMultipartEncoder()) .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper))) .target(MgmtSoftwareModuleClientResource.class, configuration.getUrl() + MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING); } - private boolean containsArg(final String containsArg, final String... args) { + private static boolean containsArg(final String containsArg, final String... args) { for (final String arg : args) { if (arg.equalsIgnoreCase(containsArg)) { return true; diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java index 8a5c61575..83a0844d4 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/ClientConfigurationProperties.java @@ -44,7 +44,6 @@ public class ClientConfigurationProperties { * */ public static class Scenario { - private String tenant = "DEFAULT"; private boolean cleanRepository; private int targets = 100; private int distributionSets = 10; @@ -96,14 +95,6 @@ public class ClientConfigurationProperties { this.targetAddress = targetAddress; } - public String getTenant() { - return tenant; - } - - public void setTenant(final String tenant) { - this.tenant = tenant; - } - public int getArtifactsPerSM() { return artifactsPerSM; } 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 84b3da6ee..240f94568 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 @@ -1,5 +1,5 @@ /** -x * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -159,10 +159,9 @@ public class ConfigurableScenario { 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().parallelStream().forEach(dsSet -> { + 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 SoftwareModuleAssigmentBuilder assign = new SoftwareModuleAssigmentBuilder(); @@ -175,13 +174,13 @@ public class ConfigurableScenario { private List addModules(final Scenario scenario, final MgmtDistributionSet dsSet, final byte[] artifact) { - final List modules = softwareModuleResource.createSoftwareModules( - new SoftwareModuleBuilder().name(scenario.getSmFwName()).version(dsSet.getVersion()).type("os").build()) + final List modules = softwareModuleResource + .createSoftwareModules(new SoftwareModuleBuilder().name(scenario.getSmFwName() + "-os") + .version(dsSet.getVersion()).type("os").build()) .getBody(); - modules.addAll(softwareModuleResource - .createSoftwareModules( - new SoftwareModuleBuilder().name(scenario.getSmSwName()).version(dsSet.getVersion() + ".") - .type("application").buildAsList(scenario.getAppModulesPerDistributionSet())) + modules.addAll(softwareModuleResource.createSoftwareModules( + new SoftwareModuleBuilder().name(scenario.getSmSwName() + "-app").version(dsSet.getVersion() + ".") + .type("application").buildAsList(scenario.getAppModulesPerDistributionSet())) .getBody()); for (int x = 0; x < scenario.getArtifactsPerSM(); x++) { diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java index fdf5462da..00424c5e5 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java @@ -1,5 +1,10 @@ /** - * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.hawkbit.mgmt.client.scenarios.upload; @@ -100,16 +105,16 @@ public class FeignMultipartEncoder implements Encoder { } } - private boolean isMultipartFile(final Object object) { + private static boolean isMultipartFile(final Object object) { return object instanceof MultipartFile; } - private class HttpOutputMessageImpl implements HttpOutputMessage { + private static final class HttpOutputMessageImpl implements HttpOutputMessage { private final OutputStream body; private final HttpHeaders headers; - public HttpOutputMessageImpl(final OutputStream body, final HttpHeaders headers) { + private HttpOutputMessageImpl(final OutputStream body, final HttpHeaders headers) { this.body = body; this.headers = headers; } diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties index e19b83e19..ac3f240a3 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties +++ b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties @@ -13,8 +13,10 @@ hawkbit.password=admin spring.main.show-banner=false +hawkbit.scenarios.[0].cleanRepository=true hawkbit.scenarios.[0].targets=0 hawkbit.scenarios.[0].ds-name=gettingstarted-example hawkbit.scenarios.[0].distribution-sets=3 hawkbit.scenarios.[0].sm-fw-name=gettingstarted-example -hawkbit.scenarios.[0].sm-sw-name=gettingstarted-example \ No newline at end of file +hawkbit.scenarios.[0].sm-sw-name=gettingstarted-example +hawkbit.scenarios.[0].runRollouts=false \ No newline at end of file diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/resources/logback-spring.xml b/examples/hawkbit-example-mgmt-simulator/src/main/resources/logback.xml similarity index 57% rename from examples/hawkbit-example-mgmt-simulator/src/main/resources/logback-spring.xml rename to examples/hawkbit-example-mgmt-simulator/src/main/resources/logback.xml index 0174611e6..768f30687 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/resources/logback-spring.xml +++ b/examples/hawkbit-example-mgmt-simulator/src/main/resources/logback.xml @@ -10,17 +10,11 @@ --> - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - + - + - + diff --git a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java index aa9ff3409..eabd2b329 100644 --- a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java +++ b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStore.java @@ -87,9 +87,7 @@ public class ArtifactStore implements ArtifactRepository { /** * Retrieves a {@link GridFSDBFile} from the store by it's MD5 hash. - * - * @param tenant - * the tenant to retrieve the artifacts from, ignore case. + * * @param md5Hash * the md5-hash of the file to lookup. * @return The gridfs file object or {@code null} if no file exists. @@ -100,9 +98,7 @@ public class ArtifactStore implements ArtifactRepository { /** * Retrieves a {@link GridFSDBFile} from the store by it's object id. - * - * @param tenant - * the tenant to retrieve the artifacts from, ignore case. + * * @param id * the id of the file to lookup. * @return The gridfs file object or {@code null} if no file exists. @@ -231,15 +227,13 @@ public class ArtifactStore implements ArtifactRepository { * @return a paged list of artifacts mapped from the given dbFiles */ private List map(final List dbFiles) { - return dbFiles.stream().map(dbFile -> map(dbFile)).collect(Collectors.toList()); + return dbFiles.stream().map(this::map).collect(Collectors.toList()); } /** * Retrieves a list of {@link GridFSDBFile} from the store by all SHA1 * hashes. - * - * @param tenant - * the tenant to retrieve the artifacts from, ignore case. + * * @param sha1Hashes * the sha1-hashes of the files to lookup. * @return list of artifacts @@ -252,8 +246,6 @@ public class ArtifactStore implements ArtifactRepository { /** * Retrieves a list of {@link GridFSDBFile} from the store by all ids. * - * @param tenant - * the tenant to retrieve the artifacts from, ignore case. * @param ids * the ids of the files to lookup. * @return list of artfiacts diff --git a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStoreAutoConfiguration.java b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStoreAutoConfiguration.java index 43bcddaf0..8a1cb89a9 100644 --- a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStoreAutoConfiguration.java +++ b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/ArtifactStoreAutoConfiguration.java @@ -10,18 +10,13 @@ package org.eclipse.hawkbit.artifact.repository; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; /** * Auto configuration for the {@link ArtifactStore}. - * - * - * */ @Configuration -@ComponentScan @ConditionalOnMissingBean(value = ArtifactRepository.class) @Import(value = MongoConfiguration.class) public class ArtifactStoreAutoConfiguration { From f40fbef4990dd1d0a0d2a13690e02783e26bc074 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 20 Jun 2016 08:24:28 +0200 Subject: [PATCH 273/371] Insert seleniumTest for ColorPickerLayout Signed-off-by: Melanie Retter --- .../eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java | 2 ++ .../eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java index 7d2046bd9..732523560 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java @@ -13,6 +13,7 @@ import java.util.Set; import org.eclipse.hawkbit.ui.common.CoordinatesToColor; import org.eclipse.hawkbit.ui.management.tag.SpColorPickerPreview; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; @@ -47,6 +48,7 @@ public class ColorPickerLayout extends GridLayout { setColumns(2); setRows(4); + setId(SPUIComponentIdProvider.COLOR_PICKER_LAYOUT); init(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index b4e89a191..9757df522 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -302,6 +302,11 @@ public final class SPUIComponentIdProvider { * tag color preview button id. */ public static final String TAG_COLOR_PREVIEW_ID = "tag.color.preview"; + + /** + * Id for ColorPickerLayout + */ + public static final String COLOR_PICKER_LAYOUT = "color.picker.layout"; /** * Confirmation dialogue OK button id. */ From fb59dca1687b4d54b1313ddebff63bb4d8de35f9 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Mon, 20 Jun 2016 08:46:50 +0200 Subject: [PATCH 274/371] Added configurable late feedback functionality, i.e. action feedback still allowed even for closed action. Signed-off-by: kaizimmerm --- .../repository/RepositoryProperties.java | 29 ++++++ .../hawkbit-repository-jpa/pom.xml | 8 ++ .../RepositoryApplicationConfiguration.java | 5 +- .../jpa/JpaControllerManagement.java | 31 +++++- .../jpa/ControllerManagementTest.java | 95 ++++++++++++++++++- 5 files changed, 161 insertions(+), 7 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java new file mode 100644 index 000000000..982003812 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java @@ -0,0 +1,29 @@ +package org.eclipse.hawkbit.repository; + +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Configuration properties for the repository. + * + */ +@ConfigurationProperties("hawkbit.server.repository") +public class RepositoryProperties { + + /** + * Set to true if the repository has to reject + * {@link ActionStatus} entries for actions that are closed. Note: if this + * is enforced you have to make sure that the feedback channel from the + * devices i in order. + */ + private boolean rejectActionStatusForClosedAction = false; + + public boolean isRejectActionStatusForClosedAction() { + return rejectActionStatusForClosedAction; + } + + public void setRejectActionStatusForClosedAction(final boolean rejectActionStatusForClosedAction) { + this.rejectActionStatusForClosedAction = rejectActionStatusForClosedAction; + } + +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/pom.xml b/hawkbit-repository/hawkbit-repository-jpa/pom.xml index bd56e9ca5..b1d60ec08 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/pom.xml +++ b/hawkbit-repository/hawkbit-repository-jpa/pom.xml @@ -136,6 +136,14 @@ fest-assert test + + org.springframework.boot + spring-boot-starter-hornetq + + + org.springframework.boot + spring-boot-starter-hornetq + diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index 50207037a..0f1d98166 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit; import java.util.HashMap; import java.util.Map; +import org.eclipse.hawkbit.repository.RepositoryProperties; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.jpa.aspects.ExceptionMappingAspectHandler; @@ -27,6 +28,7 @@ import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -40,7 +42,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; /** - * General configuration for the SP Repository. + * General configuration for hawlBit's Repository. * */ @EnableJpaRepositories(basePackages = { "org.eclipse.hawkbit.repository.jpa" }) @@ -50,6 +52,7 @@ import org.springframework.validation.beanvalidation.MethodValidationPostProcess @Configuration @ComponentScan @EnableAutoConfiguration +@EnableConfigurationProperties(RepositoryProperties.class) public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { /** * @return the {@link SystemSecurityContext} singleton bean which make it 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 77b71e661..b8922c151 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 @@ -21,6 +21,7 @@ import javax.validation.constraints.NotNull; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.RepositoryConstants; +import org.eclipse.hawkbit.repository.RepositoryProperties; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; @@ -94,6 +95,9 @@ public class JpaControllerManagement implements ControllerManagement { @Autowired private HawkbitSecurityProperties securityProperties; + @Autowired + private RepositoryProperties repositoryProperties; + @Autowired private TenantConfigurationRepository tenantConfigurationRepository; @@ -251,7 +255,13 @@ public class JpaControllerManagement implements ControllerManagement { public Action addUpdateActionStatus(@NotNull final ActionStatus actionStatus) { final JpaAction action = (JpaAction) actionStatus.getAction(); - if (!action.isActive()) { + // TODO: test + // if action is already closed we accept further status updates on if + // permitted so by configuration. This is especially use full if the + // action status feedback channel order from the device cannot be + // guaranteed. However, if an action is closed we do not accept further + // close messages. + if (actionIsNotActiveButIntermediateFeedbackStillAllowed(actionStatus, action)) { LOG.debug("Update of actionStatus {} for action {} not possible since action not active anymore.", actionStatus.getId(), action.getId()); return action; @@ -259,6 +269,12 @@ public class JpaControllerManagement implements ControllerManagement { return handleAddUpdateActionStatus((JpaActionStatus) actionStatus, action); } + private boolean actionIsNotActiveButIntermediateFeedbackStillAllowed(final ActionStatus actionStatus, + final JpaAction action) { + return !action.isActive() && (repositoryProperties.isRejectActionStatusForClosedAction() + || (Status.ERROR.equals(actionStatus.getStatus()) || Status.FINISHED.equals(actionStatus.getStatus()))); + } + /** * Sets {@link TargetUpdateStatus} based on given {@link ActionStatus}. * @@ -286,8 +302,7 @@ public class JpaControllerManagement implements ControllerManagement { case CANCELED: case WARNING: case RUNNING: - DeploymentHelper.updateTargetInfo(mergedTarget, TargetUpdateStatus.PENDING, false, targetInfoRepository, - entityManager); + handleIntermediateFeedback(mergedAction, mergedTarget); break; default: break; @@ -300,6 +315,16 @@ public class JpaControllerManagement implements ControllerManagement { return actionRepository.save(mergedAction); } + private void handleIntermediateFeedback(final JpaAction mergedAction, final JpaTarget mergedTarget) { + // we change the target state only if the action is still running + // otherwise this is considered as late feedback that does not have + // an impact on the state anymore. + if (mergedAction.isActive()) { + DeploymentHelper.updateTargetInfo(mergedTarget, TargetUpdateStatus.PENDING, false, targetInfoRepository, + entityManager); + } + } + private void handleErrorOnAction(final JpaAction mergedAction, final JpaTarget mergedTarget) { mergedAction.setActive(false); mergedAction.setStatus(Status.ERROR); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java index f33c5c170..77adfa45b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java @@ -17,6 +17,7 @@ import java.util.List; import javax.validation.ConstraintViolationException; import org.apache.commons.lang3.RandomStringUtils; +import org.eclipse.hawkbit.repository.RepositoryProperties; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.Action; @@ -26,6 +27,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; @@ -34,6 +36,8 @@ import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @Stories("Controller Management") public class ControllerManagementTest extends AbstractJpaIntegrationTest { + @Autowired + private RepositoryProperties repositoryProperties; @Test @Description("Controller adds a new action status.") @@ -94,7 +98,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { @Test @Description("Controller trys to finish an update process after it has been finished by an error action status.") - public void tryToFinishUpdateProcessMoreThenOnce() { + public void tryToFinishUpdateProcessMoreThanOnce() { // mock final Target target = new JpaTarget("Rabbit"); @@ -120,16 +124,101 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { assertThat(targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.ERROR); + // try with disabled late feedback + repositoryProperties.setRejectActionStatusForClosedAction(true); final ActionStatus actionStatusMessage3 = new JpaActionStatus(savedAction, Action.Status.FINISHED, System.currentTimeMillis()); actionStatusMessage3.addMessage("finish"); - controllerManagament.addUpdateActionStatus(actionStatusMessage3); + savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage3); - targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus(); + // test + assertThat(targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus()) + .isEqualTo(TargetUpdateStatus.ERROR); + + // try with enabled late feedback + repositoryProperties.setRejectActionStatusForClosedAction(false); + final ActionStatus actionStatusMessage4 = new JpaActionStatus(savedAction, Action.Status.FINISHED, + System.currentTimeMillis()); + actionStatusMessage4.addMessage("finish"); + controllerManagament.addUpdateActionStatus(actionStatusMessage3); // test assertThat(targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.ERROR); } + + @Test + @Description("Controller trys to send an update feedback after it has been finished which is reject as the repository is " + + "configured to reject that.") + public void sendUpdatesForFinishUpdateProcessDropedIfDisabled() { + repositoryProperties.setRejectActionStatusForClosedAction(true); + + final Action action = prepareFinishedUpdate("Rabbit"); + + final ActionStatus actionStatusMessage1 = new JpaActionStatus(action, Action.Status.RUNNING, + System.currentTimeMillis()); + actionStatusMessage1.addMessage("got some additional feedback"); + controllerManagament.addUpdateActionStatus(actionStatusMessage1); + + // nothing changed as "feedback after close" is disabled + assertThat(targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus()) + .isEqualTo(TargetUpdateStatus.IN_SYNC); + assertThat(actionStatusRepository.findAll(pageReq).getNumberOfElements()).isEqualTo(3); + assertThat(deploymentManagement.findActionStatusByAction(pageReq, action).getNumberOfElements()).isEqualTo(3); + } + + @Test + @Description("Controller trys to send an update feedback after it has been finished which is actepted as the repository is " + + "configured to accept them.") + public void sendUpdatesForFinishUpdateProcessAcceptedIfEnabled() { + repositoryProperties.setRejectActionStatusForClosedAction(false); + + Action action = prepareFinishedUpdate("Rabbit"); + + final ActionStatus actionStatusMessage1 = new JpaActionStatus(action, Action.Status.RUNNING, + System.currentTimeMillis()); + actionStatusMessage1.addMessage("got some additional feedback"); + action = controllerManagament.addUpdateActionStatus(actionStatusMessage1); + + // nothing changed as "feedback after close" is disabled + assertThat(targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus()) + .isEqualTo(TargetUpdateStatus.IN_SYNC); + assertThat(actionStatusRepository.findAll(pageReq).getNumberOfElements()).isEqualTo(4); + assertThat(deploymentManagement.findActionStatusByAction(pageReq, action).getNumberOfElements()).isEqualTo(4); + } + + private Action prepareFinishedUpdate(final String controllerId) { + // mock + final Target target = new JpaTarget(controllerId); + final DistributionSet ds = testdataFactory.createDistributionSet(""); + Target savedTarget = targetManagement.createTarget(target); + final List toAssign = new ArrayList<>(); + toAssign.add(savedTarget); + savedTarget = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedEntity().iterator().next(); + Action savedAction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); + + // test and verify + final ActionStatus actionStatusMessage = new JpaActionStatus(savedAction, Action.Status.RUNNING, + System.currentTimeMillis()); + actionStatusMessage.addMessage("running"); + savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage); + assertThat(targetManagement.findTargetByControllerID(controllerId).getTargetInfo().getUpdateStatus()) + .isEqualTo(TargetUpdateStatus.PENDING); + + final ActionStatus actionStatusMessage2 = new JpaActionStatus(savedAction, Action.Status.FINISHED, + System.currentTimeMillis()); + actionStatusMessage2.addMessage("finish"); + savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage2); + + // test + assertThat(targetManagement.findTargetByControllerID(controllerId).getTargetInfo().getUpdateStatus()) + .isEqualTo(TargetUpdateStatus.IN_SYNC); + + assertThat(actionStatusRepository.findAll(pageReq).getNumberOfElements()).isEqualTo(3); + assertThat(deploymentManagement.findActionStatusByAction(pageReq, savedAction).getNumberOfElements()) + .isEqualTo(3); + + return savedAction; + } } From 2044695aeb75464455219d39c923c2a76956a501 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Mon, 20 Jun 2016 08:56:40 +0200 Subject: [PATCH 275/371] Fixed license header. Signed-off-by: kaizimmerm --- .../eclipse/hawkbit/repository/RepositoryProperties.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java index 982003812..c60089fb3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.repository.model.ActionStatus; From dbb2e00ed86b54cf6be3ff3b82911d95abf89275 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Mon, 20 Jun 2016 10:16:15 +0200 Subject: [PATCH 276/371] re-order tenant lazy initialization filter after authentication chain Signed-off-by: Michael Hirsch --- .../autoconfigure/security/SecurityManagedConfiguration.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java index fc7a0a1e4..0b68246ff 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java @@ -83,6 +83,7 @@ import org.springframework.security.web.header.writers.frameoptions.StaticAllowF import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter; import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter.XFrameOptionsMode; import org.springframework.security.web.session.HttpSessionEventPublisher; +import org.springframework.security.web.session.SessionManagementFilter; import org.vaadin.spring.security.VaadinSecurityContext; import org.vaadin.spring.security.annotation.EnableVaadinSecurity; import org.vaadin.spring.security.web.VaadinDefaultRedirectStrategy; @@ -333,7 +334,7 @@ public class SecurityManagedConfiguration { }, RequestHeaderAuthenticationFilter.class) .addFilterAfter( new AuthenticationSuccessTenantMetadataCreationFilter(tenantAware, systemManagement), - RequestHeaderAuthenticationFilter.class) + SessionManagementFilter.class) .authorizeRequests().anyRequest().authenticated() .antMatchers(MgmtRestConstants.BASE_SYSTEM_MAPPING + "/admin/**") .hasAnyAuthority(SpPermission.SYSTEM_ADMIN) From deb1dde32646a7a5266e658642f6ccff57d4ec7e Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 21 Jun 2016 09:45:28 +0200 Subject: [PATCH 277/371] Add select all for mac osx Signed-off-by: SirWayne --- .../smtable/SoftwareModuleTableLayout.java | 5 -- .../ui/common/table/AbstractTableLayout.java | 85 +++++++++++-------- .../dstable/DistributionSetTableLayout.java | 5 -- .../smtable/SwModuleTableLayout.java | 6 -- .../dstable/DistributionTableLayout.java | 5 -- 5 files changed, 51 insertions(+), 55 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java index 2672c4546..421fbc89c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTableLayout.java @@ -42,9 +42,4 @@ public class SoftwareModuleTableLayout extends AbstractTableLayout { super.init(smTableHeader, smTable, softwareModuleDetails); } - @Override - protected void publishEvent() { - // nothing to publish - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java index 98874626d..905c5917c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java @@ -9,11 +9,12 @@ package org.eclipse.hawkbit.ui.common.table; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; -import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.event.Action; import com.vaadin.event.Action.Handler; import com.vaadin.event.ShortcutAction; +import com.vaadin.server.Page; +import com.vaadin.server.WebBrowser; import com.vaadin.ui.Alignment; import com.vaadin.ui.Panel; import com.vaadin.ui.VerticalLayout; @@ -24,22 +25,16 @@ import com.vaadin.ui.themes.ValoTheme; */ public abstract class AbstractTableLayout extends VerticalLayout { - private static final long serialVersionUID = 8611248179949245460L; - - /** - * action for the shortcut key ctrl + 'A'. - */ - protected static final ShortcutAction ACTION_CTRL_A = new ShortcutAction("Select All", ShortcutAction.KeyCode.A, - new int[] { ShortcutAction.ModifierKey.CTRL }); + private static final long serialVersionUID = 1L; private AbstractTableHeader tableHeader; - private AbstractTable table; + private AbstractTable table; - private AbstractTableDetailsLayout detailsLayout; + private AbstractTableDetailsLayout detailsLayout; - protected void init(final AbstractTableHeader tableHeader, final AbstractTable table, - final AbstractTableDetailsLayout detailsLayout) { + protected void init(final AbstractTableHeader tableHeader, final AbstractTable table, + final AbstractTableDetailsLayout detailsLayout) { this.tableHeader = tableHeader; this.table = table; this.detailsLayout = detailsLayout; @@ -63,24 +58,24 @@ public abstract class AbstractTableLayout extends VerticalLayout { if (isShortCutKeysRequired()) { final Panel tablePanel = new Panel(); tablePanel.setStyleName("table-panel"); - tablePanel.setHeight(100.0f, Unit.PERCENTAGE); + tablePanel.setHeight(100.0F, Unit.PERCENTAGE); tablePanel.setContent(table); tablePanel.addActionHandler(getShortCutKeysHandler()); tablePanel.addStyleName(ValoTheme.PANEL_BORDERLESS); tableHeaderLayout.addComponent(tablePanel); tableHeaderLayout.setComponentAlignment(tablePanel, Alignment.TOP_CENTER); - tableHeaderLayout.setExpandRatio(tablePanel, 1.0f); + tableHeaderLayout.setExpandRatio(tablePanel, 1.0F); } else { tableHeaderLayout.addComponent(table); tableHeaderLayout.setComponentAlignment(table, Alignment.TOP_CENTER); - tableHeaderLayout.setExpandRatio(table, 1.0f); + tableHeaderLayout.setExpandRatio(table, 1.0F); } addComponent(tableHeaderLayout); addComponent(detailsLayout); setComponentAlignment(tableHeaderLayout, Alignment.TOP_CENTER); setComponentAlignment(detailsLayout, Alignment.TOP_CENTER); - setExpandRatio(tableHeaderLayout, 1.0f); + setExpandRatio(tableHeaderLayout, 1.0F); } /** @@ -99,29 +94,51 @@ public abstract class AbstractTableLayout extends VerticalLayout { * Default is null. */ protected Handler getShortCutKeysHandler() { - return new Handler() { - - private static final long serialVersionUID = 1L; - - @Override - public void handleAction(final Action action, final Object sender, final Object target) { - if (ACTION_CTRL_A.equals(action)) { - table.selectAll(); - publishEvent(); - } - } - - @Override - public Action[] getActions(final Object target, final Object sender) { - return new Action[] { ACTION_CTRL_A }; - } - }; + return new TableShortCutHandler(); } - protected abstract void publishEvent(); + protected void publishEvent() { + // can be override by subclasses + } public void setShowFilterButtonVisible(final boolean visible) { tableHeader.setFilterButtonsIconVisible(visible); } + private class TableShortCutHandler implements Handler { + + private static final String SELECT_ALL_TEXT = "Select All"; + private final ShortcutAction selectAllAction = new ShortcutAction(SELECT_ALL_TEXT, ShortcutAction.KeyCode.A, + new int[] { ShortcutAction.ModifierKey.CTRL }); + + private final ShortcutAction selectAllMacAction = new ShortcutAction(SELECT_ALL_TEXT, ShortcutAction.KeyCode.A, + new int[] { ShortcutAction.ModifierKey.META }); + + private static final long serialVersionUID = 1L; + + @Override + public void handleAction(final Action action, final Object sender, final Object target) { + if (!isSelecAllAction(action)) { + return; + } + table.selectAll(); + publishEvent(); + } + + private boolean isSelecAllAction(final Action action) { + return selectAllAction.equals(action) || selectAllMacAction.equals(action); + } + + @Override + public Action[] getActions(final Object target, final Object sender) { + + final WebBrowser webBrowser = Page.getCurrent().getWebBrowser(); + if (webBrowser.isMacOSX()) { + return new Action[] { selectAllMacAction }; + } + + return new Action[] { selectAllAction }; + } + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java index 66c8aff0e..e15189f6a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableLayout.java @@ -46,9 +46,4 @@ public class DistributionSetTableLayout extends AbstractTableLayout { super.init(dsTableHeader, dsTable, distributionDetails); } - @Override - protected void publishEvent() { - // nothing to publish - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java index e0d4b8ac6..9d298207a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleTableLayout.java @@ -41,10 +41,4 @@ public class SwModuleTableLayout extends AbstractTableLayout { void init() { super.init(swModuleTableHeader, swModuleTable, swModuleDetails); } - - @Override - protected void publishEvent() { - // nothing to publish - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java index fefbca972..0d9a782a1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableLayout.java @@ -42,9 +42,4 @@ public class DistributionTableLayout extends AbstractTableLayout { super.init(dsTableHeader, dsTable, distributionDetails); } - @Override - protected void publishEvent() { - // nothing to publish - } - } From 437b77a1a8002e5204ceac8a992ea23eab70d758 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Tue, 21 Jun 2016 11:00:58 +0200 Subject: [PATCH 278/371] Completed configurable demo generator. Signed-off-by: kaizimmerm --- .../hawkbit/mgmt/client/Application.java | 13 +++++-- .../scenarios/ConfigurableScenario.java | 34 +++++++++++-------- 2 files changed, 30 insertions(+), 17 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 8ebd8830a..ac65455b5 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 @@ -10,12 +10,16 @@ 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.CommandLineRunner; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -75,8 +79,13 @@ public class Application implements CommandLineRunner { } @Bean - public ConfigurableScenario configurableScenario() { - return new ConfigurableScenario(); + public ConfigurableScenario configurableScenario(final MgmtDistributionSetClientResource distributionSetResource, + @Qualifier("mgmtSoftwareModuleClientResource") final MgmtSoftwareModuleClientResource softwareModuleResource, + @Qualifier("uploadSoftwareModule") final MgmtSoftwareModuleClientResource uploadSoftwareModule, + final MgmtTargetClientResource targetResource, final MgmtRolloutClientResource rolloutResource, + final ClientConfigurationProperties clientConfigurationProperties) { + return new ConfigurableScenario(distributionSetResource, softwareModuleResource, uploadSoftwareModule, + targetResource, rolloutResource, clientConfigurationProperties); } @Bean 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 240f94568..33afefa26 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 @@ -31,7 +31,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.Autowired; import org.springframework.beans.factory.annotation.Qualifier; /** @@ -43,25 +42,30 @@ public class ConfigurableScenario { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurableScenario.class); - @Autowired - private MgmtDistributionSetClientResource distributionSetResource; + private final MgmtDistributionSetClientResource distributionSetResource; - @Autowired - @Qualifier("mgmtSoftwareModuleClientResource") - private MgmtSoftwareModuleClientResource softwareModuleResource; + private final MgmtSoftwareModuleClientResource softwareModuleResource; - @Autowired - @Qualifier("uploadSoftwareModule") - private MgmtSoftwareModuleClientResource uploadSoftwareModule; + private final MgmtSoftwareModuleClientResource uploadSoftwareModule; - @Autowired - private MgmtTargetClientResource targetResource; + private final MgmtTargetClientResource targetResource; - @Autowired - private MgmtRolloutClientResource rolloutResource; + private final MgmtRolloutClientResource rolloutResource; - @Autowired - private ClientConfigurationProperties clientConfigurationProperties; + private final ClientConfigurationProperties clientConfigurationProperties; + + public ConfigurableScenario(final MgmtDistributionSetClientResource distributionSetResource, + @Qualifier("mgmtSoftwareModuleClientResource") final MgmtSoftwareModuleClientResource softwareModuleResource, + @Qualifier("uploadSoftwareModule") 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; + } /** * Run the default getting started scenario. From 66360721e6e29d4ee60906b6e684993d7a2dd924 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 21 Jun 2016 11:09:54 +0200 Subject: [PATCH 279/371] CSS change Signed-off-by: Melanie Retter --- .../hawkbit/ui/common/CommonDialogWindow.java | 12 +++++++++--- .../disttype/CreateUpdateDistSetTypeLayout.java | 1 - .../TargetAddUpdateWindowLayout.java | 3 --- .../ui/utils/SPUIComponentIdProvider.java | 5 +++++ .../hawkbit/customstyles/popup-common.scss | 17 ++++++++++++++++- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 80d3de078..4388ee98a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -109,9 +109,15 @@ public class CommonDialogWindow extends Window implements Serializable { public void checkMandatoryTextField(final TextChangeEvent event, final AbstractTextField textfield) { if (StringUtils.isNotBlank(event.getText())) { - getRequiredFields().put(textfield.getCaption(), Boolean.TRUE); + if (StringUtils.isNotBlank(textfield.getCaption())) { + getRequiredFields().put(textfield.getCaption(), Boolean.TRUE); + } + getRequiredFields().put(textfield.getId(), Boolean.TRUE); } else { - getRequiredFields().put(textfield.getCaption(), Boolean.FALSE); + if (StringUtils.isNotBlank(textfield.getCaption())) { + getRequiredFields().put(textfield.getCaption(), Boolean.FALSE); + } + getRequiredFields().put(textfield.getId(), Boolean.FALSE); } checkMandatoryFields(); } @@ -189,7 +195,7 @@ public class CommonDialogWindow extends Window implements Serializable { ((AbstractOrderedLayout) content).setMargin(true); } if (content instanceof GridLayout) { - addStyleName(""); + addStyleName("marginTop"); } if (null != content) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 4d5579de0..4b97ce7dd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -113,7 +113,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_DESC, false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); - tagDesc.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 5913bc9d1..9bd3972f0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -52,9 +52,6 @@ import com.vaadin.ui.themes.ValoTheme; /** * Add and Update Target. - * - * - * */ @SpringComponent @VaadinSessionScope diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index 496bb5cb4..7a7d62b87 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -927,6 +927,11 @@ public final class SPUIComponentIdProvider { */ public static final String UPLOAD_STATUS_POPUP_ID = "artifact.upload.status.popup.id"; + /** + * Table multiselect for selecting DistType + */ + public static final String SELECT_DIST_TYPE = "select-dist-type"; + /** * /* Private Constructor. */ diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss index 602298766..bab6e5f2a 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss @@ -54,7 +54,22 @@ } .v-gridlayout .v-gridlayout-marginTop { - padding-top: 20px !important; + margin-top: 20px !important; } + .v-slot .v-slot-marginTop { + margin-top: 20px !important; + } + + .v-gridlayout-marginTop { + margin-top: 20px !important; + } + + .v-slot-marginTop { + margin-top: 20px !important; + } + + .marginTop { + margin-top: 20px !important; + } } From dfa547d382a7713055891b1cb58d3f5249d1c323 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 21 Jun 2016 11:14:22 +0200 Subject: [PATCH 280/371] update jacoco version Signed-off-by: Michael Hirsch --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f50afa0ab..de7a9dd6d 100644 --- a/pom.xml +++ b/pom.xml @@ -127,7 +127,7 @@ https://projects.eclipse.org/projects/iot.hawkbit https://circleci.com/gh/eclipse/hawkbit - 0.7.6.201602180812 + 0.7.7.201606060606 1.4 From 8507626b69d60ef5ee7a8fd5b9b4460666ad85d0 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 21 Jun 2016 13:41:06 +0200 Subject: [PATCH 281/371] Delete useless css styles. Update upper/lower case in properties Signed-off-by: Melanie Retter --- .../hawkbit/customstyles/popup-common.scss | 16 ------- .../src/main/resources/messages.properties | 38 ++++++++--------- .../src/main/resources/messages_de.properties | 42 +++++++++---------- .../src/main/resources/messages_en.properties | 42 +++++++++---------- 4 files changed, 61 insertions(+), 77 deletions(-) diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss index bab6e5f2a..b8e6b1755 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/popup-common.scss @@ -53,22 +53,6 @@ font-size: 16px; } - .v-gridlayout .v-gridlayout-marginTop { - margin-top: 20px !important; - } - - .v-slot .v-slot-marginTop { - margin-top: 20px !important; - } - - .v-gridlayout-marginTop { - margin-top: 20px !important; - } - - .v-slot-marginTop { - margin-top: 20px !important; - } - .marginTop { margin-top: 20px !important; } diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 1fee8dcdb..5b3ad793b 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -79,14 +79,14 @@ caption.delete.swmodule.accordion.tab = Delete SW Modules caption.delete.dist.set.type.accordion.tab = Delete Distribution Set Type caption.delete.sw.module.type.accordion.tab = Delete Software Module Type caption.attributes = Attributes -caption.panel.dist.installed = Installed distribution set -caption.panel.dist.assigned = Assigned distribution set +caption.panel.dist.installed = Installed Distribution Set +caption.panel.dist.assigned = Assigned Distribution Set caption.soft.delete.confirmbox = Confirm Software Module Delete Action -caption.cancel.action.confirmbox = Confirm action cancel +caption.cancel.action.confirmbox = Confirm Action Cancellation caption.forcequit.action.confirmbox = Confirm force quit action caption.forced.datefield = Force update at time caption.force.action.confirmbox = Confirm Force Active Action -caption.confirm.abort.action = Confirm abort action +caption.confirm.abort.action = Confirm Abort Action caption.filter.delete.confirmbox = Confirm Filter Delete Action @@ -220,7 +220,7 @@ message.duplicate.softwaremodule = {0} : {1} already exists! message.tag.delete = Please unclick the tag {0}, then try to delete message.dist.type.check.delete = Please unclick the distribution type {0}, then try to delete message.cannot.delete.default.dstype = Default distribution set type cannot be deleted -message.swmodule.type.check.delete = Please unclick the software module type {0}, then try to delete +message.swmodule.type.check.delete = Please unclick the Software Module type {0}, then try to delete message.targets.already.deleted = Few Target(s) are already deleted.Pending for action message.dists.already.deleted = Few distribution(s) are already deleted.Pending for action message.target.deleted.pending = Target(s) already deleted.Pending for action @@ -262,10 +262,10 @@ message.dists.assign.tag.alreadyassigned = Few of the DistributionSet's are alre message.dists.tag.assigned = {0} DistributionSet's assigned to Tag {1} message.dists.tag.unassigned = {0} DistributionSet's un-assigned from Tag {1} message.dist.no.operation = {0} - already assigned/installed, No operation -message.sm.delete.confirm = Are you sure that you want to delete the selected {0} software module? +message.sm.delete.confirm = Are you sure that you want to delete the selected {0} Software Module? message.error.os.softmodule = Please select the OS to delete message.error.ah.softmodule = Please select the Application to delete -message.error.softmodule.deleted = The selected software module is already deleted +message.error.softmodule.deleted = The selected Software Module is already deleted message.cancel.action = Cancel.. message.cancel.action.success = Action cancelled successfully ! message.cancel.action.failed = Unable to cancel the action ! @@ -284,7 +284,7 @@ message.action.not.allowed = Action not allowed message.onlyone.distribution.assigned = Only one distribution set can be assigned message.onlyone.distribution.dropallowed = Only one distribution set can be dropped message.error.missing.typename = Missing Type Name -message.error.missing.typenameorkey = Missing Type Name or Key or software module type +message.error.missing.typenameorkey = Missing Type Name or Key or Software Module type message.tag.cannot.be.assigned = Target/DS cannot be assigned to {0} message.no.targets.assiged.fortag = No targets are assigned to tag {0} message.error.missing.tagname = Please select tag name @@ -314,12 +314,12 @@ soft.module.os =OS #Artifact upload message.error.noFileSelected = No file selected for upload message.error.noProvidedName = Please provide custom file name -message.error.noSwModuleSelected = Please select a software module +message.error.noSwModuleSelected = Please select a Software Module message.no.duplicateFiles = Duplicate files selected message.no.duplicateFile = Duplicate file selected : message.delete.artifact = Are you sure that you want to delete artifact {0} ? message.duplicate.filename = Duplicate file name -message.swModule.deleted = {0} Software module(s) deleted +message.swModule.deleted = {0} Software Module(s) deleted message.upload.failed = Streaming Failed message.uploadedfile.size.exceeded = File size exceeded .Allowed size {0} bytes message.uploadedfile.aborted = File upload aborted @@ -329,7 +329,7 @@ message.abort.upload = Are you sure that you want to abort the upload? -upload.swModuleTable.header = Software module +upload.swModuleTable.header = Software Module upload.selectedfile.name = file selected for upload upload.file.name = File name upload.sha1 = SHA1 checksum @@ -347,7 +347,7 @@ upload.reason = Reason upload.action = Action upload.result.status = Upload status upload.file = Upload File -upload.caption.update.swmodule = Update software module +upload.caption.update.swmodule = Update Software Module caption.tab.details = Details caption.tab.description = Description @@ -363,8 +363,8 @@ label.no.tag.assigned = NO TAG caption.assign.software.dist.accordion.tab = Assign Software Modules message.software.assignment = {0} Software Module(s) Assignment(s) done message.dist.inuse = {0} Distribution is already assigned to target -message.software.dist.already.assigned = {0} Distribution already has software module {1} -message.software.dist.type.notallowed = {0} Software module type can not assign to Distribution {1} +message.software.dist.already.assigned = {0} Distribution already has Software Module {1} +message.software.dist.type.notallowed = {0} Software Module type can not assign to Distribution {1} message.target.assigned = {0} is assigned to {1} message.dist.type.delete = {0} DistributionType(s) Deleted successfully. message.sw.module.type.delete = {0} Software Module Type(s) deleted successfully. @@ -445,7 +445,7 @@ header.caption.mandatory = Mandatory header.caption.typename = SoftwareModuleType header.caption.softwaremodule = SoftwareModule header.caption.unassign = Unassign -message.sw.unassigned = Software module {0} successfully unassigned +message.sw.unassigned = Software Module {0} successfully unassigned header.caption.upload.details = Upload details combo.type.tag.name = Type tag name @@ -469,8 +469,8 @@ prompt.number.of.groups = Number of groups prompt.tigger.threshold = Trigger threshold prompt.error.threshold = Error threshold prompt.distribution.set = Distribution set -caption.configure.rollout = Configure rollout -caption.update.rollout = Update rollout +caption.configure.rollout = Configure Rollout +caption.update.rollout = Update Rollout prompt.target.filter = Custom target filter message.rollout.nonzero.group.number = Number of groups must be greater than zero message.rollout.max.group.number = Number of groups must not be greater than 500 @@ -485,8 +485,8 @@ message.rollout.noofgroups.or.targetfilter.missing = Please enter number of grou message.rollouts = Rollouts label.target.per.group = Targets per group : message.dist.already.assigned = Distribution {0} is already assigned to target -message.error.creating.rollout = Server error. Error creating rollout. Please contact the administrator -message.error.starting.rollout = Server error. Error starting rollout. Please contact the administrator +message.error.creating.rollout = Server error. Error creating Rollout. Please contact the administrator +message.error.starting.rollout = Server error. Error starting Rollout. Please contact the administrator #rollout - end #Menu diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 1c437071a..2ac5ed9c2 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -77,16 +77,16 @@ caption.delete.swmodule.accordion.tab = Delete SW Modules caption.delete.dist.set.type.accordion.tab = Delete Distribution Set Type caption.delete.sw.module.type.accordion.tab = Delete Software Module Type caption.attributes = Attributes -caption.panel.dist.installed = Installed distribution set -caption.panel.dist.assigned = Assigned distribution set +caption.panel.dist.installed = Installed Distribution Set +caption.panel.dist.assigned = Assigned Distribution Set caption.soft.delete.confirmbox = Confirm Software Module Delete Action -caption.cancel.action.confirmbox = Confirm action cancellation +caption.cancel.action.confirmbox = Confirm Action Cancellation caption.forced.datefield = Force update at time caption.force.action.confirmbox = Confirm Force Active Action caption.filter.simple = Simple Filter caption.filter.custom = Custom Filter caption.filter.delete.confirmbox = Confirm Filter Delete Action -caption.confirm.abort.action = Confirm abort action +caption.confirm.abort.action = Confirm Abort Action # Labels prefix with - label @@ -214,13 +214,13 @@ message.target.unassigned.one = {0} is unassigned from {1} message.target.unassigned.many = {0} Targets are unassigned from {1} message.target.assigned.pending = Some target(s) are already assigned.Pending for action message.cannot.delete = Cannot be deleted -message.check.softwaremodule = Please provide both name and verion! +message.check.softwaremodule = Please provide both name and version! message.cannot.delete.default.dstype = Default distribution set type cannot be deleted message.duplicate.softwaremodule = {0} : {1} already exists! message.cannot.delete.default.dstype = Default distribution set type cannot be deleted message.tag.delete = Please unclick the tag {0}, then try to delete message.dist.type.check.delete = Please unclick the distribution type {0}, then try to delete -message.swmodule.type.check.delete = Please unclick the software module type {0}, then try to delete +message.swmodule.type.check.delete = Please unclick the Software Module type {0}, then try to delete message.targets.already.deleted = Few Target(s) are already deleted.Pending for action message.dists.already.deleted = Few distribution(s) are already deleted.Pending for action message.target.deleted.pending = Target(s) already deleted.Pending for action @@ -243,7 +243,7 @@ message.accessdenied.view = No access to view: {0} message.no.data = No data available message.target.assignment = {0} Assignment(s) done message.target.deleted = {0} Target(s) deleted -message.dist.deleted = {0} Distribution set(s) deleted +message.dist.deleted = {0} Distribution Set(s) deleted message.tag.update.mandatory = Please select the Tag to update message.tag.duplicate.check = {0} already exists, please enter another value message.type.key.duplicate.check = Distribution type with key {0} already exists, please give another value @@ -262,10 +262,10 @@ message.dists.assign.tag.alreadyassigned = Few of the DistributionSet's are alre message.dists.tag.assigned = {0} DistributionSet's assigned to Tag {1} message.dists.tag.unassigned = {0} DistributionSet's un-assigned from Tag {1} message.dist.no.operation = {0} - already assigned/installed, No operation -message.sm.delete.confirm = Are you sure that you want to delete the selected {0} software module? +message.sm.delete.confirm = Are you sure that you want to delete the selected {0} Software Module? message.error.os.softmodule = Please select the OS to delete message.error.ah.softmodule = Please select the Application to delete -message.error.softmodule.deleted = The selected software module is already deleted +message.error.softmodule.deleted = The selected Software Module is already deleted message.cancel.action = Cancel message.cancel.action.success = Action cancelled successfully ! message.cancel.action.failed = Unable to cancel the action ! @@ -311,12 +311,12 @@ soft.module.os =OS #Artifact upload message.error.noFileSelected = No file selected for upload message.error.noProvidedName = Please provide custom file name -message.error.noSwModuleSelected = Please select a software module +message.error.noSwModuleSelected = Please select a Software Module message.no.duplicateFiles = Duplicate files selected message.no.duplicateFile = Duplicate file selected : message.delete.artifact = Are you sure that you want to delete artifact {0} ? message.duplicate.filename = Duplicate file name -message.swModule.deleted = {0} Software module(s) deleted +message.swModule.deleted = {0} Software Module(s) deleted message.error.missing.tagname = Please select tag name message.upload.failed = Streaming Failed message.uploadedfile.size.exceeded = File size exceeded .Allowed size {0} bytes @@ -327,7 +327,7 @@ message.abort.upload = Are you sure that you want to abort the upload? -upload.swModuleTable.header = Software module +upload.swModuleTable.header = Software Module upload.selectedfile.name = file selected for upload upload.file.name = File name upload.sha1 = SHA1 checksum @@ -345,7 +345,7 @@ upload.reason = Reason upload.action = Action upload.result.status = Upload status upload.file = Upload File -upload.caption.update.swmodule = Update software module +upload.caption.update.swmodule = Update Software Module caption.tab.details = Details caption.tab.description = Description @@ -356,8 +356,8 @@ label.drop.dist.delete.area = Drop here
to delete caption.assign.software.dist.accordion.tab = Assign Software Modules message.software.assignment = {0} Assignment(s) done message.dist.inuse = {0} Distribution is already assigned to target -message.software.dist.already.assigned = {0} Distribution already has software module {1} -message.software.dist.type.notallowed = {0} Software module type can not assign to Distribution {1} +message.software.dist.already.assigned = {0} Distribution already has Software Module {1} +message.software.dist.type.notallowed = {0} Software Module type can not assign to Distribution {1} message.target.assigned = {0} is assigned to {1} message.dist.type.delete = {0} DistributionType(s) Deleted successfully. message.sw.module.type.delete = {0} Software Module Type(s) deleted successfully. @@ -442,7 +442,7 @@ header.caption.mandatory = Mandatory header.caption.typename = SoftwareModuleType header.caption.softwaremodule = SoftwareModule header.caption.unassign = Unassign -message.sw.unassigned = Software module {0} successfully unassigned +message.sw.unassigned = Software Module {0} successfully unassigned header.caption.upload.details = Upload details combo.type.tag.name = Type tag name @@ -458,9 +458,9 @@ menu.title = Software Provisioning prompt.number.of.groups = Number of groups prompt.tigger.threshold = Trigger threshold prompt.error.threshold = Error threshold -prompt.distribution.set = Distribution set -caption.configure.rollout = Configure rollout -caption.update.rollout = Update rollout +prompt.distribution.set = Distribution Set +caption.configure.rollout = Configure Rollout +caption.update.rollout = Update Rollout prompt.target.filter = Custom target filter message.rollout.nonzero.group.number = Number of groups must be greater than zero message.rollout.max.group.number = Number of groups must not be greater than 500 @@ -475,8 +475,8 @@ message.rollout.noofgroups.or.targetfilter.missing = Please enter number of grou message.rollouts = Rollouts label.target.per.group = Targets per group : message.dist.already.assigned = Distribution {0} is already assigned to target -message.error.creating.rollout = Server error. Error creating rollout. Please contact the administrator -message.error.starting.rollout = Server error. Error starting rollout. Please contact the administrator +message.error.creating.rollout = Server error. Error creating Rollout. Please contact the administrator +message.error.starting.rollout = Server error. Error starting Rollout. Please contact the administrator #Target Filter Management breadcrumb.target.filter.custom.filters = Custom Filters diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 7716da4f2..459695844 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -79,14 +79,14 @@ caption.delete.swmodule.accordion.tab = Delete SW Modules caption.delete.dist.set.type.accordion.tab = Delete Distribution Set Type caption.delete.sw.module.type.accordion.tab = Delete Software Module Type caption.attributes = Attributes -caption.panel.dist.installed = Installed distribution set -caption.panel.dist.assigned = Assigned distribution set +caption.panel.dist.installed = Installed Distribution Set +caption.panel.dist.assigned = Assigned Distribution Set caption.soft.delete.confirmbox = Confirm Software Module Delete Action -caption.cancel.action.confirmbox = Confirm action cancellation +caption.cancel.action.confirmbox = Confirm Action Cancellation caption.forced.datefield = Force update at time caption.force.action.confirmbox = Confirm Force Active Action caption.filter.delete.confirmbox = Confirm Filter Delete Action -caption.confirm.abort.action = Confirm abort action +caption.confirm.abort.action = Confirm Abort Action # Labels prefix with - label label.dist.details.type = Type : @@ -213,11 +213,11 @@ message.target.unassigned.one = {0} is unassigned from {1} message.target.unassigned.many = {0} Targets are unassigned from {1} message.target.assigned.pending = Some target(s) are already assigned.Pending for action message.cannot.delete = Cannot be deleted -message.check.softwaremodule = Please provide both name and verion! +message.check.softwaremodule = Please provide both name and version! message.duplicate.softwaremodule = {0} : {1} already exists! message.tag.delete = Please unclick the tag {0}, then try to delete message.dist.type.check.delete = Please unclick the distribution type {0}, then try to delete -message.swmodule.type.check.delete = Please unclick the software module type {0}, then try to delete +message.swmodule.type.check.delete = Please unclick the Software Module type {0}, then try to delete message.targets.already.deleted = Few Target(s) are already deleted.Pending for action message.dists.already.deleted = Few distribution(s) are already deleted.Pending for action message.target.deleted.pending = Target(s) already deleted.Pending for action @@ -259,10 +259,10 @@ message.dists.assign.tag.alreadyassigned = Few of the DistributionSet's are alre message.dists.tag.assigned = {0} DistributionSet's assigned to Tag {1} message.dists.tag.unassigned = {0} DistributionSet's un-assigned from Tag {1} message.dist.no.operation = {0} - already assigned/installed, No operation -message.sm.delete.confirm = Are you sure that you want to delete the selected {0} software module? +message.sm.delete.confirm = Are you sure that you want to delete the selected {0} Software Module? message.error.os.softmodule = Please select the OS to delete message.error.ah.softmodule = Please select the Application to delete -message.error.softmodule.deleted = The selected software module is already deleted +message.error.softmodule.deleted = The selected Software Module is already deleted message.cancel.action = Cancel message.cancel.action.success = Action cancelled successfully ! message.cancel.action.failed = Unable to cancel the action ! @@ -277,7 +277,7 @@ message.action.not.allowed = Action not allowed message.onlyone.distribution.assigned = Only one distribution set can be assigned message.onlyone.distribution.dropallowed = Only one distribution set can be dropped message.error.missing.typename = Missing Type Name -message.error.missing.typenameorkey = Missing Type Name or Key or software module type +message.error.missing.typenameorkey = Missing Type Name or Key or Software Module type message.tag.cannot.be.assigned = Target/DS cannot be assigned to {0} message.no.targets.assiged.fortag = No targets are assigned to tag {0} message.error.missing.tagname = Please select tag name @@ -305,12 +305,12 @@ soft.module.os =OS #Artifact upload message.error.noFileSelected = No file selected for upload message.error.noProvidedName = Please provide custom file name -message.error.noSwModuleSelected = Please select a software module +message.error.noSwModuleSelected = Please select a Software Module message.no.duplicateFiles = Duplicate files selected message.no.duplicateFile = Duplicate file selected : message.delete.artifact = Are you sure that you want to delete artifact {0} ? message.duplicate.filename = Duplicate file name -message.swModule.deleted = {0} Software module(s) deleted +message.swModule.deleted = {0} Software Module(s) deleted message.upload.failed = Streaming Failed message.uploadedfile.size.exceeded = File size exceeded .Allowed size {0} bytes message.uploadedfile.aborted = File upload aborted @@ -318,7 +318,7 @@ message.file.not.found = File not found message.abort.upload = Are you sure that you want to abort the upload? -upload.swModuleTable.header = Software module +upload.swModuleTable.header = Software Module upload.selectedfile.name = file selected for upload upload.file.name = File name upload.sha1 = SHA1 checksum @@ -336,7 +336,7 @@ upload.reason = Reason upload.action = Action upload.result.status = Upload status upload.file = Upload File -upload.caption.update.swmodule = Update software module +upload.caption.update.swmodule = Update Software Module caption.tab.details = Details caption.tab.description = Description @@ -348,8 +348,8 @@ label.drop.dist.delete.area = Drop here
to delete caption.assign.software.dist.accordion.tab = Assign Software Modules message.software.assignment = {0} Software Module(s) Assignment(s) done message.dist.inuse = {0} Distribution is already assigned to target -message.software.dist.already.assigned = {0} Distribution already has software module {1} -message.software.dist.type.notallowed = {0} Software module type can not assign to Distribution {1} +message.software.dist.already.assigned = {0} Distribution already has Software Module {1} +message.software.dist.type.notallowed = {0} Software Module type can not assign to Distribution {1} message.target.assigned = {0} is assigned to {1} message.dist.type.delete = {0} DistributionType(s) Deleted successfully. message.sw.module.type.delete = {0} Software Module Type(s) deleted successfully. @@ -415,7 +415,7 @@ header.assigned.ds = Assigned DS header.installed.ds = Installed DS header.status = Status header.target.tags = Tags -header.distributionset = Distribution set +header.distributionset = Distribution Set header.numberofgroups = No. of groups header.detail.status = Detail status header.total.targets = Total targets @@ -429,7 +429,7 @@ header.rolloutgroup.target.message = Messages rollout.group.label.target.truncated = {0} targets has been truncated in the list due the target size limit of {1} -distribution.details.header = Distribution set +distribution.details.header = Distribution Set target.details.header = Target header.caption.mandatory = Mandatory header.caption.typename = SoftwareModuleType @@ -449,8 +449,8 @@ prompt.number.of.groups = Number of groups prompt.tigger.threshold = Trigger threshold prompt.error.threshold = Error threshold prompt.distribution.set = Distribution set -caption.configure.rollout = Configure rollout -caption.update.rollout = Update rollout +caption.configure.rollout = Configure Rollout +caption.update.rollout = Update Rollout prompt.target.filter = Custom target filter message.rollout.nonzero.group.number = Number of groups must be greater than zero message.rollout.max.group.number = Number of groups must not be greater than 500 @@ -465,8 +465,8 @@ message.rollout.noofgroups.or.targetfilter.missing = Please enter number of grou message.rollouts = Rollouts label.target.per.group = Targets per group : message.dist.already.assigned = Distribution {0} is already assigned to target -message.error.creating.rollout = Server error. Error creating rollout. Please contact the administrator -message.error.starting.rollout = Server error. Error starting rollout. Please contact the administrator +message.error.creating.rollout = Server error. Error creating Rollout. Please contact the administrator +message.error.starting.rollout = Server error. Error starting Rollout. Please contact the administrator #Target Filter Management breadcrumb.target.filter.custom.filters = Custom Filters From b7ea17498367d6727cd7149534ecca6f5156662e Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 21 Jun 2016 13:42:26 +0200 Subject: [PATCH 282/371] Add a shortcut modifier util class to handle cross platform functionality. Signed-off-by: SirWayne --- .../ui/common/table/AbstractTableLayout.java | 20 ++------- .../ui/utils/ShortCutModifierUtils.java | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/ShortCutModifierUtils.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java index 905c5917c..11c0083ec 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTableLayout.java @@ -9,12 +9,11 @@ package org.eclipse.hawkbit.ui.common.table; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; +import org.eclipse.hawkbit.ui.utils.ShortCutModifierUtils; import com.vaadin.event.Action; import com.vaadin.event.Action.Handler; import com.vaadin.event.ShortcutAction; -import com.vaadin.server.Page; -import com.vaadin.server.WebBrowser; import com.vaadin.ui.Alignment; import com.vaadin.ui.Panel; import com.vaadin.ui.VerticalLayout; @@ -109,34 +108,21 @@ public abstract class AbstractTableLayout extends VerticalLayout { private static final String SELECT_ALL_TEXT = "Select All"; private final ShortcutAction selectAllAction = new ShortcutAction(SELECT_ALL_TEXT, ShortcutAction.KeyCode.A, - new int[] { ShortcutAction.ModifierKey.CTRL }); - - private final ShortcutAction selectAllMacAction = new ShortcutAction(SELECT_ALL_TEXT, ShortcutAction.KeyCode.A, - new int[] { ShortcutAction.ModifierKey.META }); + new int[] { ShortCutModifierUtils.getCtrlOrMetaModifier() }); private static final long serialVersionUID = 1L; @Override public void handleAction(final Action action, final Object sender, final Object target) { - if (!isSelecAllAction(action)) { + if (!selectAllAction.equals(action)) { return; } table.selectAll(); publishEvent(); } - private boolean isSelecAllAction(final Action action) { - return selectAllAction.equals(action) || selectAllMacAction.equals(action); - } - @Override public Action[] getActions(final Object target, final Object sender) { - - final WebBrowser webBrowser = Page.getCurrent().getWebBrowser(); - if (webBrowser.isMacOSX()) { - return new Action[] { selectAllMacAction }; - } - return new Action[] { selectAllAction }; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/ShortCutModifierUtils.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/ShortCutModifierUtils.java new file mode 100644 index 000000000..b844caafd --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/ShortCutModifierUtils.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.utils; + +import com.vaadin.event.ShortcutAction; +import com.vaadin.server.Page; +import com.vaadin.server.WebBrowser; + +/** + * On different systems there are different modifier for short cuts. This + * utility class handles the cross-platform functionality. + */ +public final class ShortCutModifierUtils { + + private ShortCutModifierUtils() { + + } + + /** + * Returns the ctrl or meta modifier depending on the platform. + * + * @return on mac return + * {@link com.vaadin.event.ShortcutAction.ModifierKey#META} other + * platform return + * {@link com.vaadin.event.ShortcutAction.ModifierKey#CTRL} + */ + public static int getCtrlOrMetaModifier() { + final WebBrowser webBrowser = Page.getCurrent().getWebBrowser(); + if (webBrowser.isMacOSX()) { + return ShortcutAction.ModifierKey.META; + } + + return ShortcutAction.ModifierKey.CTRL; + } +} From 6f5f2e798ba5c376799bb4481b37eba125f59af5 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 21 Jun 2016 15:19:26 +0200 Subject: [PATCH 283/371] add javdoc Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/simulator/AbstractSimulatedDevice.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/AbstractSimulatedDevice.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/AbstractSimulatedDevice.java index c70d4f584..a2a036e1b 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/AbstractSimulatedDevice.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/AbstractSimulatedDevice.java @@ -96,7 +96,11 @@ public abstract class AbstractSimulatedDevice { this.pollDelaySec = pollDelaySec; } - abstract public void poll(); + /** + * Can be called by a scheduler to trigger a device polling, like in real + * scenarios devices are frequently asking for updates etc. + */ + public abstract void poll(); public int getPollDelaySec() { return pollDelaySec; From a75a022ca611f63993f98b3ad61a8839904d365a Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 21 Jun 2016 15:19:45 +0200 Subject: [PATCH 284/371] make poll-time in dialog always visible Signed-off-by: Michael Hirsch --- .../java/org/eclipse/hawkbit/simulator/ui/GenerateDialog.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/GenerateDialog.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/GenerateDialog.java index e337e86e7..272531407 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/GenerateDialog.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/ui/GenerateDialog.java @@ -76,7 +76,6 @@ public class GenerateDialog extends Window { pollDelayTextField = createRequiredTextfield("poll delay (sec)", new ObjectProperty(10), FontAwesome.CLOCK_O, new RangeValidator("Must be between 1 and 60", Integer.class, 1, 60)); - pollDelayTextField.setVisible(false); pollUrlTextField = createRequiredTextfield("base poll URL endpoint", "http://localhost:8080", FontAwesome.FLAG_O, new RegexpValidator( @@ -193,7 +192,6 @@ public class GenerateDialog extends Window { protocolGroup.select(Protocol.DMF_AMQP); protocolGroup.addValueChangeListener(event -> { final boolean directDeviceOptionSelected = event.getProperty().getValue().equals(Protocol.DDI_HTTP); - pollDelayTextField.setVisible(directDeviceOptionSelected); pollUrlTextField.setVisible(directDeviceOptionSelected); gatewayTokenTextField.setVisible(directDeviceOptionSelected); }); From 95ce14ffb4be218c386a6eda566a66bba5005b70 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 21 Jun 2016 15:36:53 +0200 Subject: [PATCH 285/371] write javadoc Signed-off-by: Michael Hirsch --- .../hawkbit/mgmt/client/scenarios/ConfigurableScenario.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 33afefa26..2cb339a1f 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 @@ -35,7 +35,9 @@ import org.springframework.beans.factory.annotation.Qualifier; /** * - * Default getting started scenario. + * A configurable scenario which runs the configured scenarios. + * + * @see {@link ClientConfigurationProperties#getScenarios()} * */ public class ConfigurableScenario { From 2e23ed3871ebec786826ab1a7091e15e75ddc21f Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 21 Jun 2016 15:37:22 +0200 Subject: [PATCH 286/371] remove scala dependency Signed-off-by: Michael Hirsch --- hawkbit-dmf-amqp/pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf-amqp/pom.xml index 322dd5047..289d97663 100644 --- a/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf-amqp/pom.xml @@ -159,11 +159,6 @@ spring-context-support test - - org.scala-lang - scala-library - 2.10.4 - \ No newline at end of file From bf1ca010c7c9634e69ae8b62bfb52589da485801 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 21 Jun 2016 16:36:01 +0200 Subject: [PATCH 287/371] throw correct exception if target address violates rfc standard Signed-off-by: Michael Hirsch --- .../hawkbit/exception/SpServerError.java | 86 +++++++------------ .../InvalidTargetAddressException.java | 42 +++++++++ .../repository/jpa/model/JpaTargetInfo.java | 9 +- .../exception/ResponseExceptionHandler.java | 1 + 4 files changed, 83 insertions(+), 55 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidTargetAddressException.java diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerError.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerError.java index 003b31cd7..7d618e234 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerError.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerError.java @@ -24,82 +24,73 @@ public enum SpServerError { /** * */ - SP_REPO_ENTITY_ALRREADY_EXISTS("hawkbit.server.error.repo.entitiyAlreayExists", - "The given entity already exists in database"), + SP_REPO_ENTITY_ALRREADY_EXISTS("hawkbit.server.error.repo.entitiyAlreayExists", "The given entity already exists in database"), + + /** + * + */ + SP_REPO_INVALID_TARGET_ADDRESS("hawkbit.server.error.repo.invalidTargetAddress", "The target address is not well formed"), /** * */ - SP_REPO_ENTITY_NOT_EXISTS("hawkbit.server.error.repo.entitiyNotFound", - "The given entity does not exist in database"), + SP_REPO_ENTITY_NOT_EXISTS("hawkbit.server.error.repo.entitiyNotFound", "The given entity does not exist in database"), /** * */ - SP_REPO_CONCURRENT_MODIFICATION("hawkbit.server.error.repo.concurrentModification", - "The given entity has been changed by another user/session"), + SP_REPO_CONCURRENT_MODIFICATION("hawkbit.server.error.repo.concurrentModification", "The given entity has been changed by another user/session"), /** * */ - SP_REST_SORT_PARAM_SYNTAX("hawkbit.server.error.rest.param.sortParamSyntax", - "The given sort paramter is not well formed"), + SP_REST_SORT_PARAM_SYNTAX("hawkbit.server.error.rest.param.sortParamSyntax", "The given sort paramter is not well formed"), /** * */ - SP_REST_RSQL_SEARCH_PARAM_SYNTAX("hawkbit.server.error.rest.param.rsqlParamSyntax", - "The given search paramter is not well formed"), + SP_REST_RSQL_SEARCH_PARAM_SYNTAX("hawkbit.server.error.rest.param.rsqlParamSyntax", "The given search paramter is not well formed"), /** * */ - SP_REST_RSQL_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.rsqlInvalidField", - "The given search parameter field does not exist"), + SP_REST_RSQL_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.rsqlInvalidField", "The given search parameter field does not exist"), /** * */ - SP_REST_SORT_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.invalidField", - "The given sort parameter field does not exist"), + SP_REST_SORT_PARAM_INVALID_FIELD("hawkbit.server.error.rest.param.invalidField", "The given sort parameter field does not exist"), /** * */ - SP_REST_SORT_PARAM_INVALID_DIRECTION("hawkbit.server.error.rest.param.invalidDirection", - "The given sort parameter direction does not exist"), + SP_REST_SORT_PARAM_INVALID_DIRECTION("hawkbit.server.error.rest.param.invalidDirection", "The given sort parameter direction does not exist"), /** * */ - SP_REST_BODY_NOT_READABLE("hawkbit.server.error.rest.body.notReadable", - "The given request body is not well formed"), + SP_REST_BODY_NOT_READABLE("hawkbit.server.error.rest.body.notReadable", "The given request body is not well formed"), /** * */ - SP_ARTIFACT_UPLOAD_FAILED("hawkbit.server.error.artifact.uploadFailed", - "Upload of artifact failed with internal server error."), + SP_ARTIFACT_UPLOAD_FAILED("hawkbit.server.error.artifact.uploadFailed", "Upload of artifact failed with internal server error."), /** * */ - SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.md5.match", - "Upload of artifact failed as the provided MD5 checksum did not match with the provided artifact."), + SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.md5.match", "Upload of artifact failed as the provided MD5 checksum did not match with the provided artifact."), /** * */ - SP_ARTIFACT_UPLOAD_FAILED_SHA1_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.sha1.match", - "Upload of artifact failed as the provided SHA1 checksum did not match with the provided artifact."), + SP_ARTIFACT_UPLOAD_FAILED_SHA1_MATCH("hawkbit.server.error.artifact.uploadFailed.checksum.sha1.match", "Upload of artifact failed as the provided SHA1 checksum did not match with the provided artifact."), /** * */ - SP_DS_CREATION_FAILED_MISSING_MODULE("hawkbit.server.error.distributionset.creationFailed.missingModule", - "Creation if Distribution Set failed as module is missing that is configured as mandatory."), + SP_DS_CREATION_FAILED_MISSING_MODULE("hawkbit.server.error.distributionset.creationFailed.missingModule", "Creation if Distribution Set failed as module is missing that is configured as mandatory."), /** * */ - SP_ARTIFACT_UPLOAD_FILE_LIMIT_EXCEEDED("hawkbit.server.error.artifact.uploadFailed.sizelimitexceeded", - "Upload of artifact failed as the file exceeds its maximum permitted size"), + SP_ARTIFACT_UPLOAD_FILE_LIMIT_EXCEEDED("hawkbit.server.error.artifact.uploadFailed.sizelimitexceeded", "Upload of artifact failed as the file exceeds its maximum permitted size"), /** * */ @@ -108,63 +99,53 @@ public enum SpServerError { /** * */ - SP_ARTIFACT_DELETE_FAILED("hawkbit.server.error.artifact.deleteFailed", - "Deletion of artifact failed with internal server error."), + SP_ARTIFACT_DELETE_FAILED("hawkbit.server.error.artifact.deleteFailed", "Deletion of artifact failed with internal server error."), /** * */ - SP_ARTIFACT_LOAD_FAILED("hawkbit.server.error.artifact.loadFailed", - "Load of artifact failed with internal server error."), + SP_ARTIFACT_LOAD_FAILED("hawkbit.server.error.artifact.loadFailed", "Load of artifact failed with internal server error."), /** * */ - SP_ACTION_STATUS_TO_MANY_ENTRIES("hawkbit.server.error.action.status.tooManyEntries", - "Too many status entries have been inserted."), + SP_ACTION_STATUS_TO_MANY_ENTRIES("hawkbit.server.error.action.status.tooManyEntries", "Too many status entries have been inserted."), /** * */ - SP_ATTRIBUTES_TO_MANY_ENTRIES("hawkbit.server.error.target.attributes.tooManyEntries", - "Too many attribute entries have been inserted."), + SP_ATTRIBUTES_TO_MANY_ENTRIES("hawkbit.server.error.target.attributes.tooManyEntries", "Too many attribute entries have been inserted."), /** * error message, which describes that the action can not be canceled cause * the action is inactive. */ - SP_ACTION_NOT_CANCELABLE("hawkbit.server.error.action.notcancelable", - "Only active actions which are in status pending are canceable."), + SP_ACTION_NOT_CANCELABLE("hawkbit.server.error.action.notcancelable", "Only active actions which are in status pending are canceable."), /** * error message, which describes that the action can not be force quit * cause the action is inactive. */ - SP_ACTION_NOT_FORCE_QUITABLE("hawkbit.server.error.action.notforcequitable", - "Only active actions which are in status pending can be force quit."), + SP_ACTION_NOT_FORCE_QUITABLE("hawkbit.server.error.action.notforcequitable", "Only active actions which are in status pending can be force quit."), /** * */ - SP_DS_INCOMPLETE("hawkbit.server.error.distributionset.incomplete", - "Distribution set is assigned to a a target that is incomplete (i.e. mandatory modules are missing)"), + SP_DS_INCOMPLETE("hawkbit.server.error.distributionset.incomplete", "Distribution set is assigned to a a target that is incomplete (i.e. mandatory modules are missing)"), /** * */ - SP_DS_TYPE_UNDEFINED("hawkbit.server.error.distributionset.type.undefined", - "Distribution set type is not yet defined. Modules cannot be added until definition."), + SP_DS_TYPE_UNDEFINED("hawkbit.server.error.distributionset.type.undefined", "Distribution set type is not yet defined. Modules cannot be added until definition."), /** * */ - SP_DS_MODULE_UNSUPPORTED("hawkbit.server.error.distributionset.modules.unsupported", - "Distribution set type does not contain the given module, i.e. is incompatible."), + SP_DS_MODULE_UNSUPPORTED("hawkbit.server.error.distributionset.modules.unsupported", "Distribution set type does not contain the given module, i.e. is incompatible."), /** * */ - SP_REPO_TENANT_NOT_EXISTS("hawkbit.server.error.repo.tenantNotExists", - "The entity cannot be inserted due the tenant does not exists"), + SP_REPO_TENANT_NOT_EXISTS("hawkbit.server.error.repo.tenantNotExists", "The entity cannot be inserted due the tenant does not exists"), /** * @@ -174,14 +155,12 @@ public enum SpServerError { /** * */ - SP_REPO_ENTITY_READ_ONLY("hawkbit.server.error.entityreadonly", - "The given entity is read only and the change cannot be completed."), + SP_REPO_ENTITY_READ_ONLY("hawkbit.server.error.entityreadonly", "The given entity is read only and the change cannot be completed."), /** * */ - SP_CONFIGURATION_VALUE_INVALID("hawkbit.server.error.configValueInvalid", - "The given configuration value is invalid."), + SP_CONFIGURATION_VALUE_INVALID("hawkbit.server.error.configValueInvalid", "The given configuration value is invalid."), /** * */ @@ -190,8 +169,7 @@ public enum SpServerError { /** * */ - SP_ROLLOUT_ILLEGAL_STATE("hawkbit.server.error.rollout.illegalstate", - "The rollout is currently in the wrong state for the current operation"); + SP_ROLLOUT_ILLEGAL_STATE("hawkbit.server.error.rollout.illegalstate", "The rollout is currently in the wrong state for the current operation"); private final String key; private final String message; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidTargetAddressException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidTargetAddressException.java new file mode 100644 index 000000000..70b890483 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/InvalidTargetAddressException.java @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.exception; + +import org.eclipse.hawkbit.exception.SpServerError; +import org.eclipse.hawkbit.exception.SpServerRtException; + +/** + * Exception which is thrown when trying to set an invalid target address. + */ +public class InvalidTargetAddressException extends SpServerRtException { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * @param message + * the message for this exception + */ + public InvalidTargetAddressException(final String message) { + super(message, SpServerError.SP_REPO_INVALID_TARGET_ADDRESS); + } + + /** + * + * @param message + * the message for this exception + * @param cause + * the cause for this exception + */ + public InvalidTargetAddressException(final String message, final Throwable cause) { + super(message, SpServerError.SP_REPO_INVALID_TARGET_ADDRESS, cause); + } +} diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java index 15abc2d61..0606def4f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetInfo.java @@ -37,6 +37,7 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; +import org.eclipse.hawkbit.repository.exception.InvalidTargetAddressException; import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder; import org.eclipse.hawkbit.repository.jpa.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -173,10 +174,16 @@ public class JpaTargetInfo implements Persistable, TargetInfo { * @throws IllegalArgumentException * If the given string violates RFC 2396 */ + @Override public void setAddress(final String address) { // check if this is a real URI if (address != null) { - URI.create(address); + try { + URI.create(address); + } catch (final IllegalArgumentException e) { + throw new InvalidTargetAddressException( + "The given address " + address + " violates the RFC-2396 specification", e); + } } this.address = address; diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java index 0f8da9ebe..31e4a3046 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java @@ -67,6 +67,7 @@ public class ResponseExceptionHandler { ERROR_TO_HTTP_STATUS.put(SpServerError.SP_ROLLOUT_ILLEGAL_STATE, HttpStatus.BAD_REQUEST); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_VALUE_INVALID, HttpStatus.BAD_REQUEST); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_CONFIGURATION_KEY_INVALID, HttpStatus.BAD_REQUEST); + ERROR_TO_HTTP_STATUS.put(SpServerError.SP_REPO_INVALID_TARGET_ADDRESS, HttpStatus.BAD_REQUEST); } private static HttpStatus getStatusOrDefault(final SpServerError error) { From 7cb3b2f2ff45952ac5656dce704498be5e266151 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Tue, 21 Jun 2016 18:05:20 +0200 Subject: [PATCH 288/371] Added storage of clients correlation ID in action history. Signed-off-by: kaizimmerm --- .../eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 7 +++++++ .../hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) 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 caa11ab3d..73f9e14df 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 @@ -35,6 +35,7 @@ import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.repository.ArtifactManagement; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.EntityFactory; +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; @@ -69,6 +70,7 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.web.util.UriComponentsBuilder; +import com.google.common.base.Strings; import com.google.common.eventbus.EventBus; /** @@ -346,6 +348,11 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final ActionStatus actionStatus = entityFactory.generateActionStatus(); actionUpdateStatus.getMessage().forEach(actionStatus::addMessage); + if (!Strings.isNullOrEmpty(message.getMessageProperties().getCorrelationIdString())) { + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "DMF message correlation-id " + + message.getMessageProperties().getCorrelationIdString()); + } + actionStatus.setAction(action); actionStatus.setOccurredAt(System.currentTimeMillis()); diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java index e93e1340f..8cd92d2bd 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandlerTest.java @@ -33,7 +33,6 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Test to generate the artifact download URL") @SpringApplicationConfiguration(classes = { AmqpTestConfiguration.class, org.eclipse.hawkbit.RepositoryApplicationConfiguration.class }) - public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTestWithMongoDB { private static final String HTTPS_LOCALHOST = "https://localhost:8080/"; From 3d049fada19db19075415125e5be8744b5d2c825 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Wed, 22 Jun 2016 09:17:35 +0200 Subject: [PATCH 289/371] Add DMF message correlation-id to action history. Signed-off-by: kaizimmerm --- .../org/eclipse/hawkbit/simulator/amqp/SenderService.java | 1 + .../src/main/resources/application.properties | 2 +- .../org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 5 ++--- .../org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java index 6f16ac736..f2c0e7fcb 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SenderService.java @@ -58,6 +58,7 @@ public abstract class SenderService extends MessageService { } message.getMessageProperties().getHeaders().remove(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME); final String correlationId = UUID.randomUUID().toString(); + message.getMessageProperties().setCorrelationId(correlationId.getBytes()); if (LOGGER.isTraceEnabled()) { LOGGER.trace("Sending message {} to exchange {} with correlationId {}", message, address, correlationId); diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties index ac3f240a3..747e8ffe9 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties +++ b/examples/hawkbit-example-mgmt-simulator/src/main/resources/application.properties @@ -13,7 +13,7 @@ hawkbit.password=admin spring.main.show-banner=false -hawkbit.scenarios.[0].cleanRepository=true +hawkbit.scenarios.[0].cleanRepository=false hawkbit.scenarios.[0].targets=0 hawkbit.scenarios.[0].ds-name=gettingstarted-example hawkbit.scenarios.[0].distribution-sets=3 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 73f9e14df..3f42c2937 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 @@ -70,7 +70,6 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.web.util.UriComponentsBuilder; -import com.google.common.base.Strings; import com.google.common.eventbus.EventBus; /** @@ -348,9 +347,9 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final ActionStatus actionStatus = entityFactory.generateActionStatus(); actionUpdateStatus.getMessage().forEach(actionStatus::addMessage); - if (!Strings.isNullOrEmpty(message.getMessageProperties().getCorrelationIdString())) { + if (message.getMessageProperties().getCorrelationId().length > 0) { actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "DMF message correlation-id " - + message.getMessageProperties().getCorrelationIdString()); + + message.getMessageProperties().getCorrelationId()); } actionStatus.setAction(action); diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java index afb3e7ff2..d951cce5d 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java @@ -46,6 +46,7 @@ public class DefaultAmqpSenderService implements AmqpSenderService { final String correlationId = UUID.randomUUID().toString(); final String exchange = extractExchange(replyTo); + message.getMessageProperties().setCorrelationId(correlationId.getBytes()); if (LOGGER.isTraceEnabled()) { LOGGER.trace("Sending message {} to exchange {} with correlationId {}", message, exchange, correlationId); From 837b62758a779a7fb6791f86af178b5c4230b457 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 22 Jun 2016 12:24:52 +0200 Subject: [PATCH 290/371] Removed closed todo Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/repository/jpa/JpaControllerManagement.java | 1 - 1 file changed, 1 deletion(-) 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 a4ca4d6ae..abe4dba03 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 @@ -253,7 +253,6 @@ public class JpaControllerManagement implements ControllerManagement { public Action addUpdateActionStatus(@NotNull final ActionStatus actionStatus) { final JpaAction action = (JpaAction) actionStatus.getAction(); - // TODO: test // if action is already closed we accept further status updates on if // permitted so by configuration. This is especially use full if the // action status feedback channel order from the device cannot be From 717a23671edfcb90f23e1ddb797d4db599036ee0 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 22 Jun 2016 12:31:35 +0200 Subject: [PATCH 291/371] Propr rabbit client version handling in parent POM. Signed-off-by: Kai Zimmermann --- hawkbit-dmf-amqp/pom.xml | 7 +------ pom.xml | 6 ++++++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf-amqp/pom.xml index 289d97663..9dd4f12aa 100644 --- a/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf-amqp/pom.xml @@ -48,12 +48,7 @@ org.springframework.amqp spring-rabbit - - - com.rabbitmq - amqp-client - 3.6.2 - + org.springframework.security spring-security-web diff --git a/pom.xml b/pom.xml index f50afa0ab..8e49bd9df 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,7 @@ 5.2.4.Final 1.2.0.RELEASE 1.6.0.RELEASE + 3.6.2 0.18.0.RELEASE Fowler-SR1 @@ -526,6 +527,11 @@ org.eclipse.persistence.jpa ${eclipselink.version} + + com.rabbitmq + amqp-client + ${rabbitmq.version} + cz.jirutka.rsql From 9226f514d230e7af7d48c24df1a6a7211afce419 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 22 Jun 2016 13:36:22 +0200 Subject: [PATCH 292/371] add spring security eval expression for system_monitor permission Signed-off-by: Michael Hirsch --- .../org/eclipse/hawkbit/im/authentication/SpPermission.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java index ce6bc7c40..139954538 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java @@ -396,6 +396,12 @@ public final class SpPermission { public static final String HAS_AUTH_TENANT_CONFIGURATION = HAS_AUTH_PREFIX + TENANT_CONFIGURATION + HAS_AUTH_SUFFIX; + /** + * Spring security eval hasAuthority expression to check if spring + * context contains {@link SpPermission#SYSTEM_MONITOR} + */ + public static final String HAS_AUTH_SYSTEM_MONITOR = HAS_AUTH_PREFIX + SYSTEM_MONITOR + HAS_AUTH_SUFFIX; + private SpringEvalExpressions() { // utility class } From aef2e3450a6278f94ec087c3f1ae441c34c9c16b Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 22 Jun 2016 15:46:43 +0200 Subject: [PATCH 293/371] remove special health security check because this can be made with spring security out-of-the box Signed-off-by: Michael Hirsch --- .../SecurityManagedConfiguration.java | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java index 0b68246ff..1e4dbfb27 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/security/SecurityManagedConfiguration.java @@ -271,20 +271,6 @@ public class SecurityManagedConfiguration { return filterRegBean; } - /** - * Security configuration for the REST management API of the health url. - */ - @Configuration - @Order(310) - public static class HealthSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final HttpSecurity http) throws Exception { - http.regexMatcher("/system/health").csrf().disable().httpBasic().and().sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS); - } - } - /** * Security configuration for the REST management API. */ @@ -310,7 +296,7 @@ public class SecurityManagedConfiguration { final BasicAuthenticationEntryPoint basicAuthEntryPoint = new BasicAuthenticationEntryPoint(); basicAuthEntryPoint.setRealmName(springSecurityProperties.getBasic().getRealm()); - HttpSecurity httpSec = http.regexMatcher("\\/rest.*|\\/system.*").csrf().disable(); + HttpSecurity httpSec = http.regexMatcher("\\/rest.*|\\/system/admin.*").csrf().disable(); if (springSecurityProperties.isRequireSsl()) { httpSec = httpSec.requiresChannel().anyRequest().requiresSecure().and(); } @@ -337,9 +323,7 @@ public class SecurityManagedConfiguration { SessionManagementFilter.class) .authorizeRequests().anyRequest().authenticated() .antMatchers(MgmtRestConstants.BASE_SYSTEM_MAPPING + "/admin/**") - .hasAnyAuthority(SpPermission.SYSTEM_ADMIN) - .antMatchers(MgmtRestConstants.BASE_SYSTEM_MAPPING + "/**") - .hasAnyAuthority(SpPermission.SYSTEM_DIAG); + .hasAnyAuthority(SpPermission.SYSTEM_ADMIN); httpSec.httpBasic().and().exceptionHandling().authenticationEntryPoint(basicAuthEntryPoint); } From 11f2232247276409643e7c4ebedcb8f482cd5061 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 22 Jun 2016 15:47:38 +0200 Subject: [PATCH 294/371] add prefixed ROLE_ to granted authorities to work with out-of-the-box spring security Signed-off-by: Michael Hirsch --- .../org/eclipse/hawkbit/im/authentication/PermissionUtils.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java index ae8b604bb..98cde9642 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/PermissionUtils.java @@ -36,6 +36,9 @@ public final class PermissionUtils { for (final String role : roles) { authorities.add(new SimpleGrantedAuthority(role)); + // add spring security ROLE authority which is indicated by the + // `ROLE_` prefix + authorities.add(new SimpleGrantedAuthority("ROLE_" + role)); } return authorities; From 15aa489273471d4b2d4c0d32c9e5bb2a8539cdb5 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 22 Jun 2016 17:15:05 +0200 Subject: [PATCH 295/371] Add action column in table Signed-off-by: SirWayne --- .../client/renderers/HtmlButtonRenderer.java | 41 ++- .../renderers/HtmlButtonRenderer.java | 2 +- .../filtermanagement/TargetFilterTable.java | 2 +- .../ui/rollout/rollout/RolloutListGrid.java | 302 ++++++++---------- .../ui/utils/SPUIComponentIdProvider.java | 18 +- .../src/main/resources/messages.properties | 6 + .../src/main/resources/messages_de.properties | 9 + .../src/main/resources/messages_en.properties | 8 + 8 files changed, 215 insertions(+), 173 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java index 1e4a35002..87b834883 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java @@ -15,31 +15,56 @@ import com.vaadin.client.widget.grid.RendererCellReference; /** * - * Renders button with provided HTML content. - * Used to display button with icons. + * Renders button with provided HTML content. Used to display button with icons. + * + * + * * */ public class HtmlButtonRenderer extends ButtonRenderer { + + public static final String DISABLE_VALUE = "_Disabled_"; + @Override - public void render(RendererCellReference cell, String text, Button button) { + public void render(final RendererCellReference cell, final String text, final Button button) { + final boolean buttonEnable = isButtonEnable(cell.getElement().getClassName()); if (text != null) { button.setHTML(text); } - applystyles(button); + applystyles(button, buttonEnable); // this is to allow the button to disappear, if the text is null button.setVisible(text != null); - button.getElement().setId("rollout.action.button.id"); + + button.getElement().setId("rollout.action.button.id." + cell.getColumnIndex()); + + button.setEnabled(buttonEnable); + } - private void applystyles(Button button) { + /** + * see here https://vaadin.com/forum#!/thread/9418390/9765924 + * + * @param text + * the button text + * @return is button enable. + */ + private static boolean isButtonEnable(final String text) { + return !text.contains(DISABLE_VALUE); + } + + private void applystyles(final Button button, final boolean buttonEnable) { button.setStyleName(VButton.CLASSNAME); button.addStyleName(getStyle("tiny")); button.addStyleName(getStyle("borderless")); button.addStyleName(getStyle("icon-only")); button.addStyleName(getStyle("button-no-border")); + + if (buttonEnable) { + return; + } + button.addStyleName("v-disabled"); } - - + private String getStyle(final String style) { return new StringBuilder(style).append(" ").append(VButton.CLASSNAME).append("-").append(style).toString(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java index 367c9dc8b..0bc0a4f97 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java @@ -31,7 +31,7 @@ public class HtmlButtonRenderer extends ButtonRenderer { * @param listener * RendererClickListener */ - public HtmlButtonRenderer(RendererClickListener listener) { + public HtmlButtonRenderer(final RendererClickListener listener) { super(listener); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java index 6e83769b5..5ee3be084 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTable.java @@ -87,7 +87,7 @@ public class TargetFilterTable extends Table { setStyleName("sp-table"); setSizeFull(); setImmediate(true); - setHeight(100.0f, Unit.PERCENTAGE); + setHeight(100.0F, Unit.PERCENTAGE); addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); addStyleName(ValoTheme.TABLE_SMALL); addCustomGeneratedColumns(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 20c2ca710..b8b3c5394 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -14,8 +14,8 @@ import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_CLOSE_TAG; import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_OPEN_TAG; import java.util.ArrayList; -import java.util.Arrays; import java.util.EnumMap; +import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -47,17 +47,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; -import org.vaadin.peter.contextmenu.ContextMenu; -import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItem; -import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItemClickEvent; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; -import com.vaadin.data.util.PropertyValueGenerator; import com.vaadin.data.util.converter.Converter; -import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -198,9 +193,18 @@ public class RolloutListGrid extends AbstractGrid { rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, TotalTargetCountStatus.class, null, false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.ACTION, String.class, - FontAwesome.CIRCLE_O.getHtml(), false, false); + rolloutGridContainer.addContainerProperty(START_OPTION, String.class, FontAwesome.PLAY.getHtml(), false, false); + rolloutGridContainer.addContainerProperty(PAUSE_OPTION, String.class, FontAwesome.PAUSE.getHtml(), false, + false); + + rolloutGridContainer.addContainerProperty(RESUME_OPTION, String.class, FontAwesome.FORWARD.getHtml(), false, + false); + + if (permissionChecker.hasRolloutUpdatePermission()) { + rolloutGridContainer.addContainerProperty(UPDATE_OPTION, String.class, FontAwesome.EDIT.getHtml(), false, + false); + } } @Override @@ -221,8 +225,19 @@ public class RolloutListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMinimumWidth(40); getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.ACTION).setMinimumWidth(75); - getColumn(SPUILabelDefinitions.ACTION).setMaximumWidth(75); + getColumn(START_OPTION).setMinimumWidth(35); + getColumn(START_OPTION).setMaximumWidth(35); + + getColumn(PAUSE_OPTION).setMinimumWidth(35); + getColumn(PAUSE_OPTION).setMaximumWidth(35); + + getColumn(RESUME_OPTION).setMinimumWidth(35); + getColumn(RESUME_OPTION).setMaximumWidth(35); + + if (permissionChecker.hasRolloutUpdatePermission()) { + getColumn(UPDATE_OPTION).setMinimumWidth(35); + getColumn(UPDATE_OPTION).setMaximumWidth(35); + } getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); @@ -232,9 +247,9 @@ public class RolloutListGrid extends AbstractGrid { @Override protected void setColumnHeaderNames() { getColumn(ROLLOUT_RENDERER_DATA).setHeaderCaption(i18n.get("header.name")); - getColumn(DS_TYPE).setHeaderCaption("Type"); - getColumn(SW_MODULES).setHeaderCaption("swModules"); - getColumn(IS_REQUIRED_MIGRATION_STEP).setHeaderCaption("IsRequiredMigrationStep"); + getColumn(DS_TYPE).setHeaderCaption(i18n.get("header.type")); + getColumn(SW_MODULES).setHeaderCaption(i18n.get("header.swmodules")); + getColumn(IS_REQUIRED_MIGRATION_STEP).setHeaderCaption(i18n.get("header.migrations.step")); getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setHeaderCaption(i18n.get("header.distributionset")); getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setHeaderCaption(i18n.get("header.numberofgroups")); getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setHeaderCaption(i18n.get("header.total.targets")); @@ -246,7 +261,17 @@ public class RolloutListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) .setHeaderCaption(i18n.get("header.detail.status")); getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); - getColumn(SPUILabelDefinitions.ACTION).setHeaderCaption(i18n.get("upload.action")); + + getColumn(START_OPTION).setHeaderCaption(i18n.get("header.action.start")); + getColumn(PAUSE_OPTION).setHeaderCaption(i18n.get("header.action.pause")); + getColumn(RESUME_OPTION).setHeaderCaption(i18n.get("header.action.resume")); + + if (permissionChecker.hasRolloutUpdatePermission()) { + getColumn(UPDATE_OPTION).setHeaderCaption(i18n.get("header.action.update")); + } + + getDefaultHeaderRow().join(START_OPTION, PAUSE_OPTION, RESUME_OPTION, UPDATE_OPTION) + .setText(i18n.get("header.action")); } @Override @@ -266,7 +291,14 @@ public class RolloutListGrid extends AbstractGrid { columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS); columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); - columnList.add(SPUILabelDefinitions.ACTION); + + columnList.add(START_OPTION); + columnList.add(PAUSE_OPTION); + columnList.add(RESUME_OPTION); + + if (permissionChecker.hasRolloutUpdatePermission()) { + columnList.add(UPDATE_OPTION); + } columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); @@ -310,12 +342,24 @@ public class RolloutListGrid extends AbstractGrid { createRolloutStatusToFontMap(); getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); - getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(this::onClickOfActionBtn)); - final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); customObjectRenderer.addClickListener(this::onClickOfRolloutName); getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); + getColumn(START_OPTION) + .setRenderer(new HtmlButtonRenderer(clickEvent -> startRolloutAsync((Long) clickEvent.getItemId()))); + + getColumn(PAUSE_OPTION) + .setRenderer(new HtmlButtonRenderer(clickEvent -> pauseRollout((Long) clickEvent.getItemId()))); + + getColumn(RESUME_OPTION) + .setRenderer(new HtmlButtonRenderer(clickEvent -> resumeRollout((Long) clickEvent.getItemId()))); + + if (permissionChecker.hasRolloutUpdatePermission()) { + getColumn(UPDATE_OPTION) + .setRenderer(new HtmlButtonRenderer(clickEvent -> updateRollout((Long) clickEvent.getItemId()))); + } + } private void createRolloutStatusToFontMap() { @@ -337,18 +381,7 @@ public class RolloutListGrid extends AbstractGrid { } private void alignColumns() { - setCellStyleGenerator(new CellStyleGenerator() { - private static final long serialVersionUID = 5573570647129792429L; - - @Override - public String getStyle(final CellReference cellReference) { - final String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.ACTION }; - if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { - return "centeralign"; - } - return null; - } - }); + setCellStyleGenerator(new RollouStatusCellStyleGenerator(getContainerDataSource())); } private void onClickOfRolloutName(final RendererClickEvent event) { @@ -362,82 +395,55 @@ public class RolloutListGrid extends AbstractGrid { eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); } - private void onClickOfActionBtn(final RendererClickEvent event) { - final ContextMenu contextMenu = createContextMenu((Long) event.getItemId()); - contextMenu.setAsContextMenuOf((AbstractClientConnector) event.getComponent()); - contextMenu.open(event.getClientX(), event.getClientY()); - } - - private ContextMenu createContextMenu(final Long rolloutId) { - final ContextMenu context = new ContextMenu(); - context.addItemClickListener(this::menuItemClicked); + private void pauseRollout(final Long rolloutId) { final Item row = getContainerDataSource().getItem(rolloutId); + final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) .getValue(); - switch (rolloutStatus) { - case READY: - final ContextMenuItem startItem = context.addItem(START_OPTION); - startItem.setData(new ContextMenuData(rolloutId, ACTION.START)); - break; - case RUNNING: - final ContextMenuItem pauseItem = context.addItem(PAUSE_OPTION); - pauseItem.setData(new ContextMenuData(rolloutId, ACTION.PAUSE)); - break; - case PAUSED: - final ContextMenuItem resumeItem = context.addItem(RESUME_OPTION); - resumeItem.setData(new ContextMenuData(rolloutId, ACTION.RESUME)); - break; - case STARTING: - case CREATING: - case ERROR_CREATING: - case ERROR_STARTING: - // do not provide any action on these statuses - return context; - default: - break; - } - getUpdateMenuItem(context, rolloutId); - return context; - } - - private void getUpdateMenuItem(final ContextMenu context, final Long rolloutId) { - // Add 'Update' option only if user has update permission - if (!permissionChecker.hasRolloutUpdatePermission()) { + if (!RolloutStatus.RUNNING.equals(rolloutStatus)) { return; } - final ContextMenuItem cancelItem = context.addItem(UPDATE_OPTION); - cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE)); - } - private void menuItemClicked(final ContextMenuItemClickEvent event) { - final ContextMenuItem item = (ContextMenuItem) event.getSource(); - final ContextMenuData contextMenuData = (ContextMenuData) item.getData(); - final Item row = getContainerDataSource().getItem(contextMenuData.getRolloutId()); final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - switch (contextMenuData.getAction()) { - case PAUSE: - rolloutManagement.pauseRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); - uiNotification.displaySuccess(i18n.get("message.rollout.paused", rolloutName)); - break; - case RESUME: - rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); - uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); - break; - case START: - rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); - uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); - break; - case UPDATE: - onUpdate(contextMenuData); - break; - default: - break; - } + + rolloutManagement.pauseRollout(rolloutManagement.findRolloutById(rolloutId)); + uiNotification.displaySuccess(i18n.get("message.rollout.paused", rolloutName)); } - private void onUpdate(final ContextMenuData contextMenuData) { - addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); + private void resumeRollout(final Long rolloutId) { + final Item row = getContainerDataSource().getItem(rolloutId); + + final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) + .getValue(); + + if (!RolloutStatus.PAUSED.equals(rolloutStatus)) { + return; + } + + final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + + rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(rolloutId)); + uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); + } + + private void startRolloutAsync(final Long rolloutId) { + final Item row = getContainerDataSource().getItem(rolloutId); + + final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) + .getValue(); + + if (!RolloutStatus.READY.equals(rolloutStatus)) { + return; + } + + final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); + uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); + } + + private void updateRollout(final Long rolloutId) { + addUpdateRolloutWindow.populateData(rolloutId); final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); addTargetWindow.setCaption(i18n.get("caption.update.rollout")); UI.getCurrent().addWindow(addTargetWindow); @@ -448,29 +454,6 @@ public class RolloutListGrid extends AbstractGrid { ((LazyQueryContainer) getContainerDataSource()).refresh(); } - /** - * Generator to generate fontIcon by String. - */ - public final class FontIconGenerator extends PropertyValueGenerator { - - private static final long serialVersionUID = 2544026030795375748L; - private final FontAwesome fontIcon; - - public FontIconGenerator(final FontAwesome icon) { - this.fontIcon = icon; - } - - @Override - public String getValue(final Item item, final Object itemId, final Object propertyId) { - return fontIcon.getHtml(); - } - - @Override - public Class getType() { - return String.class; - } - } - private String getDescription(final CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString().toLowerCase(); @@ -524,62 +507,61 @@ public class RolloutListGrid extends AbstractGrid { return stringBuilder.toString(); } - enum ACTION { - PAUSE, RESUME, START, UPDATE - } + private static class RollouStatusCellStyleGenerator implements CellStyleGenerator { - /** - * Represents data of context menu item. - * - */ - public static class ContextMenuData { + private static final long serialVersionUID = 1L; + /** + * Contains all expected rollout status per column to enable or disable + * the button. + */ + private static final Map EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON = new HashMap<>(); + private final Container.Indexed containerDataSource; - private Long rolloutId; - - private ACTION action; + static { + EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(START_OPTION, RolloutStatus.READY); + EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(PAUSE_OPTION, RolloutStatus.RUNNING); + EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(RESUME_OPTION, RolloutStatus.PAUSED); + } /** - * Set rollout if and action. + * Constructor * - * @param rolloutId - * id of rollout - * @param action - * user action {@link ACTION} + * @param containerDataSource + * the container */ - public ContextMenuData(final Long rolloutId, final ACTION action) { - this.action = action; - this.rolloutId = rolloutId; + public RollouStatusCellStyleGenerator(final Container.Indexed containerDataSource) { + this.containerDataSource = containerDataSource; } - /** - * @return the rolloutId - */ - public Long getRolloutId() { - return rolloutId; + @Override + public String getStyle(final CellReference cellReference) { + if (SPUILabelDefinitions.VAR_STATUS.equals(cellReference.getPropertyId())) { + return "centeralign"; + } + return convertRolloutStatusToString(cellReference); } - /** - * @param rolloutId - * the rolloutId to set - */ - public void setRolloutId(final Long rolloutId) { - this.rolloutId = rolloutId; + private String convertRolloutStatusToString(final CellReference cellReference) { + final Object propertyId = cellReference.getPropertyId(); + final RolloutStatus expectedRolloutStatus = EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.get(propertyId); + if (expectedRolloutStatus == null) { + return null; + } + + final RolloutStatus currentRolloutStatus = getRolloutStatus(cellReference.getItemId()); + + if (expectedRolloutStatus.equals(currentRolloutStatus)) { + return null; + } + + return org.eclipse.hawkbit.ui.customrenderers.client.renderers.HtmlButtonRenderer.DISABLE_VALUE; } - /** - * @return the action - */ - public ACTION getAction() { - return action; + private RolloutStatus getRolloutStatus(final Object itemId) { + final Item row = containerDataSource.getItem(itemId); + return (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS).getValue(); } - /** - * @param action - * the action to set - */ - public void setAction(final ACTION action) { - this.action = action; - } } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index b4e89a191..92a51d5c4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -817,19 +817,31 @@ public final class SPUIComponentIdProvider { * Rollout target filter query combo id. */ public static final String ROLLOUT_TARGET_FILTER_COMBO_ID = "rollout.target.filter.combo.id"; + /** * Rollout action button id. */ - public static final String ROLLOUT_ACTION_BUTTON_ID = "rollout.action.button.id"; + public static final String ROLLOUT_ACTION_ID = "rollout.action.button.id"; + + /** + * Rollout start button id. + */ + public static final String ROLLOUT_START_BUTTON_ID = ROLLOUT_ACTION_ID + ".9"; + /** * Rollout pause button id. */ - public static final String ROLLOUT_PAUSE_BUTTON_ID = "rollout.pause.button.id"; + public static final String ROLLOUT_PAUSE_BUTTON_ID = ROLLOUT_ACTION_ID + ".10"; /** * Rollout resume button id. */ - public static final String ROLLOUT_RESUME_BUTTON_ID = "rollout.resume.button.id"; + public static final String ROLLOUT_RESUME_BUTTON_ID = ROLLOUT_ACTION_ID + ".11"; + + /** + * Rollout resume button id. + */ + public static final String ROLLOUT_UPDATE_BUTTON_ID = ROLLOUT_ACTION_ID + ".12"; /** * Rollout save or start option group id. diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 1fee8dcdb..9a7133e35 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -439,6 +439,12 @@ header.numberofgroups = No. of groups header.detail.status = Detail status header.total.targets = Total targets +header.action=Actions +header.action.start=Start +header.action.pause=Pause +header.action.resume=Resume +header.action.update=Edit + distribution.details.header = Distribution set target.details.header = Target header.caption.mandatory = Mandatory diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 1c437071a..09f2b11c4 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -426,6 +426,15 @@ header.distributionset = Distribution set header.numberofgroups = No. of groups header.detail.status = Detail status header.total.targets = Total targets +header.type = Type +header.swmodules = SwModules +header.migrations.step=IsRequiredMigrationStep + +header.action=Actions +header.action.start=Start +header.action.pause=Pause +header.action.resume=Resume +header.action.update=Edit header.rolloutgroup.installed.percentage = % Finished header.rolloutgroup.threshold.error = Error threshold diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 7716da4f2..311d3175a 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -420,10 +420,18 @@ header.numberofgroups = No. of groups header.detail.status = Detail status header.total.targets = Total targets +header.action=Actions +header.action.start=Start +header.action.pause=Pause +header.action.resume=Resume +header.action.update=Edit + header.rolloutgroup.installed.percentage = % Finished header.rolloutgroup.threshold.error = Error threshold header.rolloutgroup.threshold = Trigger threshold + + header.rolloutgroup.target.date = Date and time header.rolloutgroup.target.message = Messages From 27005b1ae74eab7e88ae116c5c24f9e0813022ad Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 22 Jun 2016 17:33:09 +0200 Subject: [PATCH 296/371] fix test Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/im/authentication/PermissionTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java index bca7fd1c1..2c948206e 100644 --- a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java +++ b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java @@ -36,7 +36,8 @@ public final class PermissionTest { final Collection allAuthorities = SpPermission.getAllAuthorities(); final List allAuthoritiesList = PermissionUtils.createAllAuthorityList(); assertThat(allAuthorities).hasSize(allPermission); - assertThat(allAuthoritiesList).hasSize(allPermission); + // times 2 because we add also all authorities as prefix 'ROLE_'; + assertThat(allAuthoritiesList).hasSize(allPermission * 2); assertThat(allAuthoritiesList.stream().map(authority -> authority.getAuthority()).collect(Collectors.toList())) .containsAll(allAuthorities); @@ -46,7 +47,8 @@ public final class PermissionTest { .getAllAuthorities(SpPermission.SYSTEM_ADMIN, SpPermission.SYSTEM_DIAG, SpPermission.SYSTEM_MONITOR)); assertThat(authoritiesWithoutSystem).hasSize(permissionWithoutSystem); - assertThat(authoritiesListWithoutSystem).hasSize(permissionWithoutSystem); + // times 2 because we add also all authorities as prefix 'ROLE_'; + assertThat(authoritiesListWithoutSystem).hasSize(permissionWithoutSystem * 2); assertThat(authoritiesListWithoutSystem.stream().map(authority -> authority.getAuthority()) .collect(Collectors.toList())).containsAll(authoritiesWithoutSystem); From fa2477f5cb1fe83f2840caa358b9396226c94c1b Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Thu, 23 Jun 2016 09:02:05 +0200 Subject: [PATCH 297/371] Fixed nullpointer exception and optimized the code here and there. Signed-off-by: kaizimmerm --- .../scenarios/ConfigurableScenario.java | 23 +++++++++------- .../client/scenarios/upload/ArtifactFile.java | 9 +++++-- .../upload/FeignMultipartEncoder.java | 16 +++-------- .../amqp/AmqpMessageHandlerService.java | 27 ++++++++++++------- .../jpa/JpaControllerManagement.java | 4 +-- 5 files changed, 42 insertions(+), 37 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 2cb339a1f..a09459e07 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 @@ -42,6 +42,8 @@ import org.springframework.beans.factory.annotation.Qualifier; */ public class ConfigurableScenario { + private static final int PAGE_SIZE = 100; + private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurableScenario.class); private final MgmtDistributionSetClientResource distributionSetResource; @@ -109,25 +111,25 @@ public class ConfigurableScenario { private void deleteSoftwareModules() { PagedList modules; do { - modules = softwareModuleResource.getSoftwareModules(0, 100, null, null).getBody(); + modules = softwareModuleResource.getSoftwareModules(0, PAGE_SIZE, null, null).getBody(); modules.getContent().forEach(module -> softwareModuleResource.deleteSoftwareModule(module.getModuleId())); - } while (modules.getTotal() > 100); + } while (modules.getTotal() > PAGE_SIZE); } private void deleteDistributionSets() { PagedList distributionSets; do { - distributionSets = distributionSetResource.getDistributionSets(0, 100, null, null).getBody(); + distributionSets = distributionSetResource.getDistributionSets(0, PAGE_SIZE, null, null).getBody(); distributionSets.getContent().forEach(set -> distributionSetResource.deleteDistributionSet(set.getDsId())); - } while (distributionSets.getTotal() > 100); + } while (distributionSets.getTotal() > PAGE_SIZE); } private void deleteTargets() { PagedList targets; do { - targets = targetResource.getTargets(0, 100, null, null).getBody(); + targets = targetResource.getTargets(0, PAGE_SIZE, null, null).getBody(); targets.getContent().forEach(target -> targetResource.deleteTarget(target.getControllerId())); - } while (targets.getTotal() > 100); + } while (targets.getTotal() > PAGE_SIZE); } private void runRollouts(final Scenario scenario) { @@ -217,10 +219,11 @@ public class ConfigurableScenario { private void createTargets(final Scenario scenario) { LOGGER.info("Creating {} targets", scenario.getTargets()); - for (int i = 0; i < scenario.getTargets() / 100; i++) { - targetResource.createTargets(new TargetBuilder().controllerId(scenario.getTargetName()) - .address(scenario.getTargetAddress()).buildAsList(i * 100, - (i + 1) * 100 > scenario.getTargets() ? (scenario.getTargets() - (i * 100)) : 100)); + for (int i = 0; i < (scenario.getTargets() / PAGE_SIZE); i++) { + targetResource.createTargets( + new TargetBuilder().controllerId(scenario.getTargetName()).address(scenario.getTargetAddress()) + .buildAsList(i * PAGE_SIZE, (i + 1) * PAGE_SIZE > scenario.getTargets() + ? (scenario.getTargets() - (i * PAGE_SIZE)) : PAGE_SIZE)); } LOGGER.info("Creating {} targets -> Done", scenario.getTargets()); diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/ArtifactFile.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/ArtifactFile.java index adad1fe77..379455580 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/ArtifactFile.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/ArtifactFile.java @@ -12,11 +12,16 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.Optional; import org.springframework.util.Assert; import org.springframework.util.FileCopyUtils; import org.springframework.web.multipart.MultipartFile; +/** + * Implementation for {@link MultipartFile} for hawkBit artifact upload. + * + */ public class ArtifactFile implements MultipartFile { private final String name; @@ -55,9 +60,9 @@ public class ArtifactFile implements MultipartFile { final byte[] content) { Assert.hasLength(name, "Name must not be null"); this.name = name; - this.originalFilename = originalFilename != null ? originalFilename : ""; + this.originalFilename = Optional.ofNullable(originalFilename).orElse(""); this.contentType = contentType; - this.content = content != null ? content : new byte[0]; + this.content = Optional.ofNullable(content).orElse(new byte[0]); } @Override diff --git a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java index 00424c5e5..5d1e43e96 100644 --- a/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java +++ b/examples/hawkbit-example-mgmt-simulator/src/main/java/org/eclipse/hawkbit/mgmt/client/scenarios/upload/FeignMultipartEncoder.java @@ -40,7 +40,7 @@ public class FeignMultipartEncoder implements Encoder { private final HttpHeaders multipartHeaders = new HttpHeaders(); private final HttpHeaders jsonHeaders = new HttpHeaders(); - public static final Charset UTF_8 = Charset.forName("UTF-8"); + private static final Charset UTF_8 = Charset.forName("UTF-8"); public FeignMultipartEncoder() { multipartHeaders.setContentType(MediaType.MULTIPART_FORM_DATA); @@ -48,11 +48,8 @@ public class FeignMultipartEncoder implements Encoder { } @Override - public void encode(final Object object, final Type bodyType, final RequestTemplate template) - throws EncodeException { - + public void encode(final Object object, final Type bodyType, final RequestTemplate template) { encodeMultipartFormRequest(object, template); - } private void encodeMultipartFormRequest(final Object value, final RequestTemplate template) { @@ -66,8 +63,7 @@ public class FeignMultipartEncoder implements Encoder { } @SuppressWarnings("unchecked") - private void encodeRequest(final Object value, final HttpHeaders requestHeaders, final RequestTemplate template) - throws EncodeException { + private void encodeRequest(final Object value, final HttpHeaders requestHeaders, final RequestTemplate template) { final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); final HttpOutputMessage dummyRequest = new HttpOutputMessageImpl(outputStream, requestHeaders); try { @@ -150,12 +146,6 @@ public class FeignMultipartEncoder implements Encoder { return this.filename; } - @Override - public InputStream getInputStream() throws IOException, IllegalStateException { - return super.getInputStream(); // To change body of generated - // methods, choose Tools | Templates. - } - @Override public long contentLength() throws IOException { return size; 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 3f42c2937..27cbc0f69 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 @@ -14,6 +14,7 @@ import java.util.Collections; import java.util.List; import java.util.UUID; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.api.HostnameResolver; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; @@ -344,16 +345,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final ActionUpdateStatus actionUpdateStatus = convertMessage(message, ActionUpdateStatus.class); final Action action = checkActionExist(message, actionUpdateStatus); - final ActionStatus actionStatus = entityFactory.generateActionStatus(); - actionUpdateStatus.getMessage().forEach(actionStatus::addMessage); - - if (message.getMessageProperties().getCorrelationId().length > 0) { - actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "DMF message correlation-id " - + message.getMessageProperties().getCorrelationId()); - } - - actionStatus.setAction(action); - actionStatus.setOccurredAt(System.currentTimeMillis()); + final ActionStatus actionStatus = createActionStatus(message, actionUpdateStatus, action); switch (actionUpdateStatus.getActionStatus()) { case DOWNLOAD: @@ -391,6 +383,21 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } } + private ActionStatus createActionStatus(final Message message, final ActionUpdateStatus actionUpdateStatus, + final Action action) { + final ActionStatus actionStatus = entityFactory.generateActionStatus(); + actionUpdateStatus.getMessage().forEach(actionStatus::addMessage); + + if (ArrayUtils.isNotEmpty(message.getMessageProperties().getCorrelationId())) { + actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "DMF message correlation-id " + + message.getMessageProperties().getCorrelationId()); + } + + actionStatus.setAction(action); + actionStatus.setOccurredAt(System.currentTimeMillis()); + return actionStatus; + } + private Action getUpdateActionStatus(final ActionStatus actionStatus) { if (actionStatus.getStatus().equals(Status.CANCELED)) { return controllerManagement.addCancelActionStatus(actionStatus); 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 abe4dba03..b9dfce105 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 @@ -253,8 +253,8 @@ public class JpaControllerManagement implements ControllerManagement { public Action addUpdateActionStatus(@NotNull final ActionStatus actionStatus) { final JpaAction action = (JpaAction) actionStatus.getAction(); - // if action is already closed we accept further status updates on if - // permitted so by configuration. This is especially use full if the + // if action is already closed we accept further status updates if + // permitted so by configuration. This is especially useful if the // action status feedback channel order from the device cannot be // guaranteed. However, if an action is closed we do not accept further // close messages. From bb1d3a2668df55761c56f63177f3871ad6dd6f85 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Thu, 23 Jun 2016 09:15:40 +0200 Subject: [PATCH 298/371] Remove whitespace. Signed-off-by: kaizimmerm --- hawkbit-dmf-amqp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf-amqp/pom.xml index 9dd4f12aa..c2ed7c213 100644 --- a/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf-amqp/pom.xml @@ -48,7 +48,7 @@ org.springframework.amqp spring-rabbit - + org.springframework.security spring-security-web From f567461993832ac54fc35eb414a9d6d7566ff861 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 23 Jun 2016 09:33:43 +0200 Subject: [PATCH 299/371] correct save button enabled when changes exists. Changed lower/uppercase spelling Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 4 +- .../CreateUpdateSoftwareTypeLayout.java | 3 +- .../hawkbit/ui/common/CommonDialogWindow.java | 72 ++++++--- .../ui/components/SPUIComponentProvider.java | 4 +- .../ui/decorators/SPUIWindowDecorator.java | 4 +- .../CreateUpdateDistSetTypeLayout.java | 3 +- .../AbstractCreateUpdateTagLayout.java | 18 ++- .../ui/layouts/CreateUpdateTypeLayout.java | 3 +- .../DistributionAddUpdateWindowLayout.java | 13 +- .../footer/ActionTypeOptionGroupLayout.java | 2 + .../TargetAddUpdateWindowLayout.java | 6 +- .../rollout/AddUpdateRolloutWindowLayout.java | 150 +++++++++++++++--- .../ui/rollout/rollout/RolloutListGrid.java | 4 +- .../ui/rollout/rollout/RolloutListHeader.java | 2 +- .../src/main/resources/messages.properties | 4 +- .../src/main/resources/messages_de.properties | 4 +- .../src/main/resources/messages_en.properties | 4 +- 17 files changed, 223 insertions(+), 77 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index a9baad65b..43ccbe36f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -193,7 +193,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se oldVendorValue = null; if (window != null) { - window.resetRequiredFieldsValues(); + window.resetMandatoryAndEditedFields(); } } @@ -223,7 +223,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null, - getMandatoryFields(formLayout)); + getMandatoryFields(formLayout), null); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); nameTextField.focus(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 8578ad2a4..9a87c625d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -132,7 +132,8 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields()); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields(), + getEditedFields()); } private Map getMandatoryFields() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 4388ee98a..142cd3998 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -74,6 +74,8 @@ public class CommonDialogWindow extends Window implements Serializable { private Map requiredFields; + private final Map editedFields; + @Autowired private I18N i18n; @@ -93,7 +95,7 @@ public class CommonDialogWindow extends Window implements Serializable { */ public CommonDialogWindow(final String caption, final Component content, final String helpLink, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, - final Map requiredFields) { + final Map requiredFields, final Map editedFields) { checkNotNull(saveButtonClickListener); checkNotNull(cancelButtonClickListener); this.caption = caption; @@ -102,6 +104,7 @@ public class CommonDialogWindow extends Window implements Serializable { this.saveButtonClickListener = saveButtonClickListener; this.cancelButtonClickListener = cancelButtonClickListener; this.requiredFields = requiredFields; + this.editedFields = editedFields; init(); } @@ -110,32 +113,32 @@ public class CommonDialogWindow extends Window implements Serializable { if (StringUtils.isNotBlank(event.getText())) { if (StringUtils.isNotBlank(textfield.getCaption())) { - getRequiredFields().put(textfield.getCaption(), Boolean.TRUE); + requiredFields.put(textfield.getCaption(), Boolean.TRUE); } getRequiredFields().put(textfield.getId(), Boolean.TRUE); } else { if (StringUtils.isNotBlank(textfield.getCaption())) { - getRequiredFields().put(textfield.getCaption(), Boolean.FALSE); + requiredFields.put(textfield.getCaption(), Boolean.FALSE); } - getRequiredFields().put(textfield.getId(), Boolean.FALSE); + requiredFields.put(textfield.getId(), Boolean.FALSE); } - checkMandatoryFields(); + checkMandatoryFieldsFilled(); } public void checkMandatoryComboBox(final ValueChangeEvent event, final AbstractSelect select) { if (event.getProperty().getValue() != null) { if (StringUtils.isNotBlank(select.getCaption())) { - getRequiredFields().put(select.getCaption(), Boolean.TRUE); + requiredFields.put(select.getCaption(), Boolean.TRUE); } - getRequiredFields().put(select.getId(), Boolean.TRUE); + requiredFields.put(select.getId(), Boolean.TRUE); } else { if (StringUtils.isNotBlank(select.getCaption())) { - getRequiredFields().put(select.getCaption(), Boolean.FALSE); + requiredFields.put(select.getCaption(), Boolean.FALSE); } - getRequiredFields().put(select.getId(), Boolean.FALSE); + requiredFields.put(select.getId(), Boolean.FALSE); } - checkMandatoryFields(); + checkMandatoryFieldsFilled(); } /** @@ -143,7 +146,7 @@ public class CommonDialogWindow extends Window implements Serializable { * mandatory fields are filled the save button is enabled. Otherwise the * save button is disabled. */ - private void checkMandatoryFields() { + private void checkMandatoryFieldsFilled() { for (final Map.Entry entry : requiredFields.entrySet()) { if (entry.getValue() == null || entry.getValue().equals(Boolean.FALSE)) { @@ -154,35 +157,56 @@ public class CommonDialogWindow extends Window implements Serializable { saveButton.setEnabled(true); } - public void updateRequiredFields(final String fieldId, final Boolean filled) { + private void checkExistsChanges() { - getRequiredFields().put(fieldId, filled); - checkMandatoryFields(); + if (editedFields == null) { + return; + } + for (final Map.Entry entry : editedFields.entrySet()) { + if (entry.getValue() != null && entry.getValue().equals(Boolean.TRUE)) { + saveButton.setEnabled(true); + return; + } + } + saveButton.setEnabled(false); } - public void checkChanges(final String newText, final String oldText) { + public void updateRequiredFields(final String fieldId, final Boolean filled) { + + requiredFields.put(fieldId, filled); + checkMandatoryFieldsFilled(); + } + + public void checkChanges(final String fieldName, final String newText, final String oldText) { if ((StringUtils.isNotBlank(newText) && !newText.equals(oldText)) || (StringUtils.isNotBlank(oldText) && !oldText.equals(newText))) { - saveButton.setEnabled(true); + editedFields.put(fieldName, Boolean.TRUE); } else { - saveButton.setEnabled(false); + editedFields.put(fieldName, Boolean.FALSE); } + checkExistsChanges(); } - public void checkColorChange(final Color newColor, final Color oldColor) { + public void checkColorChange(final String fieldName, final Color newColor, final Color oldColor) { if (newColor.equals(oldColor)) { - setSaveButtonEnabled(false); + editedFields.put(fieldName, Boolean.FALSE); } else { - setSaveButtonEnabled(true); + editedFields.put(fieldName, Boolean.TRUE); } + checkExistsChanges(); } - public void resetRequiredFieldsValues() { - // Reset mandatory fields are filled marker - if (getRequiredFields() != null) { - for (final Map.Entry entry : getRequiredFields().entrySet()) { + public void resetMandatoryAndEditedFields() { + resetFields(requiredFields); + resetFields(editedFields); + } + + private void resetFields(final Map fields) { + // Reset mandatory fields are filled marker / fields are edited marker + if (fields != null) { + for (final Map.Entry entry : fields.entrySet()) { entry.setValue(null); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 3ba71fce5..ffc0de8ee 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -154,9 +154,9 @@ public final class SPUIComponentProvider { public static CommonDialogWindow getWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, final String helpLink, - final Map requiredFields) { + final Map requiredFields, final Map editedFields) { return SPUIWindowDecorator.getDeocratedWindow(caption, id, type, content, saveButtonClickListener, - cancelButtonClickListener, helpLink, requiredFields); + cancelButtonClickListener, helpLink, requiredFields, editedFields); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java index f9ce37158..b627851db 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java @@ -47,10 +47,10 @@ public final class SPUIWindowDecorator { public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, final String helpLink, - final Map requiredFields) { + final Map requiredFields, final Map editedFields) { final CommonDialogWindow window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, - cancelButtonClickListener, requiredFields); + cancelButtonClickListener, requiredFields, editedFields); if (null != id) { window.setId(id); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 4b97ce7dd..b71eaac23 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -677,7 +677,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields()); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields(), + getEditedFields()); } private Map getMandatoryFields() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index 720f61cff..f7a067bfd 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -115,8 +115,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected void createWindow() { reset(); - setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields())); + setWindow( + SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, + this, this::save, this::discard, null, getMandatoryFields(), getEditedFields())); } private Map getMandatoryFields() { @@ -131,6 +132,13 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent return requiredFields; } + protected Map getEditedFields() { + final Map changeMap = new HashMap<>(); + changeMap.put(tagDesc.getCaption(), Boolean.FALSE); + changeMap.put(colorPickerLayout.getId(), Boolean.FALSE); + return changeMap; + } + /** * Save new tag / update new tag. * @@ -213,7 +221,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected void listenerTagDescTextAreaChanged(final TextChangeEvent event) { - window.checkChanges(event.getText(), tagDescOriginal); + window.checkChanges(tagDesc.getCaption(), event.getText(), tagDescOriginal); } protected void buildLayout() { @@ -375,7 +383,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent tagPreviewBtnClicked = false; if (window != null) { - window.resetRequiredFieldsValues(); + window.resetMandatoryAndEditedFields(); } } @@ -466,7 +474,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor()); } - window.checkColorChange(colorPickerLayout.getSelectedColor(), selectedColorOriginal); + window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), selectedColorOriginal); } protected void closeWindow() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index f2ef71af1..ea77d885b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -186,7 +186,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor()); } - window.checkColorChange(colorPickerLayout.getSelectedColor(), selectedColorOriginal); + window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), selectedColorOriginal); } /** @@ -206,6 +206,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePermission) { optiongroup = new OptionGroup("Select Action"); + optiongroup.setId(SPUIComponentIdProvider.OPTION_GROUP); optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); optiongroup.addStyleName("custom-option-group"); optiongroup.setNullSelectionAllowed(false); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 82cf2390c..4a6a29e93 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -179,11 +179,15 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { } private void listenerDistNameTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, distNameTextField); + if (!editDistribution) { + window.checkMandatoryTextField(event, distNameTextField); + } } private void listenerDistVersionTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, distVersionTextField); + if (!editDistribution) { + window.checkMandatoryTextField(event, distVersionTextField); + } } /** @@ -410,7 +414,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { changedComponents.clear(); if (window != null) { - window.resetRequiredFieldsValues(); + window.resetMandatoryAndEditedFields(); } } @@ -519,9 +523,8 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { resetComponents(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), - null, getMandatoryFields()); + null, getMandatoryFields(), null); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); - return window; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java index de0938e7e..bc27e7aa3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java @@ -17,6 +17,7 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.hene.flexibleoptiongroup.FlexibleOptionGroup; import org.vaadin.hene.flexibleoptiongroup.FlexibleOptionGroupItemComponent; @@ -78,6 +79,7 @@ public class ActionTypeOptionGroupLayout extends HorizontalLayout { private void createOptionGroup() { actionTypeOptionGroup = new FlexibleOptionGroup(); + actionTypeOptionGroup.setId(SPUIComponentIdProvider.ROLLOUT_ACTION_BUTTON_ID); actionTypeOptionGroup.addItem(ActionTypeOption.SOFT); actionTypeOptionGroup.addItem(ActionTypeOption.FORCED); actionTypeOptionGroup.addItem(ActionTypeOption.AUTO_FORCED); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 9bd3972f0..8ea8665d6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -244,7 +244,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, getMandatoryFields()); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, getMandatoryFields(), null); return window; } @@ -259,7 +259,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { } return requiredFields; } - + /** * clear all fields of Target Edit Window. */ @@ -274,7 +274,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { editTarget = Boolean.FALSE; if (window != null) { - window.resetRequiredFieldsValues(); + window.resetMandatoryAndEditedFields(); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 2e419724b..566ac4528 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -150,26 +150,47 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private TextArea targetFilterQuery; + private Boolean updateMode = Boolean.FALSE; + + private String distributionSetOriginal; + + private Object actionGroupOriginal; + + private String rolloutNameOriginal; + + private String errorThresholdOriginal;; + + private String triggerThresholdOriginal; + + private String descriptionOriginal; + /** * Create components and layout. */ public void init() { - setSizeUndefined(); createRequiredComponents(); buildLayout(); } public CommonDialogWindow getWindow() { - window = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), - uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields()); + uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields(), getEditedFields()); return window; } - private Map getMandatoryFields() { + public CommonDialogWindow createUpdateWindow() { + updateMode = Boolean.TRUE; + return getWindow(); + } + public CommonDialogWindow createAddWindow() { + updateMode = Boolean.FALSE; + return getWindow(); + } + + private Map getMandatoryFields() { final Map requiredFields = new HashMap<>(); requiredFields.put(rolloutName.getId(), null); requiredFields.put(distributionSet.getId(), null); @@ -195,16 +216,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { setDefaultSaveStartGroupOption(); totalTargetsLabel.setVisible(false); groupSizeLabel.setVisible(false); - removeComponent(targetFilterQuery); - if (getComponent(1, 3) == null) { - addComponent(targetFilterQueryCombo, 1, 3); - } + removeComponent(1, 2); + addComponent(targetFilterQueryCombo, 1, 2); actionTypeOptionGroupLayout.selectDefaultOption(); totalTargetsCount = 0L; rolloutForEdit = null; if (window != null) { - window.resetRequiredFieldsValues(); + window.resetMandatoryAndEditedFields(); } } @@ -284,7 +303,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { noOfGroups = createNoOfGroupsField(); groupSizeLabel = createGroupSizeLabel(); - triggerThreshold = createTriggerThresold(); + triggerThreshold = createTriggerThreshold(); errorThreshold = createErrorThreshold(); description = createDescription(); errorThresholdOptionGroup = createErrorThresholdOptionGroup(); @@ -293,6 +312,20 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { totalTargetsLabel = createTotalTargetsLabel(); targetFilterQuery = createTargetFilterQuery(); actionTypeOptionGroupLayout.addStyleName(SPUIStyleDefinitions.ROLLOUT_ACTION_TYPE_LAYOUT); + actionTypeOptionGroupLayout.getActionTypeOptionGroup() + .addValueChangeListener(this::listenerActionGroupValueChanged); + } + + private void listenerActionGroupValueChanged(final ValueChangeEvent event) { + if (window != null) { + if (!updateMode) { + window.checkMandatoryComboBox(event, actionTypeOptionGroupLayout.getActionTypeOptionGroup()); + } + if (event.getProperty().getValue() != null) { + window.checkChanges(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(), + event.getProperty().getValue().toString(), actionGroupOriginal.toString()); + } + } } private Label createGroupSizeLabel() { @@ -578,9 +611,20 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { descriptionField.setId(SPUIComponentIdProvider.ROLLOUT_DESCRIPTION_ID); descriptionField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); descriptionField.setSizeUndefined(); + descriptionField.addTextChangeListener(this::listenerDescriptionTextFieldChanged); return descriptionField; } + private void listenerDescriptionTextFieldChanged(final TextChangeEvent event) { + if (window != null) { + if (!updateMode) { + window.checkMandatoryTextField(event, description); + return; + } + window.checkChanges(description.getId(), event.getText(), descriptionOriginal); + } + } + private TextField createErrorThreshold() { final TextField errorField = getTextfield("prompt.error.threshold"); errorField.addValidator(new ThresholdFieldValidator()); @@ -592,11 +636,16 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void listenerErrorThresholdTextFieldChanged(final TextChangeEvent event) { - - window.checkMandatoryTextField(event, errorThreshold); + if (window != null) { + if (!updateMode) { + window.checkMandatoryTextField(event, errorThreshold); + return; + } + window.checkChanges(errorThreshold.getId(), event.getText(), errorThresholdOriginal); + } } - private TextField createTriggerThresold() { + private TextField createTriggerThreshold() { final TextField thresholdField = getTextfield("prompt.tigger.threshold"); thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); thresholdField.addValidator(new ThresholdFieldValidator()); @@ -607,7 +656,13 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void listenerTriggerThresholdTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, triggerThreshold); + if (window != null) { + if (!updateMode) { + window.checkMandatoryTextField(event, triggerThreshold); + return; + } + window.checkChanges(triggerThreshold.getId(), event.getText(), triggerThresholdOriginal); + } } private TextField createNoOfGroupsField() { @@ -622,7 +677,13 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, noOfGroups); + if (window != null) { + if (!updateMode) { + window.checkMandatoryTextField(event, noOfGroups); + return; + } + window.checkChanges(noOfGroups.getId(), event.getText(), noOfGroups.getValue()); + } } private void onGroupNumberChange() { @@ -647,7 +708,16 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void listenerDistributionSetChanged(final ValueChangeEvent event) { - window.checkMandatoryComboBox(event, distributionSet); + if (window != null) { + if (!updateMode) { + window.checkMandatoryComboBox(event, distributionSet); + return; + } + if (event.getProperty().getValue() != null) { + window.checkChanges(distributionSet.getId(), event.getProperty().getValue().toString(), + distributionSetOriginal); + } + } } private void populateDistributionSet() { @@ -673,7 +743,13 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void listenerRolloutNameTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, rolloutName); + if (window != null) { + if (!updateMode) { + window.checkMandatoryTextField(event, rolloutName); + return; + } + window.checkChanges(rolloutName.getId(), event.getText(), rolloutNameOriginal); + } } private String getRolloutName() { @@ -691,7 +767,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { public void validate(final Object value) { try { if (HawkbitCommonUtil.trimAndNullIfEmpty(noOfGroups.getValue()) == null - || HawkbitCommonUtil.trimAndNullIfEmpty((String) targetFilterQueryCombo.getValue()) == null) { + || (HawkbitCommonUtil.trimAndNullIfEmpty((String) targetFilterQueryCombo.getValue()) == null + && targetFilterQuery.getValue() == null)) { uiNotification .displayValidationError(i18n.get("message.rollout.noofgroups.or.targetfilter.missing")); } else { @@ -781,12 +858,42 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { noOfGroups.setEnabled(false); targetFilterQuery.setValue(rolloutForEdit.getTargetFilterQuery()); - removeComponent(targetFilterQueryCombo); - addComponent(targetFilterQuery, 1, 3); + removeComponent(1, 2); + addComponent(targetFilterQuery, 1, 2); totalTargetsCount = targetManagement.countTargetByTargetFilterQuery(rolloutForEdit.getTargetFilterQuery()); totalTargetsLabel.setValue(getTotalTargetMessage()); totalTargetsLabel.setVisible(true); + + setOriginalValues(); + } + + private void setOriginalValues() { + distributionSetOriginal = distributionSet.getValue().toString(); + actionGroupOriginal = actionTypeOptionGroupLayout.getActionTypeOptionGroup().getValue(); + rolloutNameOriginal = rolloutName.getValue(); + triggerThresholdOriginal = triggerThreshold.getValue(); + errorThresholdOriginal = errorThreshold.getValue(); + descriptionOriginal = description.getValue(); + } + + private Map getEditedFields() { + final Map changeMap = new HashMap<>(); + if (rolloutForEdit == null) { + return changeMap; + } + if (rolloutForEdit.getStatus() != RolloutStatus.READY) { + changeMap.put(rolloutName.getId(), Boolean.FALSE); + changeMap.put(description.getId(), Boolean.FALSE); + } else { + changeMap.put(rolloutName.getId(), Boolean.FALSE); + changeMap.put(distributionSet.getId(), Boolean.FALSE); + changeMap.put(triggerThreshold.getId(), Boolean.FALSE); + changeMap.put(errorThreshold.getId(), Boolean.FALSE); + changeMap.put(description.getId(), Boolean.FALSE); + changeMap.put(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(), Boolean.FALSE); + } + return changeMap; } private void disableRequiredFieldsOnEdit() { @@ -852,7 +959,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { public String getValue() { return value; } - } enum ERRORTHRESOLDOPTIONS { @@ -870,6 +976,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { public String getValue() { return value; } - } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 20c2ca710..d3b17da5f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -28,6 +28,7 @@ import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; @@ -62,7 +63,6 @@ import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.UI; -import com.vaadin.ui.Window; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; import com.vaadin.ui.renderers.HtmlRenderer; @@ -438,7 +438,7 @@ public class RolloutListGrid extends AbstractGrid { private void onUpdate(final ContextMenuData contextMenuData) { addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); - final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); + final CommonDialogWindow addTargetWindow = addUpdateRolloutWindow.createUpdateWindow(); addTargetWindow.setCaption(i18n.get("caption.update.rollout")); UI.getCurrent().addWindow(addTargetWindow); addTargetWindow.setVisible(Boolean.TRUE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index 1a3d2d7a5..22c57740f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -92,7 +92,7 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected void addNewItem(final ClickEvent event) { addUpdateRolloutWindow.resetComponents(); - final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); + final Window addTargetWindow = addUpdateRolloutWindow.createAddWindow(); UI.getCurrent().addWindow(addTargetWindow); addTargetWindow.setVisible(Boolean.TRUE); diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 5b3ad793b..c18815b2b 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -468,10 +468,10 @@ rollout.group.label.target.truncated = {0} targets has been truncated in the lis prompt.number.of.groups = Number of groups prompt.tigger.threshold = Trigger threshold prompt.error.threshold = Error threshold -prompt.distribution.set = Distribution set +prompt.distribution.set = Distribution Set caption.configure.rollout = Configure Rollout caption.update.rollout = Update Rollout -prompt.target.filter = Custom target filter +prompt.target.filter = Custom Target Filter message.rollout.nonzero.group.number = Number of groups must be greater than zero message.rollout.max.group.number = Number of groups must not be greater than 500 message.rollout.duplicate.check = Rollout [ {0} ] must be unique, entered value already exists. diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 2ac5ed9c2..2eab56ffa 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -436,7 +436,7 @@ header.rolloutgroup.target.message = Messages rollout.group.label.target.truncated = {0} targets has been truncated in the list due the target size limit of {1} -distribution.details.header = Distribution set +distribution.details.header = Distribution Set target.details.header = Target header.caption.mandatory = Mandatory header.caption.typename = SoftwareModuleType @@ -461,7 +461,7 @@ prompt.error.threshold = Error threshold prompt.distribution.set = Distribution Set caption.configure.rollout = Configure Rollout caption.update.rollout = Update Rollout -prompt.target.filter = Custom target filter +prompt.target.filter = Custom Target Filter message.rollout.nonzero.group.number = Number of groups must be greater than zero message.rollout.max.group.number = Number of groups must not be greater than 500 message.rollout.duplicate.check = Rollout [ {0} ] must be unique, entered value already exists. diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 459695844..b1a6bb970 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -448,10 +448,10 @@ menu.title = Software Provisioning prompt.number.of.groups = Number of groups prompt.tigger.threshold = Trigger threshold prompt.error.threshold = Error threshold -prompt.distribution.set = Distribution set +prompt.distribution.set = Distribution Set caption.configure.rollout = Configure Rollout caption.update.rollout = Update Rollout -prompt.target.filter = Custom target filter +prompt.target.filter = Custom Target Filter message.rollout.nonzero.group.number = Number of groups must be greater than zero message.rollout.max.group.number = Number of groups must not be greater than 500 message.rollout.duplicate.check = Rollout [ {0} ] must be unique, entered value already exists. From a9ebb763f6f9886e425f45af6e740089c5cbfe46 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 23 Jun 2016 11:25:32 +0200 Subject: [PATCH 300/371] Add i18n to CommonDialogWindow constructor Signed-off-by: Melanie Retter --- .../smtable/SoftwareModuleAddUpdateWindow.java | 2 +- .../smtype/CreateUpdateSoftwareTypeLayout.java | 2 +- .../eclipse/hawkbit/ui/common/CommonDialogWindow.java | 10 ++++------ .../hawkbit/ui/components/SPUIComponentProvider.java | 4 ++-- .../hawkbit/ui/decorators/SPUIWindowDecorator.java | 5 +++-- .../disttype/CreateUpdateDistSetTypeLayout.java | 5 ++--- .../ui/layouts/AbstractCreateUpdateTagLayout.java | 2 +- .../dstable/DistributionAddUpdateWindowLayout.java | 2 +- .../targettable/TargetAddUpdateWindowLayout.java | 2 +- .../rollout/rollout/AddUpdateRolloutWindowLayout.java | 3 ++- 10 files changed, 18 insertions(+), 19 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 43ccbe36f..fb03902b1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -223,7 +223,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null, - getMandatoryFields(formLayout), null); + getMandatoryFields(formLayout), null, i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); nameTextField.focus(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 9a87c625d..bfd48113d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -133,7 +133,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields(), - getEditedFields()); + getEditedFields(), i18n); } private Map getMandatoryFields() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 142cd3998..05d97a0de 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -77,7 +77,7 @@ public class CommonDialogWindow extends Window implements Serializable { private final Map editedFields; @Autowired - private I18N i18n; + private final I18N i18n; /** * Constructor. @@ -95,7 +95,7 @@ public class CommonDialogWindow extends Window implements Serializable { */ public CommonDialogWindow(final String caption, final Component content, final String helpLink, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, - final Map requiredFields, final Map editedFields) { + final Map requiredFields, final Map editedFields, final I18N i18n) { checkNotNull(saveButtonClickListener); checkNotNull(cancelButtonClickListener); this.caption = caption; @@ -105,7 +105,7 @@ public class CommonDialogWindow extends Window implements Serializable { this.cancelButtonClickListener = cancelButtonClickListener; this.requiredFields = requiredFields; this.editedFields = editedFields; - + this.i18n = i18n; init(); } @@ -259,9 +259,7 @@ public class CommonDialogWindow extends Window implements Serializable { private void createMandatoryLabel() { if (existsMandatoryFieldsInWindowContent()) { - // final Label madatoryLabel = new - // Label(i18n.get("label.mandatory.field")); - final Label mandatoryLabel = new Label("* Mandatory Field"); + final Label mandatoryLabel = new Label(i18n.get("label.mandatory.field")); mandatoryLabel.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_TINY); if (content instanceof TargetAddUpdateWindowLayout) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index ffc0de8ee..3338124c5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -154,9 +154,9 @@ public final class SPUIComponentProvider { public static CommonDialogWindow getWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, final String helpLink, - final Map requiredFields, final Map editedFields) { + final Map requiredFields, final Map editedFields, final I18N i18n) { return SPUIWindowDecorator.getDeocratedWindow(caption, id, type, content, saveButtonClickListener, - cancelButtonClickListener, helpLink, requiredFields, editedFields); + cancelButtonClickListener, helpLink, requiredFields, editedFields, i18n); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java index b627851db..d2d7740d3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.decorators; import java.util.Map; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; +import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -47,10 +48,10 @@ public final class SPUIWindowDecorator { public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, final String helpLink, - final Map requiredFields, final Map editedFields) { + final Map requiredFields, final Map editedFields, final I18N i18n) { final CommonDialogWindow window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, - cancelButtonClickListener, requiredFields, editedFields); + cancelButtonClickListener, requiredFields, editedFields, i18n); if (null != id) { window.setId(id); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index b71eaac23..303ca1bb2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -318,7 +318,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout for (final Iterator itemIterator = originalSelectedTableContainer.getItemIds().iterator(); itemIterator .hasNext();) { final long itemId = (Long) itemIterator.next(); - if (!selectedTableContainer.containsId(itemId)) { + if (selectedTableContainer.size() > 0 && !selectedTableContainer.containsId(itemId)) { return Boolean.TRUE; } } @@ -678,7 +678,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields(), - getEditedFields()); + getEditedFields(), i18n); } private Map getMandatoryFields() { @@ -692,7 +692,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } // Selected SoftwareModulesType requiredFields.put(selectedTable.getId(), null); - return requiredFields; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index f7a067bfd..195d173ed 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -117,7 +117,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent reset(); setWindow( SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, - this, this::save, this::discard, null, getMandatoryFields(), getEditedFields())); + this, this::save, this::discard, null, getMandatoryFields(), getEditedFields(), i18n)); } private Map getMandatoryFields() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 4a6a29e93..03dce184c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -523,7 +523,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { resetComponents(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), - null, getMandatoryFields(), null); + null, getMandatoryFields(), null, i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); return window; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 8ea8665d6..07360ed70 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -244,7 +244,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, getMandatoryFields(), null); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, getMandatoryFields(), null, i18n); return window; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 566ac4528..c1efa9f4b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -176,7 +176,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { public CommonDialogWindow getWindow() { window = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), - uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields(), getEditedFields()); + uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields(), getEditedFields(), + i18n); return window; } From 8e57eb6d269df8ae980f951df04e8a68625ce904 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 23 Jun 2016 14:49:47 +0200 Subject: [PATCH 301/371] Add action column for action history table and remove context menu Signed-off-by: SirWayne --- .../hawkbit/ui/common/ConfirmationDialog.java | 1 + .../actionhistory/ActionHistoryTable.java | 262 ++++++++---------- .../ui/rollout/rollout/RolloutListGrid.java | 87 +++--- .../ui/utils/SPUIComponentIdProvider.java | 24 +- .../hawkbit/ui/utils/SPUIDefinitions.java | 5 + .../src/main/resources/messages.properties | 3 +- .../src/main/resources/messages_de.properties | 3 +- .../src/main/resources/messages_en.properties | 3 +- 8 files changed, 184 insertions(+), 204 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java index 5f20d942a..bd1f4cb9e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java @@ -89,6 +89,7 @@ public class ConfirmationDialog implements Button.ClickListener { final Button cancelButton = SPUIComponentProvider.getButton(null, cancelLabel, "", null, false, null, SPUIButtonStyleTiny.class); cancelButton.addClickListener(this); + cancelButton.setId(SPUIComponentIdProvider.CANCEL_BUTTON); window.setModal(true); window.addStyleName(SPUIStyleDefinitions.CONFIRMBOX_WINDOW_SYLE); if (this.callback == null) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index e1581bea2..503ec83c7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -27,11 +27,11 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.ui.common.ConfirmationDialog; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.event.PinUnpinEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -50,15 +50,14 @@ import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; -import com.google.common.collect.Lists; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.data.util.HierarchicalContainer; -import com.vaadin.event.Action.Handler; import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; @@ -74,11 +73,13 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class ActionHistoryTable extends TreeTable implements Handler { +public class ActionHistoryTable extends TreeTable { + private static final long serialVersionUID = -1631514704696786653L; + private static final Logger LOG = LoggerFactory.getLogger(ActionHistoryTable.class); private static final String BUTTON_CANCEL = "button.cancel"; private static final String BUTTON_OK = "button.ok"; - private static final long serialVersionUID = -1631514704696786653L; + @Autowired private I18N i18n; @@ -95,14 +96,10 @@ public class ActionHistoryTable extends TreeTable implements Handler { private ManagementUIState managementUIState; private Container hierarchicalContainer; - private boolean alreadyHasMessages = false; + private boolean alreadyHasMessages; private Target target; - com.vaadin.event.Action actionCancel; - com.vaadin.event.Action actionForce; - com.vaadin.event.Action actionForceQuit; - private static final Logger LOG = LoggerFactory.getLogger(ActionHistoryTable.class); private static final String STATUS_ICON_GREEN = "statusIconGreen"; /** @@ -110,10 +107,6 @@ public class ActionHistoryTable extends TreeTable implements Handler { */ @PostConstruct public void init() { - actionCancel = new com.vaadin.event.Action(i18n.get("message.cancel.action")); - actionForceQuit = new com.vaadin.event.Action(i18n.get("message.forcequit.action")); - actionForceQuit.setIcon(FontAwesome.WARNING); - actionForce = new com.vaadin.event.Action(i18n.get("message.force.action")); initializeTableSettings(); buildComponent(); restorePreviousState(); @@ -150,11 +143,12 @@ public class ActionHistoryTable extends TreeTable implements Handler { } private void setColumnExpandRatioForMinimisedTable() { - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DIST, 0.3f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_STATUS, 0.15f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DATETIME, 0.3f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_FORCED, 0.15f); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DIST, 0.3F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_STATUS, 0.15F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DATETIME, 0.3F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_FORCED, 0.15F); + setColumnExpandRatio(SPUIDefinitions.ACTIONS_COLUMN, 0.2F); } private void initializeTableSettings() { @@ -164,14 +158,15 @@ public class ActionHistoryTable extends TreeTable implements Handler { setMultiSelect(false); setSortEnabled(true); setColumnReorderingAllowed(true); - setHeight(100.0f, Unit.PERCENTAGE); - setWidth(100.0f, Unit.PERCENTAGE); + setHeight(100.0F, Unit.PERCENTAGE); + setWidth(100.0F, Unit.PERCENTAGE); setImmediate(true); setStyleName("sp-table"); addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); addStyleName(ValoTheme.TABLE_SMALL); setColumnAlignment(SPUIDefinitions.ACTION_HIS_TBL_FORCED, Align.CENTER); setColumnAlignment(SPUIDefinitions.ACTION_HIS_TBL_STATUS, Align.CENTER); + setColumnAlignment(SPUIDefinitions.ACTIONS_COLUMN, Align.CENTER); // listeners for child addExpandListener(event -> { expandParentActionRow(event.getItemId()); @@ -181,11 +176,6 @@ public class ActionHistoryTable extends TreeTable implements Handler { collapseParentActionRow(event.getItemId()); managementUIState.getExpandParentActionRowId().remove(event.getItemId()); }); - /* - * Add the cancel action handler for active actions. To be used to - * cancel the action. - */ - addActionHandler(this); } /** @@ -204,6 +194,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { null); hierarchicalContainer.addContainerProperty(SPUIDefinitions.ACTION_HIS_TBL_MSGS_HIDDEN, List.class, null); hierarchicalContainer.addContainerProperty(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME, String.class, null); + } private List getVisbleColumns() { @@ -213,6 +204,8 @@ public class ActionHistoryTable extends TreeTable implements Handler { visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_DATETIME); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_STATUS); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_FORCED); + visibleColumnIds.add(SPUIDefinitions.ACTIONS_COLUMN); + if (managementUIState.isActionHistoryMaximized()) { visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_MSGS); @@ -242,12 +235,12 @@ public class ActionHistoryTable extends TreeTable implements Handler { private void getcontainerData() { hierarchicalContainer.removeAllItems(); - + if (target != null) { /* service method to create action history for target */ final List actionHistory = deploymentManagement - .findActionsWithStatusCountByTargetOrderByIdDesc(target); - + .findActionsWithStatusCountByTargetOrderByIdDesc(target); + addDetailsToContainer(actionHistory); } } @@ -300,23 +293,22 @@ public class ActionHistoryTable extends TreeTable implements Handler { * add distribution name to the item which will be displayed in the * table. The name should not exceed certain limit. */ - item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST).setValue(actionWithStatusCount.getDsName() + ":" + - actionWithStatusCount.getDsVersion()); + item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST) + .setValue(actionWithStatusCount.getDsName() + ":" + actionWithStatusCount.getDsVersion()); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED).setValue(action); /* Default no child */ ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getAction().getId(), false); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DATETIME) - .setValue(SPDateTimeUtil.getFormattedDate((actionWithStatusCount.getAction().getLastModifiedAt() != null) - ? actionWithStatusCount.getAction().getLastModifiedAt() - : actionWithStatusCount.getAction().getLastModifiedAt())); + .setValue(SPDateTimeUtil.getFormattedDate(actionWithStatusCount.getAction().getLastModifiedAt())); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME) .setValue(actionWithStatusCount.getRolloutName()); if (actionWithStatusCount.getActionStatusCount() > 0) { - ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getAction().getId(), true); + ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getAction().getId(), + true); } } } @@ -350,12 +342,18 @@ public class ActionHistoryTable extends TreeTable implements Handler { return getForcedColumn(itemId); } }); + + addGeneratedColumn(SPUIDefinitions.ACTIONS_COLUMN, new Table.ColumnGenerator() { + + private static final long serialVersionUID = 1L; + + @Override + public Component generateCell(final Table source, final Object itemId, final Object columnId) { + return createActionBarColumn(itemId); + } + }); } - /** - * @param itemId - * @return - */ private Component getForcedColumn(final Object itemId) { final Action actionWithActiveStatus = (Action) hierarchicalContainer.getItem(itemId) .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED).getValue(); @@ -372,10 +370,6 @@ public class ActionHistoryTable extends TreeTable implements Handler { return actionLabel; } - /** - * @param itemId - * @return - */ private Component getActiveColumn(final Object itemId) { final Action.Status status = (Action.Status) hierarchicalContainer.getItem(itemId) .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_STATUS_HIDDEN).getValue(); @@ -397,10 +391,43 @@ public class ActionHistoryTable extends TreeTable implements Handler { return activeStatusIcon; } - /** - * @param itemId - * @return - */ + private HorizontalLayout createActionBarColumn(final Object itemId) { + final HorizontalLayout actionBar = new HorizontalLayout(); + final Item item = hierarchicalContainer.getItem(itemId); + final Long actionId = (Long) item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID_HIDDEN).getValue(); + final String activeValue = (String) item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE_HIDDEN) + .getValue(); + final Action actionWithActiveStatus = (Action) item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED) + .getValue(); + + if (actionWithActiveStatus == null) { + return null; + } + final boolean isActionActive = target != null && SPUIDefinitions.ACTIVE.equals(activeValue); + + final Button actionCancel = SPUIComponentProvider.getButton( + SPUIComponentIdProvider.ACTION_HISTORY_TABLE_CANCEL_ID, "", i18n.get("message.cancel.action"), + ValoTheme.BUTTON_TINY, true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); + actionCancel.setEnabled(isActionActive && !actionWithActiveStatus.isCancelingOrCanceled()); + actionCancel.addClickListener(event -> confirmAndCancelAction(actionId)); + + final Button actionForce = SPUIComponentProvider.getButton( + SPUIComponentIdProvider.ACTION_HISTORY_TABLE_FORCE_ID, "", i18n.get("message.force.action"), + ValoTheme.BUTTON_TINY, true, FontAwesome.BOLT, SPUIButtonStyleSmallNoBorder.class); + actionForce.setEnabled(isActionActive && !actionWithActiveStatus.isForce()); + actionForce.addClickListener(event -> confirmAndForceAction(actionId)); + + final Button actionForceQuit = SPUIComponentProvider.getButton( + SPUIComponentIdProvider.ACTION_HISTORY_TABLE_FORCE_QUIT_ID, "", i18n.get("message.forcequit.action"), + ValoTheme.BUTTON_TINY + " redicon", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); + actionForceQuit.setEnabled(isActionActive && actionWithActiveStatus.isCancelingOrCanceled()); + actionForceQuit.addClickListener(event -> confirmAndForceQuitAction(actionId)); + + actionBar.addComponents(actionCancel, actionForce, actionForceQuit); + + return actionBar; + } + private Component getStatusColumn(final Object itemId) { final Action.Status status = (Action.Status) hierarchicalContainer.getItem(itemId) .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_STATUS_HIDDEN).getValue(); @@ -427,11 +454,11 @@ public class ActionHistoryTable extends TreeTable implements Handler { final Pageable pageReq = new PageRequest(0, 1000, new Sort(Direction.DESC, ActionStatusFields.ID.getFieldName())); final Page actionStatusList; - if (managementUIState.isActionHistoryMaximized()) { - actionStatusList = deploymentManagement.findActionStatusByActionWithMessages(pageReq, action); - } else { - actionStatusList = deploymentManagement.findActionStatusByAction(pageReq, action); - } + if (managementUIState.isActionHistoryMaximized()) { + actionStatusList = deploymentManagement.findActionStatusByActionWithMessages(pageReq, action); + } else { + actionStatusList = deploymentManagement.findActionStatusByAction(pageReq, action); + } final List content = actionStatusList.getContent(); /* * Since the recent action status and messages are already @@ -449,9 +476,8 @@ public class ActionHistoryTable extends TreeTable implements Handler { */ childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE_HIDDEN).setValue(""); - childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST) - .setValue(action.getDistributionSet().getName() + ":" - + action.getDistributionSet().getVersion()); + childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST).setValue( + action.getDistributionSet().getName() + ":" + action.getDistributionSet().getVersion()); childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DATETIME) .setValue(SPDateTimeUtil.getFormattedDate(actionStatus.getCreatedAt())); @@ -637,14 +663,15 @@ public class ActionHistoryTable extends TreeTable implements Handler { private void setColumnExpantRatioOnTableMaximize() { /* set messages column can expand the rest of the available space */ - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_STATUS, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DIST, 0.2f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_FORCED, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_MSGS, 0.35f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DATETIME, 0.15f); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_STATUS, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DIST, 0.2F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_FORCED, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_MSGS, 0.35F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DATETIME, 0.15F); + setColumnExpandRatio(SPUIDefinitions.ACTIONS_COLUMN, 0.2F); } /** @@ -706,46 +733,6 @@ public class ActionHistoryTable extends TreeTable implements Handler { setColumnExpandRatioForMinimisedTable(); } - @Override - public void handleAction(final com.vaadin.event.Action action, final Object sender, final Object target) { - /* Get the actionId details of the cancel item or row */ - final Item item = hierarchicalContainer.getItem(target); - final Long actionId = (Long) item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID_HIDDEN).getValue(); - if (action.equals(actionCancel)) { - if (actionId != null) { - confirmAndCancelAction(actionId); - } - } else if (action.equals(actionForce)) { - confirmAndForceAction(actionId); - } else if (action.equals(actionForceQuit)) { - confirmAndForceQuitAction(actionId); - } - } - - @Override - public com.vaadin.event.Action[] getActions(final Object target, final Object sender) { - final List actions = Lists.newArrayList(); - if (target != null) { - /* Check if the row or item belongs to active action */ - final String activeValue = (String) hierarchicalContainer.getItem(target) - .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE_HIDDEN).getValue(); - if (SPUIDefinitions.ACTIVE.equals(activeValue)) { - final Action actionWithActiveStatus = (Action) hierarchicalContainer.getItem(target) - .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED).getValue(); - if (!actionWithActiveStatus.isForce()) { - actions.add(actionForce); - } - if (!actionWithActiveStatus.isCancelingOrCanceled()) { - actions.add(actionCancel); - } else { - actions.add(actionForceQuit); - } - - } - } - return actions.toArray(new com.vaadin.event.Action[actions.size()]); - } - /** * Show confirmation window and if ok then only, force the action. * @@ -756,21 +743,15 @@ public class ActionHistoryTable extends TreeTable implements Handler { /* Display the confirmation */ final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.force.action.confirmbox"), i18n.get("message.force.action.confirm"), i18n.get(BUTTON_OK), i18n.get(BUTTON_CANCEL), ok -> { - if (ok) { - /* cancel the action */ - deploymentManagement.forceTargetAction(actionId); - - /* - * Refresh the action history table to show latest - * change of the action cancellation and update the - * Target Details - */ - - populateAndupdateTargetDetails(target); - notification.displaySuccess(i18n.get("message.force.action.success")); + if (!ok) { + return; } + deploymentManagement.forceTargetAction(actionId); + populateAndupdateTargetDetails(target); + notification.displaySuccess(i18n.get("message.force.action.success")); }); UI.getCurrent().addWindow(confirmDialog.getWindow()); + confirmDialog.getWindow().bringToFront(); } @@ -778,22 +759,19 @@ public class ActionHistoryTable extends TreeTable implements Handler { /* Display the confirmation */ final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.forcequit.action.confirmbox"), i18n.get("message.forcequit.action.confirm"), i18n.get(BUTTON_OK), i18n.get(BUTTON_CANCEL), ok -> { - if (ok) { - final boolean cancelResult = forceQuitActiveAction(actionId); - if (cancelResult) { - /* - * Refresh the action history table to show latest - * change of the action cancellation and update the - * Target Details - */ - populateAndupdateTargetDetails(target); - notification.displaySuccess(i18n.get("message.forcequit.action.success")); - } else { - notification.displayValidationError(i18n.get("message.forcequit.action.failed")); - } + if (!ok) { + return; } - } , FontAwesome.WARNING); + final boolean cancelResult = forceQuitActiveAction(actionId); + if (cancelResult) { + populateAndupdateTargetDetails(target); + notification.displaySuccess(i18n.get("message.forcequit.action.success")); + } else { + notification.displayValidationError(i18n.get("message.forcequit.action.failed")); + } + }, FontAwesome.WARNING); UI.getCurrent().addWindow(confirmDialog.getWindow()); + confirmDialog.getWindow().bringToFront(); } @@ -804,21 +782,21 @@ public class ActionHistoryTable extends TreeTable implements Handler { * as Id if the action needs to be cancelled. */ private void confirmAndCancelAction(final Long actionId) { + if (actionId == null) { + return; + } + final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.cancel.action.confirmbox"), i18n.get("message.cancel.action.confirm"), i18n.get(BUTTON_OK), i18n.get(BUTTON_CANCEL), ok -> { - if (ok) { - final boolean cancelResult = cancelActiveAction(actionId); - if (cancelResult) { - /* - * Refresh the action history table to show latest - * change of the action cancellation and update the - * Target Details - */ - populateAndupdateTargetDetails(target); - notification.displaySuccess(i18n.get("message.cancel.action.success")); - } else { - notification.displayValidationError(i18n.get("message.cancel.action.failed")); - } + if (!ok) { + return; + } + final boolean cancelResult = cancelActiveAction(actionId); + if (cancelResult) { + populateAndupdateTargetDetails(target); + notification.displaySuccess(i18n.get("message.cancel.action.success")); + } else { + notification.displayValidationError(i18n.get("message.cancel.action.failed")); } }); UI.getCurrent().addWindow(confirmDialog.getWindow()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index b8b3c5394..5859c2431 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -14,6 +14,7 @@ import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_CLOSE_TAG; import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_OPEN_TAG; import java.util.ArrayList; +import java.util.Arrays; import java.util.EnumMap; import java.util.HashMap; import java.util.List; @@ -74,11 +75,9 @@ public class RolloutListGrid extends AbstractGrid { private static final String UPDATE_OPTION = "Update"; - private static final String RESUME_OPTION = "Resume"; - private static final String PAUSE_OPTION = "Pause"; - private static final String START_OPTION = "Start"; + private static final String RUN_OPTION = "Run"; private static final String DS_TYPE = "type"; @@ -193,14 +192,11 @@ public class RolloutListGrid extends AbstractGrid { rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, TotalTargetCountStatus.class, null, false, false); - rolloutGridContainer.addContainerProperty(START_OPTION, String.class, FontAwesome.PLAY.getHtml(), false, false); + rolloutGridContainer.addContainerProperty(RUN_OPTION, String.class, FontAwesome.PLAY.getHtml(), false, false); rolloutGridContainer.addContainerProperty(PAUSE_OPTION, String.class, FontAwesome.PAUSE.getHtml(), false, false); - rolloutGridContainer.addContainerProperty(RESUME_OPTION, String.class, FontAwesome.FORWARD.getHtml(), false, - false); - if (permissionChecker.hasRolloutUpdatePermission()) { rolloutGridContainer.addContainerProperty(UPDATE_OPTION, String.class, FontAwesome.EDIT.getHtml(), false, false); @@ -225,18 +221,15 @@ public class RolloutListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMinimumWidth(40); getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMaximumWidth(100); - getColumn(START_OPTION).setMinimumWidth(35); - getColumn(START_OPTION).setMaximumWidth(35); + getColumn(RUN_OPTION).setMinimumWidth(25); + getColumn(RUN_OPTION).setMaximumWidth(25); - getColumn(PAUSE_OPTION).setMinimumWidth(35); - getColumn(PAUSE_OPTION).setMaximumWidth(35); - - getColumn(RESUME_OPTION).setMinimumWidth(35); - getColumn(RESUME_OPTION).setMaximumWidth(35); + getColumn(PAUSE_OPTION).setMinimumWidth(25); + getColumn(PAUSE_OPTION).setMaximumWidth(25); if (permissionChecker.hasRolloutUpdatePermission()) { - getColumn(UPDATE_OPTION).setMinimumWidth(35); - getColumn(UPDATE_OPTION).setMaximumWidth(35); + getColumn(UPDATE_OPTION).setMinimumWidth(25); + getColumn(UPDATE_OPTION).setMaximumWidth(25); } getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); @@ -262,16 +255,16 @@ public class RolloutListGrid extends AbstractGrid { .setHeaderCaption(i18n.get("header.detail.status")); getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); - getColumn(START_OPTION).setHeaderCaption(i18n.get("header.action.start")); + getColumn(RUN_OPTION).setHeaderCaption(i18n.get("header.action.run")); getColumn(PAUSE_OPTION).setHeaderCaption(i18n.get("header.action.pause")); - getColumn(RESUME_OPTION).setHeaderCaption(i18n.get("header.action.resume")); if (permissionChecker.hasRolloutUpdatePermission()) { getColumn(UPDATE_OPTION).setHeaderCaption(i18n.get("header.action.update")); } - getDefaultHeaderRow().join(START_OPTION, PAUSE_OPTION, RESUME_OPTION, UPDATE_OPTION) - .setText(i18n.get("header.action")); + final HeaderCell join = getDefaultHeaderRow().join(RUN_OPTION, PAUSE_OPTION, UPDATE_OPTION); + join.setText(i18n.get("header.action")); + join.getComponent().addStyleName("centeralign"); } @Override @@ -292,9 +285,8 @@ public class RolloutListGrid extends AbstractGrid { columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS); columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); - columnList.add(START_OPTION); + columnList.add(RUN_OPTION); columnList.add(PAUSE_OPTION); - columnList.add(RESUME_OPTION); if (permissionChecker.hasRolloutUpdatePermission()) { columnList.add(UPDATE_OPTION); @@ -346,15 +338,12 @@ public class RolloutListGrid extends AbstractGrid { customObjectRenderer.addClickListener(this::onClickOfRolloutName); getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); - getColumn(START_OPTION) - .setRenderer(new HtmlButtonRenderer(clickEvent -> startRolloutAsync((Long) clickEvent.getItemId()))); + getColumn(RUN_OPTION) + .setRenderer(new HtmlButtonRenderer(clickEvent -> startOrResumeRollout((Long) clickEvent.getItemId()))); getColumn(PAUSE_OPTION) .setRenderer(new HtmlButtonRenderer(clickEvent -> pauseRollout((Long) clickEvent.getItemId()))); - getColumn(RESUME_OPTION) - .setRenderer(new HtmlButtonRenderer(clickEvent -> resumeRollout((Long) clickEvent.getItemId()))); - if (permissionChecker.hasRolloutUpdatePermission()) { getColumn(UPDATE_OPTION) .setRenderer(new HtmlButtonRenderer(clickEvent -> updateRollout((Long) clickEvent.getItemId()))); @@ -411,35 +400,24 @@ public class RolloutListGrid extends AbstractGrid { uiNotification.displaySuccess(i18n.get("message.rollout.paused", rolloutName)); } - private void resumeRollout(final Long rolloutId) { + private void startOrResumeRollout(final Long rolloutId) { final Item row = getContainerDataSource().getItem(rolloutId); final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) .getValue(); + final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - if (!RolloutStatus.PAUSED.equals(rolloutStatus)) { + if (RolloutStatus.READY.equals(rolloutStatus)) { + rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); + uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); return; } - final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - - rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(rolloutId)); - uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); - } - - private void startRolloutAsync(final Long rolloutId) { - final Item row = getContainerDataSource().getItem(rolloutId); - - final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) - .getValue(); - - if (!RolloutStatus.READY.equals(rolloutStatus)) { + if (RolloutStatus.PAUSED.equals(rolloutStatus)) { + rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(rolloutId)); + uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); return; } - - final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); - uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); } private void updateRollout(final Long rolloutId) { @@ -518,9 +496,8 @@ public class RolloutListGrid extends AbstractGrid { private final Container.Indexed containerDataSource; static { - EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(START_OPTION, RolloutStatus.READY); + EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(RUN_OPTION, RolloutStatus.READY); EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(PAUSE_OPTION, RolloutStatus.RUNNING); - EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(RESUME_OPTION, RolloutStatus.PAUSED); } /** @@ -548,9 +525,21 @@ public class RolloutListGrid extends AbstractGrid { return null; } + if (RUN_OPTION.equals(cellReference.getPropertyId())) { + return getStatus(cellReference, RolloutStatus.READY, RolloutStatus.PAUSED); + } + + if (PAUSE_OPTION.equals(cellReference.getPropertyId())) { + return getStatus(cellReference, RolloutStatus.RUNNING); + } + + return null; + } + + private String getStatus(final CellReference cellReference, final RolloutStatus... expectedRolloutStatus) { final RolloutStatus currentRolloutStatus = getRolloutStatus(cellReference.getItemId()); - if (expectedRolloutStatus.equals(currentRolloutStatus)) { + if (Arrays.asList(expectedRolloutStatus).contains(currentRolloutStatus)) { return null; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index 92a51d5c4..3a74f2781 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -289,6 +289,21 @@ public final class SPUIComponentIdProvider { */ public static final String ACTION_HISTORY_TABLE_ID = "action.history.tableId"; + /** + * Action history table cancel Id. + */ + public static final String ACTION_HISTORY_TABLE_CANCEL_ID = "action.history.table.action.cancel"; + + /** + * Action history table force Id. + */ + public static final String ACTION_HISTORY_TABLE_FORCE_ID = "action.history.table.action.force"; + + /** + * Action history table force quit Id. + */ + public static final String ACTION_HISTORY_TABLE_FORCE_QUIT_ID = "action.history.table.action.force.quit"; + /** * Target filter wrapper id. */ @@ -826,7 +841,7 @@ public final class SPUIComponentIdProvider { /** * Rollout start button id. */ - public static final String ROLLOUT_START_BUTTON_ID = ROLLOUT_ACTION_ID + ".9"; + public static final String ROLLOUT_RUN_BUTTON_ID = ROLLOUT_ACTION_ID + ".9"; /** * Rollout pause button id. @@ -836,12 +851,7 @@ public final class SPUIComponentIdProvider { /** * Rollout resume button id. */ - public static final String ROLLOUT_RESUME_BUTTON_ID = ROLLOUT_ACTION_ID + ".11"; - - /** - * Rollout resume button id. - */ - public static final String ROLLOUT_UPDATE_BUTTON_ID = ROLLOUT_ACTION_ID + ".12"; + public static final String ROLLOUT_UPDATE_BUTTON_ID = ROLLOUT_ACTION_ID + ".11"; /** * Rollout save or start option group id. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java index 1a6e8c163..d31bf91a2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java @@ -87,6 +87,11 @@ public final class SPUIDefinitions { */ public static final String ACTION_HIS_TBL_STATUS = "Status"; + /** + * Actions column + */ + public static final String ACTIONS_COLUMN = "Actions"; + /** * Action history messages of particular action update. */ diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 9a7133e35..1306e5c67 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -440,9 +440,8 @@ header.detail.status = Detail status header.total.targets = Total targets header.action=Actions -header.action.start=Start +header.action.run=Run header.action.pause=Pause -header.action.resume=Resume header.action.update=Edit distribution.details.header = Distribution set diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 09f2b11c4..0ca4c811a 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -431,9 +431,8 @@ header.swmodules = SwModules header.migrations.step=IsRequiredMigrationStep header.action=Actions -header.action.start=Start +header.action.run=Run header.action.pause=Pause -header.action.resume=Resume header.action.update=Edit header.rolloutgroup.installed.percentage = % Finished diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 311d3175a..5369b7460 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -421,9 +421,8 @@ header.detail.status = Detail status header.total.targets = Total targets header.action=Actions -header.action.start=Start +header.action.run=Run header.action.pause=Pause -header.action.resume=Resume header.action.update=Edit header.rolloutgroup.installed.percentage = % Finished From d0ad5ee0e4e9f9e1b4ef046133551229b8f23570 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 23 Jun 2016 16:11:48 +0200 Subject: [PATCH 302/371] Add id for soft action group button Signed-off-by: SirWayne --- .../ui/management/footer/ActionTypeOptionGroupLayout.java | 2 ++ .../eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java index de0938e7e..ad61a1f56 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/footer/ActionTypeOptionGroupLayout.java @@ -17,6 +17,7 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.hene.flexibleoptiongroup.FlexibleOptionGroup; import org.vaadin.hene.flexibleoptiongroup.FlexibleOptionGroupItemComponent; @@ -98,6 +99,7 @@ public class ActionTypeOptionGroupLayout extends HorizontalLayout { addComponent(forceLabel); final FlexibleOptionGroupItemComponent softItem = actionTypeOptionGroup.getItemComponent(ActionTypeOption.SOFT); + softItem.setId(SPUIComponentIdProvider.ACTION_DETAILS_SOFT_ID); softItem.setStyleName(STYLE_DIST_WINDOW_ACTIONTYPE); addComponent(softItem); final Label softLabel = new Label(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index 3a74f2781..0e0230403 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -242,6 +242,11 @@ public final class SPUIComponentIdProvider { */ public static final String DISCARD_SW_MODULE_TYPE = "save.actions.popup.discard.sw.module.type"; + /** + * Action history table cancel Id. + */ + public static final String ACTION_DETAILS_SOFT_ID = "action.details.soft.group"; + /** * ID - Label. */ From 3e4b8660142201549b21bb2a394acc0dbf6b80f6 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 23 Jun 2016 17:41:44 +0200 Subject: [PATCH 303/371] remove centeralign style from join column Signed-off-by: SirWayne --- .../org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 5859c2431..82b7f3a44 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -264,7 +264,6 @@ public class RolloutListGrid extends AbstractGrid { final HeaderCell join = getDefaultHeaderRow().join(RUN_OPTION, PAUSE_OPTION, UPDATE_OPTION); join.setText(i18n.get("header.action")); - join.getComponent().addStyleName("centeralign"); } @Override From ef01a2575057579155980ee2670a0915a980c762 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 24 Jun 2016 07:43:02 +0200 Subject: [PATCH 304/371] javadoc first sentence missing dot Signed-off-by: Michael Hirsch --- .../main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java index d31bf91a2..d2fff0c9f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java @@ -88,7 +88,7 @@ public final class SPUIDefinitions { public static final String ACTION_HIS_TBL_STATUS = "Status"; /** - * Actions column + * Actions column. */ public static final String ACTIONS_COLUMN = "Actions"; From 0a36f23bb33d47de6532941119aad2a3f82931f1 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 24 Jun 2016 12:09:23 +0200 Subject: [PATCH 305/371] retrieve target-security-token with system-context permission Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 27cbc0f69..8c1b359a6 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 @@ -47,6 +47,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.util.IpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -105,6 +106,9 @@ public class AmqpMessageHandlerService extends BaseAmqpService { @Autowired private EntityFactory entityFactory; + @Autowired + private SystemSecurityContext systemSecurityContext; + /** * Constructor. * @@ -313,9 +317,10 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final DistributionSet distributionSet = action.getDistributionSet(); final List softwareModuleList = controllerManagement .findSoftwareModulesByDistributionSet(distributionSet); + final String targetSecurityToken = systemSecurityContext.runAsSystem(() -> target.getSecurityToken()); eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(), target.getControllerId(), action.getId(), softwareModuleList, target.getTargetInfo().getAddress(), - target.getSecurityToken())); + targetSecurityToken)); } From 128585c95e87651237b3542c1d29a37bb4e6ef03 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 24 Jun 2016 12:38:46 +0200 Subject: [PATCH 306/371] fix test Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 3 +++ .../hawkbit/amqp/AmqpMessageHandlerServiceTest.java | 7 +++++++ 2 files changed, 10 insertions(+) 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 8c1b359a6..36f90adae 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 @@ -478,4 +478,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { this.entityFactory = entityFactory; } + void setSystemSecurityContext(final SystemSecurityContext systemSecurityContext) { + this.systemSecurityContext = systemSecurityContext; + } } 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 338feea62..7ef51d961 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 @@ -52,6 +52,7 @@ import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.security.SecurityTokenGenerator; +import org.eclipse.hawkbit.security.SystemSecurityContext; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -112,6 +113,9 @@ public class AmqpMessageHandlerServiceTest { @Mock private RabbitTemplate rabbitTemplate; + @Mock + private SystemSecurityContext systemSecurityContextMock; + @Before public void before() throws Exception { messageConverter = new Jackson2JsonMessageConverter(); @@ -124,6 +128,7 @@ public class AmqpMessageHandlerServiceTest { amqpMessageHandlerService.setHostnameResolver(hostnameResolverMock); amqpMessageHandlerService.setEventBus(eventBus); amqpMessageHandlerService.setEntityFactory(entityFactoryMock); + amqpMessageHandlerService.setSystemSecurityContext(systemSecurityContextMock); } @@ -367,6 +372,8 @@ public class AmqpMessageHandlerServiceTest { when(controllerManagementMock.findSoftwareModulesByDistributionSet(Matchers.any())) .thenReturn(softwareModuleList); + when(systemSecurityContextMock.runAsSystem(anyObject())).thenReturn("securityToken"); + final MessageProperties messageProperties = createMessageProperties(MessageType.EVENT); messageProperties.setHeader(MessageHeaderKey.TOPIC, EventTopic.UPDATE_ACTION_STATUS.name()); final ActionUpdateStatus actionUpdateStatus = createActionUpdateStatus(ActionStatus.FINISHED, 23L); From 23cb62b9d9b7e537fa81aaed75ef2f780ee92827 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Fri, 24 Jun 2016 13:59:19 +0200 Subject: [PATCH 307/371] Fix scheduled executor, auth exchange and simulator poll. Signed-off-by: kaizimmerm --- .../simulator/DeviceSimulatorUpdater.java | 3 +- .../simulator/SimulatedDeviceFactory.java | 2 +- .../simulator/SimulationController.java | 4 - .../hawkbit/simulator/SimulatorStartup.java | 5 - .../simulator/amqp/AmqpConfiguration.java | 10 +- .../AsyncConfigurerThreadpoolProperties.java | 13 +++ .../scheduling/ExecutorAutoConfiguration.java | 50 +++++----- .../main/resources/hawkbitdefaults.properties | 3 +- .../hawkbit/amqp/AmqpConfiguration.java | 93 +++++++++++++------ .../amqp/AmqpMessageHandlerService.java | 25 ++++- .../eclipse/hawkbit/amqp/AmqpProperties.java | 24 ++++- .../hawkbit/AmqpTestConfiguration.java | 9 +- .../AmqpControllerAuthenticationTest.java | 19 ++-- .../amqp/AmqpMessageHandlerServiceTest.java | 19 ++-- .../hawkbit/dmf/amqp/api/AmqpSettings.java | 2 + .../hawkbit/dmf/amqp/api/MessageType.java | 5 - .../test/util/TestConfiguration.java | 4 +- 17 files changed, 185 insertions(+), 105 deletions(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java index 0931f6f3e..81237beb7 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java @@ -99,7 +99,8 @@ public class DeviceSimulatorUpdater { // plug and play - non existing device will be auto created if (device == null) { - device = repository.add(deviceFactory.createSimulatedDevice(id, tenant, Protocol.DMF_AMQP, -1, null, null)); + device = repository + .add(deviceFactory.createSimulatedDevice(id, tenant, Protocol.DMF_AMQP, 1800, null, null)); } device.setProgress(0.0); diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatedDeviceFactory.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatedDeviceFactory.java index 35829c673..8d5c5e0b1 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatedDeviceFactory.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatedDeviceFactory.java @@ -45,7 +45,7 @@ public class SimulatedDeviceFactory { */ public AbstractSimulatedDevice createSimulatedDevice(final String id, final String tenant, final Protocol protocol) { - return createSimulatedDevice(id, tenant, protocol, 30, null, null); + return createSimulatedDevice(id, tenant, protocol, 1800, null, null); } /** 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 3bd6b41f2..43f954c00 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 @@ -86,10 +86,6 @@ public class SimulationController { final String deviceId = name + i; repository.add(deviceFactory.createSimulatedDevice(deviceId, tenant, protocol, pollDelay, new URL(endpoint), gatewayToken)); - - if (protocol == Protocol.DMF_AMQP) { - spSenderService.createOrUpdateThing(tenant, deviceId); - } } return ResponseEntity.ok("Updated " + amount + " DMF connected targets!"); diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatorStartup.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatorStartup.java index 19367a9d4..486eb4b5e 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatorStartup.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatorStartup.java @@ -11,7 +11,6 @@ package org.eclipse.hawkbit.simulator; import java.net.MalformedURLException; import java.net.URL; -import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Protocol; import org.eclipse.hawkbit.simulator.amqp.SpSenderService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,10 +53,6 @@ public class SimulatorStartup implements ApplicationListener arguments = getDeadLetterExchangeArgs(); arguments.putAll(getTTLMaxArgs()); - return QueueBuilder.nonDurable(amqpProperties.getReceiverConnectorQueueFromSp()).withArguments(arguments) - .build(); + return QueueBuilder.nonDurable(amqpProperties.getReceiverConnectorQueueFromSp()).autoDelete() + .withArguments(arguments).build(); } /** @@ -133,12 +133,12 @@ public class AmqpConfiguration { */ @Bean public FanoutExchange exchangeQueueToConnector() { - return new FanoutExchange(amqpProperties.getSenderForSpExchange()); + return new FanoutExchange(amqpProperties.getSenderForSpExchange(), false, true); } /** * Create the Binding - * {@link AmqpConfiguration#receiverConnectorQueueFromSp()} to + * {@link AmqpConfiguration#receiverConnectorQueueFromHawkBit()} to * {@link AmqpConfiguration#exchangeQueueToConnector()}. * * @return the binding and create the queue and exchange @@ -165,7 +165,7 @@ public class AmqpConfiguration { */ @Bean public FanoutExchange exchangeDeadLetter() { - return new FanoutExchange(amqpProperties.getDeadLetterExchange()); + return new FanoutExchange(amqpProperties.getDeadLetterExchange(), false, true); } /** diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerThreadpoolProperties.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerThreadpoolProperties.java index 4425c7278..d6f3ca430 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerThreadpoolProperties.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/AsyncConfigurerThreadpoolProperties.java @@ -32,6 +32,11 @@ public class AsyncConfigurerThreadpoolProperties { */ private Integer maxthreads = 20; + /** + * Core processing threads for scheduled event executor. + */ + private Integer schedulerThreads = 3; + /** * When the number of threads is greater than the core, this is the maximum * time that excess idle threads will wait for new tasks before terminating. @@ -70,4 +75,12 @@ public class AsyncConfigurerThreadpoolProperties { this.idletimeout = idletimeout; } + public Integer getSchedulerThreads() { + return schedulerThreads; + } + + public void setSchedulerThreads(final Integer schedulerThreads) { + this.schedulerThreads = schedulerThreads; + } + } diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java index 0aeaf75bb..917e4e4ef 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/scheduling/ExecutorAutoConfiguration.java @@ -11,6 +11,8 @@ package org.eclipse.hawkbit.autoconfigure.scheduling; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy; @@ -24,9 +26,12 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.task.TaskExecutor; +import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.concurrent.ConcurrentTaskScheduler; import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; +import org.springframework.security.concurrent.DelegatingSecurityContextExecutorService; +import org.springframework.security.concurrent.DelegatingSecurityContextScheduledExecutorService; import com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -45,20 +50,28 @@ public class ExecutorAutoConfiguration { /** * @return ExecutorService with security context availability in thread - * execution.. + * execution. + */ + @Bean(destroyMethod = "shutdown") + @ConditionalOnMissingBean + public ExecutorService asyncExecutor() { + return new DelegatingSecurityContextExecutorService(threadPoolExecutor()); + } + + /** + * @return {@link TaskExecutor} for task execution */ @Bean @ConditionalOnMissingBean - public Executor asyncExecutor() { - return new DelegatingSecurityContextExecutor(threadPoolExecutor()); + public TaskExecutor taskExecutor() { + return new ConcurrentTaskExecutor(asyncExecutor()); } /** * @return central ThreadPoolExecutor for general purpose multi threaded * operations. Tries an orderly shutdown when destroyed. */ - @Bean(destroyMethod = "shutdown") - public ThreadPoolExecutor threadPoolExecutor() { + private ThreadPoolExecutor threadPoolExecutor() { final BlockingQueue blockingQueue = new ArrayBlockingQueue<>( asyncConfigurerProperties.getQueuesize()); return new ThreadPoolExecutor(asyncConfigurerProperties.getCorethreads(), @@ -92,31 +105,24 @@ public class ExecutorAutoConfiguration { } /** - * @return {@link TaskExecutor} for task execution + * @return {@link ScheduledExecutorService} with security context + * availability in thread execution. */ - @Bean - @ConditionalOnMissingBean - public TaskExecutor taskExecutor() { - return new ConcurrentTaskExecutor(asyncExecutor()); - } - - /** - * @return {@link ScheduledExecutorService} based on - * {@link #threadPoolTaskScheduler()}. - */ - @Bean + @Bean(destroyMethod = "shutdown") @ConditionalOnMissingBean public ScheduledExecutorService scheduledExecutorService() { - return threadPoolTaskScheduler().getScheduledExecutor(); + return new DelegatingSecurityContextScheduledExecutorService( + Executors.newScheduledThreadPool(asyncConfigurerProperties.getSchedulerThreads(), + new ThreadFactoryBuilder().setNameFormat("central-scheduled-executor-pool-%d").build())); } /** - * @return {@link ThreadPoolTaskScheduler} for scheduled operations. + * @return {@link TaskScheduler} for task execution */ @Bean @ConditionalOnMissingBean - public ThreadPoolTaskScheduler threadPoolTaskScheduler() { - return new ThreadPoolTaskScheduler(); + public TaskScheduler taskScheduler() { + return new ConcurrentTaskScheduler(scheduledExecutorService()); } } diff --git a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties index 9c197fbb3..cb7793168 100644 --- a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties +++ b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties @@ -41,4 +41,5 @@ hawkbit.controller.minPollingTime=00:00:30 # Configuration for RabbitMQ integration hawkbit.dmf.rabbitmq.deadLetterQueue=dmf_connector_deadletter_ttl hawkbit.dmf.rabbitmq.deadLetterExchange=dmf.connector.deadletter -hawkbit.dmf.rabbitmq.receiverQueue=dmf_receiver \ No newline at end of file +hawkbit.dmf.rabbitmq.receiverQueue=dmf_receiver +hawkbit.dmf.rabbitmq.authenticationReceiverQueue=authentication_receiver diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index c26b5547e..ae25d0086 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -8,8 +8,11 @@ */ package org.eclipse.hawkbit.amqp; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ThreadPoolExecutor; import org.eclipse.hawkbit.dmf.amqp.api.AmqpSettings; import org.slf4j.Logger; @@ -18,6 +21,7 @@ import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; @@ -51,10 +55,6 @@ public class AmqpConfiguration { @Autowired private AmqpDeadletterProperties amqpDeadletterProperties; - @Autowired - @Qualifier("threadPoolExecutor") - private ThreadPoolExecutor threadPoolExecutor; - @Autowired private ConnectionFactory rabbitConnectionFactory; @@ -66,8 +66,8 @@ public class AmqpConfiguration { private AmqpProperties amqpProperties; @Autowired - @Qualifier("threadPoolExecutor") - private ThreadPoolExecutor threadPoolExecutor; + @Qualifier("asyncExecutor") + private Executor threadPoolExecutor; @Autowired private ScheduledExecutorService scheduledExecutorService; @@ -145,26 +145,71 @@ public class AmqpConfiguration { } /** - * Create the sp receiver queue. + * Create the DMF API receiver queue for * * @return the receiver queue */ @Bean - public Queue receiverQueue() { + public Queue dmfReceiverQueue() { return new Queue(amqpProperties.getReceiverQueue(), true, false, false, amqpDeadletterProperties.getDeadLetterExchangeArgs(amqpProperties.getDeadLetterExchange())); } /** - * Create the dead letter fanout exchange. + * Create the DMF API receiver queue for authentication requests called by + * 3rd party artifact storages for download authorization by devices. + * + * @return the receiver queue + */ + @Bean + public Queue authenticationReceiverQueue() { + return QueueBuilder.nonDurable(amqpProperties.getAuthenticationReceiverQueue()).autoDelete() + .withArguments(getTTLMaxArgsAuthenticationQueue()).build(); + } + + /** + * Create DMF exchange. * * @return the fanout exchange */ @Bean - public FanoutExchange senderExchange() { + public FanoutExchange dmfSenderExchange() { return new FanoutExchange(AmqpSettings.DMF_EXCHANGE); } + /** + * Create the Binding {@link AmqpConfiguration#dmfReceiverQueue()} to + * {@link AmqpConfiguration#dmfSenderExchange()}. + * + * @return the binding and create the queue and exchange + */ + @Bean + public Binding bindDmfSenderExchangeToDmfQueue() { + return BindingBuilder.bind(dmfReceiverQueue()).to(dmfSenderExchange()); + } + + /** + * Create authentication exchange. + * + * @return the fanout exchange + */ + @Bean + public FanoutExchange authenticationExchange() { + return new FanoutExchange(AmqpSettings.AUTHENTICATION_EXCHANGE, false, true); + } + + /** + * Create the Binding + * {@link AmqpConfiguration#authenticationReceiverQueue()} to + * {@link AmqpConfiguration#authenticationExchange()}. + * + * @return the binding and create the queue and exchange + */ + @Bean + public Binding bindAuthenticationSenderExchangeToAuthenticationQueue() { + return BindingBuilder.bind(authenticationReceiverQueue()).to(authenticationExchange()); + } + /** * Create dead letter queue. * @@ -181,29 +226,18 @@ public class AmqpConfiguration { * @return the fanout exchange */ @Bean - public FanoutExchange exchangeDeadLetter() { + public FanoutExchange deadLetterExchange() { return new FanoutExchange(amqpProperties.getDeadLetterExchange()); } /** - * Create the Binding deadLetterQueue to exchangeDeadLetter. + * Create the Binding deadLetterQueue to deadLetterExchange. * * @return the binding */ @Bean - public Binding bindDeadLetterQueueToLwm2mExchange() { - return BindingBuilder.bind(deadLetterQueue()).to(exchangeDeadLetter()); - } - - /** - * Create the Binding {@link AmqpConfiguration#receiverQueue()} to - * {@link AmqpConfiguration#senderExchange()}. - * - * @return the binding and create the queue and exchange - */ - @Bean - public Binding bindSenderExchangeToSpQueue() { - return BindingBuilder.bind(receiverQueue()).to(senderExchange()); + public Binding bindDeadLetterQueueToDeadLetterExchange() { + return BindingBuilder.bind(deadLetterQueue()).to(deadLetterExchange()); } /** @@ -245,4 +279,11 @@ public class AmqpConfiguration { return containerFactory; } + private static Map getTTLMaxArgsAuthenticationQueue() { + final Map args = new HashMap<>(); + args.put("x-message-ttl", Duration.ofSeconds(30).toMillis()); + args.put("x-max-length", 1_000); + return args; + } + } 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 27cbc0f69..7d4e08144 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 @@ -116,7 +116,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } /** - * Method to handle all incoming amqp messages. + * Method to handle all incoming DMF amqp messages. * * @param message * incoming message @@ -133,6 +133,12 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return onMessage(message, type, tenant, getRabbitTemplate().getConnectionFactory().getVirtualHost()); } + @RabbitListener(queues = "${hawkbit.dmf.rabbitmq.authenticationReceiverQueue}", containerFactory = "listenerContainerFactory") + public Message onAuthenticationRequest(final Message message, + @Header(MessageHeaderKey.TENANT) final String tenant) { + return onAuthenticationRequest(message); + } + public Message onMessage(final Message message, final String type, final String tenant, final String virtualHost) { checkContentTypeJson(message); final SecurityContext oldContext = SecurityContextHolder.getContext(); @@ -149,8 +155,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final EventTopic eventTopic = EventTopic.valueOf(topicValue); handleIncomingEvent(message, eventTopic); break; - case AUTHENTIFICATION: - return handleAuthentifiactionMessage(message); + default: logAndThrowMessageError(message, "No handle method was found for the given message type."); } @@ -164,6 +169,20 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return null; } + public Message onAuthenticationRequest(final Message message) { + checkContentTypeJson(message); + final SecurityContext oldContext = SecurityContextHolder.getContext(); + try { + return handleAuthentifiactionMessage(message); + } catch (final IllegalArgumentException ex) { + throw new AmqpRejectAndDontRequeueException("Invalid message!", ex); + } catch (final TenantNotExistException teex) { + throw new AmqpRejectAndDontRequeueException(teex); + } finally { + SecurityContextHolder.setContext(oldContext); + } + } + private Message handleAuthentifiactionMessage(final Message message) { final DownloadResponse authentificationResponse = new DownloadResponse(); final MessageProperties messageProperties = message.getMessageProperties(); diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java index ace1fefa2..888b204e7 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java @@ -31,10 +31,16 @@ public class AmqpProperties { private String deadLetterExchange = "dmf.connector.deadletter"; /** - * DMF API receiving queue. + * DMF API receiving queue for EVENT or THING_CREATED message. */ private String receiverQueue = "dmf_receiver"; + /** + * Authentication request called by 3rd party artifact storages for download + * authorizations. + */ + private String authenticationReceiverQueue = "authentication_receiver"; + /** * Missing queue fatal. */ @@ -62,6 +68,14 @@ public class AmqpProperties { */ private int initialConcurrentConsumers = 3; + public String getAuthenticationReceiverQueue() { + return authenticationReceiverQueue; + } + + public void setAuthenticationReceiverQueue(final String authenticationReceiverQueue) { + this.authenticationReceiverQueue = authenticationReceiverQueue; + } + public int getPrefetchCount() { return prefetchCount; } @@ -147,10 +161,6 @@ public class AmqpProperties { return receiverQueue; } - public void setReceiverQueue(final String receiverQueue) { - this.receiverQueue = receiverQueue; - } - public int getRequestedHeartBeat() { return requestedHeartBeat; } @@ -159,4 +169,8 @@ public class AmqpProperties { this.requestedHeartBeat = requestedHeartBeat; } + public void setReceiverQueue(final String receiverQueue) { + this.receiverQueue = receiverQueue; + } + } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java index 075313a19..467c650be 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java @@ -31,7 +31,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.task.TaskExecutor; import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; +import org.springframework.security.concurrent.DelegatingSecurityContextExecutorService; import com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -78,18 +78,17 @@ public class AmqpTestConfiguration { * @return ExecutorService with security context availability in thread * execution.. */ - @Bean + @Bean(destroyMethod = "shutdown") @ConditionalOnMissingBean public Executor asyncExecutor() { - return new DelegatingSecurityContextExecutor(threadPoolExecutor()); + return new DelegatingSecurityContextExecutorService(threadPoolExecutor()); } /** * @return central ThreadPoolExecutor for general purpose multi threaded * operations. Tries an orderly shutdown when destroyed. */ - @Bean(destroyMethod = "shutdown") - public ThreadPoolExecutor threadPoolExecutor() { + private ThreadPoolExecutor threadPoolExecutor() { final BlockingQueue blockingQueue = new ArrayBlockingQueue<>(10); final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 10, 1000, TimeUnit.MILLISECONDS, blockingQueue, new ThreadFactoryBuilder().setNameFormat("central-executor-pool-%d").build()); diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java index 881260579..4e08e1852 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java @@ -158,7 +158,7 @@ public class AmqpControllerAuthenticationTest { @Test @Description("Tests authentication message without principal") public void testAuthenticationMessageBadCredantialsWithoutPricipal() { - final MessageProperties messageProperties = createMessageProperties(MessageType.AUTHENTIFICATION); + final MessageProperties messageProperties = createMessageProperties(null); final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, FileResource.sha1("12345")); @@ -166,8 +166,7 @@ public class AmqpControllerAuthenticationTest { messageProperties); // test - final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT, "vHost"); + final Message onMessage = amqpMessageHandlerService.onAuthenticationRequest(message); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); @@ -178,7 +177,7 @@ public class AmqpControllerAuthenticationTest { @Test @Description("Tests authentication message without wrong credential") public void testAuthenticationMessageBadCredantialsWithWrongCredential() { - final MessageProperties messageProperties = createMessageProperties(MessageType.AUTHENTIFICATION); + final MessageProperties messageProperties = createMessageProperties(null); final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, FileResource.sha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( @@ -189,8 +188,7 @@ public class AmqpControllerAuthenticationTest { messageProperties); // test - final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT, "vHost"); + final Message onMessage = amqpMessageHandlerService.onAuthenticationRequest(message); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); @@ -201,7 +199,7 @@ public class AmqpControllerAuthenticationTest { @Test @Description("Tests authentication message successfull") public void testSuccessfullMessageAuthentication() { - final MessageProperties messageProperties = createMessageProperties(MessageType.AUTHENTIFICATION); + final MessageProperties messageProperties = createMessageProperties(null); final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, FileResource.sha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( @@ -212,8 +210,7 @@ public class AmqpControllerAuthenticationTest { messageProperties); // test - final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT, "vHost"); + final Message onMessage = amqpMessageHandlerService.onAuthenticationRequest(message); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); @@ -232,7 +229,9 @@ public class AmqpControllerAuthenticationTest { private MessageProperties createMessageProperties(final MessageType type, final String replyTo) { final MessageProperties messageProperties = new MessageProperties(); - messageProperties.setHeader(MessageHeaderKey.TYPE, type.name()); + if (type != null) { + messageProperties.setHeader(MessageHeaderKey.TYPE, type.name()); + } messageProperties.setHeader(MessageHeaderKey.TENANT, TENANT); messageProperties.setContentType(MessageProperties.CONTENT_TYPE_JSON); messageProperties.setReplyTo(replyTo); 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 338feea62..43d7980df 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 @@ -273,14 +273,13 @@ public class AmqpMessageHandlerServiceTest { @Test @Description("Tests that an download request is denied for an artifact which does not exists") public void authenticationRequestDeniedForArtifactWhichDoesNotExists() { - final MessageProperties messageProperties = createMessageProperties(MessageType.AUTHENTIFICATION); + final MessageProperties messageProperties = createMessageProperties(null); final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", FileResource.sha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); // test - final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT, "vHost"); + final Message onMessage = amqpMessageHandlerService.onAuthenticationRequest(message); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); @@ -292,7 +291,7 @@ public class AmqpMessageHandlerServiceTest { @Test @Description("Tests that an download request is denied for an artifact which is not assigned to the requested target") public void authenticationRequestDeniedForArtifactWhichIsNotAssignedToTarget() { - final MessageProperties messageProperties = createMessageProperties(MessageType.AUTHENTIFICATION); + final MessageProperties messageProperties = createMessageProperties(null); final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", FileResource.sha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); @@ -303,8 +302,7 @@ public class AmqpMessageHandlerServiceTest { .thenThrow(EntityNotFoundException.class); // test - final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT, "vHost"); + final Message onMessage = amqpMessageHandlerService.onAuthenticationRequest(message); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); @@ -316,7 +314,7 @@ public class AmqpMessageHandlerServiceTest { @Test @Description("Tests that an download request is allowed for an artifact which exists and assigned to the requested target") public void authenticationRequestAllowedForArtifactWhichExistsAndAssignedToTarget() throws MalformedURLException { - final MessageProperties messageProperties = createMessageProperties(MessageType.AUTHENTIFICATION); + final MessageProperties messageProperties = createMessageProperties(null); final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", FileResource.sha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); @@ -334,8 +332,7 @@ public class AmqpMessageHandlerServiceTest { when(hostnameResolverMock.resolveHostname()).thenReturn(new URL("http://localhost")); // test - final Message onMessage = amqpMessageHandlerService.onMessage(message, MessageType.AUTHENTIFICATION.name(), - TENANT, "vHost"); + final Message onMessage = amqpMessageHandlerService.onAuthenticationRequest(message); // verify final DownloadResponse downloadResponse = (DownloadResponse) messageConverter.fromMessage(onMessage); @@ -411,7 +408,9 @@ public class AmqpMessageHandlerServiceTest { private MessageProperties createMessageProperties(final MessageType type, final String replyTo) { final MessageProperties messageProperties = new MessageProperties(); - messageProperties.setHeader(MessageHeaderKey.TYPE, type.name()); + if (type != null) { + messageProperties.setHeader(MessageHeaderKey.TYPE, type.name()); + } messageProperties.setHeader(MessageHeaderKey.TENANT, TENANT); messageProperties.setContentType(MessageProperties.CONTENT_TYPE_JSON); messageProperties.setReplyTo(replyTo); diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/AmqpSettings.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/AmqpSettings.java index 40ba04419..364f36aa5 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/AmqpSettings.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/AmqpSettings.java @@ -18,6 +18,8 @@ public final class AmqpSettings { public static final String DMF_EXCHANGE = "dmf.exchange"; + public static final String AUTHENTICATION_EXCHANGE = "authentication.exchange"; + private AmqpSettings() { } diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageType.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageType.java index 8cca32b06..e66a0c8c6 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageType.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageType.java @@ -26,9 +26,4 @@ public enum MessageType { */ THING_CREATED, - /** - * The authentication type. - */ - AUTHENTIFICATION, - } diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestConfiguration.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestConfiguration.java index e6a8e7686..3a7a2f73d 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/TestConfiguration.java @@ -31,7 +31,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.data.domain.AuditorAware; import org.springframework.scheduling.annotation.AsyncConfigurer; -import org.springframework.security.concurrent.DelegatingSecurityContextExecutor; +import org.springframework.security.concurrent.DelegatingSecurityContextExecutorService; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import com.google.common.eventbus.AsyncEventBus; @@ -99,7 +99,7 @@ public class TestConfiguration implements AsyncConfigurer { @Bean public Executor asyncExecutor() { - return new DelegatingSecurityContextExecutor(Executors.newSingleThreadExecutor()); + return new DelegatingSecurityContextExecutorService(Executors.newSingleThreadExecutor()); } @Bean From 2150f45bded5c45729c7bf6b655f4768a1202380 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 24 Jun 2016 14:51:18 +0200 Subject: [PATCH 308/371] use SecurityContext as thread local because it's delegated throug threads Signed-off-by: Michael Hirsch --- .../security/SecurityContextTenantAware.java | 101 +++++++++++++----- .../security/SystemSecurityContext.java | 18 ++-- 2 files changed, 88 insertions(+), 31 deletions(-) diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java index 2d8ac52df..e548acb7a 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java @@ -8,13 +8,15 @@ */ package org.eclipse.hawkbit.security; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.Collection; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.context.SecurityContextImpl; /** * A {@link TenantAware} implemenation which retrieves the ID of the tenant from @@ -28,9 +30,6 @@ import org.springframework.security.core.context.SecurityContextHolder; */ public class SecurityContextTenantAware implements TenantAware { - private static final ThreadLocal TENANT_THREAD_LOCAL = new ThreadLocal<>(); - private static final ThreadLocal RUN_AS_DEPTH = new ThreadLocal<>(); - /* * (non-Javadoc) * @@ -38,9 +37,6 @@ public class SecurityContextTenantAware implements TenantAware { */ @Override public String getCurrentTenant() { - if (TENANT_THREAD_LOCAL.get() != null) { - return TENANT_THREAD_LOCAL.get(); - } final SecurityContext context = SecurityContextHolder.getContext(); if (context.getAuthentication() != null) { final Object authDetails = context.getAuthentication().getDetails(); @@ -51,29 +47,84 @@ public class SecurityContextTenantAware implements TenantAware { return null; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.tenancy.TenantAware#runAsTenant(java.lang.String, - * java.util.concurrent.Callable) - */ @Override public T runAsTenant(final String tenant, final TenantRunner callable) { - AtomicInteger runAsDepth = RUN_AS_DEPTH.get(); - if (runAsDepth == null) { - runAsDepth = new AtomicInteger(1); - RUN_AS_DEPTH.set(runAsDepth); - } else { - runAsDepth.incrementAndGet(); - } - TENANT_THREAD_LOCAL.set(tenant); + final SecurityContext originalContext = SecurityContextHolder.getContext(); try { + SecurityContextHolder.setContext(buildSecurityContext(tenant)); return callable.run(); } finally { - if (runAsDepth.decrementAndGet() <= 0) { - RUN_AS_DEPTH.remove(); - TENANT_THREAD_LOCAL.remove(); - } + SecurityContextHolder.setContext(originalContext); + } + } + + private SecurityContext buildSecurityContext(final String tenant) { + final SecurityContextImpl securityContext = new SecurityContextImpl(); + securityContext.setAuthentication( + new AuthenticationDelegate(SecurityContextHolder.getContext().getAuthentication(), tenant)); + return securityContext; + } + + private class AuthenticationDelegate implements Authentication { + private static final long serialVersionUID = 1L; + + private final Authentication delegate; + private final TenantAwareAuthenticationDetails tenantAwareAuthenticationDetails; + + private AuthenticationDelegate(final Authentication delegate, final String tenant) { + this.delegate = delegate; + tenantAwareAuthenticationDetails = new TenantAwareAuthenticationDetails(tenant, false); + + } + + @Override + public boolean equals(final Object another) { + return delegate.equals(another); + } + + @Override + public String toString() { + return delegate.toString(); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + @Override + public String getName() { + return delegate.getName(); + } + + @Override + public Collection getAuthorities() { + return delegate.getAuthorities(); + } + + @Override + public Object getCredentials() { + return delegate.getCredentials(); + } + + @Override + public Object getDetails() { + return tenantAwareAuthenticationDetails; + } + + @Override + public Object getPrincipal() { + return delegate.getPrincipal(); + } + + @Override + public boolean isAuthenticated() { + return delegate.isAuthenticated(); + } + + @Override + public void setAuthenticated(final boolean isAuthenticated) throws IllegalArgumentException { + delegate.setAuthenticated(isAuthenticated); } } } diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java index 78fb5818d..c0ecb8ceb 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SystemSecurityContext.java @@ -72,7 +72,7 @@ public class SystemSecurityContext { logger.debug("entering system code execution"); return tenantAware.runAsTenant(tenantAware.getCurrentTenant(), () -> { try { - setSystemContext(); + setSystemContext(oldContext); return callable.call(); } catch (final Exception e) { throw Throwables.propagate(e); @@ -93,9 +93,10 @@ public class SystemSecurityContext { return SecurityContextHolder.getContext().getAuthentication() instanceof SystemCodeAuthentication; } - private static void setSystemContext() { + private static void setSystemContext(final SecurityContext oldContext) { + final Authentication oldAuthentication = oldContext.getAuthentication(); final SecurityContextImpl securityContextImpl = new SecurityContextImpl(); - securityContextImpl.setAuthentication(new SystemCodeAuthentication()); + securityContextImpl.setAuthentication(new SystemCodeAuthentication(oldAuthentication)); SecurityContextHolder.setContext(securityContextImpl); } @@ -104,6 +105,11 @@ public class SystemSecurityContext { private static final long serialVersionUID = 1L; private static final List AUTHORITIES = Collections .singletonList(new SimpleGrantedAuthority(SpringEvalExpressions.SYSTEM_ROLE)); + private final Authentication oldAuthentication; + + private SystemCodeAuthentication(final Authentication oldAuthentication) { + this.oldAuthentication = oldAuthentication; + } @Override public String getName() { @@ -117,17 +123,17 @@ public class SystemSecurityContext { @Override public Object getCredentials() { - return null; + return oldAuthentication != null ? oldAuthentication.getCredentials() : null; } @Override public Object getDetails() { - return null; + return oldAuthentication != null ? oldAuthentication.getDetails() : null; } @Override public Object getPrincipal() { - return null; + return oldAuthentication != null ? oldAuthentication.getPrincipal() : null; } @Override From a5d84a47e070df13cfc8624330fa2f018dce0a86 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 24 Jun 2016 14:58:26 +0200 Subject: [PATCH 309/371] code beautify Signed-off-by: Michael Hirsch --- .../hawkbit/security/SecurityContextTenantAware.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java index e548acb7a..4b5fe7224 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextTenantAware.java @@ -24,9 +24,6 @@ import org.springframework.security.core.context.SecurityContextImpl; * {@link Authentication#getDetails()} which holds the * {@link TenantAwareAuthenticationDetails} object. * - * - * - * */ public class SecurityContextTenantAware implements TenantAware { @@ -65,6 +62,11 @@ public class SecurityContextTenantAware implements TenantAware { return securityContext; } + /** + * An {@link Authentication} implementation to delegate to an existing + * {@link Authentication} object except setting the details specifically for + * a specific tenant. + */ private class AuthenticationDelegate implements Authentication { private static final long serialVersionUID = 1L; @@ -74,7 +76,6 @@ public class SecurityContextTenantAware implements TenantAware { private AuthenticationDelegate(final Authentication delegate, final String tenant) { this.delegate = delegate; tenantAwareAuthenticationDetails = new TenantAwareAuthenticationDetails(tenant, false); - } @Override From 82bdaf53ed9610a976a8441a9f663eb5db828b11 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 24 Jun 2016 15:12:24 +0200 Subject: [PATCH 310/371] Fix wrong multi part exception message in response. Hardening all exception message and classes in exception handler for reponses Signed-off-by: SirWayne --- .../hawkbit/exception/SpServerError.java | 4 -- .../resource/MgmtSoftwareModuleResource.java | 32 ++++----- .../MultiPartFileUploadException.java | 30 ++++++++ .../exception/ResponseExceptionHandler.java | 72 ++++++++++--------- 4 files changed, 82 insertions(+), 56 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/MultiPartFileUploadException.java diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerError.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerError.java index 7d618e234..5acd11463 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerError.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/exception/SpServerError.java @@ -87,10 +87,6 @@ public enum SpServerError { */ SP_DS_CREATION_FAILED_MISSING_MODULE("hawkbit.server.error.distributionset.creationFailed.missingModule", "Creation if Distribution Set failed as module is missing that is configured as mandatory."), - /** - * - */ - SP_ARTIFACT_UPLOAD_FILE_LIMIT_EXCEEDED("hawkbit.server.error.artifact.uploadFailed.sizelimitexceeded", "Upload of artifact failed as the file exceeds its maximum permitted size"), /** * */ diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java index b4f1e8adb..b475c473f 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleResource.java @@ -68,28 +68,24 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi { @RequestParam(value = "md5sum", required = false) final String md5Sum, @RequestParam(value = "sha1sum", required = false) final String sha1Sum) { - Artifact result; - if (!file.isEmpty()) { - String fileName = optionalFileName; - - if (null == fileName) { - fileName = file.getOriginalFilename(); - } - - try { - result = artifactManagement.createLocalArtifact(file.getInputStream(), softwareModuleId, fileName, - md5Sum == null ? null : md5Sum.toLowerCase(), sha1Sum == null ? null : sha1Sum.toLowerCase(), - false, file.getContentType()); - } catch (final IOException e) { - LOG.error("Failed to store artifact", e); - return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); - } - } else { + if (file.isEmpty()) { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } + String fileName = optionalFileName; - return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponse(result), HttpStatus.CREATED); + if (fileName == null) { + fileName = file.getOriginalFilename(); + } + try { + final Artifact result = artifactManagement.createLocalArtifact(file.getInputStream(), softwareModuleId, + fileName, md5Sum == null ? null : md5Sum.toLowerCase(), + sha1Sum == null ? null : sha1Sum.toLowerCase(), false, file.getContentType()); + return new ResponseEntity<>(MgmtSoftwareModuleMapper.toResponse(result), HttpStatus.CREATED); + } catch (final IOException e) { + LOG.error("Failed to store artifact", e); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } } @Override diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/MultiPartFileUploadException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/MultiPartFileUploadException.java new file mode 100644 index 000000000..e37786e19 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/MultiPartFileUploadException.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.repository.exception; + +import org.eclipse.hawkbit.exception.SpServerError; +import org.eclipse.hawkbit.exception.SpServerRtException; + +/** + * Thrown if a multi part exception occurred. + * + */ +public final class MultiPartFileUploadException extends SpServerRtException { + + private static final long serialVersionUID = 1L; + + /** + * @param cause + * for the exception + */ + public MultiPartFileUploadException(final Throwable cause) { + super(cause.getMessage(), SpServerError.SP_ARTIFACT_UPLOAD_FAILED, cause); + } + +} diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java index 31e4a3046..13e214c45 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java @@ -13,9 +13,10 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; -import org.apache.tomcat.util.http.fileupload.FileUploadBase.FileSizeLimitExceededException; +import org.apache.tomcat.util.http.fileupload.FileUploadException; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; +import org.eclipse.hawkbit.repository.exception.MultiPartFileUploadException; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,10 +29,6 @@ import org.springframework.web.multipart.MultipartException; /** * General controller advice for exception handling. - * - * - * - * */ @ControllerAdvice public class ResponseExceptionHandler { @@ -89,14 +86,11 @@ public class ResponseExceptionHandler { @ExceptionHandler(SpServerRtException.class) public ResponseEntity handleSpServerRtExceptions(final HttpServletRequest request, final Exception ex) { - LOG.debug("Handling exception of request {}", request.getRequestURL()); - final ExceptionInfo response = new ExceptionInfo(); + logRequest(request, ex); + final ExceptionInfo response = createExceptionInfo(ex); final HttpStatus responseStatus; - response.setMessage(ex.getMessage()); - response.setExceptionClass(ex.getClass().getName()); if (ex instanceof SpServerRtException) { responseStatus = getStatusOrDefault(((SpServerRtException) ex).getError()); - response.setErrorCode(((SpServerRtException) ex).getError().getKey()); } else { responseStatus = DEFAULT_RESPONSE_STATUS; } @@ -118,11 +112,8 @@ public class ResponseExceptionHandler { @ExceptionHandler(HttpMessageNotReadableException.class) public ResponseEntity handleHttpMessageNotReadableException(final HttpServletRequest request, final Exception ex) { - LOG.debug("Handling exception {} of request {}", ex.getClass().getName(), request.getRequestURL()); - final ExceptionInfo response = new ExceptionInfo(); - response.setErrorCode(SpServerError.SP_REST_BODY_NOT_READABLE.getKey()); - response.setMessage(SpServerError.SP_REST_BODY_NOT_READABLE.getMessage()); - response.setExceptionClass(MessageNotReadableException.class.getName()); + logRequest(request, ex); + final ExceptionInfo response = createExceptionInfo(new MessageNotReadableException()); return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); } @@ -139,35 +130,48 @@ public class ResponseExceptionHandler { * as entity. */ @ExceptionHandler(MultipartException.class) - public ResponseEntity handleFileLimitExceededException(final HttpServletRequest request, + public ResponseEntity handleMultipartException(final HttpServletRequest request, final Exception ex) { - LOG.debug("Handling exception {} of request {}", ex.getClass().getName(), request.getRequestURL()); - final ExceptionInfo response = new ExceptionInfo(); + logRequest(request, ex); - if (searchForCause(ex, FileSizeLimitExceededException.class)) { - response.setErrorCode(SpServerError.SP_ARTIFACT_UPLOAD_FILE_LIMIT_EXCEEDED.getKey()); - response.setMessage(SpServerError.SP_ARTIFACT_UPLOAD_FILE_LIMIT_EXCEEDED.getMessage()); - response.setExceptionClass(FileSizeLimitExceededException.class.getName()); - } else { - response.setErrorCode(SpServerError.SP_ARTIFACT_UPLOAD_FAILED.getKey()); - response.setMessage(SpServerError.SP_ARTIFACT_UPLOAD_FAILED.getMessage()); - response.setExceptionClass(MultipartException.class.getName()); + Throwable responseCause = ex; + + final Throwable searchForCause = searchForCause(ex, FileUploadException.class); + if (searchForCause != null) { + responseCause = searchForCause; } + final ExceptionInfo response = createExceptionInfo(new MultiPartFileUploadException(responseCause)); return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); } - private static boolean searchForCause(final Throwable t, final Class lookFor) { - if (t != null && t.getCause() != null) { - if (t.getCause().getClass().isAssignableFrom(lookFor)) { - return true; - } else { - return searchForCause(t.getCause(), lookFor); - } + private void logRequest(final HttpServletRequest request, final Exception ex) { + LOG.debug("Handling exception {} of request {}", ex.getClass().getName(), request.getRequestURL()); + } + + private static Throwable searchForCause(final Throwable t, final Class lookFor) { + if (t == null || t.getCause() == null) { + return null; } - return false; + final Throwable cause = t.getCause(); + + if (cause.getClass().equals(lookFor)) { + return cause; + } + return searchForCause(cause, lookFor); + } + + private ExceptionInfo createExceptionInfo(final Exception ex) { + final ExceptionInfo response = new ExceptionInfo(); + response.setMessage(ex.getMessage()); + response.setExceptionClass(ex.getClass().getName()); + if (ex instanceof SpServerRtException) { + response.setErrorCode(((SpServerRtException) ex).getError().getKey()); + } + + return response; } } From 2c0c0d123caf70db6a45297040f2aaaf49797e77 Mon Sep 17 00:00:00 2001 From: Dennis Melzer Date: Fri, 24 Jun 2016 15:54:27 +0200 Subject: [PATCH 311/371] Update messages.properties Add properties Signed-off-by: SirWayne --- hawkbit-ui/src/main/resources/messages.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 1306e5c67..7488b4d17 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -438,6 +438,9 @@ header.distributionset = Distribution set header.numberofgroups = No. of groups header.detail.status = Detail status header.total.targets = Total targets +header.type = Type +header.swmodules = SwModules +header.migrations.step=IsRequiredMigrationStep header.action=Actions header.action.run=Run From 1e8ffb8b9e4da3214743903ead402996039ff64f Mon Sep 17 00:00:00 2001 From: Dennis Melzer Date: Fri, 24 Jun 2016 15:55:04 +0200 Subject: [PATCH 312/371] Update messages_en.properties Add properties Signed-off-by: SirWayne --- hawkbit-ui/src/main/resources/messages_en.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 5369b7460..eb6f290cf 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -419,6 +419,9 @@ header.distributionset = Distribution set header.numberofgroups = No. of groups header.detail.status = Detail status header.total.targets = Total targets +header.type = Type +header.swmodules = SwModules +header.migrations.step=IsRequiredMigrationStep header.action=Actions header.action.run=Run From 850b7c68282885fac15c5f56c58cc012b3f5814d Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 24 Jun 2016 17:26:57 +0200 Subject: [PATCH 313/371] fix enable save button problem when update Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 100 +++---- .../smtable/SoftwareModuleTable.java | 1 - .../CreateUpdateSoftwareTypeLayout.java | 27 +- .../hawkbit/ui/common/CommonDialogWindow.java | 281 +++++++++++------- .../CreateUpdateDistSetTypeLayout.java | 84 +++--- .../AbstractCreateUpdateTagLayout.java | 69 +++-- .../ui/layouts/CreateUpdateTypeLayout.java | 28 +- .../DistributionAddUpdateWindowLayout.java | 186 +++--------- ...eateUpdateDistributionTagLayoutWindow.java | 6 +- .../TargetAddUpdateWindowLayout.java | 135 +++------ .../CreateUpdateTargetTagLayoutWindow.java | 4 +- .../rollout/AddUpdateRolloutWindowLayout.java | 176 +++++------ .../ui/rollout/rollout/RolloutListGrid.java | 9 +- .../ui/rollout/rollout/RolloutListHeader.java | 2 +- 14 files changed, 499 insertions(+), 609 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index fb03902b1..7e3051555 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -32,8 +32,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.spring.events.EventBus; -import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.AbstractField; @@ -84,9 +82,15 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se private CommonDialogWindow window; - private String oldDescriptionValue; + private String originalDescriptionValue; - private String oldVendorValue; + private String originalVendorValue; + + private String originalNameValue; + + private String originalVersionValue; + + private String originalComboBoxValue; private Boolean editSwModule = Boolean.FALSE; @@ -135,26 +139,31 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); nameTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_NAME); - nameTextField.addTextChangeListener(this::listenerNameTextFieldChanged); + nameTextField.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalNameValue)); + nameTextField.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, nameTextField)); /* version text field */ versionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); versionTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VERSION); - versionTextField.addTextChangeListener(this::listenerVersionTextFieldChanged); + versionTextField + .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalVersionValue)); + versionTextField.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, versionTextField)); /* Vendor text field */ vendorTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.vendor"), "", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.vendor"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); vendorTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VENDOR); + vendorTextField + .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalVendorValue)); descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descTextArea.setId(SPUIComponentIdProvider.ADD_SW_MODULE_DESCRIPTION); - addDescriptionTextChangeListener(); - addVendorTextChangeListener(); + descTextArea + .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDescriptionValue)); typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, true, null, i18n.get("upload.swmodule.type")); @@ -162,43 +171,40 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se typeComboBox.setStyleName(SPUIDefinitions.COMBO_BOX_SPECIFIC_STYLE + " " + ValoTheme.COMBOBOX_TINY); typeComboBox.setNewItemsAllowed(Boolean.FALSE); typeComboBox.setImmediate(Boolean.TRUE); - typeComboBox.addValueChangeListener(this::listenerTypeComboBoxChanged); - populateTypeNameCombo(); - - resetOldValues(); - } - - private void listenerNameTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, nameTextField); - } - - private void listenerVersionTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, versionTextField); - } - - private void listenerTypeComboBoxChanged(final ValueChangeEvent event) { - window.checkMandatoryComboBox(event, typeComboBox); + typeComboBox.addValueChangeListener( + event -> window.checkMandatoryEditedValue(event, typeComboBox, originalComboBoxValue)); } private void populateTypeNameCombo() { typeComboBox.setContainerDataSource(HawkbitCommonUtil.createLazyQueryContainer( new BeanQueryFactory(SoftwareModuleTypeBeanQuery.class))); typeComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); - } - private void resetOldValues() { - oldDescriptionValue = null; - oldVendorValue = null; + private void resetComponents() { + + vendorTextField.clear(); + nameTextField.clear(); + versionTextField.clear(); + descTextArea.clear(); + typeComboBox.clear(); + + originalDescriptionValue = null; + originalVendorValue = null; + originalComboBoxValue = null; + originalNameValue = null; + originalVersionValue = null; if (window != null) { - window.resetMandatoryAndEditedFields(); + window.reset(); } } private void createWindow() { + resetComponents(); + final Label madatoryStarLabel = new Label("*"); madatoryStarLabel.setStyleName("v-caption v-required-field-indicator"); madatoryStarLabel.setWidth(null); @@ -223,9 +229,9 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null, - getMandatoryFields(formLayout), null, i18n); + getMandatoryFields(formLayout), geEditedFields(), i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); - nameTextField.focus(); + typeComboBox.focus(); } private Map getMandatoryFields(final FormLayout formLayout) { @@ -234,18 +240,20 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se while (iterate.hasNext()) { final Component c = iterate.next(); if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getCaption(), null); + requiredFields.put(c.getId(), Boolean.FALSE); } } return requiredFields; } - private void addDescriptionTextChangeListener() { - descTextArea.addTextChangeListener(event -> window.setSaveButtonEnabled(hasDescriptionChanged(event))); - } - - private void addVendorTextChangeListener() { - vendorTextField.addTextChangeListener(event -> window.setSaveButtonEnabled(hasVendorChanged(event))); + private Map geEditedFields() { + final Map editedFields = new HashMap<>(); + editedFields.put(typeComboBox.getId(), Boolean.FALSE); + editedFields.put(nameTextField.getId(), Boolean.FALSE); + editedFields.put(vendorTextField.getId(), Boolean.FALSE); + editedFields.put(versionTextField.getId(), Boolean.FALSE); + editedFields.put(descTextArea.getId(), Boolean.FALSE); + return editedFields; } /** @@ -309,13 +317,13 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se : HawkbitCommonUtil.trimAndNullIfEmpty(swModle.getVendor())); descTextArea.setValue(swModle.getDescription() == null ? HawkbitCommonUtil.SP_STRING_EMPTY : HawkbitCommonUtil.trimAndNullIfEmpty(swModle.getDescription())); - oldDescriptionValue = descTextArea.getValue(); - oldVendorValue = vendorTextField.getValue(); + originalDescriptionValue = descTextArea.getValue(); + originalVendorValue = vendorTextField.getValue(); + originalComboBoxValue = swModle.getType().getName(); if (swModle.getType().isDeleted()) { typeComboBox.addItem(swModle.getType().getName()); } typeComboBox.setValue(swModle.getType().getName()); - window.setSaveButtonEnabled(Boolean.FALSE); } /** @@ -324,7 +332,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se private void closeThisWindow() { window.close(); UI.getCurrent().removeWindow(window); - window.setSaveButtonEnabled(false); } /** @@ -361,15 +368,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se } else { addNewBaseSoftware(); } - window.setSaveButtonEnabled(false); - } - - private boolean hasDescriptionChanged(final TextChangeEvent event) { - return !(event.getText().equals(oldDescriptionValue) && vendorTextField.getValue().equals(oldVendorValue)); - } - - private boolean hasVendorChanged(final TextChangeEvent event) { - return !(event.getText().equals(oldVendorValue) && descTextArea.getValue().equals(oldDescriptionValue)); } public FormLayout getFormLayout() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java index 6527a37be..694399b47 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java @@ -44,7 +44,6 @@ import com.vaadin.ui.UI; /** * Header of Software module table. - * */ @SpringComponent @ViewScope diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index bfd48113d..d8b32efc4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -34,7 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -92,13 +91,15 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); tagName.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_NAME); - tagName.addTextChangeListener(this::listenerTagNameTextFieldChanged); + tagName.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagName())); + tagName.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, tagName)); typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_KEY, true, "", i18n.get("textfield.key"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeKey.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_KEY); - typeKey.addTextChangeListener(this::typeKeyTextFieldChanged); + typeKey.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTypeKey())); + typeKey.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, typeKey)); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, false, "", @@ -106,19 +107,11 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout tagDesc.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); - tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged); + tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagDesc())); singleMultiOptionGroup(); } - private void listenerTagNameTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, tagName); - } - - private void typeKeyTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, typeKey); - } - @Override protected void buildLayout() { @@ -142,7 +135,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout while (iterate.hasNext()) { final Component c = iterate.next(); if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getCaption(), null); + requiredFields.put(c.getId(), Boolean.FALSE); } } return requiredFields; @@ -164,6 +157,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout } else { assignOptiongroup.setEnabled(true); } + assignOptiongroup.select(singleAssignStr); } /** @@ -195,18 +189,19 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout @Override protected void setTagDetails(final String targetTagSelected) { tagName.setValue(targetTagSelected); + setOriginalTagName(targetTagSelected); final SoftwareModuleType selectedTypeTag = swTypeManagementService .findSoftwareModuleTypeByName(targetTagSelected); if (null != selectedTypeTag) { tagDesc.setValue(selectedTypeTag.getDescription()); - setTagDescOriginal(selectedTypeTag.getDescription()); + setOriginalTagDesc(selectedTypeTag.getDescription()); typeKey.setValue(selectedTypeTag.getKey()); + setOriginalTypeKey(selectedTypeTag.getKey()); if (selectedTypeTag.getMaxAssignments() == Integer.MAX_VALUE) { assignOptiongroup.setValue(multiAssignStr); } else { assignOptiongroup.setValue(singleAssignStr); } - setColorPickerComponentsColor(selectedTypeTag.getColour()); } } @@ -245,7 +240,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout updateSWModuleType(existingSMTypeByName); } - window.setSaveButtonEnabled(false); + // window.setSaveButtonEnabled(false); } private void createNewSWModuleType() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 05d97a0de..7602f0a83 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -11,8 +11,10 @@ package org.eclipse.hawkbit.ui.common; import static com.google.common.base.Preconditions.checkNotNull; import java.io.Serializable; +import java.util.Collections; import java.util.Map; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -22,16 +24,14 @@ import org.eclipse.hawkbit.ui.management.targettable.TargetAddUpdateWindowLayout import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; -import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.colorpicker.Color; +import com.vaadin.ui.AbstractComponent; import com.vaadin.ui.AbstractOrderedLayout; -import com.vaadin.ui.AbstractSelect; -import com.vaadin.ui.AbstractTextField; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; @@ -74,9 +74,8 @@ public class CommonDialogWindow extends Window implements Serializable { private Map requiredFields; - private final Map editedFields; + private Map editedFields; - @Autowired private final I18N i18n; /** @@ -104,41 +103,155 @@ public class CommonDialogWindow extends Window implements Serializable { this.saveButtonClickListener = saveButtonClickListener; this.cancelButtonClickListener = cancelButtonClickListener; this.requiredFields = requiredFields; + if (requiredFields == null) { + this.requiredFields = Collections.emptyMap(); + } + this.editedFields = editedFields; + if (editedFields == null) { + this.editedFields = Collections.emptyMap(); + } this.i18n = i18n; init(); } - public void checkMandatoryTextField(final TextChangeEvent event, final AbstractTextField textfield) { - - if (StringUtils.isNotBlank(event.getText())) { - if (StringUtils.isNotBlank(textfield.getCaption())) { - requiredFields.put(textfield.getCaption(), Boolean.TRUE); - } - getRequiredFields().put(textfield.getId(), Boolean.TRUE); - } else { - if (StringUtils.isNotBlank(textfield.getCaption())) { - requiredFields.put(textfield.getCaption(), Boolean.FALSE); - } - requiredFields.put(textfield.getId(), Boolean.FALSE); + /** + * Checks if all mandatory fields are filled, and if there are changes in + * the current field. If yes, the save button will be enabled. + * + * @param event + * TextChangeEvent + * @param originalValue + * original Value of the current field + */ + public void checkMandatoryEditedTextField(final TextChangeEvent event, final String originalValue) { + final Component component = event.getComponent(); + if (!(component instanceof AbstractComponent)) { + throw new IllegalStateException("Only AbstractComponent not allow"); } - checkMandatoryFieldsFilled(); + + if (requiredFields.containsKey(component.getId())) { + final boolean isTextChangeNotEmpty = StringUtils.isNotBlank(event.getText()); + setRequiredFieldChangeValue((AbstractComponent) component, isTextChangeNotEmpty); + } + checkChanges(component.getId(), event.getText(), originalValue); + checkSaveButtonEnabled(); } - public void checkMandatoryComboBox(final ValueChangeEvent event, final AbstractSelect select) { - - if (event.getProperty().getValue() != null) { - if (StringUtils.isNotBlank(select.getCaption())) { - requiredFields.put(select.getCaption(), Boolean.TRUE); - } - requiredFields.put(select.getId(), Boolean.TRUE); - } else { - if (StringUtils.isNotBlank(select.getCaption())) { - requiredFields.put(select.getCaption(), Boolean.FALSE); - } - requiredFields.put(select.getId(), Boolean.FALSE); + /** + * Checks if all mandatory fields are filled, and if there are changes in + * the current field. If yes, the save button will be enabled. + * + * @param event + * ValueChangeEvent + * @param component + * current Component + * @param originalValue + * original Value of the current field + */ + public void checkMandatoryEditedValue(final ValueChangeEvent event, final AbstractComponent component, + final String originalValue) { + final boolean isChangedValueNotNull = event.getProperty().getValue() != null; + if (requiredFields.containsKey(component.getId())) { + setRequiredFieldChangeValue(component, isChangedValueNotNull); } - checkMandatoryFieldsFilled(); + if (event.getProperty().getValue() != null) { + checkChanges(component.getId(), event.getProperty().getValue().toString(), originalValue); + } else { + checkChanges(component.getId(), null, originalValue); + } + checkSaveButtonEnabled(); + } + + /** + * Checks if all mandatory fields are filled, and if there are changes in + * the current field. (Boolean) If yes, the save button will be enabled. + * + * @param event + * ValueChangeEvent + * @param component + * current Component + * @param originalValue + * original Boolean Value of the current field + */ + public void checkMandatoryEditedValueBoolean(final ValueChangeEvent event, final AbstractComponent component, + final Boolean originalValue) { + final boolean isChangedValueNotNull = event.getProperty().getValue() != null; + if (requiredFields.containsKey(component.getId())) { + setRequiredFieldChangeValue(component, isChangedValueNotNull); + } + final Boolean changed = (Boolean) event.getProperty().getValue(); + editedFields.put(component.getId(), BooleanUtils.compare(changed, originalValue) != 0); + checkSaveButtonEnabled(); + } + + /** + * Updates the map of required fields if a value is set. (e.g. on Update + * when editing a component) + * + * @param event + * ValueChangeEvent + * @param component + * current Component + */ + public void setRequiredFieldWhenUpdate(final ValueChangeEvent event, final AbstractComponent component) { + final boolean isChangedValueNotNull = event.getProperty().getValue() != null; + setRequiredFieldChangeValue(component, isChangedValueNotNull); + } + + /** + * * Updates the map of required fields if a value is set. (e.g. on Update + * when editing a component) + * + * @param fieldId + * Id of the current component + * @param filled + * Boolean if field is filled + */ + public void updateRequiredFields(final String fieldId, final Boolean filled) { + + requiredFields.put(fieldId, filled); + checkSaveButtonEnabled(); + } + + /** + * Checks if Color is changed + * + * @param fieldId + * Id of the current component + * @param newColor + * new Color + * @param oldColor + * old Color + */ + public void checkColorChange(final String fieldId, final Color newColor, final Color oldColor) { + editedFields.put(fieldId, !newColor.equals(oldColor)); + checkSaveButtonEnabled(); + } + + /** + * Updates the map of fields which can be edited. + * + * @param fieldId + * Id of the current component + * @param hasTextValueChanged + * Boolean if value has changed + */ + public void updateEditedFields(final String fieldId, final Boolean hasTextValueChanged) { + editedFields.put(fieldId, hasTextValueChanged); + checkSaveButtonEnabled(); + } + + /** + * Resets the map of mandatory and edited Fields and disable the save button + */ + public void reset() { + saveButton.setEnabled(false); + resetFields(); + } + + private void setRequiredFieldChangeValue(final AbstractComponent component, final boolean isTextChangeNotEmpty) { + requiredFields.put(component.getId(), isTextChangeNotEmpty); } /** @@ -146,69 +259,23 @@ public class CommonDialogWindow extends Window implements Serializable { * mandatory fields are filled the save button is enabled. Otherwise the * save button is disabled. */ - private void checkMandatoryFieldsFilled() { + private void checkSaveButtonEnabled() { + saveButton.setEnabled(!requiredFields.containsValue(Boolean.FALSE) && editedFields.containsValue(Boolean.TRUE)); + } + private void checkChanges(final String fieldName, final String newText, final String oldText) { + final boolean hasTextValueChanged = (StringUtils.isNotBlank(newText) && !newText.equals(oldText)) + || (StringUtils.isNotBlank(oldText) && !oldText.equals(newText)); + editedFields.put(fieldName, hasTextValueChanged); + } + + private void resetFields() { for (final Map.Entry entry : requiredFields.entrySet()) { - if (entry.getValue() == null || entry.getValue().equals(Boolean.FALSE)) { - saveButton.setEnabled(false); - return; - } + entry.setValue(Boolean.FALSE); } - saveButton.setEnabled(true); - } - private void checkExistsChanges() { - - if (editedFields == null) { - return; - } for (final Map.Entry entry : editedFields.entrySet()) { - if (entry.getValue() != null && entry.getValue().equals(Boolean.TRUE)) { - saveButton.setEnabled(true); - return; - } - } - saveButton.setEnabled(false); - } - - public void updateRequiredFields(final String fieldId, final Boolean filled) { - - requiredFields.put(fieldId, filled); - checkMandatoryFieldsFilled(); - } - - public void checkChanges(final String fieldName, final String newText, final String oldText) { - - if ((StringUtils.isNotBlank(newText) && !newText.equals(oldText)) - || (StringUtils.isNotBlank(oldText) && !oldText.equals(newText))) { - editedFields.put(fieldName, Boolean.TRUE); - } else { - editedFields.put(fieldName, Boolean.FALSE); - } - checkExistsChanges(); - } - - public void checkColorChange(final String fieldName, final Color newColor, final Color oldColor) { - - if (newColor.equals(oldColor)) { - editedFields.put(fieldName, Boolean.FALSE); - } else { - editedFields.put(fieldName, Boolean.TRUE); - } - checkExistsChanges(); - } - - public void resetMandatoryAndEditedFields() { - resetFields(requiredFields); - resetFields(editedFields); - } - - private void resetFields(final Map fields) { - // Reset mandatory fields are filled marker / fields are edited marker - if (fields != null) { - for (final Map.Entry entry : fields.entrySet()) { - entry.setValue(null); - } + entry.setValue(Boolean.FALSE); } } @@ -258,20 +325,22 @@ public class CommonDialogWindow extends Window implements Serializable { private void createMandatoryLabel() { - if (existsMandatoryFieldsInWindowContent()) { - final Label mandatoryLabel = new Label(i18n.get("label.mandatory.field")); - mandatoryLabel.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_TINY); - - if (content instanceof TargetAddUpdateWindowLayout) { - ((TargetAddUpdateWindowLayout) content).getFormLayout().addComponent(mandatoryLabel); - } else if (content instanceof SoftwareModuleAddUpdateWindow) { - ((SoftwareModuleAddUpdateWindow) content).getFormLayout().addComponent(mandatoryLabel); - } else if (content instanceof AbstractCreateUpdateTagLayout) { - ((AbstractCreateUpdateTagLayout) content).getMainLayout().addComponent(mandatoryLabel); - } - - mainLayout.addComponent(mandatoryLabel); + if (!existsMandatoryFieldsInWindowContent()) { + return; } + + final Label mandatoryLabel = new Label(i18n.get("label.mandatory.field")); + mandatoryLabel.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_TINY); + + if (content instanceof TargetAddUpdateWindowLayout) { + ((TargetAddUpdateWindowLayout) content).getFormLayout().addComponent(mandatoryLabel); + } else if (content instanceof SoftwareModuleAddUpdateWindow) { + ((SoftwareModuleAddUpdateWindow) content).getFormLayout().addComponent(mandatoryLabel); + } else if (content instanceof AbstractCreateUpdateTagLayout) { + ((AbstractCreateUpdateTagLayout) content).getMainLayout().addComponent(mandatoryLabel); + } + + mainLayout.addComponent(mandatoryLabel); } private void createCancelButton() { @@ -292,18 +361,14 @@ public class CommonDialogWindow extends Window implements Serializable { saveButton.setSizeUndefined(); saveButton.addStyleName("default-color"); saveButton.addClickListener(saveButtonClickListener); - saveButton.setEnabled(!existsMandatoryFieldsInWindowContent()); + saveButton.setEnabled(false); buttonsLayout.addComponent(saveButton); buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); buttonsLayout.setExpandRatio(saveButton, 1.0F); } private boolean existsMandatoryFieldsInWindowContent() { - - if (requiredFields != null && requiredFields.size() > 0) { - return true; - } - return false; + return !requiredFields.isEmpty(); } private void addHelpLink() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 303ca1bb2..9c6486200 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -14,7 +14,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -41,7 +40,6 @@ import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; import com.vaadin.data.Item; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.util.IndexedContainer; -import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -93,6 +91,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout private IndexedContainer originalSelectedTableContainer; + private String originalTypeKey; + @Override protected void createRequiredComponents() { @@ -102,13 +102,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_NAME, true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); tagName.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_NAME); - tagName.addTextChangeListener(this::listenerTagNameTextFieldChanged); + tagName.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagName())); + tagName.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, tagName)); typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_KEY, true, "", i18n.get("textfield.key"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeKey.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_KEY); - typeKey.addTextChangeListener(this::listenerTypeKeyTextFieldChanged); + typeKey.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTypeKey)); + typeKey.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, typeKey)); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_DESC, false, "", @@ -116,16 +118,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout tagDesc.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); - tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged); - } - - private void listenerTagNameTextFieldChanged(final TextChangeEvent event) { - - window.checkMandatoryTextField(event, tagName); - } - - private void listenerTypeKeyTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, typeKey); + tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagDesc())); } @Override @@ -279,14 +272,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout for (final Long id : selectedIds) { addTargetTableData(id); } - if (optiongroup.getValue().equals(updateTypeStr)) { - updateMandatoryFields(); - window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); - } else { - if (!selectedTableContainer.getItemIds().isEmpty()) { - window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE); - } - } + window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); } } @@ -298,19 +284,20 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout for (final Long id : selectedIds) { addSourceTableData(id); selectedTable.removeItem(id); - if (optiongroup.getValue().equals(updateTypeStr)) { - updateMandatoryFields(); - window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); - } + window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); } } } private Boolean hasContentChanged() { + if (originalSelectedTableContainer == null) { + originalSelectedTableContainer = new IndexedContainer(); + } for (final Iterator itemIterator = selectedTableContainer.getItemIds().iterator(); itemIterator.hasNext();) { final long itemId = (Long) itemIterator.next(); if (!originalSelectedTableContainer.containsId(itemId)) { + window.updateEditedFields(selectedTable.getId(), Boolean.TRUE); return Boolean.TRUE; } } @@ -319,23 +306,17 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout .hasNext();) { final long itemId = (Long) itemIterator.next(); if (selectedTableContainer.size() > 0 && !selectedTableContainer.containsId(itemId)) { + window.updateEditedFields(selectedTable.getId(), Boolean.TRUE); return Boolean.TRUE; } } + if (selectedTableContainer.size() > 0) { + window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE); + } return Boolean.FALSE; } - private void updateMandatoryFields() { - - if (StringUtils.isNotBlank(tagName.getValue())) { - window.getRequiredFields().put("Name", Boolean.TRUE); - } - if (StringUtils.isNotBlank(typeKey.getValue())) { - window.getRequiredFields().put("Key", Boolean.TRUE); - } - } - @SuppressWarnings("unchecked") private void getSourceTableData() { @@ -543,6 +524,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout super.optionValueChanged(event); if (updateTypeStr.equals(event.getProperty().getValue())) { + window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE); selectedTable.getContainerDataSource().removeAllItems(); getSourceTableData(); distTypeSelectLayout.setEnabled(false); @@ -600,14 +582,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout protected void setTagDetails(final String distSetTypeSelected) { tagName.setValue(distSetTypeSelected); + setOriginalTagName(distSetTypeSelected); getSourceTableData(); selectedTable.getContainerDataSource().removeAllItems(); final DistributionSetType selectedTypeTag = fetchDistributionSetType(distSetTypeSelected); if (null != selectedTypeTag) { tagDesc.setValue(selectedTypeTag.getDescription()); - setTagDescOriginal(selectedTypeTag.getDescription()); + setOriginalTagDesc(selectedTypeTag.getDescription()); typeKey.setValue(selectedTypeTag.getKey()); - setTypeKeyOriginal(selectedTypeTag.getKey()); + setOriginalTypeKey(selectedTypeTag.getKey()); if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) { distTypeSelectLayout.setEnabled(true); selectedTable.setEnabled(true); @@ -669,7 +652,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } else { updateDistributionSetType(existingDistTypeByKey); } - window.setSaveButtonEnabled(false); } } @@ -687,14 +669,24 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout while (iterate.hasNext()) { final Component c = iterate.next(); if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getCaption(), null); + requiredFields.put(c.getId(), Boolean.FALSE); } } // Selected SoftwareModulesType - requiredFields.put(selectedTable.getId(), null); + requiredFields.put(selectedTable.getId(), Boolean.FALSE); return requiredFields; } + @Override + protected Map getEditedFields() { + final Map changeMap = new HashMap<>(); + changeMap.put(tagName.getId(), Boolean.FALSE); + changeMap.put(colorPickerLayout.getId(), Boolean.FALSE); + changeMap.put(tagDesc.getId(), Boolean.FALSE); + changeMap.put(selectedTable.getId(), Boolean.FALSE); + return changeMap; + } + @Override protected void previewButtonClicked() { if (!tagPreviewBtnClicked) { @@ -729,4 +721,14 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); } + @Override + public String getOriginalTypeKey() { + return originalTypeKey; + } + + @Override + public void setOriginalTypeKey(final String originalTypeKey) { + this.originalTypeKey = originalTypeKey; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index 195d173ed..6beb7d5b7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -36,7 +36,6 @@ import org.vaadin.spring.events.EventBus; import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; -import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.server.Page; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.ui.AbstractField; @@ -110,8 +109,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected String tagNameValue; protected String tagDescValue; - protected Color selectedColorOriginal; - private String tagDescOriginal; + private Color originalSelectedColor; + private String originalTagDesc; + private String originalTagName; protected void createWindow() { reset(); @@ -126,7 +126,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent while (iterate.hasNext()) { final Component c = iterate.next(); if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getCaption(), null); + requiredFields.put(c.getId(), null); } } return requiredFields; @@ -134,8 +134,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected Map getEditedFields() { final Map changeMap = new HashMap<>(); - changeMap.put(tagDesc.getCaption(), Boolean.FALSE); + changeMap.put(tagName.getId(), Boolean.FALSE); changeMap.put(colorPickerLayout.getId(), Boolean.FALSE); + changeMap.put(tagDesc.getId(), Boolean.FALSE); return changeMap; } @@ -192,7 +193,8 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_NAME, true, "", i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); tagName.setId(SPUIDefinitions.NEW_TARGET_TAG_NAME); - tagName.addTextChangeListener(this::listenerTagNameTextFieldChanged); + tagName.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTagName)); + tagName.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, tagName)); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, false, "", i18n.get("textfield.description"), @@ -200,7 +202,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent tagDesc.setId(SPUIDefinitions.NEW_TARGET_TAG_DESC); tagDesc.setImmediate(true); tagDesc.setNullRepresentation(""); - tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged); + tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTagDesc)); tagNameComboBox = SPUIComponentProvider.getComboBox(null, "", "", null, null, false, "", i18n.get("label.combobox.tag")); @@ -214,16 +216,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); } - private void listenerTagNameTextFieldChanged(final TextChangeEvent event) { - - window.checkMandatoryTextField(event, tagName); - } - - protected void listenerTagDescTextAreaChanged(final TextChangeEvent event) { - - window.checkChanges(tagDesc.getCaption(), event.getText(), tagDescOriginal); - } - protected void buildLayout() { mainLayout = new GridLayout(3, 2); @@ -352,7 +344,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(tagNameComboBox); } - window.setSaveButtonEnabled(false); + window.reset(); // close the color picker layout tagPreviewBtnClicked = false; // reset the selected color - Set default color @@ -383,7 +375,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent tagPreviewBtnClicked = false; if (window != null) { - window.resetMandatoryAndEditedFields(); + window.reset(); } } @@ -474,13 +466,12 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor()); } - window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), selectedColorOriginal); + window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), originalSelectedColor); } protected void closeWindow() { window.close(); UI.getCurrent().removeWindow(window); - window.setSaveButtonEnabled(false); } /** @@ -687,23 +678,39 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent } public Color getSelectedColorOriginal() { - return selectedColorOriginal; + return originalSelectedColor; } public void setSelectedColorOriginal(final Color selectedColorOriginal) { - this.selectedColorOriginal = selectedColorOriginal; - } - - public String getTagDescOriginal() { - return tagDescOriginal; - } - - public void setTagDescOriginal(final String tagDescOriginal) { - this.tagDescOriginal = tagDescOriginal; + this.originalSelectedColor = selectedColorOriginal; } public GridLayout getMainLayout() { return mainLayout; } + public Color getOriginalSelectedColor() { + return originalSelectedColor; + } + + public void setOriginalSelectedColor(final Color originalSelectedColor) { + this.originalSelectedColor = originalSelectedColor; + } + + public String getOriginalTagDesc() { + return originalTagDesc; + } + + public void setOriginalTagDesc(final String originalTagDesc) { + this.originalTagDesc = originalTagDesc; + } + + public String getOriginalTagName() { + return originalTagName; + } + + public void setOriginalTagName(final String originalTagName) { + this.originalTagName = originalTagName; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index ea77d885b..556347e4f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -33,10 +33,8 @@ import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; /** - * * Superclass defining common properties and methods for creating/updating * types. - * */ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { @@ -45,7 +43,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { protected String createTypeStr; protected String updateTypeStr; protected TextField typeKey; - protected String typeKeyOriginal; + protected String originalTypeKey; public static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; @@ -152,14 +150,13 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { } else { typeKey.setEnabled(true); tagName.setEnabled(true); - window.setSaveButtonEnabled(true); tagName.clear(); tagDesc.clear(); typeKey.clear(); comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(tagNameComboBox); } - window.setSaveButtonEnabled(false); + window.reset(); restoreComponentStyles(); getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); getColorPickerLayout().getSelPreview() @@ -186,7 +183,8 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor()); } - window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), selectedColorOriginal); + window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), + getOriginalSelectedColor()); } /** @@ -324,22 +322,12 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { // is implemented in the inherited class } - @Override - public Color getSelectedColorOriginal() { - return selectedColorOriginal; + public String getOriginalTypeKey() { + return originalTypeKey; } - @Override - public void setSelectedColorOriginal(final Color selectedColorOriginal) { - this.selectedColorOriginal = selectedColorOriginal; - } - - public String getTypeKeyOriginal() { - return typeKeyOriginal; - } - - public void setTypeKeyOriginal(final String typeKeyOriginal) { - this.typeKeyOriginal = typeKeyOriginal; + public void setOriginalTypeKey(final String originalTypeKey) { + this.originalTypeKey = originalTypeKey; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 03dce184c..90dd8a6a6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -8,10 +8,8 @@ */ package org.eclipse.hawkbit.ui.management.dstable; -import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; -import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; @@ -44,10 +42,6 @@ import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; import org.vaadin.spring.events.EventBus; -import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.data.Property.ValueChangeListener; -import com.vaadin.event.FieldEvents.TextChangeEvent; -import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.AbstractField; @@ -62,8 +56,7 @@ import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; /** - * - * + * WindowContent for adding/editing a Distribution */ @SpringComponent @ViewScope @@ -104,12 +97,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { private String originalDistDescription; private Boolean originalReqMigStep; private String originalDistSetType; - private final List changedComponents = new ArrayList<>(); - private ValueChangeListener reqMigStepCheckboxListerner; - private TextChangeListener descTextAreaListener; - private TextChangeListener distNameTextFieldListener; - private TextChangeListener distVersionTextFieldListener; - private ValueChangeListener distsetTypeNameComboBoxListener; private FormLayout formLayout; @@ -139,7 +126,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { formLayout.addComponent(reqMigStepCheckbox); setCompositionRoot(formLayout); - distNameTextField.focus(); } @@ -151,43 +137,42 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); distNameTextField.setId(SPUIComponentIdProvider.DIST_ADD_NAME); distNameTextField.setNullRepresentation(""); - distNameTextField.addTextChangeListener(this::listenerDistNameTextFieldChanged); + distNameTextField.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDistName)); + distNameTextField.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, distNameTextField)); distVersionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); distVersionTextField.setId(SPUIComponentIdProvider.DIST_ADD_VERSION); distVersionTextField.setNullRepresentation(""); - distVersionTextField.addTextChangeListener(this::listenerDistVersionTextFieldChanged); + distVersionTextField + .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDistVersion)); + distVersionTextField + .addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, distVersionTextField)); distsetTypeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, "", false, "", i18n.get("label.combobox.type")); distsetTypeNameComboBox.setImmediate(true); distsetTypeNameComboBox.setNullSelectionAllowed(false); distsetTypeNameComboBox.setId(SPUIComponentIdProvider.DIST_ADD_DISTSETTYPE); + populateDistSetTypeNameCombo(); + distsetTypeNameComboBox.addValueChangeListener( + event -> window.checkMandatoryEditedValue(event, distsetTypeNameComboBox, originalDistSetType)); descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descTextArea.setId(SPUIComponentIdProvider.DIST_ADD_DESC); descTextArea.setNullRepresentation(""); + descTextArea + .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDistDescription)); reqMigStepCheckbox = SPUIComponentProvider.getCheckBox(i18n.get("checkbox.dist.required.migration.step"), "dist-checkbox-style", null, false, ""); reqMigStepCheckbox.addStyleName(ValoTheme.CHECKBOX_SMALL); reqMigStepCheckbox.setId(SPUIComponentIdProvider.DIST_ADD_MIGRATION_CHECK); - } - - private void listenerDistNameTextFieldChanged(final TextChangeEvent event) { - if (!editDistribution) { - window.checkMandatoryTextField(event, distNameTextField); - } - } - - private void listenerDistVersionTextFieldChanged(final TextChangeEvent event) { - if (!editDistribution) { - window.checkMandatoryTextField(event, distVersionTextField); - } + reqMigStepCheckbox.addValueChangeListener( + event -> window.checkMandatoryEditedValueBoolean(event, reqMigStepCheckbox, originalReqMigStep)); } /** @@ -209,26 +194,17 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { return disttypeContainer; } - private void enableSaveButton() { - window.setSaveButtonEnabled(true); - } - private DistributionSetType getDefaultDistributionSetType() { final TenantMetaData tenantMetaData = systemManagement.getTenantMetadata(); return tenantMetaData.getDefaultDsType(); } - private void disableSaveButton() { - window.setSaveButtonEnabled(false); - } - private void saveDistribution() { if (editDistribution) { updateDistribution(); } else { addNewDistribution(); } - window.setSaveButtonEnabled(false); } /** @@ -262,19 +238,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { } } - private void addListeners() { - reqMigStepCheckboxListerner = event -> checkValueChanged(originalReqMigStep, event); - descTextAreaListener = event -> checkValueChanged(originalDistDescription, event); - distNameTextFieldListener = event -> checkValueChanged(originalDistName, event); - distVersionTextFieldListener = event -> checkValueChanged(originalDistVersion, event); - distsetTypeNameComboBoxListener = event -> checkValueChanged(originalDistSetType, event); - reqMigStepCheckbox.addValueChangeListener(reqMigStepCheckboxListerner); - descTextArea.addTextChangeListener(descTextAreaListener); - distNameTextField.addTextChangeListener(distNameTextFieldListener); - distVersionTextField.addTextChangeListener(distVersionTextFieldListener); - distsetTypeNameComboBox.addValueChangeListener(distsetTypeNameComboBoxListener); - } - /** * Add new Distribution set. */ @@ -308,7 +271,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { private void closeThisWindow() { window.close(); UI.getCurrent().removeWindow(window); - window.setSaveButtonEnabled(false); } /** @@ -381,7 +343,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { if (distSetTypeName == null) { distsetTypeNameComboBox.addStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR); } - notificationMessage.displayValidationError(i18n.get("message.mandatory.check")); return false; } @@ -391,7 +352,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { private void discardDistribution() { /* Just close this window */ - distsetTypeNameComboBox.removeValueChangeListener(distsetTypeNameComboBoxListener); closeThisWindow(); } @@ -407,14 +367,15 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { distsetTypeNameComboBox.removeStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR); descTextArea.clear(); reqMigStepCheckbox.clear(); - if (window != null) { - window.setSaveButtonEnabled(true); - } - removeListeners(); - changedComponents.clear(); + + originalDistDescription = null; + originalDistName = null; + originalDistSetType = null; + originalDistVersion = null; + originalReqMigStep = Boolean.FALSE; if (window != null) { - window.resetMandatoryAndEditedFields(); + window.reset(); } } @@ -422,71 +383,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { populateDistSetTypeNameCombo(); } - private void removeListeners() { - reqMigStepCheckbox.removeValueChangeListener(reqMigStepCheckboxListerner); - descTextArea.removeTextChangeListener(descTextAreaListener); - distNameTextField.removeTextChangeListener(distNameTextFieldListener); - distVersionTextField.removeTextChangeListener(distVersionTextFieldListener); - } - - public void setOriginalDistName(final String originalDistName) { - this.originalDistName = originalDistName; - } - - public void setOriginalDistVersion(final String originalDistVersion) { - this.originalDistVersion = originalDistVersion; - } - - public void setOriginalDistDescription(final String originalDistDescription) { - this.originalDistDescription = originalDistDescription; - } - - private void checkValueChanged(final String originalValue, final TextChangeEvent event) { - if (editDistribution) { - final String newValue = event.getText(); - if (!originalValue.equalsIgnoreCase(newValue)) { - changedComponents.add(event.getComponent()); - } else { - changedComponents.remove(event.getComponent()); - } - enableDisableSaveButton(); - } - } - - private void checkValueChanged(final Boolean originalValue, final ValueChangeEvent event) { - if (editDistribution) { - if (!originalValue.equals(event.getProperty().getValue())) { - changedComponents.add(reqMigStepCheckbox); - } else { - changedComponents.remove(reqMigStepCheckbox); - } - enableDisableSaveButton(); - } - } - - private void checkValueChanged(final String originalValue, final ValueChangeEvent event) { - if (editDistribution) { - if (!originalValue.equals(event.getProperty().getValue())) { - changedComponents.add(distsetTypeNameComboBox); - } else { - changedComponents.remove(distsetTypeNameComboBox); - } - enableDisableSaveButton(); - } - } - - private void enableDisableSaveButton() { - if (changedComponents.isEmpty()) { - disableSaveButton(); - } else { - enableSaveButton(); - } - } - - private void setOriginalReqMigStep(final Boolean originalReqMigStep) { - this.originalReqMigStep = originalReqMigStep; - } - /** * populate data. * @@ -495,7 +391,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { public void populateValuesOfDistribution(final Long editDistId) { this.editDistId = editDistId; editDistribution = Boolean.TRUE; - window.setSaveButtonEnabled(false); final DistributionSet distSet = distributionSetManagement.findDistributionSetByIdWithDetails(editDistId); if (distSet != null) { distNameTextField.setValue(distSet.getName()); @@ -508,23 +403,24 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { if (distSet.getDescription() != null) { descTextArea.setValue(distSet.getDescription()); } - setOriginalDistName(distSet.getName()); - setOriginalDistVersion(distSet.getVersion()); - setOriginalDistDescription(distSet.getDescription()); - setOriginalReqMigStep(distSet.isRequiredMigrationStep()); - setOriginalDistSetTYpe(distSet.getType().getName()); - addListeners(); + originalDistName = distSet.getName(); + originalDistVersion = distSet.getVersion(); + originalDistDescription = distSet.getDescription(); + originalReqMigStep = distSet.isRequiredMigrationStep(); + originalDistSetType = distSet.getType().getName(); + window.updateEditedFields(distsetTypeNameComboBox.getId(), Boolean.FALSE); + window.updateEditedFields(reqMigStepCheckbox.getId(), Boolean.FALSE); } } public CommonDialogWindow getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - populateRequiredComponents(); - resetComponents(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), - null, getMandatoryFields(), null, i18n); + null, getMandatoryFields(), getEditedFields(), i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); + populateRequiredComponents(); + resetComponents(); return window; } @@ -534,12 +430,22 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { while (iterate.hasNext()) { final Component c = iterate.next(); if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getCaption(), null); + requiredFields.put(c.getId(), Boolean.FALSE); } } return requiredFields; } + private Map getEditedFields() { + final Map editedFields = new HashMap<>(); + editedFields.put(distsetTypeNameComboBox.getId(), Boolean.FALSE); + editedFields.put(distNameTextField.getId(), Boolean.FALSE); + editedFields.put(distVersionTextField.getId(), Boolean.FALSE); + editedFields.put(descTextArea.getId(), Boolean.FALSE); + editedFields.put(reqMigStepCheckbox.getId(), Boolean.FALSE); + return editedFields; + } + /** * Populate DistributionSet Type name combo. */ @@ -549,12 +455,4 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { distsetTypeNameComboBox.setValue(getDefaultDistributionSetType().getName()); } - /** - * @param originalDistSetTYpe - * the originalDistSetTYpe to set - */ - public void setOriginalDistSetTYpe(final String originalDistSetType) { - this.originalDistSetType = originalDistSetType; - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 3bee67345..0bcee9d09 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -32,9 +32,7 @@ import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.UI; /** - * * Class for Create/Update Tag Layout of distribution set - * */ @SpringComponent @ViewScope @@ -98,7 +96,6 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat updateExistingTag(existingDistTag); } } - window.setSaveButtonEnabled(false); } /** @@ -157,10 +154,11 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat @Override public void setTagDetails(final String distTagSelected) { tagName.setValue(distTagSelected); + setOriginalTagName(distTagSelected); final DistributionSetTag selectedDistTag = tagManagement.findDistributionSetTag(distTagSelected); if (null != selectedDistTag) { tagDesc.setValue(selectedDistTag.getDescription()); - setTagDescOriginal(selectedDistTag.getDescription()); + setOriginalTagDesc(selectedDistTag.getDescription()); if (null == selectedDistTag.getColour()) { setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); setSelectedColorOriginal(getColorPickerLayout().getDefaultColor()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 07360ed70..6c2193adb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -14,7 +14,6 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; -import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.Target; @@ -35,15 +34,12 @@ import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; -import com.vaadin.event.FieldEvents.TextChangeEvent; -import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.VaadinSessionScope; import com.vaadin.ui.AbstractField; import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; -import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; @@ -57,7 +53,7 @@ import com.vaadin.ui.themes.ValoTheme; @VaadinSessionScope public class TargetAddUpdateWindowLayout extends CustomComponent { private static final long serialVersionUID = -6659290471705262389L; - + @Autowired private I18N i18n; @@ -69,10 +65,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { @Autowired private transient UINotification uINotification; - + @Autowired private transient EntityFactory entityFactory; - + private TextField controllerIDTextField; private TextField nameTextField; private TextArea descTextArea; @@ -81,47 +77,47 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private FormLayout formLayout; private CommonDialogWindow window; - private String oldTargetName; - private String oldTargetDesc; - + private String originalTargetName; + private String originalTargetDesc; + private String originalControllerId; + /** * Initialize the Add Update Window Component for Target. */ public void init() { - /* create components */ createRequiredComponents(); - /* display components in layout */ buildLayout(); - /* register all listeners related to the Window */ - addListeners(); setCompositionRoot(formLayout); } private void createRequiredComponents() { /* Textfield for controller Id */ - controllerIDTextField = SPUIComponentProvider.getTextField( i18n.get("prompt.target.id"), "", ValoTheme.TEXTFIELD_TINY, true, null, - i18n.get("prompt.target.id"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + controllerIDTextField = SPUIComponentProvider.getTextField(i18n.get("prompt.target.id"), "", + ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.target.id"), true, + SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); controllerIDTextField.setId(SPUIComponentIdProvider.TARGET_ADD_CONTROLLER_ID); - controllerIDTextField.addTextChangeListener(this::listenerControllerIDTextFieldChanged); + controllerIDTextField + .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalControllerId)); + controllerIDTextField + .addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, controllerIDTextField)); /* Textfield for target name */ - nameTextField = SPUIComponentProvider.getTextField( i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, false, null, - i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); + nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, + false, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); nameTextField.setId(SPUIComponentIdProvider.TARGET_ADD_NAME); + nameTextField.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTargetName)); /* Textarea for target description */ - descTextArea = SPUIComponentProvider.getTextArea( i18n.get("textfield.description"), "text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, - i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); + descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", + ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"), + SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descTextArea.setId(SPUIComponentIdProvider.TARGET_ADD_DESC); descTextArea.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); - } - - private void listenerControllerIDTextFieldChanged(final TextChangeEvent event) { - window.checkMandatoryTextField(event, controllerIDTextField); + descTextArea.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTargetDesc)); } private void buildLayout() { - + /* * The main layout of the window contains mandatory info, textboxes * (controller Id, name & description) and action buttons layout @@ -131,56 +127,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { formLayout.addComponent(controllerIDTextField); formLayout.addComponent(nameTextField); formLayout.addComponent(descTextArea); - + controllerIDTextField.focus(); } - private void addListeners() { - - addTargetNameChangeListner(); - addTargetDescChangeListner(); - } - - private void addTargetNameChangeListner() { - nameTextField.addTextChangeListener(new TextChangeListener() { - - /** - * - */ - private static final long serialVersionUID = 1761855781481115921L; - - @Override - public void textChange(final TextChangeEvent event) { - if (event.getText().equals(oldTargetName) && descTextArea.getValue().equals(oldTargetDesc)) { - window.setSaveButtonEnabled(false); - } else { - window.setSaveButtonEnabled(true); - } - - } - }); - } - - private void addTargetDescChangeListner() { - descTextArea.addTextChangeListener(new TextChangeListener() { - - /** - * - */ - private static final long serialVersionUID = 5770734934988115068L; - - @Override - public void textChange(final TextChangeEvent event) { - if (event.getText().equals(oldTargetDesc) && nameTextField.getValue().equals(oldTargetName)) { - window.setSaveButtonEnabled(false); - } else { - window.setSaveButtonEnabled(true); - } - - } - }); - } - /** * Update the Target if modified. */ @@ -210,7 +160,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { } else { addNewTarget(); } - window.setSaveButtonEnabled(false); } private void discardTargetListner() { @@ -244,37 +193,49 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, getMandatoryFields(), null, i18n); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), + event -> discardTargetListner(), null, getMandatoryFields(), getEditedFields(), i18n); return window; } - + private Map getMandatoryFields() { final Map requiredFields = new HashMap<>(); final Iterator iterate = formLayout.iterator(); while (iterate.hasNext()) { final Component c = iterate.next(); if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getCaption(), null); + requiredFields.put(c.getId(), Boolean.FALSE); } } return requiredFields; } - + + private Map getEditedFields() { + final Map editedFields = new HashMap<>(); + editedFields.put(controllerIDTextField.getId(), Boolean.FALSE); + editedFields.put(nameTextField.getId(), Boolean.FALSE); + editedFields.put(descTextArea.getId(), Boolean.FALSE); + return editedFields; + } + /** * clear all fields of Target Edit Window. */ public void resetComponents() { nameTextField.clear(); nameTextField.removeStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); - controllerIDTextField.setEnabled(true); - controllerIDTextField.setReadOnly(false); + controllerIDTextField.setEnabled(Boolean.TRUE); controllerIDTextField.removeStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); controllerIDTextField.clear(); descTextArea.clear(); editTarget = Boolean.FALSE; + originalControllerId = null; + originalTargetDesc = null; + originalTargetName = null; + if (window != null) { - window.resetMandatoryAndEditedFields(); + window.reset(); } } @@ -282,7 +243,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { editTarget = Boolean.FALSE; window.close(); UI.getCurrent().removeWindow(window); - window.setSaveButtonEnabled(false); } private void setTargetValues(final Target target, final String name, final String description) { @@ -303,7 +263,8 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private boolean duplicateCheck(final String newControlllerId) { final Target existingTarget = targetManagement.findTargetByControllerID(newControlllerId.trim()); if (existingTarget != null) { - uINotification.displayValidationError(i18n.get("message.target.duplicate.check", new Object[] {newControlllerId})); + uINotification.displayValidationError( + i18n.get("message.target.duplicate.check", new Object[] { newControlllerId })); return false; } else { return true; @@ -319,15 +280,15 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { editTarget = Boolean.TRUE; final Target target = targetManagement.findTargetByControllerID(controllerId); controllerIDTextField.setValue(target.getControllerId()); - controllerIDTextField.setReadOnly(Boolean.TRUE); + controllerIDTextField.setEnabled(Boolean.FALSE); nameTextField.setValue(target.getName()); if (target.getDescription() != null) { descTextArea.setValue(target.getDescription()); } - window.setSaveButtonEnabled(Boolean.FALSE); - oldTargetDesc = descTextArea.getValue(); - oldTargetName = nameTextField.getValue(); + originalTargetDesc = descTextArea.getValue(); + originalTargetName = nameTextField.getValue(); + originalControllerId = controllerIDTextField.getValue(); window.addStyleName("target-update-window"); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java index 81c0c72ae..781e13ef6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java @@ -88,10 +88,11 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa @Override public void setTagDetails(final String targetTagSelected) { tagName.setValue(targetTagSelected); + setOriginalTagName(targetTagSelected); final TargetTag selectedTargetTag = tagManagement.findTargetTag(targetTagSelected); if (null != selectedTargetTag) { tagDesc.setValue(selectedTargetTag.getDescription()); - setTagDescOriginal(selectedTargetTag.getDescription()); + setOriginalTagDesc(selectedTargetTag.getDescription()); if (null == selectedTargetTag.getColour()) { setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); setSelectedColorOriginal(getColorPickerLayout().getDefaultColor()); @@ -115,7 +116,6 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa updateExistingTag(existingTag); } } - window.setSaveButtonEnabled(false); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index c1efa9f4b..18e06814a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -75,9 +75,7 @@ import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; /** - * * Rollout add or update popup layout. - * */ @SpringComponent @ViewScope @@ -150,19 +148,21 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private TextArea targetFilterQuery; - private Boolean updateMode = Boolean.FALSE; + private String originalDistributionSet; - private String distributionSetOriginal; + private Object originalActionGroup; - private Object actionGroupOriginal; + private String originalRolloutName; - private String rolloutNameOriginal; + private String originalErrorThreshold; - private String errorThresholdOriginal;; + private String originalTriggerThreshold; - private String triggerThresholdOriginal; + private String originalDescription; - private String descriptionOriginal; + private String originalTargetFilterQueryCombo; + + private String originalNoOfGroups; /** * Create components and layout. @@ -174,6 +174,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } public CommonDialogWindow getWindow() { + window = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields(), getEditedFields(), @@ -181,25 +182,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { return window; } - public CommonDialogWindow createUpdateWindow() { - updateMode = Boolean.TRUE; - return getWindow(); - } - - public CommonDialogWindow createAddWindow() { - updateMode = Boolean.FALSE; - return getWindow(); - } - private Map getMandatoryFields() { final Map requiredFields = new HashMap<>(); - requiredFields.put(rolloutName.getId(), null); - requiredFields.put(distributionSet.getId(), null); - requiredFields.put(targetFilterQueryCombo.getId(), null); - requiredFields.put(noOfGroups.getId(), null); - requiredFields.put(triggerThreshold.getId(), null); - requiredFields.put(errorThreshold.getId(), null); - + requiredFields.put(rolloutName.getId(), Boolean.FALSE); + requiredFields.put(distributionSet.getId(), Boolean.FALSE); + requiredFields.put(targetFilterQueryCombo.getId(), Boolean.FALSE); + requiredFields.put(noOfGroups.getId(), Boolean.FALSE); + requiredFields.put(triggerThreshold.getId(), Boolean.FALSE); + requiredFields.put(errorThreshold.getId(), Boolean.FALSE); return requiredFields; } @@ -224,7 +214,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { rolloutForEdit = null; if (window != null) { - window.resetMandatoryAndEditedFields(); + window.reset(); } } @@ -319,13 +309,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private void listenerActionGroupValueChanged(final ValueChangeEvent event) { if (window != null) { - if (!updateMode) { - window.checkMandatoryComboBox(event, actionTypeOptionGroupLayout.getActionTypeOptionGroup()); - } - if (event.getProperty().getValue() != null) { - window.checkChanges(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(), - event.getProperty().getValue().toString(), actionGroupOriginal.toString()); - } + window.checkMandatoryEditedValue(event, actionTypeOptionGroupLayout.getActionTypeOptionGroup(), + originalActionGroup.toString()); } } @@ -346,9 +331,16 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { filterField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); filterField.setEnabled(false); filterField.setSizeUndefined(); + filterField.addValueChangeListener(event -> listenerFilterFieldValueChanged(event, filterField)); return filterField; } + private void listenerFilterFieldValueChanged(final ValueChangeEvent event, final TextArea filterField) { + if (window != null) { + window.setRequiredFieldWhenUpdate(event, targetFilterQueryCombo); + } + } + private Label createTotalTargetsLabel() { final Label targetCountLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); targetCountLabel.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); @@ -404,9 +396,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { totalTargetsCount = 0L; totalTargetsLabel.setVisible(false); } - onGroupNumberChange(); - - window.checkMandatoryComboBox(event, targetFilterQueryCombo); + onGroupNumberChange(event); + window.setRequiredFieldWhenUpdate(event, targetFilterQueryCombo); + window.checkMandatoryEditedValue(event, targetFilterQueryCombo, originalTargetFilterQueryCombo); } private String getTotalTargetMessage() { @@ -618,11 +610,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private void listenerDescriptionTextFieldChanged(final TextChangeEvent event) { if (window != null) { - if (!updateMode) { - window.checkMandatoryTextField(event, description); - return; - } - window.checkChanges(description.getId(), event.getText(), descriptionOriginal); + window.checkMandatoryEditedTextField(event, originalDescription); } } @@ -633,16 +621,19 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { errorField.setMaxLength(7); errorField.setSizeUndefined(); errorField.addTextChangeListener(this::listenerErrorThresholdTextFieldChanged); + errorField.addValueChangeListener(event -> listenerErrorThresholdValueChanged(event, errorField)); return errorField; } private void listenerErrorThresholdTextFieldChanged(final TextChangeEvent event) { if (window != null) { - if (!updateMode) { - window.checkMandatoryTextField(event, errorThreshold); - return; - } - window.checkChanges(errorThreshold.getId(), event.getText(), errorThresholdOriginal); + window.checkMandatoryEditedTextField(event, originalErrorThreshold); + } + } + + private void listenerErrorThresholdValueChanged(final ValueChangeEvent event, final TextField errorField) { + if (window != null) { + window.setRequiredFieldWhenUpdate(event, errorField); } } @@ -653,16 +644,19 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { thresholdField.setSizeUndefined(); thresholdField.setMaxLength(3); thresholdField.addTextChangeListener(this::listenerTriggerThresholdTextFieldChanged); + thresholdField.addValueChangeListener(event -> listenerTriggerTresholdValueChanged(event, thresholdField)); return thresholdField; } + private void listenerTriggerTresholdValueChanged(final ValueChangeEvent event, final TextField thresholdField) { + if (window != null) { + window.setRequiredFieldWhenUpdate(event, thresholdField); + } + } + private void listenerTriggerThresholdTextFieldChanged(final TextChangeEvent event) { if (window != null) { - if (!updateMode) { - window.checkMandatoryTextField(event, triggerThreshold); - return; - } - window.checkChanges(triggerThreshold.getId(), event.getText(), triggerThresholdOriginal); + window.checkMandatoryEditedTextField(event, originalTriggerThreshold); } } @@ -672,28 +666,27 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { noOfGroupsField.addValidator(new GroupNumberValidator()); noOfGroupsField.setSizeUndefined(); noOfGroupsField.setMaxLength(3); - noOfGroupsField.addValueChangeListener(evevt -> onGroupNumberChange()); + noOfGroupsField.addValueChangeListener(this::onGroupNumberChange); noOfGroupsField.addTextChangeListener(this::listenerNoOfGroupsTextFieldChanged); return noOfGroupsField; } private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) { if (window != null) { - if (!updateMode) { - window.checkMandatoryTextField(event, noOfGroups); - return; - } - window.checkChanges(noOfGroups.getId(), event.getText(), noOfGroups.getValue()); + window.checkMandatoryEditedTextField(event, originalNoOfGroups); } } - private void onGroupNumberChange() { + private void onGroupNumberChange(final ValueChangeEvent event) { if (noOfGroups.isValid() && !Strings.isNullOrEmpty(noOfGroups.getValue())) { groupSizeLabel.setValue(getTargetPerGroupMessage(String.valueOf(getGroupSize()))); groupSizeLabel.setVisible(true); } else { groupSizeLabel.setVisible(false); } + if (window != null) { + window.setRequiredFieldWhenUpdate(event, noOfGroups); + } } private ComboBox createDistributionSetCombo() { @@ -710,14 +703,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private void listenerDistributionSetChanged(final ValueChangeEvent event) { if (window != null) { - if (!updateMode) { - window.checkMandatoryComboBox(event, distributionSet); - return; - } - if (event.getProperty().getValue() != null) { - window.checkChanges(distributionSet.getId(), event.getProperty().getValue().toString(), - distributionSetOriginal); - } + window.checkMandatoryEditedValue(event, distributionSet, originalDistributionSet); } } @@ -732,7 +718,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { return new LazyQueryContainer( new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME), distributionQF); - } private TextField createRolloutNameField() { @@ -740,16 +725,19 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { rolloutNameField.setId(SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID); rolloutNameField.setSizeUndefined(); rolloutNameField.addTextChangeListener(this::listenerRolloutNameTextFieldChanged); + rolloutNameField.addValueChangeListener(event -> listenerRolloutNameValueChanged(event, rolloutNameField)); return rolloutNameField; } private void listenerRolloutNameTextFieldChanged(final TextChangeEvent event) { if (window != null) { - if (!updateMode) { - window.checkMandatoryTextField(event, rolloutName); - return; - } - window.checkChanges(rolloutName.getId(), event.getText(), rolloutNameOriginal); + window.checkMandatoryEditedTextField(event, originalRolloutName); + } + } + + private void listenerRolloutNameValueChanged(final ValueChangeEvent event, final TextField rolloutNameField) { + if (window != null) { + window.setRequiredFieldWhenUpdate(event, rolloutNameField); } } @@ -851,7 +839,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { description.setValue(rolloutForEdit.getDescription()); distributionSet.setValue(DistributionSetIdName.generate(rolloutForEdit.getDistributionSet())); final List rolloutGroups = rolloutForEdit.getRolloutGroups(); - setThresoldValues(rolloutGroups); + setThresholdValues(rolloutGroups); setActionType(rolloutForEdit); if (rolloutForEdit.getStatus() != RolloutStatus.READY) { disableRequiredFieldsOnEdit(); @@ -870,30 +858,28 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void setOriginalValues() { - distributionSetOriginal = distributionSet.getValue().toString(); - actionGroupOriginal = actionTypeOptionGroupLayout.getActionTypeOptionGroup().getValue(); - rolloutNameOriginal = rolloutName.getValue(); - triggerThresholdOriginal = triggerThreshold.getValue(); - errorThresholdOriginal = errorThreshold.getValue(); - descriptionOriginal = description.getValue(); + originalDistributionSet = distributionSet.getValue().toString(); + originalActionGroup = actionTypeOptionGroupLayout.getActionTypeOptionGroup().getValue(); + originalRolloutName = rolloutName.getValue(); + originalTriggerThreshold = triggerThreshold.getValue(); + originalErrorThreshold = errorThreshold.getValue(); + originalDescription = description.getValue(); + originalNoOfGroups = noOfGroups.getValue(); + if (targetFilterQueryCombo.getValue() != null) { + originalTargetFilterQueryCombo = targetFilterQueryCombo.getValue().toString(); + } } private Map getEditedFields() { final Map changeMap = new HashMap<>(); - if (rolloutForEdit == null) { - return changeMap; - } - if (rolloutForEdit.getStatus() != RolloutStatus.READY) { - changeMap.put(rolloutName.getId(), Boolean.FALSE); - changeMap.put(description.getId(), Boolean.FALSE); - } else { - changeMap.put(rolloutName.getId(), Boolean.FALSE); - changeMap.put(distributionSet.getId(), Boolean.FALSE); - changeMap.put(triggerThreshold.getId(), Boolean.FALSE); - changeMap.put(errorThreshold.getId(), Boolean.FALSE); - changeMap.put(description.getId(), Boolean.FALSE); - changeMap.put(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(), Boolean.FALSE); - } + changeMap.put(rolloutName.getId(), Boolean.FALSE); + changeMap.put(distributionSet.getId(), Boolean.FALSE); + changeMap.put(targetFilterQueryCombo.getId(), Boolean.FALSE); + changeMap.put(noOfGroups.getId(), Boolean.FALSE); + changeMap.put(triggerThreshold.getId(), Boolean.FALSE); + changeMap.put(errorThreshold.getId(), Boolean.FALSE); + changeMap.put(description.getId(), Boolean.FALSE); + changeMap.put(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(), Boolean.FALSE); return changeMap; } @@ -933,7 +919,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { /** * @param rolloutGroups */ - private void setThresoldValues(final List rolloutGroups) { + private void setThresholdValues(final List rolloutGroups) { if (null != rolloutGroups && !rolloutGroups.isEmpty()) { errorThreshold.setValue(rolloutGroups.get(0).getErrorConditionExp()); triggerThreshold.setValue(rolloutGroups.get(0).getSuccessConditionExp()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index d3b17da5f..b40c3d93d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -67,9 +67,7 @@ import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; import com.vaadin.ui.renderers.HtmlRenderer; /** - * * Rollout list grid component. - * */ @SpringComponent @ViewScope @@ -159,7 +157,6 @@ public class RolloutListGrid extends AbstractGrid { } item.getItemProperty(ROLLOUT_RENDERER_DATA) .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); - } @Override @@ -200,7 +197,6 @@ public class RolloutListGrid extends AbstractGrid { rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.ACTION, String.class, FontAwesome.CIRCLE_O.getHtml(), false, false); - } @Override @@ -292,7 +288,6 @@ public class RolloutListGrid extends AbstractGrid { for (final Object propertyId : columnsToBeHidden) { getColumn(propertyId).setHidden(true); } - } @Override @@ -315,7 +310,6 @@ public class RolloutListGrid extends AbstractGrid { final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); customObjectRenderer.addClickListener(this::onClickOfRolloutName); getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); - } private void createRolloutStatusToFontMap() { @@ -437,8 +431,8 @@ public class RolloutListGrid extends AbstractGrid { } private void onUpdate(final ContextMenuData contextMenuData) { + final CommonDialogWindow addTargetWindow = addUpdateRolloutWindow.getWindow(); addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); - final CommonDialogWindow addTargetWindow = addUpdateRolloutWindow.createUpdateWindow(); addTargetWindow.setCaption(i18n.get("caption.update.rollout")); UI.getCurrent().addWindow(addTargetWindow); addTargetWindow.setVisible(Boolean.TRUE); @@ -684,7 +678,6 @@ public class RolloutListGrid extends AbstractGrid { public Class getPresentationType() { return String.class; } - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index 22c57740f..1a3d2d7a5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -92,7 +92,7 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected void addNewItem(final ClickEvent event) { addUpdateRolloutWindow.resetComponents(); - final Window addTargetWindow = addUpdateRolloutWindow.createAddWindow(); + final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); UI.getCurrent().addWindow(addTargetWindow); addTargetWindow.setVisible(Boolean.TRUE); From a5ee3018209cff815299f67679453cf182230368 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Sat, 25 Jun 2016 12:29:12 +0200 Subject: [PATCH 314/371] update javadoc Signed-off-by: Michael Hirsch --- .../main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index ae25d0086..538f82213 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -145,7 +145,7 @@ public class AmqpConfiguration { } /** - * Create the DMF API receiver queue for + * Create the DMF API receiver queue for retrieving DMF messages. * * @return the receiver queue */ From 8578f6726b24f6f8b309a9453b55f680a2700c19 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 27 Jun 2016 11:20:57 +0200 Subject: [PATCH 315/371] Return last throwable in response Signed-off-by: SirWayne --- .../exception/ResponseExceptionHandler.java | 32 +++++++------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java index 13e214c45..3a6250209 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java @@ -9,17 +9,20 @@ package org.eclipse.hawkbit.rest.exception; import java.util.EnumMap; +import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; -import org.apache.tomcat.util.http.fileupload.FileUploadException; +import org.apache.commons.lang3.exception.ExceptionUtils; import org.eclipse.hawkbit.exception.SpServerError; import org.eclipse.hawkbit.exception.SpServerRtException; import org.eclipse.hawkbit.repository.exception.MultiPartFileUploadException; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ResourceLoader; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; @@ -27,6 +30,8 @@ import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.multipart.MultipartException; +import com.google.common.collect.Iterables; + /** * General controller advice for exception handling. */ @@ -37,6 +42,9 @@ public class ResponseExceptionHandler { private static final Map ERROR_TO_HTTP_STATUS = new EnumMap<>(SpServerError.class); private static final HttpStatus DEFAULT_RESPONSE_STATUS = HttpStatus.INTERNAL_SERVER_ERROR; + @Autowired + private ResourceLoader resourceLoader; + static { ERROR_TO_HTTP_STATUS.put(SpServerError.SP_REPO_ENTITY_NOT_EXISTS, HttpStatus.NOT_FOUND); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_REPO_ENTITY_ALRREADY_EXISTS, HttpStatus.CONFLICT); @@ -135,13 +143,8 @@ public class ResponseExceptionHandler { logRequest(request, ex); - Throwable responseCause = ex; - - final Throwable searchForCause = searchForCause(ex, FileUploadException.class); - if (searchForCause != null) { - responseCause = searchForCause; - } - + final List throwables = ExceptionUtils.getThrowableList(ex); + final Throwable responseCause = Iterables.getLast(throwables); final ExceptionInfo response = createExceptionInfo(new MultiPartFileUploadException(responseCause)); return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); } @@ -150,19 +153,6 @@ public class ResponseExceptionHandler { LOG.debug("Handling exception {} of request {}", ex.getClass().getName(), request.getRequestURL()); } - private static Throwable searchForCause(final Throwable t, final Class lookFor) { - if (t == null || t.getCause() == null) { - return null; - } - - final Throwable cause = t.getCause(); - - if (cause.getClass().equals(lookFor)) { - return cause; - } - return searchForCause(cause, lookFor); - } - private ExceptionInfo createExceptionInfo(final Exception ex) { final ExceptionInfo response = new ExceptionInfo(); response.setMessage(ex.getMessage()); From c4fcdea0e0290ab4c7f857a557334b3df007bb7e Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 27 Jun 2016 12:24:29 +0200 Subject: [PATCH 316/371] Remove resouce loader Signed-off-by: SirWayne --- .../hawkbit/rest/exception/ResponseExceptionHandler.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java index 3a6250209..02a48ef78 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/exception/ResponseExceptionHandler.java @@ -21,8 +21,6 @@ import org.eclipse.hawkbit.repository.exception.MultiPartFileUploadException; import org.eclipse.hawkbit.rest.json.model.ExceptionInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.ResourceLoader; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; @@ -42,9 +40,6 @@ public class ResponseExceptionHandler { private static final Map ERROR_TO_HTTP_STATUS = new EnumMap<>(SpServerError.class); private static final HttpStatus DEFAULT_RESPONSE_STATUS = HttpStatus.INTERNAL_SERVER_ERROR; - @Autowired - private ResourceLoader resourceLoader; - static { ERROR_TO_HTTP_STATUS.put(SpServerError.SP_REPO_ENTITY_NOT_EXISTS, HttpStatus.NOT_FOUND); ERROR_TO_HTTP_STATUS.put(SpServerError.SP_REPO_ENTITY_ALRREADY_EXISTS, HttpStatus.CONFLICT); From 6692f92c61558146a78039eea2e2521e13a6bcf3 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 27 Jun 2016 12:33:07 +0200 Subject: [PATCH 317/371] delete unused method Signed-off-by: Melanie Retter --- .../CreateUpdateSoftwareTypeLayout.java | 7 ------- .../hawkbit/ui/common/CommonDialogWindow.java | 3 +-- .../CreateUpdateDistSetTypeLayout.java | 21 ++++++++----------- .../ui/layouts/CreateUpdateTypeLayout.java | 20 ------------------ ...eateUpdateDistributionTagLayoutWindow.java | 15 ++++++------- .../CreateUpdateTargetTagLayoutWindow.java | 14 ++++++------- 6 files changed, 22 insertions(+), 58 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index d8b32efc4..0c47772ea 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -223,11 +223,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout @Override protected void save(final ClickEvent event) { - if (!mandatoryValuesPresent()) { - window.setSaveButtonEnabled(false); - return; - } - final SoftwareModuleType existingSMTypeByKey = swTypeManagementService .findSoftwareModuleTypeByKey(typeKey.getValue()); final SoftwareModuleType existingSMTypeByName = swTypeManagementService @@ -237,10 +232,8 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout createNewSWModuleType(); } } else { - updateSWModuleType(existingSMTypeByName); } - // window.setSaveButtonEnabled(false); } private void createNewSWModuleType() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 7602f0a83..f6ff9e553 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -127,7 +127,7 @@ public class CommonDialogWindow extends Window implements Serializable { public void checkMandatoryEditedTextField(final TextChangeEvent event, final String originalValue) { final Component component = event.getComponent(); if (!(component instanceof AbstractComponent)) { - throw new IllegalStateException("Only AbstractComponent not allow"); + throw new IllegalStateException("Only AbstractComponent are allowed"); } if (requiredFields.containsKey(component.getId())) { @@ -209,7 +209,6 @@ public class CommonDialogWindow extends Window implements Serializable { * Boolean if field is filled */ public void updateRequiredFields(final String fieldId, final Boolean filled) { - requiredFields.put(fieldId, filled); checkSaveButtonEnabled(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 9c6486200..4a566cb51 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -639,19 +639,16 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout @Override protected void save(final ClickEvent event) { - - if (mandatoryValuesPresent()) { - final DistributionSetType existingDistTypeByKey = distributionSetManagement - .findDistributionSetTypeByKey(typeKey.getValue()); - final DistributionSetType existingDistTypeByName = distributionSetManagement - .findDistributionSetTypeByName(tagName.getValue()); - if (optiongroup.getValue().equals(createTypeStr)) { - if (!checkIsDuplicateByKey(existingDistTypeByKey) && !checkIsDuplicate(existingDistTypeByName)) { - createNewDistributionSetType(); - } - } else { - updateDistributionSetType(existingDistTypeByKey); + final DistributionSetType existingDistTypeByKey = distributionSetManagement + .findDistributionSetTypeByKey(typeKey.getValue()); + final DistributionSetType existingDistTypeByName = distributionSetManagement + .findDistributionSetTypeByName(tagName.getValue()); + if (optiongroup.getValue().equals(createTypeStr)) { + if (!checkIsDuplicateByKey(existingDistTypeByKey) && !checkIsDuplicate(existingDistTypeByName)) { + createNewDistributionSetType(); } + } else { + updateDistributionSetType(existingDistTypeByKey); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index 556347e4f..6ede668b0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -17,9 +17,7 @@ import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.server.Page; import com.vaadin.shared.ui.colorpicker.Color; @@ -289,24 +287,6 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { return Boolean.FALSE; } - @Override - protected Boolean mandatoryValuesPresent() { - if (Strings.isNullOrEmpty(tagName.getValue()) || Strings.isNullOrEmpty(typeKey.getValue())) { - if (optiongroup.getValue().equals(createTypeStr)) { - displayValidationError(SPUILabelDefinitions.MISSING_TYPE_NAME_KEY); - } - if (optiongroup.getValue().equals(updateTypeStr)) { - if (null == tagNameComboBox.getValue()) { - displayValidationError(i18n.get("message.error.missing.tagName")); - } else { - displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - } - return Boolean.FALSE; - } - return Boolean.TRUE; - } - @Override protected void save(final ClickEvent event) { // is implemented in the inherited class diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java index 0bcee9d09..1522c19c3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/CreateUpdateDistributionTagLayoutWindow.java @@ -85,16 +85,13 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat */ @Override public void save(final ClickEvent event) { - if (mandatoryValuesPresent()) { - final DistributionSetTag existingDistTag = tagManagement.findDistributionSetTag(tagName.getValue()); - if (optiongroup.getValue().equals(createTagStr)) { - if (!checkIsDuplicate(existingDistTag)) { - createNewTag(); - } - } else { - - updateExistingTag(existingDistTag); + final DistributionSetTag existingDistTag = tagManagement.findDistributionSetTag(tagName.getValue()); + if (optiongroup.getValue().equals(createTagStr)) { + if (!checkIsDuplicate(existingDistTag)) { + createNewTag(); } + } else { + updateExistingTag(existingDistTag); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java index 781e13ef6..8bba7f2f2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java @@ -106,15 +106,13 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa @Override public void save(final ClickEvent event) { - if (mandatoryValuesPresent()) { - final TargetTag existingTag = tagManagement.findTargetTag(tagName.getValue()); - if (optiongroup.getValue().equals(createTagStr)) { - if (!checkIsDuplicate(existingTag)) { - createNewTag(); - } - } else { - updateExistingTag(existingTag); + final TargetTag existingTag = tagManagement.findTargetTag(tagName.getValue()); + if (optiongroup.getValue().equals(createTagStr)) { + if (!checkIsDuplicate(existingTag)) { + createNewTag(); } + } else { + updateExistingTag(existingTag); } } From 1436aae22a63100fca3f7cfb094e5d110b4cf6b8 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 27 Jun 2016 15:56:50 +0200 Subject: [PATCH 318/371] code review improvements Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 18 +--- .../CreateUpdateSoftwareTypeLayout.java | 22 +---- .../hawkbit/ui/common/CommonDialogWindow.java | 16 +--- .../CreateUpdateDistSetTypeLayout.java | 90 +++++++++---------- .../AbstractCreateUpdateTagLayout.java | 26 ++---- .../ui/layouts/CreateUpdateTypeLayout.java | 2 +- .../DistributionAddUpdateWindowLayout.java | 18 +--- .../TargetAddUpdateWindowLayout.java | 19 +--- .../ui/utils/CommonDialogWindowHelper.java | 32 +++++++ 9 files changed, 95 insertions(+), 148 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/CommonDialogWindowHelper.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 7e3051555..140760bbb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.io.Serializable; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import org.eclipse.hawkbit.repository.EntityFactory; @@ -21,6 +20,7 @@ import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.utils.CommonDialogWindowHelper; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -34,9 +34,7 @@ import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.AbstractField; import com.vaadin.ui.ComboBox; -import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.Label; @@ -229,23 +227,11 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null, - getMandatoryFields(formLayout), geEditedFields(), i18n); + CommonDialogWindowHelper.getMandatoryFields(formLayout), geEditedFields(), i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); typeComboBox.focus(); } - private Map getMandatoryFields(final FormLayout formLayout) { - final Map requiredFields = new HashMap<>(); - final Iterator iterate = formLayout.iterator(); - while (iterate.hasNext()) { - final Component c = iterate.next(); - if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getId(), Boolean.FALSE); - } - } - return requiredFields; - } - private Map geEditedFields() { final Map editedFields = new HashMap<>(); editedFields.put(typeComboBox.getId(), Boolean.FALSE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 0c47772ea..71581113d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -9,10 +9,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtype; import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; import java.util.List; -import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.EntityFactory; @@ -25,6 +22,7 @@ import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; +import org.eclipse.hawkbit.ui.utils.CommonDialogWindowHelper; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -37,10 +35,8 @@ import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.AbstractField; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.Component; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.components.colorpicker.ColorChangeListener; @@ -125,20 +121,8 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout public void createWindow() { reset(); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields(), - getEditedFields(), i18n); - } - - private Map getMandatoryFields() { - final Map requiredFields = new HashMap<>(); - final Iterator iterate = getFormLayout().iterator(); - while (iterate.hasNext()) { - final Component c = iterate.next(); - if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getId(), Boolean.FALSE); - } - } - return requiredFields; + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, + CommonDialogWindowHelper.getMandatoryFields(getFormLayout()), getEditedFields(), i18n); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index f6ff9e553..d80446ee8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -127,7 +127,7 @@ public class CommonDialogWindow extends Window implements Serializable { public void checkMandatoryEditedTextField(final TextChangeEvent event, final String originalValue) { final Component component = event.getComponent(); if (!(component instanceof AbstractComponent)) { - throw new IllegalStateException("Only AbstractComponent are allowed"); + throw new IllegalStateException("Only AbstractComponents are allowed"); } if (requiredFields.containsKey(component.getId())) { @@ -155,10 +155,10 @@ public class CommonDialogWindow extends Window implements Serializable { if (requiredFields.containsKey(component.getId())) { setRequiredFieldChangeValue(component, isChangedValueNotNull); } - if (event.getProperty().getValue() != null) { - checkChanges(component.getId(), event.getProperty().getValue().toString(), originalValue); - } else { + if (event.getProperty().getValue() == null) { checkChanges(component.getId(), null, originalValue); + } else { + checkChanges(component.getId(), event.getProperty().getValue().toString(), originalValue); } checkSaveButtonEnabled(); } @@ -392,12 +392,4 @@ public class CommonDialogWindow extends Window implements Serializable { return buttonsLayout; } - public Map getRequiredFields() { - return requiredFields; - } - - public void setRequiredFields(final Map requiredFields) { - this.requiredFields = requiredFields; - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 4a566cb51..7c06493e5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -27,6 +27,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent.DistributionSetTypeEnum; import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; +import org.eclipse.hawkbit.ui.utils.CommonDialogWindowHelper; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -43,7 +44,6 @@ import com.vaadin.data.util.IndexedContainer; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.AbstractField; import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; @@ -91,8 +91,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout private IndexedContainer originalSelectedTableContainer; - private String originalTypeKey; - @Override protected void createRequiredComponents() { @@ -109,7 +107,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_KEY, true, "", i18n.get("textfield.key"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); typeKey.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_KEY); - typeKey.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTypeKey)); + typeKey.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTypeKey())); typeKey.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, typeKey)); tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", @@ -268,24 +266,26 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout private void addSMType() { final Set selectedIds = (Set) sourceTable.getValue(); - if (selectedIds != null && !selectedIds.isEmpty()) { - for (final Long id : selectedIds) { - addTargetTableData(id); - } - window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); + if (selectedIds == null) { + return; } + for (final Long id : selectedIds) { + addTargetTableData(id); + } + window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); } private void removeSMType() { @SuppressWarnings("unchecked") final Set selectedIds = (Set) selectedTable.getValue(); - if (selectedIds != null && !selectedIds.isEmpty()) { - for (final Long id : selectedIds) { - addSourceTableData(id); - selectedTable.removeItem(id); - window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); - } + if (selectedIds == null) { + return; + } + for (final Long id : selectedIds) { + addSourceTableData(id); + selectedTable.removeItem(id); + window.updateRequiredFields(selectedTable.getId(), hasContentChanged()); } } @@ -294,6 +294,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout if (originalSelectedTableContainer == null) { originalSelectedTableContainer = new IndexedContainer(); } + // is new softwareModule added? for (final Iterator itemIterator = selectedTableContainer.getItemIds().iterator(); itemIterator.hasNext();) { final long itemId = (Long) itemIterator.next(); if (!originalSelectedTableContainer.containsId(itemId)) { @@ -302,6 +303,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } } + // is softwareModule removed and at least one softwareModule is selected for (final Iterator itemIterator = originalSelectedTableContainer.getItemIds().iterator(); itemIterator .hasNext();) { final long itemId = (Long) itemIterator.next(); @@ -311,9 +313,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout } } - if (selectedTableContainer.size() > 0) { - window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE); - } return Boolean.FALSE; } @@ -621,20 +620,20 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout @SuppressWarnings("unchecked") private void addTargetTableforUpdate(final SoftwareModuleType swModuleType, final boolean mandatory) { - Item saveTblitem; - if (selectedTableContainer != null) { - saveTblitem = selectedTableContainer.addItem(swModuleType.getId()); - sourceTable.removeItem(swModuleType.getId()); - saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName()); - saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory)); - final CheckBox mandatoryCheckbox = (CheckBox) selectedTableContainer - .getContainerProperty(swModuleType.getId(), DIST_TYPE_MANDATORY).getValue(); - mandatoryCheckbox.addValueChangeListener(this::listenerMandatoryCheckboxChanged); - - final Item originalItem = originalSelectedTableContainer.addItem(swModuleType.getId()); - originalItem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName()); - originalItem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory)); + if (selectedTableContainer == null) { + return; } + final Item saveTblitem = selectedTableContainer.addItem(swModuleType.getId()); + sourceTable.removeItem(swModuleType.getId()); + saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName()); + saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory)); + final CheckBox mandatoryCheckbox = (CheckBox) selectedTableContainer + .getContainerProperty(swModuleType.getId(), DIST_TYPE_MANDATORY).getValue(); + mandatoryCheckbox.addValueChangeListener(this::listenerMandatoryCheckboxChanged); + + final Item originalItem = originalSelectedTableContainer.addItem(swModuleType.getId()); + originalItem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName()); + originalItem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory)); } @Override @@ -660,15 +659,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout getEditedFields(), i18n); } - private Map getMandatoryFields() { - final Map requiredFields = new HashMap<>(); - final Iterator iterate = getFormLayout().iterator(); - while (iterate.hasNext()) { - final Component c = iterate.next(); - if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getId(), Boolean.FALSE); - } - } + protected Map getMandatoryFields() { + final Map requiredFields = CommonDialogWindowHelper.getMandatoryFields(getFormLayout()); // Selected SoftwareModulesType requiredFields.put(selectedTable.getId(), Boolean.FALSE); return requiredFields; @@ -718,14 +710,14 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); } - @Override - public String getOriginalTypeKey() { - return originalTypeKey; - } - - @Override - public void setOriginalTypeKey(final String originalTypeKey) { - this.originalTypeKey = originalTypeKey; - } + // @Override + // public String getOriginalTypeKey() { + // return originalTypeKey; + // } + // + // @Override + // public void setOriginalTypeKey(final String originalTypeKey) { + // this.originalTypeKey = originalTypeKey; + // } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index 6beb7d5b7..5eb64773b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.ui.layouts; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import javax.annotation.PreDestroy; @@ -24,6 +23,7 @@ import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerLayout; import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.utils.CommonDialogWindowHelper; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -38,11 +38,9 @@ import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.server.Page; import com.vaadin.shared.ui.colorpicker.Color; -import com.vaadin.ui.AbstractField; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; -import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.GridLayout; @@ -115,21 +113,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent protected void createWindow() { reset(); - setWindow( - SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, - this, this::save, this::discard, null, getMandatoryFields(), getEditedFields(), i18n)); - } - - private Map getMandatoryFields() { - final Map requiredFields = new HashMap<>(); - final Iterator iterate = formLayout.iterator(); - while (iterate.hasNext()) { - final Component c = iterate.next(); - if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getId(), null); - } - } - return requiredFields; + setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, + CommonDialogWindowHelper.getMandatoryFields(formLayout), getEditedFields(), i18n)); } protected Map getEditedFields() { @@ -344,7 +330,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(tagNameComboBox); } - window.reset(); + if (window != null) { + window.reset(); + } // close the color picker layout tagPreviewBtnClicked = false; // reset the selected color - Set default color diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index 6ede668b0..e03e6b42d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -41,7 +41,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { protected String createTypeStr; protected String updateTypeStr; protected TextField typeKey; - protected String originalTypeKey; + private String originalTypeKey; public static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 90dd8a6a6..b733dbe58 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.ui.management.dstable; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import javax.annotation.PostConstruct; @@ -27,6 +26,7 @@ import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; +import org.eclipse.hawkbit.ui.utils.CommonDialogWindowHelper; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -44,10 +44,8 @@ import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.AbstractField; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; -import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.TextArea; @@ -417,25 +415,13 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), - null, getMandatoryFields(), getEditedFields(), i18n); + null, CommonDialogWindowHelper.getMandatoryFields(formLayout), getEditedFields(), i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); populateRequiredComponents(); resetComponents(); return window; } - private Map getMandatoryFields() { - final Map requiredFields = new HashMap<>(); - final Iterator iterate = formLayout.iterator(); - while (iterate.hasNext()) { - final Component c = iterate.next(); - if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getId(), Boolean.FALSE); - } - } - return requiredFields; - } - private Map getEditedFields() { final Map editedFields = new HashMap<>(); editedFields.put(distsetTypeNameComboBox.getId(), Boolean.FALSE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 6c2193adb..7cf047d5e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.management.targettable; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -23,6 +22,7 @@ import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; +import org.eclipse.hawkbit.ui.utils.CommonDialogWindowHelper; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -36,8 +36,6 @@ import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.VaadinSessionScope; -import com.vaadin.ui.AbstractField; -import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.TextArea; @@ -194,22 +192,11 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), - event -> discardTargetListner(), null, getMandatoryFields(), getEditedFields(), i18n); + event -> discardTargetListner(), null, CommonDialogWindowHelper.getMandatoryFields(formLayout), + getEditedFields(), i18n); return window; } - private Map getMandatoryFields() { - final Map requiredFields = new HashMap<>(); - final Iterator iterate = formLayout.iterator(); - while (iterate.hasNext()) { - final Component c = iterate.next(); - if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getId(), Boolean.FALSE); - } - } - return requiredFields; - } - private Map getEditedFields() { final Map editedFields = new HashMap<>(); editedFields.put(controllerIDTextField.getId(), Boolean.FALSE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/CommonDialogWindowHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/CommonDialogWindowHelper.java new file mode 100644 index 000000000..c906a87dd --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/CommonDialogWindowHelper.java @@ -0,0 +1,32 @@ +package org.eclipse.hawkbit.ui.utils; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import com.vaadin.ui.AbstractField; +import com.vaadin.ui.Component; +import com.vaadin.ui.FormLayout; + +public class CommonDialogWindowHelper { + + /** + * Run through a FormLayout and collect all required Component's IDs in a + * Map + * + * @param formLayout + * Form to be analysed + * @return Map with all required component's IDs + */ + public static Map getMandatoryFields(final FormLayout formLayout) { + final Map requiredFields = new HashMap<>(); + final Iterator iterate = formLayout.iterator(); + while (iterate.hasNext()) { + final Component c = iterate.next(); + if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { + requiredFields.put(c.getId(), Boolean.FALSE); + } + } + return requiredFields; + } +} From 63cf97f6b46ea46772c43e60c0ea8e186d85c8bf Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 27 Jun 2016 17:02:44 +0200 Subject: [PATCH 319/371] Refactor Signed-off-by: SirWayne --- .../SoftwareModuleAddUpdateWindow.java | 17 +- .../hawkbit/ui/common/CommonDialogWindow.java | 305 ++++++------------ .../ui/components/SPUIComponentProvider.java | 7 +- .../ui/decorators/SPUIWindowDecorator.java | 9 +- 4 files changed, 111 insertions(+), 227 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 7e3051555..1d692b6d2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -139,31 +139,22 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); nameTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_NAME); - nameTextField.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalNameValue)); - nameTextField.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, nameTextField)); /* version text field */ versionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); versionTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VERSION); - versionTextField - .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalVersionValue)); - versionTextField.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, versionTextField)); /* Vendor text field */ vendorTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.vendor"), "", ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.vendor"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); vendorTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VENDOR); - vendorTextField - .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalVendorValue)); descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); descTextArea.setId(SPUIComponentIdProvider.ADD_SW_MODULE_DESCRIPTION); - descTextArea - .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDescriptionValue)); typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, true, null, i18n.get("upload.swmodule.type")); @@ -172,8 +163,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se typeComboBox.setNewItemsAllowed(Boolean.FALSE); typeComboBox.setImmediate(Boolean.TRUE); populateTypeNameCombo(); - typeComboBox.addValueChangeListener( - event -> window.checkMandatoryEditedValue(event, typeComboBox, originalComboBoxValue)); } private void populateTypeNameCombo() { @@ -195,10 +184,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se originalComboBoxValue = null; originalNameValue = null; originalVersionValue = null; - - if (window != null) { - window.reset(); - } } private void createWindow() { @@ -229,7 +214,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se /* add main layout to the window */ window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null, - getMandatoryFields(formLayout), geEditedFields(), i18n); + formLayout, i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); typeComboBox.focus(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index f6ff9e553..d920d2f58 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -11,10 +11,12 @@ package org.eclipse.hawkbit.ui.common; import static com.google.common.base.Preconditions.checkNotNull; import java.io.Serializable; -import java.util.Collections; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.Objects; -import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -25,17 +27,17 @@ import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; -import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; -import com.vaadin.event.FieldEvents.TextChangeEvent; +import com.vaadin.event.FieldEvents.TextChangeNotifier; import com.vaadin.server.FontAwesome; -import com.vaadin.shared.ui.colorpicker.Color; -import com.vaadin.ui.AbstractComponent; +import com.vaadin.ui.AbstractField; +import com.vaadin.ui.AbstractLayout; import com.vaadin.ui.AbstractOrderedLayout; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; +import com.vaadin.ui.FormLayout; import com.vaadin.ui.GridLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; @@ -45,12 +47,13 @@ import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; /** - * Superclass for pop-up-windows including a minimize and close icon in the - * upper right corner and a save and cancel button at the bottom. + * TODO: AbstractColorPicker und FlexibleOptionGroupItemComponent Superclass for + * pop-up-windows including a minimize and close icon in the upper right corner + * and a save and cancel button at the bottom. */ public class CommonDialogWindow extends Window implements Serializable { - private static final long serialVersionUID = -1321949234316858703L; + private static final long serialVersionUID = 1L; private final VerticalLayout mainLayout = new VerticalLayout(); @@ -72,9 +75,9 @@ public class CommonDialogWindow extends Window implements Serializable { private final ClickListener cancelButtonClickListener; - private Map requiredFields; + private Map orginalValues; - private Map editedFields; + private final List> allComponents; private final I18N i18n; @@ -94,7 +97,7 @@ public class CommonDialogWindow extends Window implements Serializable { */ public CommonDialogWindow(final String caption, final Component content, final String helpLink, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, - final Map requiredFields, final Map editedFields, final I18N i18n) { + final FormLayout formLayout, final I18N i18n) { checkNotNull(saveButtonClickListener); checkNotNull(cancelButtonClickListener); this.caption = caption; @@ -102,180 +105,21 @@ public class CommonDialogWindow extends Window implements Serializable { this.helpLink = helpLink; this.saveButtonClickListener = saveButtonClickListener; this.cancelButtonClickListener = cancelButtonClickListener; - this.requiredFields = requiredFields; - if (requiredFields == null) { - this.requiredFields = Collections.emptyMap(); - } - - this.editedFields = editedFields; - if (editedFields == null) { - this.editedFields = Collections.emptyMap(); - } + this.allComponents = getAllComponents(formLayout); this.i18n = i18n; init(); } - /** - * Checks if all mandatory fields are filled, and if there are changes in - * the current field. If yes, the save button will be enabled. - * - * @param event - * TextChangeEvent - * @param originalValue - * original Value of the current field - */ - public void checkMandatoryEditedTextField(final TextChangeEvent event, final String originalValue) { - final Component component = event.getComponent(); - if (!(component instanceof AbstractComponent)) { - throw new IllegalStateException("Only AbstractComponent are allowed"); - } - - if (requiredFields.containsKey(component.getId())) { - final boolean isTextChangeNotEmpty = StringUtils.isNotBlank(event.getText()); - setRequiredFieldChangeValue((AbstractComponent) component, isTextChangeNotEmpty); - } - checkChanges(component.getId(), event.getText(), originalValue); - checkSaveButtonEnabled(); + public void setSaveButtonEnabled(final boolean enabled) { + saveButton.setEnabled(enabled); } - /** - * Checks if all mandatory fields are filled, and if there are changes in - * the current field. If yes, the save button will be enabled. - * - * @param event - * ValueChangeEvent - * @param component - * current Component - * @param originalValue - * original Value of the current field - */ - public void checkMandatoryEditedValue(final ValueChangeEvent event, final AbstractComponent component, - final String originalValue) { - final boolean isChangedValueNotNull = event.getProperty().getValue() != null; - if (requiredFields.containsKey(component.getId())) { - setRequiredFieldChangeValue(component, isChangedValueNotNull); - } - if (event.getProperty().getValue() != null) { - checkChanges(component.getId(), event.getProperty().getValue().toString(), originalValue); - } else { - checkChanges(component.getId(), null, originalValue); - } - checkSaveButtonEnabled(); + public void setCancelButtonEnabled(final boolean enabled) { + cancelButton.setEnabled(enabled); } - /** - * Checks if all mandatory fields are filled, and if there are changes in - * the current field. (Boolean) If yes, the save button will be enabled. - * - * @param event - * ValueChangeEvent - * @param component - * current Component - * @param originalValue - * original Boolean Value of the current field - */ - public void checkMandatoryEditedValueBoolean(final ValueChangeEvent event, final AbstractComponent component, - final Boolean originalValue) { - final boolean isChangedValueNotNull = event.getProperty().getValue() != null; - if (requiredFields.containsKey(component.getId())) { - setRequiredFieldChangeValue(component, isChangedValueNotNull); - } - final Boolean changed = (Boolean) event.getProperty().getValue(); - editedFields.put(component.getId(), BooleanUtils.compare(changed, originalValue) != 0); - checkSaveButtonEnabled(); - } - - /** - * Updates the map of required fields if a value is set. (e.g. on Update - * when editing a component) - * - * @param event - * ValueChangeEvent - * @param component - * current Component - */ - public void setRequiredFieldWhenUpdate(final ValueChangeEvent event, final AbstractComponent component) { - final boolean isChangedValueNotNull = event.getProperty().getValue() != null; - setRequiredFieldChangeValue(component, isChangedValueNotNull); - } - - /** - * * Updates the map of required fields if a value is set. (e.g. on Update - * when editing a component) - * - * @param fieldId - * Id of the current component - * @param filled - * Boolean if field is filled - */ - public void updateRequiredFields(final String fieldId, final Boolean filled) { - requiredFields.put(fieldId, filled); - checkSaveButtonEnabled(); - } - - /** - * Checks if Color is changed - * - * @param fieldId - * Id of the current component - * @param newColor - * new Color - * @param oldColor - * old Color - */ - public void checkColorChange(final String fieldId, final Color newColor, final Color oldColor) { - editedFields.put(fieldId, !newColor.equals(oldColor)); - checkSaveButtonEnabled(); - } - - /** - * Updates the map of fields which can be edited. - * - * @param fieldId - * Id of the current component - * @param hasTextValueChanged - * Boolean if value has changed - */ - public void updateEditedFields(final String fieldId, final Boolean hasTextValueChanged) { - editedFields.put(fieldId, hasTextValueChanged); - checkSaveButtonEnabled(); - } - - /** - * Resets the map of mandatory and edited Fields and disable the save button - */ - public void reset() { - saveButton.setEnabled(false); - resetFields(); - } - - private void setRequiredFieldChangeValue(final AbstractComponent component, final boolean isTextChangeNotEmpty) { - requiredFields.put(component.getId(), isTextChangeNotEmpty); - } - - /** - * Checks the mandatory fields in the pop-up-window content. If all - * mandatory fields are filled the save button is enabled. Otherwise the - * save button is disabled. - */ - private void checkSaveButtonEnabled() { - saveButton.setEnabled(!requiredFields.containsValue(Boolean.FALSE) && editedFields.containsValue(Boolean.TRUE)); - } - - private void checkChanges(final String fieldName, final String newText, final String oldText) { - final boolean hasTextValueChanged = (StringUtils.isNotBlank(newText) && !newText.equals(oldText)) - || (StringUtils.isNotBlank(oldText) && !oldText.equals(newText)); - editedFields.put(fieldName, hasTextValueChanged); - } - - private void resetFields() { - for (final Map.Entry entry : requiredFields.entrySet()) { - entry.setValue(Boolean.FALSE); - } - - for (final Map.Entry entry : editedFields.entrySet()) { - entry.setValue(Boolean.FALSE); - } + public HorizontalLayout getButtonsLayout() { + return buttonsLayout; } private final void init() { @@ -304,6 +148,85 @@ public class CommonDialogWindow extends Window implements Serializable { center(); setModal(true); addStyleName("fontsize"); + setOrginaleValues(); + addListeners(); + } + + private final void setOrginaleValues() { + for (final AbstractField field : allComponents) { + orginalValues.put(field, field.getValue()); + } + } + + private final void addListeners() { + for (final AbstractField field : allComponents) { + field.addValueChangeListener(event -> saveButton.setEnabled(isSaveButtonEnabled())); + if (field instanceof TextChangeNotifier) { + ((TextChangeNotifier) field) + .addTextChangeListener(event -> saveButton.setEnabled(isSaveButtonEnabled())); + } + } + + saveButton.addClickListener(event -> save()); + } + + private void save() { + saveButton.setEnabled(false); + setOrginaleValues(); + } + + private boolean isSaveButtonEnabled() { + return isMandatoyFieldNotEmpty() && isValuesChanged(); + } + + private boolean isValuesChanged() { + for (final AbstractField field : allComponents) { + final Object currentValue = field.getValue(); + final Object orginalValue = orginalValues.get(field); + + if (!Objects.equals(currentValue, orginalValue)) { + return true; + } + + } + return false; + } + + private boolean shouldMandatoryLabelShown() { + for (final AbstractField field : allComponents) { + if (field.isRequired()) { + return true; + } + } + + return false; + } + + private boolean isMandatoyFieldNotEmpty() { + for (final AbstractField field : allComponents) { + // TODO empty string. + if (field.isRequired() && field.getValue() == null) { + return false; + } + } + return true; + } + + private List> getAllComponents(final AbstractLayout abstractLayout) { + final List> components = new ArrayList<>(); + + final Iterator iterate = abstractLayout.iterator(); + while (iterate.hasNext()) { + final Component c = iterate.next(); + if (c instanceof AbstractLayout) { + components.addAll(getAllComponents((AbstractLayout) c)); + } + + if (c instanceof AbstractField) { + components.add((AbstractField) c); + } + } + return components; } private HorizontalLayout createActionButtonsLayout() { @@ -324,7 +247,7 @@ public class CommonDialogWindow extends Window implements Serializable { private void createMandatoryLabel() { - if (!existsMandatoryFieldsInWindowContent()) { + if (!shouldMandatoryLabelShown()) { return; } @@ -366,10 +289,6 @@ public class CommonDialogWindow extends Window implements Serializable { buttonsLayout.setExpandRatio(saveButton, 1.0F); } - private boolean existsMandatoryFieldsInWindowContent() { - return !requiredFields.isEmpty(); - } - private void addHelpLink() { if (StringUtils.isEmpty(helpLink)) { @@ -380,24 +299,4 @@ public class CommonDialogWindow extends Window implements Serializable { buttonsLayout.setComponentAlignment(helpLinkComponent, Alignment.MIDDLE_RIGHT); } - public void setSaveButtonEnabled(final boolean enabled) { - saveButton.setEnabled(enabled); - } - - public void setCancelButtonEnabled(final boolean enabled) { - cancelButton.setEnabled(enabled); - } - - public HorizontalLayout getButtonsLayout() { - return buttonsLayout; - } - - public Map getRequiredFields() { - return requiredFields; - } - - public void setRequiredFields(final Map requiredFields) { - this.requiredFields = requiredFields; - } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java index 3338124c5..d0e509f7e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/components/SPUIComponentProvider.java @@ -37,6 +37,7 @@ import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; import com.vaadin.ui.Component; +import com.vaadin.ui.FormLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Link; @@ -153,10 +154,10 @@ public final class SPUIComponentProvider { */ public static CommonDialogWindow getWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, - final ClickListener cancelButtonClickListener, final String helpLink, - final Map requiredFields, final Map editedFields, final I18N i18n) { + final ClickListener cancelButtonClickListener, final String helpLink, final FormLayout formLayout, + final I18N i18n) { return SPUIWindowDecorator.getDeocratedWindow(caption, id, type, content, saveButtonClickListener, - cancelButtonClickListener, helpLink, requiredFields, editedFields, i18n); + cancelButtonClickListener, helpLink, formLayout, i18n); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java index d2d7740d3..242d8931a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/decorators/SPUIWindowDecorator.java @@ -8,8 +8,6 @@ */ package org.eclipse.hawkbit.ui.decorators; -import java.util.Map; - import org.eclipse.hawkbit.ui.common.CommonDialogWindow; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -17,6 +15,7 @@ import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; +import com.vaadin.ui.FormLayout; import com.vaadin.ui.Window; /** @@ -47,11 +46,11 @@ public final class SPUIWindowDecorator { */ public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type, final Component content, final ClickListener saveButtonClickListener, - final ClickListener cancelButtonClickListener, final String helpLink, - final Map requiredFields, final Map editedFields, final I18N i18n) { + final ClickListener cancelButtonClickListener, final String helpLink, final FormLayout formLayout, + final I18N i18n) { final CommonDialogWindow window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, - cancelButtonClickListener, requiredFields, editedFields, i18n); + cancelButtonClickListener, formLayout, i18n); if (null != id) { window.setId(id); } From 5defb8c6d9932389b3d8720115c52a223c269153 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 27 Jun 2016 17:52:55 +0200 Subject: [PATCH 320/371] Fixed bug where DDI deplyomentBase URL does not reflect TIMEFORCED switch. Signed-off-by: Kai Zimmermann --- .../rest/resource/DataConversionHelper.java | 24 ++++++++-- .../rest/resource/DdiDeploymentBaseTest.java | 46 ++++++++++++++++++- .../src/test/resources/logback.xml | 21 +++++++++ 3 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 hawkbit-ddi-resource/src/test/resources/logback.xml 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 b07e2557c..d87de67d0 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 @@ -79,12 +79,12 @@ public final class DataConversionHelper { final org.eclipse.hawkbit.repository.model.SoftwareModule module, final ArtifactUrlHandler artifactUrlHandler) { final List files = new ArrayList<>(); - + module.getLocalArtifacts() - .forEach(artifact -> files.add(createArtifact(targetid, artifactUrlHandler, artifact))); + .forEach(artifact -> files.add(createArtifact(targetid, artifactUrlHandler, artifact))); return files; } - + private static DdiArtifact createArtifact(final String targetid, final ArtifactUrlHandler artifactUrlHandler, final LocalArtifact artifact) { final DdiArtifact file = new DdiArtifact(); @@ -125,7 +125,7 @@ public final class DataConversionHelper { // response because of eTags. result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()) .getControllerBasedeploymentAction(target.getControllerId(), action.getId(), - actions.hashCode())).withRel(DdiRestConstants.DEPLOYMENT_BASE_ACTION)); + calculateEtag(action))).withRel(DdiRestConstants.DEPLOYMENT_BASE_ACTION)); addedUpdate = true; } else if (action.isCancelingOrCanceled() && !addedCancel) { result.add(linkTo(methodOn(DdiRootController.class, tenantAware.getCurrentTenant()) @@ -142,6 +142,22 @@ public final class DataConversionHelper { return result; } + /** + * Calculates an etag for the given {@link Action} based on the entities + * hashcode and the {@link Action#isHitAutoForceTime(long)} to reflect a + * force switch. + * + * @param action + * to calculate the etag for + * @return the etag + */ + private static int calculateEtag(final Action action) { + final int prime = 31; + int result = action.hashCode(); + result = prime * result + (action.isHitAutoForceTime(System.currentTimeMillis()) ? 1231 : 1237); + return result; + } + static void writeMD5FileResponse(final String fileName, final HttpServletResponse response, final LocalArtifact artifact) throws IOException { final StringBuilder builder = new StringBuilder(); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java index 33d470b3d..0ec0d0d7e 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiDeploymentBaseTest.java @@ -23,15 +23,17 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.RandomUtils; +import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.RepositoryModelConstants; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; +import org.eclipse.hawkbit.repository.model.RepositoryModelConstants; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; @@ -43,6 +45,9 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort.Direction; import org.springframework.hateoas.MediaTypes; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; + +import com.jayway.jsonpath.JsonPath; import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; @@ -229,6 +234,45 @@ public class DdiDeploymentBaseTest extends AbstractRestIntegrationTestWithMongoD assertThat(actionStatusMessage.getStatus()).isEqualTo(Status.RETRIEVED); } + @Test + @Description("Checks that the deployementBase URL changes when the action is switched from soft to forced in TIMEFORCED case.") + public void changeEtagIfActionSwitchesFromSoftToForced() throws Exception { + // Prepare test data + final Target target = targetManagement.createTarget(entityFactory.generateTarget("4712")); + final DistributionSet ds = testdataFactory.createDistributionSet("", true); + + final DistributionSetAssignmentResult result = deploymentManagement.assignDistributionSet(ds.getId(), + ActionType.TIMEFORCED, System.currentTimeMillis() + 1_000, target.getControllerId()); + + final Action action = deploymentManagement.findActiveActionsByTarget(result.getAssignedEntity().get(0)).get(0); + + MvcResult mvcResult = mvc.perform(get("/{tenant}/controller/v1/4712", tenantAware.getCurrentTenant())) + .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(content().contentType(MediaTypes.HAL_JSON)).andReturn(); + + final String urlBeforeSwitch = JsonPath.compile("_links.deploymentBase.href") + .read(mvcResult.getResponse().getContentAsString()).toString(); + + // Time is not yet over, so we should see the same URL + mvcResult = mvc.perform(get("/{tenant}/controller/v1/4712", tenantAware.getCurrentTenant())) + .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(content().contentType(MediaTypes.HAL_JSON)).andReturn(); + assertThat(JsonPath.compile("_links.deploymentBase.href").read(mvcResult.getResponse().getContentAsString()) + .toString()).isEqualTo(urlBeforeSwitch) + .startsWith("http://localhost/" + tenantAware.getCurrentTenant() + + "/controller/v1/4712/deploymentBase/" + action.getId()); + + // After the time is over we should see a new etag + TimeUnit.MILLISECONDS.sleep(1_000); + + mvcResult = mvc.perform(get("/{tenant}/controller/v1/4712", tenantAware.getCurrentTenant())) + .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(content().contentType(MediaTypes.HAL_JSON)).andReturn(); + + assertThat(JsonPath.compile("_links.deploymentBase.href").read(mvcResult.getResponse().getContentAsString()) + .toString()).isNotEqualTo(urlBeforeSwitch); + } + @Test @Description("Attempt/soft deployment to a controller. Checks if the resource reponse payload for a given deployment is as expected.") public void deplomentAttemptAction() throws Exception { diff --git a/hawkbit-ddi-resource/src/test/resources/logback.xml b/hawkbit-ddi-resource/src/test/resources/logback.xml new file mode 100644 index 000000000..447712338 --- /dev/null +++ b/hawkbit-ddi-resource/src/test/resources/logback.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + \ No newline at end of file From 4fdeb1661aafcf74f1e0ecb63a09c2642c05ec62 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 28 Jun 2016 15:02:36 +0200 Subject: [PATCH 321/371] Add require textfielder to rollouts and remove colorpicker Signed-off-by: SirWayne --- .../CreateUpdateSoftwareTypeLayout.java | 34 ------------- .../hawkbit/ui/common/CommonDialogWindow.java | 2 +- .../CreateUpdateDistSetTypeLayout.java | 36 -------------- .../rollout/AddUpdateRolloutWindowLayout.java | 48 +++++++------------ 4 files changed, 18 insertions(+), 102 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 2c6dcd702..3ca0e3631 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -11,13 +11,11 @@ package org.eclipse.hawkbit.ui.artifacts.smtype; import java.util.ArrayList; import java.util.List; -import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent.SoftwareModuleTypeEnum; -import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -34,7 +32,6 @@ import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Alignment; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; @@ -266,37 +263,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout } - /** - * Open color picker on click of preview button. Auto select the color based - * on target tag if already selected. - */ - @Override - protected void previewButtonClicked() { - if (!tagPreviewBtnClicked) { - final String selectedOption = (String) optiongroup.getValue(); - if (StringUtils.isNotEmpty(selectedOption) && selectedOption.equalsIgnoreCase(updateTypeStr)) { - if (null != tagNameComboBox.getValue()) { - final SoftwareModuleType typeSelected = swTypeManagementService - .findSoftwareModuleTypeByName(tagNameComboBox.getValue().toString()); - if (null != typeSelected) { - getColorPickerLayout().setSelectedColor(typeSelected.getColour() != null - ? ColorPickerHelper.rgbToColorConverter(typeSelected.getColour()) - : ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - } - } else { - getColorPickerLayout().setSelectedColor( - ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - } - } - getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); - mainLayout.addComponent(colorPickerLayout, 1, 0); - mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); - } else { - mainLayout.removeComponent(colorPickerLayout); - } - tagPreviewBtnClicked = !tagPreviewBtnClicked; - } - @Override public void addColorChangeListener(final ColorChangeListener listener) { LOG.debug("inside addColorChangeListener"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index e6fb5e957..db1c8bfdb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -219,7 +219,7 @@ public class CommonDialogWindow extends Window implements Serializable { if (String.class.equals(field.getType())) { orginalValue = Strings.emptyToNull((String) orginalValue); - currentValue = Strings.emptyToNull((String) orginalValue); + currentValue = Strings.emptyToNull((String) currentValue); } if (!Objects.equals(orginalValue, currentValue)) { return true; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 6dcb1af0b..b33d7b087 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -654,33 +654,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout return requiredFields; } - @Override - protected void previewButtonClicked() { - if (!tagPreviewBtnClicked) { - final String selectedOption = (String) optiongroup.getValue(); - if (null != selectedOption && selectedOption.equalsIgnoreCase(updateTypeStr) - && null != tagNameComboBox.getValue()) { - - final DistributionSetType existedDistType = distributionSetManagement - .findDistributionSetTypeByKey(tagNameComboBox.getValue().toString()); - if (null != existedDistType) { - getColorPickerLayout().setSelectedColor(existedDistType.getColour() != null - ? ColorPickerHelper.rgbToColorConverter(existedDistType.getColour()) - : ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - } else { - getColorPickerLayout().setSelectedColor( - ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR)); - } - } - getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); - mainLayout.addComponent(colorPickerLayout, 1, 0); - mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER); - } else { - mainLayout.removeComponent(colorPickerLayout); - } - tagPreviewBtnClicked = !tagPreviewBtnClicked; - } - @Override protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePermission) { @@ -688,14 +661,5 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); } - // @Override - // public String getOriginalTypeKey() { - // return originalTypeKey; - // } - // - // @Override - // public void setOriginalTypeKey(final String originalTypeKey) { - // this.originalTypeKey = originalTypeKey; - // } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 071b9c749..e03f72b1e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -146,22 +146,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private TextArea targetFilterQuery; - private String originalDistributionSet; - - private Object originalActionGroup; - - private String originalRolloutName; - - private String originalErrorThreshold; - - private String originalTriggerThreshold; - - private String originalDescription; - - private String originalTargetFilterQueryCombo; - - private String originalNoOfGroups; - /** * Create components and layout. */ @@ -172,7 +156,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } public CommonDialogWindow getWindow() { - + resetComponents(); window = SPUIWindowDecorator.getWindow(i18n.get("caption.configure.rollout"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), uiProperties.getLinks().getDocumentation().getRolloutView(), this, i18n); @@ -222,20 +206,35 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { addComponent(getMandatoryLabel("textfield.name"), 0, 0); addComponent(rolloutName, 1, 0); + rolloutName.setRequired(true); + addComponent(getMandatoryLabel("prompt.distribution.set"), 0, 1); addComponent(distributionSet, 1, 1); + distributionSet.setRequired(true); + addComponent(getMandatoryLabel("prompt.target.filter"), 0, 2); addComponent(targetFilterQueryCombo, 1, 2); + targetFilterQueryCombo.setRequired(true); + addComponent(totalTargetsLabel, 2, 2); + addComponent(getMandatoryLabel("prompt.number.of.groups"), 0, 3); addComponent(noOfGroups, 1, 3); + noOfGroups.setRequired(true); + addComponent(groupSizeLabel, 2, 3); + addComponent(getMandatoryLabel("prompt.tigger.threshold"), 0, 4); addComponent(triggerThreshold, 1, 4); + triggerThreshold.setRequired(true); + addComponent(getPercentHintLabel(), 2, 4); + addComponent(getMandatoryLabel("prompt.error.threshold"), 0, 5); addComponent(errorThreshold, 1, 5); + errorThreshold.setRequired(true); addComponent(errorThresholdOptionGroup, 2, 5); + addComponent(getLabel("textfield.description"), 0, 6); addComponent(description, 1, 6, 2, 6); addComponent(actionTypeOptionGroupLayout, 0, 7, 2, 7); @@ -752,20 +751,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { totalTargetsLabel.setValue(getTotalTargetMessage()); totalTargetsLabel.setVisible(true); - setOriginalValues(); - } - - private void setOriginalValues() { - originalDistributionSet = distributionSet.getValue().toString(); - originalActionGroup = actionTypeOptionGroupLayout.getActionTypeOptionGroup().getValue(); - originalRolloutName = rolloutName.getValue(); - originalTriggerThreshold = triggerThreshold.getValue(); - originalErrorThreshold = errorThreshold.getValue(); - originalDescription = description.getValue(); - originalNoOfGroups = noOfGroups.getValue(); - if (targetFilterQueryCombo.getValue() != null) { - originalTargetFilterQueryCombo = targetFilterQueryCombo.getValue().toString(); - } + window.setOrginaleValues(); } private void disableRequiredFieldsOnEdit() { From 7723c30ce4b1186f7d0b28fae3ab068236b2e740 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 28 Jun 2016 16:25:50 +0200 Subject: [PATCH 322/371] Fix window open issues and set values when a entity is selected Signed-off-by: SirWayne --- .../SoftwareModuleAddUpdateWindow.java | 40 ++++++----- .../hawkbit/ui/common/CommonDialogWindow.java | 34 ++++++++- .../CreateUpdateDistSetTypeLayout.java | 11 --- .../dstable/DistributionSetDetails.java | 3 +- .../dstable/DistributionSetTableHeader.java | 2 +- .../AbstractCreateUpdateTagLayout.java | 4 +- .../DistributionAddUpdateWindowLayout.java | 72 +++++++------------ .../dstable/DistributionDetails.java | 3 +- .../dstable/DistributionTableHeader.java | 2 +- .../ui/utils/CommonDialogWindowHelper.java | 32 --------- 10 files changed, 85 insertions(+), 118 deletions(-) delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/CommonDialogWindowHelper.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 4c31aefec..73346454d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -10,6 +10,8 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.io.Serializable; +import javax.annotation.PostConstruct; + import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -39,7 +41,6 @@ import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; -import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; /** @@ -84,6 +85,14 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se private FormLayout formLayout; + /** + * Initialize Distribution Add and Edit Window. + */ + @PostConstruct + void init() { + createRequiredComponents(); + } + /** * Create window for new software module. * @@ -91,11 +100,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se * module. */ public CommonDialogWindow createAddSoftwareModuleWindow() { - - editSwModule = Boolean.FALSE; - createRequiredComponents(); - createWindow(); - return window; + return createUpdateSoftwareModuleWindow(null); } /** @@ -106,15 +111,11 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se * @return reference of {@link com.vaadin.ui.Window} to update software * module. */ - public Window createUpdateSoftwareModuleWindow(final Long baseSwModuleId) { - - editSwModule = Boolean.TRUE; + public CommonDialogWindow createUpdateSoftwareModuleWindow(final Long baseSwModuleId) { this.baseSwModuleId = baseSwModuleId; - createRequiredComponents(); + resetComponents(); + populateValuesOfSwModule(); createWindow(); - nameTextField.setEnabled(false); - versionTextField.setEnabled(false); - typeComboBox.setEnabled(false); return window; } @@ -162,12 +163,10 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se versionTextField.clear(); descTextArea.clear(); typeComboBox.clear(); + editSwModule = Boolean.FALSE; } private void createWindow() { - - resetComponents(); - final Label madatoryStarLabel = new Label("*"); madatoryStarLabel.setStyleName("v-caption v-required-field-indicator"); madatoryStarLabel.setWidth(null); @@ -184,11 +183,15 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se setCompositionRoot(formLayout); - populateValuesOfSwModule(); window = SPUIWindowDecorator.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null, formLayout, i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); + + nameTextField.setEnabled(!editSwModule); + versionTextField.setEnabled(!editSwModule); + typeComboBox.setEnabled(!editSwModule); + typeComboBox.focus(); } @@ -243,6 +246,9 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se * fill the data of a softwareModule in the content of the window */ private void populateValuesOfSwModule() { + if (baseSwModuleId == null) { + return; + } final SoftwareModule swModle = softwareManagement.findSoftwareModuleById(baseSwModuleId); nameTextField.setValue(swModle.getName()); versionTextField.setValue(swModle.getVersion()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index db1c8bfdb..888fd1409 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -31,6 +31,8 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import com.google.common.base.Strings; +import com.vaadin.data.Container.ItemSetChangeEvent; +import com.vaadin.data.Container.ItemSetChangeListener; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.event.FieldEvents.TextChangeEvent; @@ -50,6 +52,7 @@ import com.vaadin.ui.GridLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Link; +import com.vaadin.ui.Table; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; @@ -132,6 +135,18 @@ public class CommonDialogWindow extends Window implements Serializable { for (final AbstractField field : allComponents) { removeTextListener(field); removeValueChangeListener(field); + removeItemSetChangeistener(field); + } + } + + private void removeItemSetChangeistener(final AbstractField field) { + if (!(field instanceof Table)) { + return; + } + for (final Object listener : field.getListeners(ItemSetChangeEvent.class)) { + if (listener instanceof ChangeListener) { + ((Table) field).removeItemSetChangeListener((ChangeListener) listener); + } } } @@ -186,8 +201,14 @@ public class CommonDialogWindow extends Window implements Serializable { public final void setOrginaleValues() { for (final AbstractField field : allComponents) { - orginalValues.put(field, field.getValue()); + Object value = field.getValue(); + + if (field instanceof Table) { + value = ((Table) field).getContainerDataSource().getItemIds(); + } + orginalValues.put(field, value); } + saveButton.setEnabled(isSaveButtonEnabledAfterValueChange(null, null)); } @@ -197,6 +218,10 @@ public class CommonDialogWindow extends Window implements Serializable { if (field instanceof TextChangeNotifier) { ((TextChangeNotifier) field).addTextChangeListener(new ChangeListener(field)); } + + if (field instanceof Table) { + ((Table) field).addItemSetChangeListener(new ChangeListener(field)); + } } saveButton.addClickListener(event -> close()); @@ -360,7 +385,7 @@ public class CommonDialogWindow extends Window implements Serializable { return this.buttonsLayout; } - private class ChangeListener implements ValueChangeListener, TextChangeListener { + private class ChangeListener implements ValueChangeListener, TextChangeListener, ItemSetChangeListener { private final Field field; @@ -380,6 +405,11 @@ public class CommonDialogWindow extends Window implements Serializable { saveButton.setEnabled(isSaveButtonEnabledAfterValueChange(field, field.getValue())); } + @Override + public void containerItemSetChange(final ItemSetChangeEvent event) { + saveButton.setEnabled(isSaveButtonEnabledAfterValueChange(field, event.getContainer().getItemIds())); + } + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index b33d7b087..cc73e3467 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.distributions.disttype; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -18,7 +17,6 @@ import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.hawkbit.ui.colorpicker.ColorPickerConstants; import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper; import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -26,7 +24,6 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent.DistributionSetTypeEnum; import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout; -import org.eclipse.hawkbit.ui.utils.CommonDialogWindowHelper; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -647,13 +644,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout return i18n.get("caption.add.type"); } - protected Map getMandatoryFields() { - final Map requiredFields = CommonDialogWindowHelper.getMandatoryFields(getFormLayout()); - // Selected SoftwareModulesType - requiredFields.put(selectedTable.getId(), Boolean.FALSE); - return requiredFields; - } - @Override protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePermission) { @@ -661,5 +651,4 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); } - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java index 95441ae57..d51d4fb28 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetDetails.java @@ -259,8 +259,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet @Override protected void onEdit(final ClickEvent event) { - distributionAddUpdateWindowLayout.populateValuesOfDistribution(getSelectedBaseEntityId()); - final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); + final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(getSelectedBaseEntityId()); newDistWindow.setCaption(getI18n().get("caption.update.dist")); UI.getCurrent().addWindow(newDistWindow); newDistWindow.setVisible(Boolean.TRUE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java index 817b465c2..8f392101f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTableHeader.java @@ -152,7 +152,7 @@ public class DistributionSetTableHeader extends AbstractTableHeader { @Override protected void addNewItem(final ClickEvent event) { - final Window newDistWindow = addUpdateWindowLayout.getWindow(); + final Window newDistWindow = addUpdateWindowLayout.getWindow(null); newDistWindow.setCaption(i18n.get("caption.add.new.dist")); UI.getCurrent().addWindow(newDistWindow); newDistWindow.setVisible(Boolean.TRUE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index 5b3266f02..8c85f63a5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -331,6 +331,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent comboLayout.removeComponent(tagNameComboBox); // Default green color + colorPickerLayout.setVisible(false); colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); tagPreviewBtnClicked = false; @@ -424,9 +425,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor()); } - // TODO: - // window.checkColorChange(colorPickerLayout.getId(), - // colorPickerLayout.getSelectedColor(), originalSelectedColor); } protected void closeWindow() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 939753380..3e60a20ab 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -90,11 +90,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { private boolean editDistribution = Boolean.FALSE; private Long editDistId; private CommonDialogWindow window; - private String originalDistName; - private String originalDistVersion; - private String originalDistDescription; - private Boolean originalReqMigStep; - private String originalDistSetType; private FormLayout formLayout; @@ -108,11 +103,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { } private void buildLayout() { - - /* - * The main layout of the window contains mandatory info, textboxes - * (controller Id, name & description) and action buttons layout - */ addStyleName("lay-color"); setSizeUndefined(); @@ -354,50 +344,38 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { descTextArea.clear(); reqMigStepCheckbox.clear(); - originalDistDescription = null; - originalDistName = null; - originalDistSetType = null; - originalDistVersion = null; - originalReqMigStep = Boolean.FALSE; - } - private void populateRequiredComponents() { + private void populateValuesOfDistribution(final Long editDistId) { + this.editDistId = editDistId; + if (editDistId == null) { + return; + } + + final DistributionSet distSet = distributionSetManagement.findDistributionSetByIdWithDetails(editDistId); + if (distSet == null) { + return; + } + + editDistribution = Boolean.TRUE; + distNameTextField.setValue(distSet.getName()); + distVersionTextField.setValue(distSet.getVersion()); + if (distSet.getType().isDeleted()) { + distsetTypeNameComboBox.addItem(distSet.getType().getName()); + } + distsetTypeNameComboBox.setValue(distSet.getType().getName()); + reqMigStepCheckbox.setValue(distSet.isRequiredMigrationStep()); + if (distSet.getDescription() != null) { + descTextArea.setValue(distSet.getDescription()); + } populateDistSetTypeNameCombo(); } - /** - * populate data. - * - * @param editDistId - */ - public void populateValuesOfDistribution(final Long editDistId) { - this.editDistId = editDistId; - editDistribution = Boolean.TRUE; - final DistributionSet distSet = distributionSetManagement.findDistributionSetByIdWithDetails(editDistId); - if (distSet != null) { - distNameTextField.setValue(distSet.getName()); - distVersionTextField.setValue(distSet.getVersion()); - if (distSet.getType().isDeleted()) { - distsetTypeNameComboBox.addItem(distSet.getType().getName()); - } - distsetTypeNameComboBox.setValue(distSet.getType().getName()); - reqMigStepCheckbox.setValue(distSet.isRequiredMigrationStep()); - if (distSet.getDescription() != null) { - descTextArea.setValue(distSet.getDescription()); - } - originalDistName = distSet.getName(); - originalDistVersion = distSet.getVersion(); - originalDistDescription = distSet.getDescription(); - originalReqMigStep = distSet.isRequiredMigrationStep(); - originalDistSetType = distSet.getType().getName(); - } - } - - public CommonDialogWindow getWindow() { + public CommonDialogWindow getWindow(final Long editDistId) { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - populateRequiredComponents(); resetComponents(); + + populateValuesOfDistribution(editDistId); window = SPUIWindowDecorator.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), null, formLayout, i18n); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java index 0bf9ef81b..30ee80317 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionDetails.java @@ -77,8 +77,7 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail @Override protected void onEdit(final ClickEvent event) { - distributionAddUpdateWindowLayout.populateValuesOfDistribution(getSelectedBaseEntityId()); - final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); + final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(getSelectedBaseEntityId()); newDistWindow.setCaption(getI18n().get("caption.update.dist")); UI.getCurrent().addWindow(newDistWindow); newDistWindow.setVisible(Boolean.TRUE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java index b0ed19f8f..0e63ddb95 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionTableHeader.java @@ -154,7 +154,7 @@ public class DistributionTableHeader extends AbstractTableHeader { @Override protected void addNewItem(final ClickEvent event) { - final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); + final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(null); newDistWindow.setCaption(i18n.get("caption.add.new.dist")); UI.getCurrent().addWindow(newDistWindow); newDistWindow.setVisible(Boolean.TRUE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/CommonDialogWindowHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/CommonDialogWindowHelper.java deleted file mode 100644 index c906a87dd..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/CommonDialogWindowHelper.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.eclipse.hawkbit.ui.utils; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import com.vaadin.ui.AbstractField; -import com.vaadin.ui.Component; -import com.vaadin.ui.FormLayout; - -public class CommonDialogWindowHelper { - - /** - * Run through a FormLayout and collect all required Component's IDs in a - * Map - * - * @param formLayout - * Form to be analysed - * @return Map with all required component's IDs - */ - public static Map getMandatoryFields(final FormLayout formLayout) { - final Map requiredFields = new HashMap<>(); - final Iterator iterate = formLayout.iterator(); - while (iterate.hasNext()) { - final Component c = iterate.next(); - if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { - requiredFields.put(c.getId(), Boolean.FALSE); - } - } - return requiredFields; - } -} From 7e32cbd21c9a317e79e90b639a86f66fa5536b2b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 28 Jun 2016 17:38:21 +0200 Subject: [PATCH 323/371] Add table items comparison to enable save button Signed-off-by: SirWayne --- hawkbit-ui/pom.xml | 4 ++ .../hawkbit/ui/common/CommonDialogWindow.java | 65 +++++++++++++------ pom.xml | 6 ++ 3 files changed, 56 insertions(+), 19 deletions(-) diff --git a/hawkbit-ui/pom.xml b/hawkbit-ui/pom.xml index 08d225c62..b90e36e88 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -200,6 +200,10 @@ org.springframework.security spring-security-web + + org.apache.commons + commons-collections4 + com.vaadin diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 888fd1409..7cba5df4a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -12,6 +12,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.io.Serializable; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -20,6 +21,7 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -31,6 +33,7 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import com.google.common.base.Strings; +import com.google.common.collect.Sets; import com.vaadin.data.Container.ItemSetChangeEvent; import com.vaadin.data.Container.ItemSetChangeListener; import com.vaadin.data.Property.ValueChangeEvent; @@ -204,7 +207,7 @@ public class CommonDialogWindow extends Window implements Serializable { Object value = field.getValue(); if (field instanceof Table) { - value = ((Table) field).getContainerDataSource().getItemIds(); + value = Sets.newHashSet(((Table) field).getContainerDataSource().getItemIds()); } orginalValues.put(field, value); } @@ -214,13 +217,15 @@ public class CommonDialogWindow extends Window implements Serializable { private final void addListeners() { for (final AbstractField field : allComponents) { - field.addValueChangeListener(new ChangeListener(field)); + if (field instanceof TextChangeNotifier) { ((TextChangeNotifier) field).addTextChangeListener(new ChangeListener(field)); } if (field instanceof Table) { ((Table) field).addItemSetChangeListener(new ChangeListener(field)); + } else { + field.addValueChangeListener(new ChangeListener(field)); } } @@ -236,17 +241,10 @@ public class CommonDialogWindow extends Window implements Serializable { private boolean isValuesChanged(final Component currentChangedComponent, final Object newValue) { for (final AbstractField field : allComponents) { - Object orginalValue = orginalValues.get(field); - Object currentValue = field.getValue(); - if (field.equals(currentChangedComponent)) { - currentValue = newValue; - } + final Object orginalValue = orginalValues.get(field); + final Object currentValue = getCurrentVaue(currentChangedComponent, newValue, field); - if (String.class.equals(field.getType())) { - orginalValue = Strings.emptyToNull((String) orginalValue); - currentValue = Strings.emptyToNull((String) currentValue); - } - if (!Objects.equals(orginalValue, currentValue)) { + if (!isValueEquals(field, orginalValue, currentValue)) { return true; } @@ -254,6 +252,33 @@ public class CommonDialogWindow extends Window implements Serializable { return false; } + private boolean isValueEquals(final AbstractField field, final Object orginalValue, final Object currentValue) { + if (Set.class.equals(field.getType())) { + return CollectionUtils.isEqualCollection(CollectionUtils.emptyIfNull((Collection) orginalValue), + CollectionUtils.emptyIfNull((Collection) currentValue)); + } + + if (String.class.equals(field.getType())) { + return Objects.equals(Strings.emptyToNull((String) orginalValue), + Strings.emptyToNull((String) currentValue)); + } + + return Objects.equals(orginalValue, currentValue); + } + + private Object getCurrentVaue(final Component currentChangedComponent, final Object newValue, + final AbstractField field) { + Object currentValue = field.getValue(); + if (field instanceof Table) { + currentValue = ((Table) field).getContainerDataSource().getItemIds(); + } + + if (field.equals(currentChangedComponent)) { + currentValue = newValue; + } + return currentValue; + } + private boolean shouldMandatoryLabelShown() { for (final AbstractField field : allComponents) { if (field.isRequired()) { @@ -269,17 +294,14 @@ public class CommonDialogWindow extends Window implements Serializable { .collect(Collectors.toList()); for (final AbstractField field : requiredComponents) { - Object value = field.getValue(); - if (field.equals(currentChangedComponent)) { - value = newValue; - } + Object value = getCurrentVaue(currentChangedComponent, newValue, field); if (String.class.equals(field.getType())) { value = Strings.emptyToNull((String) value); } if (Set.class.equals(field.getType())) { - value = emptyToNull((Set) value); + value = emptyToNull((Collection) value); } if (value == null) { @@ -290,7 +312,7 @@ public class CommonDialogWindow extends Window implements Serializable { } - private static Object emptyToNull(final Set c) { + private static Object emptyToNull(final Collection c) { return (c == null || c.isEmpty()) ? null : c; } @@ -407,7 +429,12 @@ public class CommonDialogWindow extends Window implements Serializable { @Override public void containerItemSetChange(final ItemSetChangeEvent event) { - saveButton.setEnabled(isSaveButtonEnabledAfterValueChange(field, event.getContainer().getItemIds())); + if (!(field instanceof Table)) { + return; + } + final Table table = (Table) field; + saveButton.setEnabled( + isSaveButtonEnabledAfterValueChange(table, table.getContainerDataSource().getItemIds())); } } diff --git a/pom.xml b/pom.xml index 444883bba..5995b8faf 100644 --- a/pom.xml +++ b/pom.xml @@ -111,6 +111,7 @@ 1.1 1.1.1 3.4 + 4.0 20141113 2.0.0 @@ -560,6 +561,11 @@ commons-lang3 ${commons-lang3.version} + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + org.springframework.boot spring-boot-starter-test From 9ce6e43b876e9b5f27a3a2c81a7959457a92f1a2 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 28 Jun 2016 17:49:16 +0200 Subject: [PATCH 324/371] Set value if rollout is edited Signed-off-by: SirWayne --- .../dstable/DistributionAddUpdateWindowLayout.java | 6 +++--- .../rollout/rollout/AddUpdateRolloutWindowLayout.java | 10 +++++++--- .../hawkbit/ui/rollout/rollout/RolloutListGrid.java | 3 +-- .../hawkbit/ui/rollout/rollout/RolloutListHeader.java | 3 +-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index 3e60a20ab..c2f125e3a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -348,6 +348,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { private void populateValuesOfDistribution(final Long editDistId) { this.editDistId = editDistId; + if (editDistId == null) { return; } @@ -368,13 +369,12 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { if (distSet.getDescription() != null) { descTextArea.setValue(distSet.getDescription()); } - populateDistSetTypeNameCombo(); } public CommonDialogWindow getWindow(final Long editDistId) { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); resetComponents(); - + populateDistSetTypeNameCombo(); populateValuesOfDistribution(editDistId); window = SPUIWindowDecorator.getWindow(i18n.get("caption.add.new.dist"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), @@ -386,7 +386,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { /** * Populate DistributionSet Type name combo. */ - public void populateDistSetTypeNameCombo() { + private void populateDistSetTypeNameCombo() { distsetTypeNameComboBox.setContainerDataSource(getDistSetTypeLazyQueryContainer()); distsetTypeNameComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); distsetTypeNameComboBox.setValue(getDefaultDistributionSetType().getName()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index e03f72b1e..777682ff1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -155,8 +155,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { buildLayout(); } - public CommonDialogWindow getWindow() { + public CommonDialogWindow getWindow(final Long rolloutId) { resetComponents(); + populateData(rolloutId); window = SPUIWindowDecorator.getWindow(i18n.get("caption.configure.rollout"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), uiProperties.getLinks().getDocumentation().getRolloutView(), this, i18n); @@ -728,8 +729,11 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { * @param rolloutId * rollout id */ - public void populateData(final Long rolloutId) { - resetComponents(); + private void populateData(final Long rolloutId) { + if (rolloutId == null) { + return; + } + editRolloutEnabled = Boolean.TRUE; rolloutForEdit = rolloutManagement.findRolloutById(rolloutId); rolloutName.setValue(rolloutForEdit.getName()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 97bd4bd35..db4fbb929 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -431,8 +431,7 @@ public class RolloutListGrid extends AbstractGrid { } private void onUpdate(final ContextMenuData contextMenuData) { - addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); - final CommonDialogWindow addTargetWindow = addUpdateRolloutWindow.getWindow(); + final CommonDialogWindow addTargetWindow = addUpdateRolloutWindow.getWindow(contextMenuData.getRolloutId()); addTargetWindow.setCaption(i18n.get("caption.update.rollout")); UI.getCurrent().addWindow(addTargetWindow); addTargetWindow.setVisible(Boolean.TRUE); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index 1a3d2d7a5..49bb90100 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -91,8 +91,7 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected void addNewItem(final ClickEvent event) { - addUpdateRolloutWindow.resetComponents(); - final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); + final Window addTargetWindow = addUpdateRolloutWindow.getWindow(null); UI.getCurrent().addWindow(addTargetWindow); addTargetWindow.setVisible(Boolean.TRUE); From 8cd6e5d614b3f5c711d65f4fc82881e4c8391d1d Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 29 Jun 2016 14:20:40 +0200 Subject: [PATCH 325/371] Made queue declaration retry count configurable. Signed-off-by: Kai Zimmermann --- .../hawkbit/amqp/AmqpConfiguration.java | 13 ++--- .../amqp/AmqpMessageHandlerService.java | 34 ++++++------- .../eclipse/hawkbit/amqp/AmqpProperties.java | 23 +++++++++ ...gurableRabbitListenerContainerFactory.java | 49 +++++++++++++++++++ 4 files changed, 89 insertions(+), 30 deletions(-) create mode 100644 hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java index 538f82213..11f892654 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java @@ -22,11 +22,11 @@ import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.QueueBuilder; -import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.beans.factory.annotation.Autowired; @@ -268,15 +268,8 @@ public class AmqpConfiguration { * AMQP messages */ @Bean(name = { "listenerContainerFactory" }) - public SimpleRabbitListenerContainerFactory listenerContainerFactory() { - final SimpleRabbitListenerContainerFactory containerFactory = new SimpleRabbitListenerContainerFactory(); - containerFactory.setDefaultRequeueRejected(true); - containerFactory.setConnectionFactory(rabbitConnectionFactory); - containerFactory.setMissingQueuesFatal(amqpProperties.isMissingQueuesFatal()); - containerFactory.setConcurrentConsumers(amqpProperties.getInitialConcurrentConsumers()); - containerFactory.setMaxConcurrentConsumers(amqpProperties.getMaxConcurrentConsumers()); - containerFactory.setPrefetchCount(amqpProperties.getPrefetchCount()); - return containerFactory; + public RabbitListenerContainerFactory listenerContainerFactory() { + return new ConfigurableRabbitListenerContainerFactory(amqpProperties, rabbitConnectionFactory); } private static Map getTTLMaxArgsAuthenticationQueue() { 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 b003d316a..9636de5c7 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 @@ -138,9 +138,18 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } @RabbitListener(queues = "${hawkbit.dmf.rabbitmq.authenticationReceiverQueue}", containerFactory = "listenerContainerFactory") - public Message onAuthenticationRequest(final Message message, - @Header(MessageHeaderKey.TENANT) final String tenant) { - return onAuthenticationRequest(message); + public Message onAuthenticationRequest(final Message message) { + checkContentTypeJson(message); + final SecurityContext oldContext = SecurityContextHolder.getContext(); + try { + return handleAuthentifiactionMessage(message); + } catch (final IllegalArgumentException ex) { + throw new AmqpRejectAndDontRequeueException("Invalid message!", ex); + } catch (final TenantNotExistException teex) { + throw new AmqpRejectAndDontRequeueException(teex); + } finally { + SecurityContextHolder.setContext(oldContext); + } } public Message onMessage(final Message message, final String type, final String tenant, final String virtualHost) { @@ -159,7 +168,6 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final EventTopic eventTopic = EventTopic.valueOf(topicValue); handleIncomingEvent(message, eventTopic); break; - default: logAndThrowMessageError(message, "No handle method was found for the given message type."); } @@ -173,20 +181,6 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return null; } - public Message onAuthenticationRequest(final Message message) { - checkContentTypeJson(message); - final SecurityContext oldContext = SecurityContextHolder.getContext(); - try { - return handleAuthentifiactionMessage(message); - } catch (final IllegalArgumentException ex) { - throw new AmqpRejectAndDontRequeueException("Invalid message!", ex); - } catch (final TenantNotExistException teex) { - throw new AmqpRejectAndDontRequeueException(teex); - } finally { - SecurityContextHolder.setContext(oldContext); - } - } - private Message handleAuthentifiactionMessage(final Message message) { final DownloadResponse authentificationResponse = new DownloadResponse(); final MessageProperties messageProperties = message.getMessageProperties(); @@ -414,7 +408,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { if (ArrayUtils.isNotEmpty(message.getMessageProperties().getCorrelationId())) { actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "DMF message correlation-id " - + message.getMessageProperties().getCorrelationId()); + + new String(message.getMessageProperties().getCorrelationId())); } actionStatus.setAction(action); @@ -466,7 +460,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { if (messageProperties.getContentType() != null && messageProperties.getContentType().contains("json")) { return; } - throw new IllegalArgumentException("Content-Type is not JSON compatible"); + throw new AmqpRejectAndDontRequeueException("Content-Type is not JSON compatible"); } void setControllerManagement(final ControllerManagement controllerManagement) { diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java index 888b204e7..56aa37772 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java @@ -68,6 +68,29 @@ public class AmqpProperties { */ private int initialConcurrentConsumers = 3; + /** + * The number of retry attempts when passive queue declaration fails. + * Passive queue declaration occurs when the consumer starts or, when + * consuming from multiple queues, when not all queues were available during + * initialization. + */ + private int declarationRetries = 50; + + /** + * @return the declarationRetries + */ + public int getDeclarationRetries() { + return declarationRetries; + } + + /** + * @param declarationRetries + * the declarationRetries to set + */ + public void setDeclarationRetries(final int declarationRetries) { + this.declarationRetries = declarationRetries; + } + public String getAuthenticationReceiverQueue() { return authenticationReceiverQueue; } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java new file mode 100644 index 000000000..fd0a1d2a1 --- /dev/null +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.amqp; + +import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; + +/** + * {@link RabbitListenerContainerFactory} that can be configured through + * hawkBit's {@link AmqpProperties}. + * + */ +public class ConfigurableRabbitListenerContainerFactory extends SimpleRabbitListenerContainerFactory { + private final AmqpProperties amqpProperties; + + /** + * Constructor. + * + * @param rabbitConnectionFactory + * for the container factory + * @param amqpProperties + * to configure the container factory + */ + public ConfigurableRabbitListenerContainerFactory(final AmqpProperties amqpProperties, + final ConnectionFactory rabbitConnectionFactory) { + this.amqpProperties = amqpProperties; + setDefaultRequeueRejected(true); + setConnectionFactory(rabbitConnectionFactory); + setMissingQueuesFatal(amqpProperties.isMissingQueuesFatal()); + setConcurrentConsumers(amqpProperties.getInitialConcurrentConsumers()); + setMaxConcurrentConsumers(amqpProperties.getMaxConcurrentConsumers()); + setPrefetchCount(amqpProperties.getPrefetchCount()); + + } + + @Override + protected void initializeContainer(final SimpleMessageListenerContainer instance) { + super.initializeContainer(instance); + instance.setDeclarationRetries(amqpProperties.getDeclarationRetries()); + } +} From 0c4d88a8f4714f7087bc10702eec6e7b2a600bd6 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 29 Jun 2016 15:15:06 +0200 Subject: [PATCH 326/371] Fixed test. Signed-off-by: Kai Zimmermann --- .../org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6e61d1642..0dcf6cd85 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 @@ -141,7 +141,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); fail("IllegalArgumentException was excepeted due to worng content type"); - } catch (final IllegalArgumentException e) { + } catch (final AmqpRejectAndDontRequeueException e) { } } From 202054e129631d820440d0d1b1a8ee59565ad739 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 29 Jun 2016 15:20:23 +0200 Subject: [PATCH 327/371] Fixed sonar issue. Signed-off-by: Kai Zimmermann --- .../amqp/ConfigurableRabbitListenerContainerFactory.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java index fd0a1d2a1..14e6f8fcb 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java @@ -42,6 +42,9 @@ public class ConfigurableRabbitListenerContainerFactory extends SimpleRabbitList } @Override + // Exception squid:UnusedProtectedMethod - called by + // AbstractRabbitListenerContainerFactory + @SuppressWarnings("squid:UnusedProtectedMethod") protected void initializeContainer(final SimpleMessageListenerContainer instance) { super.initializeContainer(instance); instance.setDeclarationRetries(amqpProperties.getDeclarationRetries()); From c3b999792b5190f943171c45e04aec2618d302a7 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 29 Jun 2016 16:18:35 +0200 Subject: [PATCH 328/371] Clarified string conversion. Signed-off-by: Kai Zimmermann --- .../org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 9636de5c7..d1bf85103 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 @@ -408,7 +408,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { if (ArrayUtils.isNotEmpty(message.getMessageProperties().getCorrelationId())) { actionStatus.addMessage(RepositoryConstants.SERVER_MESSAGE_PREFIX + "DMF message correlation-id " - + new String(message.getMessageProperties().getCorrelationId())); + + convertCorrelationId(message)); } actionStatus.setAction(action); @@ -416,6 +416,10 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return actionStatus; } + private static String convertCorrelationId(final Message message) { + return new String(message.getMessageProperties().getCorrelationId()); + } + private Action getUpdateActionStatus(final ActionStatus actionStatus) { if (actionStatus.getStatus().equals(Status.CANCELED)) { return controllerManagement.addCancelActionStatus(actionStatus); From 8d6526ae8fe25c164d46597b3966c74e0731571c Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 29 Jun 2016 17:01:24 +0200 Subject: [PATCH 329/371] Fixed fail messages. Signed-off-by: Kai Zimmermann --- .../amqp/AmqpMessageHandlerServiceTest.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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 0dcf6cd85..2627731c6 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 @@ -140,7 +140,7 @@ public class AmqpMessageHandlerServiceTest { final Message message = new Message(new byte[0], messageProperties); try { amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); - fail("IllegalArgumentException was excepeted due to worng content type"); + fail("AmqpRejectAndDontRequeueException was excepeted due to worng content type"); } catch (final AmqpRejectAndDontRequeueException e) { } } @@ -175,7 +175,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); - fail("IllegalArgumentException was excepeted since no replyTo header was set"); + fail("AmqpRejectAndDontRequeueException was excepeted since no replyTo header was set"); } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } @@ -189,7 +189,7 @@ public class AmqpMessageHandlerServiceTest { final Message message = messageConverter.toMessage(new byte[0], messageProperties); try { amqpMessageHandlerService.onMessage(message, MessageType.THING_CREATED.name(), TENANT, "vHost"); - fail("IllegalArgumentException was excepeted since no thingID was set"); + fail("AmqpRejectAndDontRequeueException was excepeted since no thingID was set"); } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } @@ -205,7 +205,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, type, TENANT, "vHost"); - fail("IllegalArgumentException was excepeted due to unknown message type"); + fail("AmqpRejectAndDontRequeueException was excepeted due to unknown message type"); } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } @@ -218,21 +218,21 @@ public class AmqpMessageHandlerServiceTest { final Message message = new Message(new byte[0], messageProperties); try { amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); - fail("IllegalArgumentException was excepeted due to unknown message type"); + fail("AmqpRejectAndDontRequeueException was excepeted due to unknown message type"); } catch (final AmqpRejectAndDontRequeueException e) { } try { messageProperties.setHeader(MessageHeaderKey.TOPIC, "wrongTopic"); amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); - fail("IllegalArgumentException was excepeted due to unknown topic"); + fail("AmqpRejectAndDontRequeueException was excepeted due to unknown topic"); } catch (final AmqpRejectAndDontRequeueException e) { } messageProperties.setHeader(MessageHeaderKey.TOPIC, EventTopic.CANCEL_DOWNLOAD.name()); try { amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); - fail("IllegalArgumentException was excepeted because there was no event topic"); + fail("AmqpRejectAndDontRequeueException was excepeted because there was no event topic"); } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } @@ -251,7 +251,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); - fail("IllegalArgumentException was excepeted since no action id was set"); + fail("AmqpRejectAndDontRequeueException was excepeted since no action id was set"); } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } @@ -268,7 +268,7 @@ public class AmqpMessageHandlerServiceTest { try { amqpMessageHandlerService.onMessage(message, MessageType.EVENT.name(), TENANT, "vHost"); - fail("IllegalArgumentException was excepeted since no action id was set"); + fail("AmqpRejectAndDontRequeueException was excepeted since no action id was set"); } catch (final AmqpRejectAndDontRequeueException exception) { // test ok - exception was excepted } From f79073a15e72f76b0d351e6ec47ee90533b7c626 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 29 Jun 2016 19:16:17 +0200 Subject: [PATCH 330/371] Save button is only enabled if validation is successful Signed-off-by: Melanie Retter --- .../SoftwareModuleAddUpdateWindow.java | 49 +------ .../CreateUpdateSoftwareTypeLayout.java | 6 +- .../hawkbit/ui/common/CommonDialogWindow.java | 68 ++++++---- .../CreateUpdateDistSetTypeLayout.java | 58 +-------- .../AbstractCreateUpdateTagLayout.java | 49 ++----- .../ui/layouts/CreateUpdateTypeLayout.java | 5 - .../DistributionAddUpdateWindowLayout.java | 58 +-------- .../TargetAddUpdateWindowLayout.java | 55 +------- .../CreateUpdateTargetTagLayoutWindow.java | 1 - .../rollout/AddUpdateRolloutWindowLayout.java | 122 ++++++------------ 10 files changed, 110 insertions(+), 361 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java index 73346454d..c8eb74313 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java @@ -26,7 +26,6 @@ import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; @@ -40,7 +39,6 @@ import com.vaadin.ui.FormLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; -import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; /** @@ -184,8 +182,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se setCompositionRoot(formLayout); window = SPUIWindowDecorator.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null, - formLayout, i18n); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), null, null, formLayout, i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); nameTextField.setEnabled(!editSwModule); @@ -202,10 +199,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se final String description = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); final String type = typeComboBox.getValue() != null ? typeComboBox.getValue().toString() : null; - if (!mandatoryCheck(name, version, type)) { - return; - } - if (HawkbitCommonUtil.isDuplicate(name, version, type)) { uiNotifcation.displayValidationError( i18n.get("message.duplicate.softwaremodule", new Object[] { name, version })); @@ -218,8 +211,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se new Object[] { newBaseSoftwareModule.getName() + ":" + newBaseSoftwareModule.getVersion() })); eventBus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.NEW_ENTITY, newBaseSoftwareModule)); } - // close the window - closeThisWindow(); } } @@ -239,7 +230,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se eventBus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.UPDATED_ENTITY, newSWModule)); } - closeThisWindow(); } /** @@ -249,6 +239,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se if (baseSwModuleId == null) { return; } + editSwModule = Boolean.TRUE; final SoftwareModule swModle = softwareManagement.findSoftwareModuleById(baseSwModuleId); nameTextField.setValue(swModle.getName()); versionTextField.setValue(swModle.getVersion()); @@ -262,42 +253,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se typeComboBox.setValue(swModle.getType().getName()); } - /** - * Method to close window. - */ - private void closeThisWindow() { - window.close(); - UI.getCurrent().removeWindow(window); - } - - /** - * Validation check - Mandatory. - * - * @param name - * as String - * @param version - * as version - * @return boolena as flag - */ - private boolean mandatoryCheck(final String name, final String version, final String type) { - boolean isValid = true; - if (name == null || version == null || type == null) { - if (name == null) { - nameTextField.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); - } - if (version == null) { - versionTextField.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); - } - if (type == null) { - typeComboBox.addStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR); - } - - uiNotifcation.displayValidationError(i18n.get("message.mandatory.check")); - isValid = false; - } - return isValid; - } - private void saveOrUpdate() { if (editSwModule) { updateSwModule(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 3ca0e3631..18d6b159c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -36,7 +36,6 @@ import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.components.colorpicker.ColorChangeListener; -import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; /** @@ -45,8 +44,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout - implements ColorChangeListener, ColorSelector { +public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout { private static final long serialVersionUID = -5169398523815919367L; private static final Logger LOG = LoggerFactory.getLogger(CreateUpdateSoftwareTypeLayout.class); @@ -231,7 +229,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout newSWType = swTypeManagementService.createSoftwareModuleType(newSWType); uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { newSWType.getName() })); - closeWindow(); eventBus.publish(this, new SoftwareModuleTypeEvent(SoftwareModuleTypeEnum.ADD_SOFTWARE_MODULE_TYPE, newSWType)); @@ -253,7 +250,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout existingType.setColour(ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview())); swTypeManagementService.updateSoftwareModuleType(existingType); uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { existingType.getName() })); - closeWindow(); eventBus.publish(this, new SoftwareModuleTypeEvent(SoftwareModuleTypeEnum.UPDATE_SOFTWARE_MODULE_TYPE, existingType)); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 7cba5df4a..1d2f3b2d4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -31,6 +31,7 @@ import org.eclipse.hawkbit.ui.management.targettable.TargetAddUpdateWindowLayout import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import org.vaadin.hene.flexibleoptiongroup.FlexibleOptionGroupItemComponent; import com.google.common.base.Strings; import com.google.common.collect.Sets; @@ -38,6 +39,8 @@ import com.vaadin.data.Container.ItemSetChangeEvent; import com.vaadin.data.Container.ItemSetChangeListener; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.data.Validator; +import com.vaadin.data.validator.NullValidator; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.event.FieldEvents.TextChangeNotifier; @@ -64,6 +67,7 @@ import com.vaadin.ui.themes.ValoTheme; * * Table pop-up-windows including a minimize and close icon in the upper right * corner and a save and cancel button at the bottom. Is not intended to reuse. + * */ public class CommonDialogWindow extends Window implements Serializable { @@ -89,6 +93,8 @@ public class CommonDialogWindow extends Window implements Serializable { private final ClickListener cancelButtonClickListener; + private final ClickListener close = event -> close(); + private final Map orginalValues; private final List> allComponents; @@ -113,7 +119,6 @@ public class CommonDialogWindow extends Window implements Serializable { final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, final AbstractLayout layout, final I18N i18n) { checkNotNull(saveButtonClickListener); - checkNotNull(cancelButtonClickListener); this.caption = caption; this.content = content; this.helpLink = helpLink; @@ -211,13 +216,11 @@ public class CommonDialogWindow extends Window implements Serializable { } orginalValues.put(field, value); } - saveButton.setEnabled(isSaveButtonEnabledAfterValueChange(null, null)); } private final void addListeners() { for (final AbstractField field : allComponents) { - if (field instanceof TextChangeNotifier) { ((TextChangeNotifier) field).addTextChangeListener(new ChangeListener(field)); } @@ -229,13 +232,13 @@ public class CommonDialogWindow extends Window implements Serializable { } } - saveButton.addClickListener(event -> close()); - cancelButton.addClickListener(event -> close()); + saveButton.addClickListener(close); + cancelButton.addClickListener(close); } private boolean isSaveButtonEnabledAfterValueChange(final Component currentChangedComponent, final Object newValue) { - return isMandatoyFieldNotEmpty(currentChangedComponent, newValue) + return isMandatoryFieldNotEmptyAndValid(currentChangedComponent, newValue) && isValuesChanged(currentChangedComponent, newValue); } @@ -247,7 +250,6 @@ public class CommonDialogWindow extends Window implements Serializable { if (!isValueEquals(field, orginalValue, currentValue)) { return true; } - } return false; } @@ -289,31 +291,45 @@ public class CommonDialogWindow extends Window implements Serializable { return false; } - private boolean isMandatoyFieldNotEmpty(final Component currentChangedComponent, final Object newValue) { + private boolean isMandatoryFieldNotEmptyAndValid(final Component currentChangedComponent, final Object newValue) { + + boolean valid = true; final List> requiredComponents = allComponents.stream().filter(field -> field.isRequired()) .collect(Collectors.toList()); - for (final AbstractField field : requiredComponents) { - Object value = getCurrentVaue(currentChangedComponent, newValue, field); + requiredComponents.addAll(allComponents.stream().filter(this::hasNullValidator).collect(Collectors.toList())); - if (String.class.equals(field.getType())) { - value = Strings.emptyToNull((String) value); - } - - if (Set.class.equals(field.getType())) { - value = emptyToNull((Collection) value); - } + for (final AbstractField field : requiredComponents) { + final Object value = getCurrentVaue(currentChangedComponent, newValue, field); if (value == null) { return false; } - } - return true; + // We need to loop through the entire loop for validity testing. + // Otherwise the UI will only mark the + // first field with errors and then stop. If there are several + // fields with errors, this is bad. + field.setValue(value); + if (!field.isValid()) { + valid = false; + } + } + + return valid; } - private static Object emptyToNull(final Collection c) { - return (c == null || c.isEmpty()) ? null : c; + private boolean hasNullValidator(final Component component) { + + if (component instanceof AbstractField) { + final AbstractField fieldComponent = (AbstractField) component; + for (final Validator validator : fieldComponent.getValidators()) { + if (validator instanceof NullValidator) { + return true; + } + } + } + return false; } private List> getAllComponents(final AbstractLayout abstractLayout) { @@ -329,6 +345,10 @@ public class CommonDialogWindow extends Window implements Serializable { if (c instanceof AbstractField) { components.add((AbstractField) c); } + + if (c instanceof FlexibleOptionGroupItemComponent) { + components.add(((FlexibleOptionGroupItemComponent) c).getOwner()); + } } return components; } @@ -374,7 +394,9 @@ public class CommonDialogWindow extends Window implements Serializable { FontAwesome.TIMES, SPUIButtonStyleBorderWithIcon.class); cancelButton.setSizeUndefined(); cancelButton.addStyleName("default-color"); - cancelButton.addClickListener(cancelButtonClickListener); + if (cancelButtonClickListener != null) { + cancelButton.addClickListener(cancelButtonClickListener); + } buttonsLayout.addComponent(cancelButton); buttonsLayout.setComponentAlignment(cancelButton, Alignment.MIDDLE_LEFT); @@ -419,7 +441,6 @@ public class CommonDialogWindow extends Window implements Serializable { @Override public void textChange(final TextChangeEvent event) { saveButton.setEnabled(isSaveButtonEnabledAfterValueChange(field, event.getText())); - } @Override @@ -436,7 +457,6 @@ public class CommonDialogWindow extends Window implements Serializable { saveButton.setEnabled( isSaveButtonEnabledAfterValueChange(table, table.getContainerDataSource().getItemIds())); } - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index cc73e3467..122599520 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.distributions.disttype; -import java.util.Iterator; import java.util.List; import java.util.Set; @@ -49,8 +48,6 @@ import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Table; import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.components.colorpicker.ColorChangeListener; -import com.vaadin.ui.components.colorpicker.ColorSelector; import com.vaadin.ui.themes.ValoTheme; /** @@ -58,8 +55,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout - implements ColorChangeListener, ColorSelector { +public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { private static final long serialVersionUID = -5169398523815877767L; private static final Logger LOG = LoggerFactory.getLogger(CreateUpdateDistSetTypeLayout.class); @@ -259,9 +255,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout for (final Long id : selectedIds) { addTargetTableData(id); } - // TODO: Add Table to window - // window.updateRequiredFields(selectedTable.getId(), - // hasContentChanged()); } private void removeSMType() { @@ -274,40 +267,9 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout for (final Long id : selectedIds) { addSourceTableData(id); selectedTable.removeItem(id); - // window.updateRequiredFields(selectedTable.getId(), - // hasContentChanged()); } } - private Boolean hasContentChanged() { - - if (originalSelectedTableContainer == null) { - originalSelectedTableContainer = new IndexedContainer(); - } - // is new softwareModule added? - for (final Iterator itemIterator = selectedTableContainer.getItemIds().iterator(); itemIterator.hasNext();) { - final long itemId = (Long) itemIterator.next(); - if (!originalSelectedTableContainer.containsId(itemId)) { - // window.updateEditedFields(selectedTable.getId(), - // Boolean.TRUE); - return Boolean.TRUE; - } - } - - // is softwareModule removed and at least one softwareModule is selected - for (final Iterator itemIterator = originalSelectedTableContainer.getItemIds().iterator(); itemIterator - .hasNext();) { - final long itemId = (Long) itemIterator.next(); - if (selectedTableContainer.size() > 0 && !selectedTableContainer.containsId(itemId)) { - // window.updateEditedFields(selectedTable.getId(), - // Boolean.TRUE); - return Boolean.TRUE; - } - } - - return Boolean.FALSE; - } - @SuppressWarnings("unchecked") private void getSourceTableData() { @@ -402,10 +364,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout newDistType.setColour(colorPicked); newDistType = distributionSetManagement.createDistributionSetType(newDistType); uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { newDistType.getName() })); - closeWindow(); eventBus.publish(this, new DistributionSetTypeEvent(DistributionSetTypeEnum.ADD_DIST_SET_TYPE, newDistType)); - } else { uiNotification.displayValidationError(i18n.get("message.error.missing.typenameorkey")); } @@ -445,7 +405,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout distributionSetManagement.updateDistributionSetType(updateDistSetType); uiNotification .displaySuccess(i18n.get("message.update.success", new Object[] { updateDistSetType.getName() })); - closeWindow(); eventBus.publish(this, new DistributionSetTypeEvent(DistributionSetTypeEnum.UPDATE_DIST_SET_TYPE, updateDistSetType)); @@ -480,18 +439,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout return distSetType; } - @Override - public void addColorChangeListener(final ColorChangeListener listener) { - - LOG.info("in side addColorChangeListener() "); - } - - @Override - public void removeColorChangeListener(final ColorChangeListener listener) { - - LOG.info("in side removeColorChangeListener() "); - } - /** * reset the components. */ @@ -515,7 +462,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout super.optionValueChanged(event); if (updateTypeStr.equals(event.getProperty().getValue())) { - // window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE); selectedTable.getContainerDataSource().removeAllItems(); getSourceTableData(); distTypeSelectLayout.setEnabled(false); @@ -616,6 +562,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout sourceTable.removeItem(swModuleType.getId()); saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName()); saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory)); + + // TODO CHECKBOX final CheckBox mandatoryCheckbox = (CheckBox) selectedTableContainer .getContainerProperty(swModuleType.getId(), DIST_TYPE_MANDATORY).getValue(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index 8c85f63a5..6527d5db5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -30,7 +30,6 @@ import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; -import com.google.common.base.Strings; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.server.Page; @@ -335,7 +334,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); tagPreviewBtnClicked = false; - } /** @@ -427,11 +425,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent } - protected void closeWindow() { - window.close(); - UI.getCurrent().removeWindow(window); - } - /** * create option group with Create tag/Update tag based on permissions. */ @@ -463,14 +456,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent } } - @Override - public void addColorChangeListener(final ColorChangeListener listener) { - } - - @Override - public void removeColorChangeListener(final ColorChangeListener listener) { - } - public ColorPickerLayout getColorPickerLayout() { return colorPickerLayout; } @@ -554,7 +539,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent tagManagement.updateDistributionSetTag((DistributionSetTag) targetObj); } uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { targetObj.getName() })); - closeWindow(); } else { uiNotification.displayValidationError(i18n.get("message.tag.update.mandatory")); } @@ -576,27 +560,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent getPreviewButtonColor(previewColor); } - /** - * - * @return - */ - protected Boolean mandatoryValuesPresent() { - if (Strings.isNullOrEmpty(tagName.getValue())) { - if (optiongroup.getValue().equals(createTagStr)) { - displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - if (optiongroup.getValue().equals(updateTagStr)) { - if (null == tagNameComboBox.getValue()) { - displayValidationError(i18n.get(MESSAGE_ERROR_MISSING_TAGNAME)); - } else { - displayValidationError(SPUILabelDefinitions.MISSING_TAG_NAME); - } - } - return Boolean.FALSE; - } - return Boolean.TRUE; - } - protected Boolean checkIsDuplicate(final Tag existingTag) { if (existingTag != null) { displayValidationError(i18n.get("message.tag.duplicate.check", new Object[] { existingTag.getName() })); @@ -637,4 +600,16 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent return mainLayout; } + @Override + public void addColorChangeListener(final ColorChangeListener listener) { + // TODO Auto-generated method stub + + } + + @Override + public void removeColorChangeListener(final ColorChangeListener listener) { + // TODO Auto-generated method stub + + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java index 47451d662..f25a4b485 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/CreateUpdateTypeLayout.java @@ -179,11 +179,6 @@ public abstract class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayo createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor()); } - - // TODO: - // window.checkColorChange(colorPickerLayout.getId(), - // colorPickerLayout.getSelectedColor(), - // getOriginalSelectedColor()); } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java index c2f125e3a..069b9b407 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionAddUpdateWindowLayout.java @@ -50,7 +50,6 @@ import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; -import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; /** @@ -192,7 +191,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { final String distSetTypeName = HawkbitCommonUtil .trimAndNullIfEmpty((String) distsetTypeNameComboBox.getValue()); - if (mandatoryCheck(name, version, distSetTypeName) && duplicateCheck(name, version)) { + if (duplicateCheck(name, version)) { final DistributionSet currentDS = distributionSetManagement.findDistributionSetByIdWithDetails(editDistId); final String desc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); final boolean isMigStepReq = reqMigStepCheckbox.getValue(); @@ -210,7 +209,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { notificationMessage.displayValidationError( i18n.get("message.distribution.no.update", currentDS.getName() + ":" + currentDS.getVersion())); } - closeThisWindow(); } } @@ -224,7 +222,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { final String distSetTypeName = HawkbitCommonUtil .trimAndNullIfEmpty((String) distsetTypeNameComboBox.getValue()); - if (mandatoryCheck(name, version, distSetTypeName) && duplicateCheck(name, version)) { + if (duplicateCheck(name, version)) { final String desc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); final boolean isMigStepReq = reqMigStepCheckbox.getValue(); DistributionSet newDist = entityFactory.generateDistributionSet(); @@ -234,21 +232,11 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { notificationMessage.displaySuccess(i18n.get("message.new.dist.save.success", new Object[] { newDist.getName(), newDist.getVersion() })); - /* close the window */ - closeThisWindow(); eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.NEW_ENTITY, newDist)); } } - /** - * Close window. - */ - private void closeThisWindow() { - window.close(); - UI.getCurrent().removeWindow(window); - } - /** * Set Values for Distribution set. * @@ -292,45 +280,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { } } - /** - * Mandatory Check. - * - * @param name - * as String - * @param version - * as String - * @param selectedJVM - * as String - * @param selectedAgentHub - * as String - * @param selectedOs - * as String - * @return boolean as flag - */ - private boolean mandatoryCheck(final String name, final String version, final String distSetTypeName) { - - if (name == null || version == null || distSetTypeName == null) { - if (name == null) { - distNameTextField.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); - } - if (version == null) { - distVersionTextField.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); - } - if (distSetTypeName == null) { - distsetTypeNameComboBox.addStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR); - } - notificationMessage.displayValidationError(i18n.get("message.mandatory.check")); - return false; - } - - return true; - } - - private void discardDistribution() { - /* Just close this window */ - closeThisWindow(); - } - /** * clear all the fields. */ @@ -377,8 +326,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent { populateDistSetTypeNameCombo(); populateValuesOfDistribution(editDistId); window = SPUIWindowDecorator.getWindow(i18n.get("caption.add.new.dist"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), - null, formLayout, i18n); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), null, null, formLayout, i18n); window.getButtonsLayout().removeStyleName("actionButtonsMargin"); return window; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index fb7307f5f..93c5a4514 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -8,9 +8,7 @@ */ package org.eclipse.hawkbit.ui.management.targettable; -import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; import org.eclipse.hawkbit.repository.EntityFactory; @@ -40,7 +38,6 @@ import com.vaadin.ui.CustomComponent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; -import com.vaadin.ui.UI; import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; @@ -75,10 +72,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { private FormLayout formLayout; private CommonDialogWindow window; - private String originalTargetName; - private String originalTargetDesc; - private String originalControllerId; - /** * Initialize the Add Update Window Component for Target. */ @@ -139,10 +132,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { uINotification.displaySuccess(i18n.get("message.update.success", new Object[] { latestTarget.getName() })); // publishing through event bus eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.UPDATED_ENTITY, latestTarget)); - - /* close the window */ - closeThisWindow(); - /* update details in table */ } private void saveTargetListner() { @@ -153,13 +142,9 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { } } - private void discardTargetListner() { - closeThisWindow(); - } - private void addNewTarget() { final String newControlllerId = HawkbitCommonUtil.trimAndNullIfEmpty(controllerIDTextField.getValue()); - if (mandatoryCheck(newControlllerId) && duplicateCheck(newControlllerId)) { + if (duplicateCheck(newControlllerId)) { final String newName = HawkbitCommonUtil.trimAndNullIfEmpty(nameTextField.getValue()); final String newDesc = HawkbitCommonUtil.trimAndNullIfEmpty(descTextArea.getValue()); @@ -176,27 +161,16 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { /* display success msg */ uINotification.displaySuccess(i18n.get("message.save.success", new Object[] { newTarget.getName() })); - /* close the window */ - closeThisWindow(); } } public Window getWindow() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); window = SPUIWindowDecorator.getWindow(i18n.get("caption.add.new.target"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), - event -> discardTargetListner(), null, formLayout, i18n); + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), null, null, formLayout, i18n); return window; } - private Map getEditedFields() { - final Map editedFields = new HashMap<>(); - editedFields.put(controllerIDTextField.getId(), Boolean.FALSE); - editedFields.put(nameTextField.getId(), Boolean.FALSE); - editedFields.put(descTextArea.getId(), Boolean.FALSE); - return editedFields; - } - /** * clear all fields of Target Edit Window. */ @@ -208,17 +182,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { controllerIDTextField.clear(); descTextArea.clear(); editTarget = Boolean.FALSE; - - originalControllerId = null; - originalTargetDesc = null; - originalTargetName = null; - - } - - private void closeThisWindow() { - editTarget = Boolean.FALSE; - window.close(); - UI.getCurrent().removeWindow(window); } private void setTargetValues(final Target target, final String name, final String description) { @@ -226,16 +189,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { target.setDescription(description); } - private boolean mandatoryCheck(final String newControlllerId) { - if (newControlllerId == null) { - controllerIDTextField.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); - uINotification.displayValidationError("Mandatory details are missing"); - return false; - } else { - return true; - } - } - private boolean duplicateCheck(final String newControlllerId) { final Target existingTarget = targetManagement.findTargetByControllerID(newControlllerId.trim()); if (existingTarget != null) { @@ -261,10 +214,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { if (target.getDescription() != null) { descTextArea.setValue(target.getDescription()); } - - originalTargetDesc = descTextArea.getValue(); - originalTargetName = nameTextField.getValue(); - originalControllerId = controllerIDTextField.getValue(); window.addStyleName("target-update-window"); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java index 765704da8..f96c3b174 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/CreateUpdateTargetTagLayoutWindow.java @@ -129,7 +129,6 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa } newTargetTag = tagManagement.createTargetTag(newTargetTag); displaySuccess(newTargetTag.getName()); - closeWindow(); } else { displayValidationError(i18n.get(MESSAGE_ERROR_MISSING_TAGNAME)); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index 777682ff1..f97f8e43f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -12,7 +12,6 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; -import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.RolloutManagement; @@ -58,8 +57,9 @@ import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Validator; +import com.vaadin.data.util.converter.StringToIntegerConverter; import com.vaadin.data.validator.IntegerRangeValidator; -import com.vaadin.data.validator.RegexpValidator; +import com.vaadin.data.validator.NullValidator; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -69,7 +69,6 @@ import com.vaadin.ui.Label; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; -import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; /** @@ -87,8 +86,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private static final String MESSAGE_ENTER_NUMBER = "message.enter.number"; - private static final String NUMBER_REGEXP = "[-]?[0-9]*\\.?,?[0-9]+"; - @Autowired private ActionTypeOptionGroupLayout actionTypeOptionGroupLayout; @@ -146,6 +143,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private TextArea targetFilterQuery; + private final NullValidator nullValidator = new NullValidator(null, false); + /** * Create components and layout. */ @@ -157,10 +156,10 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { public CommonDialogWindow getWindow(final Long rolloutId) { resetComponents(); - populateData(rolloutId); window = SPUIWindowDecorator.getWindow(i18n.get("caption.configure.rollout"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), null, uiProperties.getLinks().getDocumentation().getRolloutView(), this, i18n); + populateData(rolloutId); return window; } @@ -207,33 +206,34 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { addComponent(getMandatoryLabel("textfield.name"), 0, 0); addComponent(rolloutName, 1, 0); - rolloutName.setRequired(true); + rolloutName.addValidator(nullValidator); addComponent(getMandatoryLabel("prompt.distribution.set"), 0, 1); addComponent(distributionSet, 1, 1); - distributionSet.setRequired(true); + distributionSet.addValidator(nullValidator); addComponent(getMandatoryLabel("prompt.target.filter"), 0, 2); addComponent(targetFilterQueryCombo, 1, 2); - targetFilterQueryCombo.setRequired(true); + targetFilterQueryCombo.addValidator(nullValidator); + targetFilterQuery.removeValidator(nullValidator); addComponent(totalTargetsLabel, 2, 2); addComponent(getMandatoryLabel("prompt.number.of.groups"), 0, 3); addComponent(noOfGroups, 1, 3); - noOfGroups.setRequired(true); + noOfGroups.addValidator(nullValidator); addComponent(groupSizeLabel, 2, 3); addComponent(getMandatoryLabel("prompt.tigger.threshold"), 0, 4); addComponent(triggerThreshold, 1, 4); - triggerThreshold.setRequired(true); + triggerThreshold.addValidator(nullValidator); addComponent(getPercentHintLabel(), 2, 4); addComponent(getMandatoryLabel("prompt.error.threshold"), 0, 5); addComponent(errorThreshold, 1, 5); - errorThreshold.setRequired(true); + errorThreshold.addValidator(nullValidator); addComponent(errorThresholdOptionGroup, 2, 5); addComponent(getLabel("textfield.description"), 0, 6); @@ -386,10 +386,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { targetFilterQF); } - private void onDiscard() { - closeThisWindow(); - } - private void onRolloutSave() { if (editRolloutEnabled) { editRollout(); @@ -399,7 +395,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void editRollout() { - if (mandatoryCheckForEdit() && validateFields() && duplicateCheckForEdit() && null != rolloutForEdit) { + if (duplicateCheckForEdit() && rolloutForEdit != null) { rolloutForEdit.setName(rolloutName.getValue()); rolloutForEdit.setDescription(description.getValue()); final DistributionSetIdName distributionSetIdName = (DistributionSetIdName) distributionSet.getValue(); @@ -417,7 +413,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { final Rollout updatedRollout = rolloutManagement.updateRollout(rolloutForEdit); uiNotification .displaySuccess(i18n.get("message.update.success", new Object[] { updatedRollout.getName() })); - closeThisWindow(); eventBus.publish(this, RolloutEvent.UPDATE_ROLLOUT); } } @@ -445,11 +440,10 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } private void createRollout() { - if (mandatoryCheck() && validateFields() && duplicateCheck()) { + if (duplicateCheck()) { final Rollout rolloutToCreate = saveRollout(); uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { rolloutToCreate.getName() })); eventBus.publish(this, RolloutEvent.CREATE_ROLLOUT); - closeThisWindow(); } } @@ -506,48 +500,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { return true; } - private void closeThisWindow() { - window.close(); - UI.getCurrent().removeWindow(window); - } - - private boolean mandatoryCheck() { - final DistributionSetIdName ds = getDistributionSetSelected(); - final String targetFilter = (String) targetFilterQueryCombo.getValue(); - final String triggerThresoldValue = triggerThreshold.getValue(); - final String errorThresoldValue = errorThreshold.getValue(); - if (hasNoNameOrTargetFilter(targetFilter) || ds == null - || HawkbitCommonUtil.trimAndNullIfEmpty(noOfGroups.getValue()) == null - || isThresholdValueMissing(triggerThresoldValue, errorThresoldValue)) { - uiNotification.displayValidationError(i18n.get("message.mandatory.check")); - return false; - } - return true; - } - - private boolean mandatoryCheckForEdit() { - final DistributionSetIdName ds = getDistributionSetSelected(); - final String targetFilter = targetFilterQuery.getValue(); - final String triggerThresoldValue = triggerThreshold.getValue(); - final String errorThresoldValue = errorThreshold.getValue(); - if (hasNoNameOrTargetFilter(targetFilter) || ds == null - || HawkbitCommonUtil.trimAndNullIfEmpty(noOfGroups.getValue()) == null - || isThresholdValueMissing(triggerThresoldValue, errorThresoldValue)) { - uiNotification.displayValidationError(i18n.get("message.mandatory.check")); - return false; - } - return true; - } - - private boolean hasNoNameOrTargetFilter(final String targetFilter) { - return getRolloutName() == null || targetFilter == null; - } - - private boolean isThresholdValueMissing(final String triggerThresoldValue, final String errorThresoldValue) { - return HawkbitCommonUtil.trimAndNullIfEmpty(triggerThresoldValue) == null - || HawkbitCommonUtil.trimAndNullIfEmpty(errorThresoldValue) == null; - } - private boolean duplicateCheck() { if (rolloutManagement.findRolloutByName(getRolloutName()) != null) { uiNotification.displayValidationError( @@ -573,7 +525,10 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private TextField createErrorThreshold() { final TextField errorField = getTextfield("prompt.error.threshold"); + errorField.setNullRepresentation(""); errorField.addValidator(new ThresholdFieldValidator()); + errorField.setConverter(new StringToIntegerConverter()); + errorField.setConversionError(i18n.get(MESSAGE_ENTER_NUMBER)); errorField.setId(SPUIComponentIdProvider.ROLLOUT_ERROR_THRESOLD_ID); errorField.setMaxLength(7); errorField.setSizeUndefined(); @@ -583,7 +538,10 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { private TextField createTriggerThreshold() { final TextField thresholdField = getTextfield("prompt.tigger.threshold"); thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); + thresholdField.setNullRepresentation(""); thresholdField.addValidator(new ThresholdFieldValidator()); + thresholdField.setConverter(new StringToIntegerConverter()); + thresholdField.setConversionError(i18n.get(MESSAGE_ENTER_NUMBER)); thresholdField.setSizeUndefined(); thresholdField.setMaxLength(3); return thresholdField; @@ -595,12 +553,15 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { noOfGroupsField.addValidator(new GroupNumberValidator()); noOfGroupsField.setSizeUndefined(); noOfGroupsField.setMaxLength(3); + noOfGroupsField.setConverter(new StringToIntegerConverter()); + noOfGroupsField.setConversionError(i18n.get(MESSAGE_ENTER_NUMBER)); noOfGroupsField.addValueChangeListener(this::onGroupNumberChange); + noOfGroupsField.setNullRepresentation(""); return noOfGroupsField; } private void onGroupNumberChange(final ValueChangeEvent event) { - if (noOfGroups.isValid() && !Strings.isNullOrEmpty(noOfGroups.getValue())) { + if (event.getProperty().getValue() != null && noOfGroups.isValid()) { groupSizeLabel.setValue(getTargetPerGroupMessage(String.valueOf(getGroupSize()))); groupSizeLabel.setVisible(true); } else { @@ -643,10 +604,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { return HawkbitCommonUtil.trimAndNullIfEmpty(rolloutName.getValue()); } - private DistributionSetIdName getDistributionSetSelected() { - return (DistributionSetIdName) distributionSet.getValue(); - } - class ErrorThresoldOptionValidator implements Validator { private static final long serialVersionUID = 9049939751976326550L; @@ -659,8 +616,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { uiNotification .displayValidationError(i18n.get("message.rollout.noofgroups.or.targetfilter.missing")); } else { - if (StringUtils.isNotBlank(value.toString())) { - new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); + if (value != null) { final int groupSize = getGroupSize(); new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, groupSize), 0, groupSize).validate(Integer.valueOf(value.toString())); @@ -670,8 +626,12 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { // suppress the need of preserve original exception, will blow // up the // log and not necessary here - catch (@SuppressWarnings("squid:S1166") final InvalidValueException ex) { - LOG.error(ex.getMessage()); + catch ( + + @SuppressWarnings("squid:S1166") final InvalidValueException ex) { + // we have to throw the exception here, otherwise the UI won't + // show the vaadin validation error! + throw ex; } } } @@ -686,8 +646,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { @Override public void validate(final Object value) { try { - if (StringUtils.isNotBlank(value.toString())) { - new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); + if (value != null) { new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, 100), 0, 100) .validate(Integer.valueOf(value.toString())); } @@ -696,7 +655,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { // up the // log and not necessary here catch (@SuppressWarnings("squid:S1166") final InvalidValueException ex) { - LOG.error(ex.getMessage()); + // we have to throw the exception here, otherwise the UI won't + // show the vaadin validation error! + throw ex; } } } @@ -707,8 +668,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { @Override public void validate(final Object value) { try { - if (StringUtils.isNotBlank(value.toString())) { - new RegexpValidator(NUMBER_REGEXP, i18n.get(MESSAGE_ENTER_NUMBER)).validate(value); + if (value != null) { new IntegerRangeValidator(i18n.get(MESSAGE_ROLLOUT_FIELD_VALUE_RANGE, 0, 500), 0, 500) .validate(Integer.valueOf(value.toString())); } @@ -717,7 +677,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { // up the // log and not necessary here catch (@SuppressWarnings("squid:S1166") final InvalidValueException ex) { - LOG.error(ex.getMessage()); + // we have to throw the exception here, otherwise the UI won't + // show the vaadin validation error! + throw ex; } } } @@ -749,7 +711,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { noOfGroups.setEnabled(false); targetFilterQuery.setValue(rolloutForEdit.getTargetFilterQuery()); removeComponent(1, 2); + targetFilterQueryCombo.removeValidator(nullValidator); addComponent(targetFilterQuery, 1, 2); + targetFilterQuery.addValidator(nullValidator); totalTargetsCount = targetManagement.countTargetByTargetFilterQuery(rolloutForEdit.getTargetFilterQuery()); totalTargetsLabel.setValue(getTotalTargetMessage()); @@ -795,7 +759,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { * @param rolloutGroups */ private void setThresholdValues(final List rolloutGroups) { - if (null != rolloutGroups && !rolloutGroups.isEmpty()) { + if (rolloutGroups != null && !rolloutGroups.isEmpty()) { errorThreshold.setValue(rolloutGroups.get(0).getErrorConditionExp()); triggerThreshold.setValue(rolloutGroups.get(0).getSuccessConditionExp()); noOfGroups.setValue(String.valueOf(rolloutGroups.size())); From fa2e801e7648a4c68fe897220f2ec46f44d50dab Mon Sep 17 00:00:00 2001 From: venu1278 Date: Thu, 30 Jun 2016 14:50:20 +0530 Subject: [PATCH 331/371] RolloutView_update_automaticaly_changes_in_repository Signed-off-by: venu1278 --- .../org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 20c2ca710..d16060eea 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -145,6 +145,7 @@ public class RolloutListGrid extends AbstractGrid { final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); if (item == null) { + refreshGrid(); return; } item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); From 67ee674d412da216644813fe4ddcd7b81c95b8af Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 30 Jun 2016 17:48:58 +0200 Subject: [PATCH 332/371] Fix Update bug of softwareModuleType, refactored based on git comments Signed-off-by: Melanie Retter --- .../repository/jpa/JpaSoftwareManagement.java | 2 +- .../CreateUpdateSoftwareTypeLayout.java | 15 +------ .../hawkbit/ui/common/CommonDialogWindow.java | 40 +++++++++++++++++-- .../CreateUpdateDistSetTypeLayout.java | 29 +++++++------- .../AbstractCreateUpdateTagLayout.java | 4 -- .../TargetAddUpdateWindowLayout.java | 10 ++++- .../management/targettable/TargetDetails.java | 3 +- .../rollout/AddUpdateRolloutWindowLayout.java | 30 ++++++++------ .../ui/rollout/rollout/RolloutListHeader.java | 2 +- 9 files changed, 83 insertions(+), 52 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java index 50127e227..b561667a9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSoftwareManagement.java @@ -132,7 +132,7 @@ public class JpaSoftwareManagement implements SoftwareManagement { final JpaSoftwareModuleType type = softwareModuleTypeRepository.findOne(sm.getId()); boolean updated = false; - if (sm.getDescription() != null && !sm.getDescription().equals(type.getDescription())) { + if (sm.getDescription() == null || !sm.getDescription().equals(type.getDescription())) { type.setDescription(sm.getDescription()); updated = true; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java index 18d6b159c..ce7631c26 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java @@ -220,21 +220,14 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout { SoftwareModuleType newSWType = entityFactory.generateSoftwareModuleType(typeKeyValue, typeNameValue, typeDescValue, assignNumber); newSWType.setColour(colorPicked); - - if (null != typeDescValue) { - newSWType.setDescription(typeDescValue); - } - + newSWType.setDescription(typeDescValue); newSWType.setColour(colorPicked); - newSWType = swTypeManagementService.createSoftwareModuleType(newSWType); uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { newSWType.getName() })); eventBus.publish(this, new SoftwareModuleTypeEvent(SoftwareModuleTypeEnum.ADD_SOFTWARE_MODULE_TYPE, newSWType)); - } else { uiNotification.displayValidationError(i18n.get("message.error.missing.typenameorkey")); - } } @@ -244,19 +237,15 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout { final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); if (null != typeNameValue) { existingType.setName(typeNameValue); - - existingType.setDescription(null != typeDescValue ? typeDescValue : null); - + existingType.setDescription(typeDescValue); existingType.setColour(ColorPickerHelper.getColorPickedString(getColorPickerLayout().getSelPreview())); swTypeManagementService.updateSoftwareModuleType(existingType); uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { existingType.getName() })); eventBus.publish(this, new SoftwareModuleTypeEvent(SoftwareModuleTypeEnum.UPDATE_SOFTWARE_MODULE_TYPE, existingType)); - } else { uiNotification.displayValidationError(i18n.get("message.tag.update.mandatory")); } - } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 1d2f3b2d4..725ff4b9b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -52,6 +52,7 @@ import com.vaadin.ui.AbstractOrderedLayout; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.CheckBox; import com.vaadin.ui.Component; import com.vaadin.ui.Field; import com.vaadin.ui.GridLayout; @@ -207,6 +208,10 @@ public class CommonDialogWindow extends Window implements Serializable { addListeners(); } + /** + * saves the original values in a Map so we can use them for detecting + * changes + */ public final void setOrginaleValues() { for (final AbstractField field : allComponents) { Object value = field.getValue(); @@ -244,10 +249,13 @@ public class CommonDialogWindow extends Window implements Serializable { private boolean isValuesChanged(final Component currentChangedComponent, final Object newValue) { for (final AbstractField field : allComponents) { - final Object orginalValue = orginalValues.get(field); + Object originalValue = orginalValues.get(field); + if (field instanceof CheckBox && originalValue == null) { + originalValue = Boolean.FALSE; + } final Object currentValue = getCurrentVaue(currentChangedComponent, newValue, field); - if (!isValueEquals(field, orginalValue, currentValue)) { + if (!isValueEquals(field, originalValue, currentValue)) { return true; } } @@ -300,7 +308,15 @@ public class CommonDialogWindow extends Window implements Serializable { requiredComponents.addAll(allComponents.stream().filter(this::hasNullValidator).collect(Collectors.toList())); for (final AbstractField field : requiredComponents) { - final Object value = getCurrentVaue(currentChangedComponent, newValue, field); + Object value = getCurrentVaue(currentChangedComponent, newValue, field); + + if (String.class.equals(field.getType())) { + value = Strings.emptyToNull((String) value); + } + + if (Set.class.equals(field.getType())) { + value = emptyToNull((Collection) value); + } if (value == null) { return false; @@ -319,6 +335,10 @@ public class CommonDialogWindow extends Window implements Serializable { return valid; } + private static Object emptyToNull(final Collection c) { + return (c == null || c.isEmpty()) ? null : c; + } + private boolean hasNullValidator(final Component component) { if (component instanceof AbstractField) { @@ -459,4 +479,18 @@ public class CommonDialogWindow extends Window implements Serializable { } } + /** + * Adds the component manually to the allComponents-List and adds a + * ValueChangeListener to it. Necessary in Update Distribution Type as the + * CheckBox concerned is an ItemProperty... + * + * @param component + * AbstractField + */ + public void updateAllComponents(final AbstractField component) { + + allComponents.add(component); + component.addValueChangeListener(new ChangeListener(component)); + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java index 122599520..2a12bc859 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/CreateUpdateDistSetTypeLayout.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ui.distributions.disttype; import java.util.List; +import java.util.Map; import java.util.Set; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -83,6 +84,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { private IndexedContainer originalSelectedTableContainer; + private Map mandatoryCheckboxMap; + @Override protected void createRequiredComponents() { @@ -315,7 +318,9 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { saveTblitem = selectedTableContainer.addItem(id); saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue( sourceTable.getContainerDataSource().getItem(id).getItemProperty(DIST_TYPE_NAME).getValue()); - saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox()); + final CheckBox mandatoryCheckBox = new CheckBox(); + window.updateAllComponents(mandatoryCheckBox); + saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(mandatoryCheckBox); saveTblitem.getItemProperty(DIST_TYPE_DESCRIPTION).setValue( sourceTable.getContainerDataSource().getItem(id).getItemProperty(DIST_TYPE_DESCRIPTION).getValue()); } @@ -327,7 +332,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { if (sourceTableContainer != null) { Item saveTblitem; saveTblitem = sourceTableContainer.addItem(selectedId); - selectedTable.getContainerDataSource().getItem(selectedId).getItemProperty(DIST_TYPE_NAME); saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(selectedTable.getContainerDataSource() .getItem(selectedId).getItemProperty(DIST_TYPE_NAME).getValue()); saveTblitem.getItemProperty(DIST_TYPE_DESCRIPTION).setValue(selectedTable.getContainerDataSource() @@ -357,10 +361,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { final SoftwareModuleType swModuleType = softwareManagement.findSoftwareModuleTypeByName(distTypeName); checkMandatoryAndAddMandatoryModuleType(newDistType, isMandatory, swModuleType); } - if (null != typeDescValue) { - newDistType.setDescription(typeDescValue); - } - + newDistType.setDescription(typeDescValue); newDistType.setColour(colorPicked); newDistType = distributionSetManagement.createDistributionSetType(newDistType); uiNotification.displaySuccess(i18n.get("message.save.success", new Object[] { newDistType.getName() })); @@ -387,7 +388,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { if (null != typeNameValue) { updateDistSetType.setName(typeNameValue); updateDistSetType.setKey(typeKeyValue); - updateDistSetType.setDescription(null != typeDescValue ? typeDescValue : null); + updateDistSetType.setDescription(typeDescValue); if (distributionSetManagement.countDistributionSetsByType(existingType) <= 0 && null != itemIds && !itemIds.isEmpty()) { @@ -407,7 +408,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { .displaySuccess(i18n.get("message.update.success", new Object[] { updateDistSetType.getName() })); eventBus.publish(this, new DistributionSetTypeEvent(DistributionSetTypeEnum.UPDATE_DIST_SET_TYPE, updateDistSetType)); - } else { uiNotification.displayValidationError(i18n.get("message.tag.update.mandatory")); } @@ -417,7 +417,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { final Boolean isMandatory, final SoftwareModuleType swModuleType) { if (isMandatory) { updateDistSetType.addMandatoryModuleType(swModuleType); - } else { updateDistSetType.addOptionalModuleType(swModuleType); } @@ -561,15 +560,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout { final Item saveTblitem = selectedTableContainer.addItem(swModuleType.getId()); sourceTable.removeItem(swModuleType.getId()); saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName()); - saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory)); - - // TODO CHECKBOX - final CheckBox mandatoryCheckbox = (CheckBox) selectedTableContainer - .getContainerProperty(swModuleType.getId(), DIST_TYPE_MANDATORY).getValue(); + final CheckBox mandatoryCheckbox = new CheckBox("", mandatory); + mandatoryCheckbox.setId(swModuleType.getName()); + saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(mandatoryCheckbox); final Item originalItem = originalSelectedTableContainer.addItem(swModuleType.getId()); originalItem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName()); - originalItem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory)); + originalItem.getItemProperty(DIST_TYPE_MANDATORY).setValue(mandatoryCheckbox); + + window.updateAllComponents(mandatoryCheckbox); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java index 6527d5db5..8269d4e89 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/layouts/AbstractCreateUpdateTagLayout.java @@ -602,14 +602,10 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent @Override public void addColorChangeListener(final ColorChangeListener listener) { - // TODO Auto-generated method stub - } @Override public void removeColorChangeListener(final ColorChangeListener listener) { - // TODO Auto-generated method stub - } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java index 93c5a4514..2b08c4dbf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetAddUpdateWindowLayout.java @@ -171,6 +171,13 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { return window; } + public Window getWindow(final String entityId) { + populateValuesOfTarget(entityId); + getWindow(); + window.addStyleName("target-update-window"); + return window; + } + /** * clear all fields of Target Edit Window. */ @@ -203,7 +210,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { /** * @param controllerId */ - public void populateValuesOfTarget(final String controllerId) { + private void populateValuesOfTarget(final String controllerId) { resetComponents(); this.controllerId = controllerId; editTarget = Boolean.TRUE; @@ -214,7 +221,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { if (target.getDescription() != null) { descTextArea.setValue(target.getDescription()); } - window.addStyleName("target-update-window"); } public FormLayout getFormLayout() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java index ffaa39411..020b29372 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java @@ -106,7 +106,8 @@ public class TargetDetails extends AbstractTableDetailsLayout { if (getSelectedBaseEntity() == null) { return; } - targetAddUpdateWindowLayout.populateValuesOfTarget(getSelectedBaseEntity().getControllerId()); + targetAddUpdateWindowLayout.getWindow(getSelectedBaseEntity().getControllerId()); + // targetAddUpdateWindowLayout.populateValuesOfTarget(getSelectedBaseEntity().getControllerId()); openWindow(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index f97f8e43f..05eabf249 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -155,14 +155,18 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { } public CommonDialogWindow getWindow(final Long rolloutId) { - resetComponents(); - window = SPUIWindowDecorator.getWindow(i18n.get("caption.configure.rollout"), null, - SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), null, - uiProperties.getLinks().getDocumentation().getRolloutView(), this, i18n); + window = getWindow(); populateData(rolloutId); return window; } + public CommonDialogWindow getWindow() { + resetComponents(); + return SPUIWindowDecorator.getWindow(i18n.get("caption.configure.rollout"), null, + SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), null, + uiProperties.getLinks().getDocumentation().getRolloutView(), this, i18n); + } + /** * Reset the field values. */ @@ -610,9 +614,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { @Override public void validate(final Object value) { try { - if (HawkbitCommonUtil.trimAndNullIfEmpty(noOfGroups.getValue()) == null - || (HawkbitCommonUtil.trimAndNullIfEmpty((String) targetFilterQueryCombo.getValue()) == null - && targetFilterQuery.getValue() == null)) { + if (isNoOfGroupsOrTargetFilterEmpty()) { uiNotification .displayValidationError(i18n.get("message.rollout.noofgroups.or.targetfilter.missing")); } else { @@ -626,14 +628,18 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { // suppress the need of preserve original exception, will blow // up the // log and not necessary here - catch ( - - @SuppressWarnings("squid:S1166") final InvalidValueException ex) { + catch (final InvalidValueException ex) { // we have to throw the exception here, otherwise the UI won't // show the vaadin validation error! throw ex; } } + + private boolean isNoOfGroupsOrTargetFilterEmpty() { + return HawkbitCommonUtil.trimAndNullIfEmpty(noOfGroups.getValue()) == null + || (HawkbitCommonUtil.trimAndNullIfEmpty((String) targetFilterQueryCombo.getValue()) == null + && targetFilterQuery.getValue() == null); + } } private int getGroupSize() { @@ -654,7 +660,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { // suppress the need of preserve original exception, will blow // up the // log and not necessary here - catch (@SuppressWarnings("squid:S1166") final InvalidValueException ex) { + catch (final InvalidValueException ex) { // we have to throw the exception here, otherwise the UI won't // show the vaadin validation error! throw ex; @@ -676,7 +682,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout { // suppress the need of preserve original exception, will blow // up the // log and not necessary here - catch (@SuppressWarnings("squid:S1166") final InvalidValueException ex) { + catch (final InvalidValueException ex) { // we have to throw the exception here, otherwise the UI won't // show the vaadin validation error! throw ex; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index 49bb90100..81608d42d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -91,7 +91,7 @@ public class RolloutListHeader extends AbstractGridHeader { @Override protected void addNewItem(final ClickEvent event) { - final Window addTargetWindow = addUpdateRolloutWindow.getWindow(null); + final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); UI.getCurrent().addWindow(addTargetWindow); addTargetWindow.setVisible(Boolean.TRUE); From 11f9b6737e3f91926b135ddc216f12298e3f6daf Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Thu, 30 Jun 2016 18:06:08 +0200 Subject: [PATCH 333/371] Added Ids for components Signed-off-by: Melanie Retter --- .../eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java | 1 + .../hawkbit/ui/management/tag/SpColorPickerPreview.java | 4 +++- .../eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java index 732523560..2c6191bc8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/colorpicker/ColorPickerLayout.java @@ -73,6 +73,7 @@ public class ColorPickerLayout extends GridLayout { colorSelect.setWidth("220px"); redSlider = createRGBSlider("", "red"); + redSlider.setId(SPUIComponentIdProvider.COLOR_PICKER_RED_SLIDER); greenSlider = createRGBSlider("", "green"); blueSlider = createRGBSlider("", "blue"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java index 29db56009..afbed85a6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/SpColorPickerPreview.java @@ -10,6 +10,8 @@ package org.eclipse.hawkbit.ui.management.tag; import java.lang.reflect.Field; +import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; + import com.google.common.base.Throwables; import com.vaadin.data.Property; import com.vaadin.data.Property.ValueChangeEvent; @@ -44,7 +46,7 @@ public final class SpColorPickerPreview extends ColorPickerPreview implements Te try { final Field textField = ColorPickerPreview.class.getDeclaredField("field"); textField.setAccessible(true); - ((TextField) textField.get(this)).setId("color-preview-field"); + ((TextField) textField.get(this)).setId(SPUIComponentIdProvider.COLOR_PREVIEW_FIELD); ((TextField) textField.get(this)).addTextChangeListener(this); } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { Throwables.propagate(e); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index 7a7d62b87..826985162 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -310,6 +310,14 @@ public final class SPUIComponentIdProvider { * Id for ColorPickerLayout */ public static final String COLOR_PICKER_LAYOUT = "color.picker.layout"; + /** + * Id for ColorPickerLayout's red slider + */ + public static final String COLOR_PICKER_RED_SLIDER = "color.picker.red.slider"; + /** + * Id for Color preview field with the color code + */ + public static final String COLOR_PREVIEW_FIELD = "color-preview-field"; /** * Id for OptionGroup Create/Update tag */ From a4252283dbc8f408525639f95930126b9fbcade8 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Fri, 1 Jul 2016 08:42:17 +0200 Subject: [PATCH 334/371] Target securityToken and address fully manageable through MGMT API. Signed-off-by: kaizimmerm --- .../model/target/MgmtTargetRequestBody.java | 11 ++++ .../mgmt/rest/resource/MgmtTargetMapper.java | 3 +- .../rest/resource/MgmtTargetResource.java | 7 +++ .../rest/resource/MgmtTargetResourceTest.java | 56 ++++++++++++++++++- .../hawkbit/repository/EntityFactory.java | 14 +++++ .../hawkbit/repository/model/Target.java | 6 ++ .../repository/jpa/JpaEntityFactory.java | 9 +++ .../repository/jpa/model/JpaTarget.java | 14 ++++- .../repository/jpa/TargetManagementTest.java | 8 +-- .../hawkbit/rest/util/JsonBuilder.java | 10 ++-- 10 files changed, 124 insertions(+), 14 deletions(-) diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java index b9c0b001a..f7a297be1 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java @@ -21,6 +21,17 @@ public class MgmtTargetRequestBody { @JsonProperty private String address; + @JsonProperty + private String securityToken; + + public String getSecurityToken() { + return securityToken; + } + + public void setSecurityToken(final String securityToken) { + this.securityToken = securityToken; + } + /** * @return the name */ diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java index f6cf9f54b..a889edc35 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java @@ -182,10 +182,11 @@ public final class MgmtTargetMapper { } static Target fromRequest(final EntityFactory entityFactory, final MgmtTargetRequestBody targetRest) { - final Target target = entityFactory.generateTarget(targetRest.getControllerId()); + final Target target = entityFactory.generateTarget(targetRest.getControllerId(), targetRest.getSecurityToken()); target.setDescription(targetRest.getDescription()); target.setName(targetRest.getName()); target.getTargetInfo().setAddress(targetRest.getAddress()); + return target; } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java index c41dadd27..5ddb74314 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java @@ -125,6 +125,13 @@ public class MgmtTargetResource implements MgmtTargetRestApi { if (targetRest.getName() != null) { existingTarget.setName(targetRest.getName()); } + if (targetRest.getAddress() != null) { + existingTarget.getTargetInfo().setAddress(targetRest.getAddress()); + } + if (targetRest.getSecurityToken() != null) { + existingTarget.setSecurityToken(targetRest.getSecurityToken()); + } + final Target updateTarget = this.targetManagement.updateTarget(existingTarget); return new ResponseEntity<>(MgmtTargetMapper.toResponse(updateTarget), HttpStatus.OK); diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index ed6ee4a93..a528438bb 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -355,6 +355,54 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { assertThat(findTargetByControllerID.getName()).isEqualTo(knownNameNotModiy); } + @Test + @Description("Ensures that target update request is reflected by repository.") + public void updateTargetSecurityToken() throws Exception { + final String knownControllerId = "123"; + final String knownNewToken = "6567576565"; + final String knownNameNotModiy = "nameNotModiy"; + final String body = new JSONObject().put("securityToken", knownNewToken).toString(); + + // prepare + final Target t = entityFactory.generateTarget(knownControllerId); + t.setName(knownNameNotModiy); + targetManagement.createTarget(t); + + mvc.perform(put(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId).content(body) + .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(jsonPath("$.controllerId", equalTo(knownControllerId))) + .andExpect(jsonPath("$.securityToken", equalTo(knownNewToken))) + .andExpect(jsonPath("$.name", equalTo(knownNameNotModiy))); + + final Target findTargetByControllerID = targetManagement.findTargetByControllerID(knownControllerId); + assertThat(findTargetByControllerID.getSecurityToken()).isEqualTo(knownNewToken); + assertThat(findTargetByControllerID.getName()).isEqualTo(knownNameNotModiy); + } + + @Test + @Description("Ensures that target update request is reflected by repository.") + public void updateTargetAddress() throws Exception { + final String knownControllerId = "123"; + final String knownNewAddress = "amqp://test123/foobar"; + final String knownNameNotModiy = "nameNotModiy"; + final String body = new JSONObject().put("address", knownNewAddress).toString(); + + // prepare + final Target t = entityFactory.generateTarget(knownControllerId); + t.setName(knownNameNotModiy); + targetManagement.createTarget(t); + + mvc.perform(put(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId).content(body) + .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) + .andExpect(jsonPath("$.controllerId", equalTo(knownControllerId))) + .andExpect(jsonPath("$.address", equalTo(knownNewAddress))) + .andExpect(jsonPath("$.name", equalTo(knownNameNotModiy))); + + final Target findTargetByControllerID = targetManagement.findTargetByControllerID(knownControllerId); + assertThat(findTargetByControllerID.getTargetInfo().getAddress().toString()).isEqualTo(knownNewAddress); + assertThat(findTargetByControllerID.getName()).isEqualTo(knownNameNotModiy); + } + @Test @Description("Ensures that target query returns list of targets in defined format.") public void getTargetWithoutAddtionalRequestParameters() throws Exception { @@ -679,7 +727,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { @Test public void createTargetsListReturnsSuccessful() throws Exception { - final Target test1 = entityFactory.generateTarget("id1"); + final Target test1 = entityFactory.generateTarget("id1", "token"); test1.setDescription("testid1"); test1.setName("testname1"); test1.getTargetInfo().setAddress("amqp://test123/foobar"); @@ -696,7 +744,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { targets.add(test3); final MvcResult mvcResult = mvc - .perform(post("/rest/v1/targets/").content(JsonBuilder.targets(targets)) + .perform(post("/rest/v1/targets/").content(JsonBuilder.targets(targets, true)) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) @@ -705,6 +753,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { .andExpect(jsonPath("[0].description", equalTo("testid1"))) .andExpect(jsonPath("[0].createdAt", not(equalTo(0)))) .andExpect(jsonPath("[0].createdBy", equalTo("bumlux"))) + .andExpect(jsonPath("[0].securityToken", equalTo("token"))) .andExpect(jsonPath("[0].address", equalTo("amqp://test123/foobar"))) .andExpect(jsonPath("[1].name", equalTo("testname2"))) .andExpect(jsonPath("[1].createdBy", equalTo("bumlux"))) @@ -731,6 +780,9 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest { assertThat(targetManagement.findTargetByControllerID("id1")).isNotNull(); assertThat(targetManagement.findTargetByControllerID("id1").getName()).isEqualTo("testname1"); assertThat(targetManagement.findTargetByControllerID("id1").getDescription()).isEqualTo("testid1"); + assertThat(targetManagement.findTargetByControllerID("id1").getSecurityToken()).isEqualTo("token"); + assertThat(targetManagement.findTargetByControllerID("id1").getTargetInfo().getAddress().toString()) + .isEqualTo("amqp://test123/foobar"); assertThat(targetManagement.findTargetByControllerID("id2")).isNotNull(); assertThat(targetManagement.findTargetByControllerID("id2").getName()).isEqualTo("testname2"); assertThat(targetManagement.findTargetByControllerID("id2").getDescription()).isEqualTo("testid2"); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java index 7542cd2ce..87919729e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java @@ -287,6 +287,7 @@ public interface EntityFactory { /** * Generates an empty {@link Target} without persisting it. + * {@link Target#getSecurityToken()} is generated. * * @param controllerID * of the {@link Target} @@ -295,6 +296,19 @@ public interface EntityFactory { */ Target generateTarget(@NotEmpty String controllerID); + /** + * Generates an empty {@link Target} without persisting it. + * + * @param controllerID + * of the {@link Target} + * @param securityToken + * of the {@link Target} for authentication if enabled on tenant. + * Generates one if empty or null. + * + * @return {@link Target} object + */ + Target generateTarget(@NotEmpty String controllerID, @NotEmpty String securityToken); + /** * Generates an empty {@link TargetFilterQuery} without persisting it. * diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java index 56ab89ad3..c09b28a2f 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java @@ -58,4 +58,10 @@ public interface Target extends NamedEntity { */ String getSecurityToken(); + /** + * @param token + * new securityToken + */ + void setSecurityToken(String token); + } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java index a3792de54..51b59f08f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.Collection; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus; @@ -87,6 +88,14 @@ public class JpaEntityFactory implements EntityFactory { return new JpaTarget(controllerId); } + @Override + public Target generateTarget(final String controllerId, final String securityToken) { + if (StringUtils.isEmpty(securityToken)) { + return new JpaTarget(controllerId); + } + return new JpaTarget(controllerId, securityToken); + } + @Override public TargetTag generateTargetTag() { return new JpaTargetTag(); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java index 94f50ff0d..183405470 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -115,9 +115,21 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Persistable targets) { + public static String targets(final List targets, final boolean withToken) { final StringBuilder builder = new StringBuilder(); builder.append("["); @@ -381,10 +377,12 @@ public abstract class JsonBuilder { final String address = target.getTargetInfo().getAddress() != null ? target.getTargetInfo().getAddress().toString() : null; + final String token = withToken ? target.getSecurityToken() : null; + builder.append(new JSONObject().put("controllerId", target.getControllerId()) .put("description", target.getDescription()).put("name", target.getName()).put("createdAt", "0") .put("updatedAt", "0").put("createdBy", "fghdfkjghdfkjh").put("updatedBy", "fghdfkjghdfkjh") - .put("address", address).toString()); + .put("address", address).put("securityToken", token).toString()); } catch (final Exception e) { e.printStackTrace(); } From f2fc1aa91ac548ec63c2db21bb02d5dc8a07708f Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 1 Jul 2016 16:40:07 +0200 Subject: [PATCH 335/371] Simulator throughpout improvements. Signed-off-by: Kai Zimmermann --- .../simulator/DeviceSimulatorUpdater.java | 40 +++++++------------ 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java index 81237beb7..69ed4fd4a 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java @@ -10,8 +10,6 @@ package org.eclipse.hawkbit.simulator; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.security.DigestOutputStream; import java.security.KeyManagementException; @@ -34,6 +32,7 @@ import org.apache.http.conn.ssl.SSLContextBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.eclipse.hawkbit.dmf.json.model.Artifact; +import org.eclipse.hawkbit.dmf.json.model.Artifact.UrlProtocol; import org.eclipse.hawkbit.dmf.json.model.SoftwareModule; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Protocol; import org.eclipse.hawkbit.simulator.UpdateStatus.ResponseStatus; @@ -59,7 +58,7 @@ import com.google.common.io.ByteStreams; public class DeviceSimulatorUpdater { private static final Logger LOGGER = LoggerFactory.getLogger(DeviceSimulatorUpdater.class); - private static final ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(4); + private static final ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(8); @Autowired private SpSenderService spSenderService; @@ -198,18 +197,14 @@ public class DeviceSimulatorUpdater { private static void handleArtifacts(final String targetToken, final List status, final Artifact artifact) { - artifact.getUrls().entrySet().forEach(entry -> { - switch (entry.getKey()) { - case HTTP: - case HTTPS: - status.add(downloadUrl(entry.getValue(), targetToken, artifact.getHashes().getSha1(), - artifact.getSize())); - break; - default: - // not supported yet - break; - } - }); + + if (artifact.getUrls().containsKey(UrlProtocol.HTTPS)) { + status.add(downloadUrl(artifact.getUrls().get(UrlProtocol.HTTPS), targetToken, + artifact.getHashes().getSha1(), artifact.getSize())); + } else if (artifact.getUrls().containsKey(UrlProtocol.HTTP)) { + status.add(downloadUrl(artifact.getUrls().get(UrlProtocol.HTTP), targetToken, + artifact.getHashes().getSha1(), artifact.getSize())); + } } private static UpdateStatus downloadUrl(final String url, final String targetToken, final String sha1Hash, @@ -236,22 +231,15 @@ public class DeviceSimulatorUpdater { return new UpdateStatus(ResponseStatus.ERROR, message); } - final File tempFile = File.createTempFile("uploadFile", null); - // Exception squid:S2070 - not used for hashing sensitive // data @SuppressWarnings("squid:S2070") final MessageDigest md = MessageDigest.getInstance("SHA-1"); - try (final DigestOutputStream dos = new DigestOutputStream(new FileOutputStream(tempFile), md)) { - try (final BufferedOutputStream bdos = new BufferedOutputStream(dos)) { - try (BufferedInputStream bis = new BufferedInputStream(response.getEntity().getContent())) { - overallread = ByteStreams.copy(bis, bdos); - } - } - } finally { - if (tempFile != null && !tempFile.delete()) { - LOGGER.error("Could not delete temporary file: {}", tempFile); + try (final BufferedOutputStream bdos = new BufferedOutputStream( + new DigestOutputStream(ByteStreams.nullOutputStream(), md))) { + try (BufferedInputStream bis = new BufferedInputStream(response.getEntity().getContent())) { + overallread = ByteStreams.copy(bis, bdos); } } From 227b93c5271a2ea28eec81fc3c12da6626b42cae Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 5 Jul 2016 17:41:08 +0200 Subject: [PATCH 336/371] Added artifact download traffic statistics. Signed-off-by: Kai Zimmermann --- .../DownloadIdCacheAutoConfiguration.java | 2 +- .../cache/eventbus/EventDistributorTest.java | 8 ++--- .../eventbus/event/DownloadProgressEvent.java | 13 ++++++- .../resource/DdiArtifactDownloadTest.java | 26 +++++++++++--- .../repository/ControllerManagement.java | 4 ++- .../hawkbit/repository/SystemManagement.java | 11 ++++-- .../repository/TenantStatsManagement.java | 20 ++++++----- .../repository/report/model/TenantUsage.java | 30 +++++++++++++--- .../RepositoryApplicationConfiguration.java | 10 +++++- .../jpa/JpaControllerManagement.java | 4 +-- .../repository/jpa/JpaSystemManagement.java | 2 +- .../jpa/JpaTenantStatsManagement.java | 34 +++++++++++++++++-- .../jpa/cache/CacheWriteNotify.java | 7 ++-- .../jpa/cache/CacheWriteNotifyTest.java | 2 +- .../test/util/AbstractIntegrationTest.java | 4 +++ .../util/RestResourceConversionHelper.java | 6 +++- 16 files changed, 147 insertions(+), 36 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/cache/DownloadIdCacheAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/cache/DownloadIdCacheAutoConfiguration.java index 495200dec..134b50d90 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/cache/DownloadIdCacheAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/cache/DownloadIdCacheAutoConfiguration.java @@ -31,7 +31,7 @@ public class DownloadIdCacheAutoConfiguration { private CacheManager cacheManager; /** - * Bean for the downlod id cache. + * Bean for the download id cache. * * @return the cache */ diff --git a/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java b/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java index c1ff54961..4dbc3ec9a 100644 --- a/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java +++ b/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java @@ -56,7 +56,7 @@ public class EventDistributorTest { @Test public void distributeDistributedEventSendsToRedis() { - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L); underTest.distribute(event); // origin node ID should be set by distributing the event @@ -67,7 +67,7 @@ public class EventDistributorTest { @Test public void dontDistributeDistributedEventIfSameNode() { final String knownNodeId = EventDistributor.getNodeId(); - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L); event.setNodeId(knownNodeId); // test @@ -79,7 +79,7 @@ public class EventDistributorTest { @Test public void handleDistributedMessageFromRedis() { - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L); final String knownChannel = "someChannel"; underTest.handleMessage(event, knownChannel); @@ -90,7 +90,7 @@ public class EventDistributorTest { @Test public void handleDistributedMessageFilteredIfSameNodeId() { - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L); final String knownChannel = "someChannel"; event.setOriginNodeId(EventDistributor.getNodeId()); diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java index 74679f02e..a4be22f70 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java @@ -21,6 +21,7 @@ public class DownloadProgressEvent extends AbstractDistributedEvent { private final Long statusId; private final int progressPercent; + private final long shippedBytes; /** * Constructor. @@ -32,13 +33,15 @@ public class DownloadProgressEvent extends AbstractDistributedEvent { * @param progressPercent * number (1-100) */ - public DownloadProgressEvent(final String tenant, final Long statusId, final int progressPercent) { + public DownloadProgressEvent(final String tenant, final Long statusId, final int progressPercent, + final long shippedBytes) { // the revision of the DownloadProgressEvent is just equal the // progressPercentage due the // percentage is going from 0 to 100. super(statusId, tenant); this.statusId = statusId; this.progressPercent = progressPercent; + this.shippedBytes = shippedBytes; } /** @@ -54,4 +57,12 @@ public class DownloadProgressEvent extends AbstractDistributedEvent { public int getProgressPercent() { return progressPercent; } + + /** + * @return the shippedBytes + */ + public long getShippedBytes() { + return shippedBytes; + } + } diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java index 7f12b78ae..73b8d3f35 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java @@ -29,11 +29,11 @@ import org.apache.commons.lang3.RandomUtils; import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.rest.AbstractRestIntegrationTestWithMongoDB; import org.junit.Test; import org.slf4j.LoggerFactory; @@ -59,11 +59,14 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Artifact Download Resource") public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMongoDB { + private static final int ARTIFACT_SIZE = 5 * 1024 * 1024; + public DdiArtifactDownloadTest() { LOG = LoggerFactory.getLogger(DdiArtifactDownloadTest.class); } private volatile int downLoadProgress = 0; + private volatile long shippedBytes = 0; @Autowired private EventBus eventBus; @@ -236,6 +239,8 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Tests valid downloads through the artifact resource by identifying the artifact not by ID but file name.") public void downloadArtifactThroughFileName() throws Exception { downLoadProgress = 1; + shippedBytes = 0; + tenantStatsManagement.resetTrafficStatsOfTenant(); eventBus.register(this); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); @@ -249,7 +254,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong final DistributionSet ds = testdataFactory.createDistributionSet(""); // create artifact - final byte random[] = RandomUtils.nextBytes(5 * 1024 * 1024); + final byte random[] = RandomUtils.nextBytes(ARTIFACT_SIZE); final LocalArtifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), ds.findFirstModuleByType(osType).getId(), "file1", false); @@ -276,6 +281,8 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong // download complete assertThat(downLoadProgress).isEqualTo(10); + assertThat(shippedBytes).isEqualTo(ARTIFACT_SIZE) + .isEqualTo(tenantStatsManagement.getStatsOfTenant().getOverallArtifactTrafficInBytes()); } @Test @@ -313,6 +320,8 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong + "anonymous as authorization is notpossible, e.g. chekc if the controller has the artifact assigned.") public void downloadArtifactByNameFailsIfNotAuthenticated() throws Exception { downLoadProgress = 1; + shippedBytes = 0; + tenantStatsManagement.resetTrafficStatsOfTenant(); eventBus.register(this); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); @@ -327,7 +336,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong final DistributionSet ds = testdataFactory.createDistributionSet(""); // create artifact - final byte random[] = RandomUtils.nextBytes(5 * 1024); + final byte random[] = RandomUtils.nextBytes(ARTIFACT_SIZE); final Artifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), ds.findFirstModuleByType(osType).getId(), "file1.tar.bz2", false); @@ -335,6 +344,10 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong deploymentManagement.assignDistributionSet(ds, targets); mvc.perform(get("/controller/artifacts/v1/filename/{filename}", "file1.tar.bz2")) .andExpect(status().isNotFound()); + + assertThat(downLoadProgress).isEqualTo(1); + assertThat(shippedBytes).isEqualTo(0) + .isEqualTo(tenantStatsManagement.getStatsOfTenant().getOverallArtifactTrafficInBytes()); } @Test @@ -342,6 +355,8 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Description("Ensures that an authenticated and named controller is permitted to download.") public void downloadArtifactByNameByNamedController() throws Exception { downLoadProgress = 1; + shippedBytes = 0; + tenantStatsManagement.resetTrafficStatsOfTenant(); eventBus.register(this); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); @@ -356,7 +371,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong final DistributionSet ds = testdataFactory.createDistributionSet(""); // create artifact - final byte random[] = RandomUtils.nextBytes(5 * 1024 * 1024); + final byte random[] = RandomUtils.nextBytes(ARTIFACT_SIZE); final Artifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), ds.findFirstModuleByType(osType).getId(), "file1", false); @@ -389,6 +404,8 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong // download complete assertThat(downLoadProgress).isEqualTo(10); + assertThat(shippedBytes).isEqualTo(ARTIFACT_SIZE) + .isEqualTo(tenantStatsManagement.getStatsOfTenant().getOverallArtifactTrafficInBytes()); } @Test @@ -550,5 +567,6 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Subscribe public void listen(final DownloadProgressEvent event) { downLoadProgress++; + shippedBytes += event.getShippedBytes(); } } 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 531da8819..0525bb201 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 @@ -65,9 +65,11 @@ public interface ControllerManagement { * the ID of the {@link ActionStatus} * @param progressPercent * the progress in percentage which must be between 0-100 + * @param shippedBytes + * since last event */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - void downloadProgressPercent(long statusId, int progressPercent); + void downloadProgressPercent(long statusId, int progressPercent, long shippedBytes); /** * Simple addition of a new {@link ActionStatus} entry to the {@link Action} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java index 039e4ae13..8797ada5c 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -63,13 +63,18 @@ public interface SystemManagement { /** * @return {@link TenantMetaData} of {@link TenantAware#getCurrentTenant()} */ + // @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + + // SpringEvalExpressions.HAS_AUTH_OR + // + SpringEvalExpressions.HAS_AUTH_READ_TARGET + + // SpringEvalExpressions.HAS_AUTH_OR + // + SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) TenantMetaData getTenantMetadata(); /** * Returns {@link TenantMetaData} of given and current tenant. Creates for * new tenants also two {@link SoftwareModuleType} (os and app) and - * {@link RepositoryConstants#DEFAULT_DS_TYPES_IN_TENANT} {@link DistributionSetType}s - * (os and os_app). + * {@link RepositoryConstants#DEFAULT_DS_TYPES_IN_TENANT} + * {@link DistributionSetType}s (os and os_app). * * DISCLAIMER: this variant is used during initial login (where the tenant * is not yet in the session). Please user {@link #getTenantMetadata()} for @@ -79,6 +84,7 @@ public interface SystemManagement { * to retrieve data for * @return {@link TenantMetaData} of given tenant */ + // @PreAuthorize(SpringEvalExpressions.IS_SYSTEM_CODE) TenantMetaData getTenantMetadata(@NotNull String tenant); /** @@ -88,6 +94,7 @@ public interface SystemManagement { * to update * @return updated {@link TenantMetaData} entity */ + // @PreAuthorize(SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) TenantMetaData updateTenantMetadata(@NotNull TenantMetaData metaData); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java index 6d390c03c..48a012b06 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java @@ -16,19 +16,23 @@ import org.springframework.security.access.prepost.PreAuthorize; * Management service for statistics of a single tenant. * */ -@FunctionalInterface public interface TenantStatsManagement { /** - * Service for stats of a single tenant. Opens a new transaction and as a - * result can an be used for multiple tenants, i.e. to allow in one session - * to collect data of all tenants in the system. + * Service for stats of a single tenant. * - * @param tenant - * to collect for * @return collected statistics */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) - TenantUsage getStatsOfTenant(String tenant); + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.HAS_AUTH_READ_TARGET + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) + TenantUsage getStatsOfTenant(); + + /** + * Resets {@link TenantUsage#getOverallArtifactTrafficInBytes()} to zero. + * + */ + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) + void resetTrafficStatsOfTenant(); } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java index 5467099c4..76b2baaa0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java @@ -19,6 +19,7 @@ public class TenantUsage { private long artifacts; private long actions; private long overallArtifactVolumeInBytes; + private long overallArtifactTrafficInBytes; /** * Constructor. @@ -105,12 +106,28 @@ public class TenantUsage { return this; } + /** + * @return the overallArtifactTrafficInBytes + */ + public long getOverallArtifactTrafficInBytes() { + return overallArtifactTrafficInBytes; + } + + /** + * @param overallArtifactTrafficInBytes + * the overallArtifactTrafficInBytes to set + */ + public void setOverallArtifactTrafficInBytes(final long overallArtifactTrafficInBytes) { + this.overallArtifactTrafficInBytes = overallArtifactTrafficInBytes; + } + @Override - public int hashCode() { // NOSONAR - as this is generated code + public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (int) (actions ^ (actions >>> 32)); result = prime * result + (int) (artifacts ^ (artifacts >>> 32)); + result = prime * result + (int) (overallArtifactTrafficInBytes ^ (overallArtifactTrafficInBytes >>> 32)); result = prime * result + (int) (overallArtifactVolumeInBytes ^ (overallArtifactVolumeInBytes >>> 32)); result = prime * result + (int) (targets ^ (targets >>> 32)); result = prime * result + ((tenantName == null) ? 0 : tenantName.hashCode()); @@ -118,8 +135,7 @@ public class TenantUsage { } @Override - public boolean equals(final Object obj) { // NOSONAR - as this is generated - // code + public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -136,6 +152,9 @@ public class TenantUsage { if (artifacts != other.artifacts) { return false; } + if (overallArtifactTrafficInBytes != other.overallArtifactTrafficInBytes) { + return false; + } if (overallArtifactVolumeInBytes != other.overallArtifactVolumeInBytes) { return false; } @@ -154,8 +173,9 @@ public class TenantUsage { @Override public String toString() { - return "SystemUsage [tenantName=" + tenantName + ", targets=" + targets + ", artifacts=" + artifacts - + ", actions=" + actions + ", overallArtifactVolumeInBytes=" + overallArtifactVolumeInBytes + "]"; + return "TenantUsage [tenantName=" + tenantName + ", targets=" + targets + ", artifacts=" + artifacts + + ", actions=" + actions + ", overallArtifactVolumeInBytes=" + overallArtifactVolumeInBytes + + ", overallArtifactTrafficInBytes=" + overallArtifactTrafficInBytes + "]"; } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java index 217fe8801..7236cbe79 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -54,6 +54,7 @@ import org.eclipse.hawkbit.repository.jpa.model.helper.TenantConfigurationManage import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration; @@ -71,6 +72,8 @@ import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; +import com.google.common.eventbus.EventBus; + /** * General configuration for hawkBit's Repository. * @@ -85,6 +88,9 @@ import org.springframework.validation.beanvalidation.MethodValidationPostProcess @EnableConfigurationProperties(RepositoryProperties.class) @EnableScheduling public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { + @Autowired + private EventBus eventBus; + /** * @return the {@link SystemSecurityContext} singleton bean which make it * accessible in beans which cannot access the service directly, @@ -249,7 +255,9 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { @Bean @ConditionalOnMissingBean public TenantStatsManagement tenantStatsManagement() { - return new JpaTenantStatsManagement(); + final TenantStatsManagement mgmt = new JpaTenantStatsManagement(); + eventBus.register(mgmt); + return mgmt; } /** 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 b9dfce105..eb494ab7a 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 @@ -469,8 +469,8 @@ public class JpaControllerManagement implements ControllerManagement { } @Override - public void downloadProgressPercent(final long statusId, final int progressPercent) { - cacheWriteNotify.downloadProgressPercent(statusId, progressPercent); + public void downloadProgressPercent(final long statusId, final int progressPercent, final long shippedBytes) { + cacheWriteNotify.downloadProgressPercent(statusId, progressPercent, shippedBytes); } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index ea6c99708..1786dc976 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -147,7 +147,7 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst final List tenants = findTenants(); tenants.forEach(tenant -> tenantAware.runAsTenant(tenant, () -> { - report.addTenantData(systemStatsManagement.getStatsOfTenant(tenant)); + report.addTenantData(systemStatsManagement.getStatsOfTenant()); return null; })); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java index 75f99d886..ecae92c72 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java @@ -8,17 +8,23 @@ */ package org.eclipse.hawkbit.repository.jpa; +import java.util.Map; import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; +import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.eclipse.hawkbit.repository.report.model.TenantUsage; +import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import com.google.common.eventbus.Subscribe; + /** * Management service for statistics of a single tenant. * @@ -35,9 +41,16 @@ public class JpaTenantStatsManagement implements TenantStatsManagement { @Autowired private ActionRepository actionRepository; + @Autowired + private TenantAware tenantAware; + + private final Map traffic = new ConcurrentHashMap<>(); + @Override @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED) - public TenantUsage getStatsOfTenant(final String tenant) { + public TenantUsage getStatsOfTenant() { + final String tenant = tenantAware.getCurrentTenant(); + final TenantUsage result = new TenantUsage(tenant); result.setTargets(targetRepository.count()); @@ -51,9 +64,26 @@ public class JpaTenantStatsManagement implements TenantStatsManagement { } result.setActions(actionRepository.count()); + if (traffic.containsKey(tenant)) { + result.setOverallArtifactTrafficInBytes(traffic.get(tenant).get()); + } return result; } + @Override + public void resetTrafficStatsOfTenant() { + traffic.remove(tenantAware.getCurrentTenant()); + } + + @Subscribe + public void listen(final DownloadProgressEvent event) { + if (traffic.containsKey(event.getTenant())) { + traffic.get(event.getTenant()).addAndGet(event.getShippedBytes()); + } else { + traffic.put(event.getTenant(), new AtomicLong(event.getShippedBytes())); + } + } + } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java index fdaf868e8..1f186821c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java @@ -54,8 +54,10 @@ public class CacheWriteNotify { * the ID of the {@link ActionStatus} * @param progressPercent * the progress in percentage which must be between 0-100 + * @param shippedBytes + * since last event */ - public void downloadProgressPercent(final long statusId, final int progressPercent) { + public void downloadProgressPercent(final long statusId, final int progressPercent, final long shippedBytes) { final Cache cache = cacheManager.getCache(Action.class.getName()); final String cacheKey = CacheKeys.entitySpecificCacheKey(String.valueOf(statusId), @@ -69,7 +71,8 @@ public class CacheWriteNotify { cache.evict(cacheKey); } - eventBus.post(new DownloadProgressEvent(tenantAware.getCurrentTenant(), statusId, progressPercent)); + eventBus.post( + new DownloadProgressEvent(tenantAware.getCurrentTenant(), statusId, progressPercent, shippedBytes)); } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java index 603af17c9..37538086d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java @@ -64,7 +64,7 @@ public class CacheWriteNotifyTest { when(cacheManagerMock.getCache(Action.class.getName())).thenReturn(cacheMock); when(tenantAwareMock.getCurrentTenant()).thenReturn("default"); - underTest.downloadProgressPercent(knownStatusId, knownPercentage); + underTest.downloadProgressPercent(knownStatusId, knownPercentage, 100L); verify(cacheManagerMock).getCache(eq(Action.class.getName())); verify(cacheMock).put(knownStatusId + "." + CacheKeys.DOWNLOAD_PROGRESS_PERCENT, knownPercentage); diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java index 3d09fabc3..63dcfaad0 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java @@ -23,6 +23,7 @@ import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.security.DosFilter; @@ -93,6 +94,9 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Autowired protected TargetManagement targetManagement; + @Autowired + protected TenantStatsManagement tenantStatsManagement; + @Autowired protected TargetFilterQueryManagement targetFilterQueryManagement; diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java index 875152e0e..53ed28d40 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java @@ -293,6 +293,7 @@ public final class RestResourceConversionHelper { long toRead = length; boolean toContinue = true; + long shippedSinceLastEvent = 0; while (toContinue) { final int r = from.read(buf); @@ -304,9 +305,11 @@ public final class RestResourceConversionHelper { if (toRead > 0) { to.write(buf, 0, r); total += r; + shippedSinceLastEvent += r; } else { to.write(buf, 0, (int) toRead + r); total += toRead + r; + shippedSinceLastEvent += toRead + r; toContinue = false; } @@ -316,7 +319,8 @@ public final class RestResourceConversionHelper { // every 10 percent an event if (newPercent == 100 || newPercent > progressPercent + 10) { progressPercent = newPercent; - controllerManagement.downloadProgressPercent(statusId, progressPercent); + controllerManagement.downloadProgressPercent(statusId, progressPercent, shippedSinceLastEvent); + shippedSinceLastEvent = 0; } } } From 3a72627940bcced491c168595515dcb95c19e18c Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 6 Jul 2016 09:17:31 +0200 Subject: [PATCH 337/371] Add traffic stats to mgmt API Signed-off-by: Kai Zimmermann --- .../systemmanagement/MgmtSystemTenantServiceUsage.java | 10 +++++++++- .../rest/resource/MgmtSystemManagementResource.java | 1 + .../hawkbit/repository/TenantStatsManagement.java | 6 ++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java index 8cce4314b..8086323de 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java @@ -25,6 +25,7 @@ public class MgmtSystemTenantServiceUsage { private long artifacts; private long actions; private long overallArtifactVolumeInBytes; + private long overallArtifactTrafficInBytes; /** * Constructor. @@ -32,10 +33,17 @@ public class MgmtSystemTenantServiceUsage { * @param tenantName */ public MgmtSystemTenantServiceUsage(final String tenantName) { - super(); this.tenantName = tenantName; } + public long getOverallArtifactTrafficInBytes() { + return overallArtifactTrafficInBytes; + } + + public void setOverallArtifactTrafficInBytes(final long overallArtifactTrafficInBytes) { + this.overallArtifactTrafficInBytes = overallArtifactTrafficInBytes; + } + public long getTargets() { return targets; } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java index 3392d2659..d1586a299 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java @@ -87,6 +87,7 @@ public class MgmtSystemManagementResource implements MgmtSystemManagementRestApi result.setArtifacts(tenant.getArtifacts()); result.setOverallArtifactVolumeInBytes(tenant.getOverallArtifactVolumeInBytes()); result.setTargets(tenant.getTargets()); + result.setOverallArtifactTrafficInBytes(tenant.getOverallArtifactTrafficInBytes()); return result; } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java index 48a012b06..9811b3c1a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java @@ -25,14 +25,16 @@ public interface TenantStatsManagement { */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.HAS_AUTH_READ_TARGET + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) + + SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) TenantUsage getStatsOfTenant(); /** * Resets {@link TenantUsage#getOverallArtifactTrafficInBytes()} to zero. * */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) void resetTrafficStatsOfTenant(); } \ No newline at end of file From 2dee45ca9c63994428c2cb6bda58795f26939a0f Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 7 Jul 2016 11:43:18 +0200 Subject: [PATCH 338/371] Fixed JavaDoc. Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java index a4be22f70..0ecc13bbf 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java @@ -29,7 +29,7 @@ public class DownloadProgressEvent extends AbstractDistributedEvent { * @param tenant * the tenant for this event * @param statusId - * of {@link UpdateActionStatus} + * of {@link Action} * @param progressPercent * number (1-100) */ From a9204fe5ebe558221dffa629324672a5beaa08d5 Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Thu, 7 Jul 2016 13:20:04 +0200 Subject: [PATCH 339/371] Removed commented code. Signed-off-by: kaizimmerm --- .../org/eclipse/hawkbit/repository/SystemManagement.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java index 8797ada5c..76a48a173 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -63,11 +63,6 @@ public interface SystemManagement { /** * @return {@link TenantMetaData} of {@link TenantAware#getCurrentTenant()} */ - // @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY + - // SpringEvalExpressions.HAS_AUTH_OR - // + SpringEvalExpressions.HAS_AUTH_READ_TARGET + - // SpringEvalExpressions.HAS_AUTH_OR - // + SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) TenantMetaData getTenantMetadata(); /** @@ -84,7 +79,6 @@ public interface SystemManagement { * to retrieve data for * @return {@link TenantMetaData} of given tenant */ - // @PreAuthorize(SpringEvalExpressions.IS_SYSTEM_CODE) TenantMetaData getTenantMetadata(@NotNull String tenant); /** @@ -94,7 +88,6 @@ public interface SystemManagement { * to update * @return updated {@link TenantMetaData} entity */ - // @PreAuthorize(SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) TenantMetaData updateTenantMetadata(@NotNull TenantMetaData metaData); } \ No newline at end of file From 8fb2bd43224e79c5fc8aedfef95e6b27a5038ddd Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Thu, 7 Jul 2016 14:46:29 +0200 Subject: [PATCH 340/371] Fixed download progress event. Signed-off-by: kaizimmerm --- .../cache/eventbus/EventDistributorTest.java | 8 ++--- .../eventbus/event/DownloadProgressEvent.java | 30 +++++++++---------- .../resource/DdiArtifactStoreController.java | 10 +++---- .../ddi/rest/resource/DdiRootController.java | 10 +++---- .../resource/DdiArtifactDownloadTest.java | 24 +++++++-------- .../MgmtSystemTenantServiceUsage.java | 9 ------ .../MgmtSystemManagementResource.java | 1 - .../repository/ControllerManagement.java | 13 +++++--- .../repository/TenantStatsManagement.java | 8 ----- .../repository/report/model/TenantUsage.java | 25 ++-------------- .../jpa/JpaControllerManagement.java | 9 +++--- .../jpa/JpaTenantStatsManagement.java | 25 ---------------- .../jpa/cache/CacheWriteNotify.java | 14 +++++---- .../jpa/cache/CacheWriteNotifyTest.java | 8 ++--- .../util/RestResourceConversionHelper.java | 6 ++-- 15 files changed, 73 insertions(+), 127 deletions(-) diff --git a/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java b/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java index 4dbc3ec9a..1f5b41581 100644 --- a/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java +++ b/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java @@ -56,7 +56,7 @@ public class EventDistributorTest { @Test public void distributeDistributedEventSendsToRedis() { - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L, 200L); underTest.distribute(event); // origin node ID should be set by distributing the event @@ -67,7 +67,7 @@ public class EventDistributorTest { @Test public void dontDistributeDistributedEventIfSameNode() { final String knownNodeId = EventDistributor.getNodeId(); - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L, 200L); event.setNodeId(knownNodeId); // test @@ -79,7 +79,7 @@ public class EventDistributorTest { @Test public void handleDistributedMessageFromRedis() { - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L, 200L); final String knownChannel = "someChannel"; underTest.handleMessage(event, knownChannel); @@ -90,7 +90,7 @@ public class EventDistributorTest { @Test public void handleDistributedMessageFilteredIfSameNodeId() { - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L, 200L); final String knownChannel = "someChannel"; event.setOriginNodeId(EventDistributor.getNodeId()); diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java index 0ecc13bbf..81ee0468a 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java @@ -21,7 +21,8 @@ public class DownloadProgressEvent extends AbstractDistributedEvent { private final Long statusId; private final int progressPercent; - private final long shippedBytes; + private final long shippedBytesSinceLast; + private final long shippedBytesOverall; /** * Constructor. @@ -29,40 +30,39 @@ public class DownloadProgressEvent extends AbstractDistributedEvent { * @param tenant * the tenant for this event * @param statusId - * of {@link Action} + * of {@link ActionStatus} * @param progressPercent * number (1-100) + * @param shippedBytesSinceLast + * bytes since last event + * @param shippedBytesOverall + * on the download request */ public DownloadProgressEvent(final String tenant, final Long statusId, final int progressPercent, - final long shippedBytes) { + final long shippedBytesSinceLast, final long shippedBytesOverall) { // the revision of the DownloadProgressEvent is just equal the // progressPercentage due the // percentage is going from 0 to 100. super(statusId, tenant); this.statusId = statusId; this.progressPercent = progressPercent; - this.shippedBytes = shippedBytes; + this.shippedBytesSinceLast = shippedBytesSinceLast; + this.shippedBytesOverall = shippedBytesOverall; } - /** - * @return the statusId - */ public Long getStatusId() { return statusId; } - /** - * @return the progressPercent - */ public int getProgressPercent() { return progressPercent; } - /** - * @return the shippedBytes - */ - public long getShippedBytes() { - return shippedBytes; + public long getShippedBytesSinceLast() { + return shippedBytesSinceLast; } + public long getShippedBytesOverall() { + return shippedBytesOverall; + } } diff --git a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java index 75d502c47..e2af0a873 100644 --- a/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java +++ b/hawkbit-ddi-resource/src/main/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactStoreController.java @@ -93,12 +93,12 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR // we set a download status only if we are aware of the // targetid, i.e. authenticated and not anonymous if (targetid != null && !"anonymous".equals(targetid)) { - final Action action = checkAndReportDownloadByTarget( + final ActionStatus actionStatus = checkAndReportDownloadByTarget( requestResponseContextHolder.getHttpServletRequest(), targetid, artifact); result = RestResourceConversionHelper.writeFileResponse(artifact, requestResponseContextHolder.getHttpServletResponse(), requestResponseContextHolder.getHttpServletRequest(), file, controllerManagement, - action.getId()); + actionStatus.getId()); } else { result = RestResourceConversionHelper.writeFileResponse(artifact, requestResponseContextHolder.getHttpServletResponse(), @@ -131,7 +131,7 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR return new ResponseEntity<>(HttpStatus.OK); } - private Action checkAndReportDownloadByTarget(final HttpServletRequest request, final String targetid, + private ActionStatus checkAndReportDownloadByTarget(final HttpServletRequest request, final String targetid, final LocalArtifact artifact) { final Target target = controllerManagement.updateLastTargetQuery(targetid, IpUtil.getClientIpFromRequest(request, securityProperties)); @@ -152,8 +152,8 @@ public class DdiArtifactStoreController implements DdiDlArtifactStoreControllerR actionStatus.addMessage( RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } - controllerManagement.addInformationalActionStatus(actionStatus); - return action; + + return controllerManagement.addInformationalActionStatus(actionStatus); } } 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 120e6c246..9dd65d5fc 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 @@ -156,8 +156,8 @@ public class DdiRootController implements DdiRootControllerRestApi { if (ifMatch != null && !RestResourceConversionHelper.matchesHttpHeader(ifMatch, artifact.getSha1Hash())) { result = new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); } else { - final Action action = checkAndLogDownload(requestResponseContextHolder.getHttpServletRequest(), target, - module); + final ActionStatus action = checkAndLogDownload(requestResponseContextHolder.getHttpServletRequest(), + target, module); result = RestResourceConversionHelper.writeFileResponse(artifact, requestResponseContextHolder.getHttpServletResponse(), requestResponseContextHolder.getHttpServletRequest(), file, controllerManagement, @@ -167,7 +167,7 @@ public class DdiRootController implements DdiRootControllerRestApi { return result; } - private Action checkAndLogDownload(final HttpServletRequest request, final Target target, + private ActionStatus checkAndLogDownload(final HttpServletRequest request, final Target target, final SoftwareModule module) { final Action action = controllerManagement .getActionForDownloadByTargetAndSoftwareModule(target.getControllerId(), module); @@ -185,8 +185,8 @@ public class DdiRootController implements DdiRootControllerRestApi { statusMessage.addMessage( RepositoryConstants.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } - controllerManagement.addInformationalActionStatus(statusMessage); - return action; + + return controllerManagement.addInformationalActionStatus(statusMessage); } private static boolean checkModule(final String fileName, final SoftwareModule module) { diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java index 73b8d3f35..c878fa6a7 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java @@ -67,6 +67,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong private volatile int downLoadProgress = 0; private volatile long shippedBytes = 0; + private volatile long shippedBytesTotal = 0; @Autowired private EventBus eventBus; @@ -240,7 +241,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong public void downloadArtifactThroughFileName() throws Exception { downLoadProgress = 1; shippedBytes = 0; - tenantStatsManagement.resetTrafficStatsOfTenant(); + shippedBytesTotal = 0; eventBus.register(this); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); @@ -281,8 +282,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong // download complete assertThat(downLoadProgress).isEqualTo(10); - assertThat(shippedBytes).isEqualTo(ARTIFACT_SIZE) - .isEqualTo(tenantStatsManagement.getStatsOfTenant().getOverallArtifactTrafficInBytes()); + assertThat(shippedBytes).isEqualTo(shippedBytesTotal).isEqualTo(ARTIFACT_SIZE); } @Test @@ -321,7 +321,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong public void downloadArtifactByNameFailsIfNotAuthenticated() throws Exception { downLoadProgress = 1; shippedBytes = 0; - tenantStatsManagement.resetTrafficStatsOfTenant(); + shippedBytesTotal = 0; eventBus.register(this); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); @@ -329,7 +329,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong // create target Target target = entityFactory.generateTarget("4712"); target = targetManagement.createTarget(target); - final List targets = new ArrayList(); + final List targets = new ArrayList<>(); targets.add(target); // create ds @@ -337,7 +337,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong // create artifact final byte random[] = RandomUtils.nextBytes(ARTIFACT_SIZE); - final Artifact artifact = artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), + artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), ds.findFirstModuleByType(osType).getId(), "file1.tar.bz2", false); // download fails as artifact is not yet assigned to target @@ -346,8 +346,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong .andExpect(status().isNotFound()); assertThat(downLoadProgress).isEqualTo(1); - assertThat(shippedBytes).isEqualTo(0) - .isEqualTo(tenantStatsManagement.getStatsOfTenant().getOverallArtifactTrafficInBytes()); + assertThat(shippedBytes).isEqualTo(shippedBytesTotal).isEqualTo(0L); } @Test @@ -356,7 +355,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong public void downloadArtifactByNameByNamedController() throws Exception { downLoadProgress = 1; shippedBytes = 0; - tenantStatsManagement.resetTrafficStatsOfTenant(); + shippedBytesTotal = 0; eventBus.register(this); assertThat(softwareManagement.findSoftwareModulesAll(pageReq)).hasSize(0); @@ -404,8 +403,7 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong // download complete assertThat(downLoadProgress).isEqualTo(10); - assertThat(shippedBytes).isEqualTo(ARTIFACT_SIZE) - .isEqualTo(tenantStatsManagement.getStatsOfTenant().getOverallArtifactTrafficInBytes()); + assertThat(shippedBytes).isEqualTo(shippedBytesTotal).isEqualTo(ARTIFACT_SIZE); } @Test @@ -567,6 +565,8 @@ public class DdiArtifactDownloadTest extends AbstractRestIntegrationTestWithMong @Subscribe public void listen(final DownloadProgressEvent event) { downLoadProgress++; - shippedBytes += event.getShippedBytes(); + shippedBytes += event.getShippedBytesSinceLast(); + shippedBytesTotal = event.getShippedBytesOverall(); + } } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java index 8086323de..c3e37421d 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java @@ -25,7 +25,6 @@ public class MgmtSystemTenantServiceUsage { private long artifacts; private long actions; private long overallArtifactVolumeInBytes; - private long overallArtifactTrafficInBytes; /** * Constructor. @@ -36,14 +35,6 @@ public class MgmtSystemTenantServiceUsage { this.tenantName = tenantName; } - public long getOverallArtifactTrafficInBytes() { - return overallArtifactTrafficInBytes; - } - - public void setOverallArtifactTrafficInBytes(final long overallArtifactTrafficInBytes) { - this.overallArtifactTrafficInBytes = overallArtifactTrafficInBytes; - } - public long getTargets() { return targets; } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java index d1586a299..3392d2659 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java @@ -87,7 +87,6 @@ public class MgmtSystemManagementResource implements MgmtSystemManagementRestApi result.setArtifacts(tenant.getArtifacts()); result.setOverallArtifactVolumeInBytes(tenant.getOverallArtifactVolumeInBytes()); result.setTargets(tenant.getTargets()); - result.setOverallArtifactTrafficInBytes(tenant.getOverallArtifactTrafficInBytes()); return result; } 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 0525bb201..1b20c3bf8 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 @@ -65,11 +65,14 @@ public interface ControllerManagement { * the ID of the {@link ActionStatus} * @param progressPercent * the progress in percentage which must be between 0-100 - * @param shippedBytes - * since last event + * @param shippedBytesSinceLast + * since the last report + * @param shippedBytesOverall + * for the {@link ActionStatus} */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - void downloadProgressPercent(long statusId, int progressPercent, long shippedBytes); + void downloadProgressPercent(long statusId, int progressPercent, long shippedBytesSinceLast, + long shippedBytesOverall); /** * Simple addition of a new {@link ActionStatus} entry to the {@link Action} @@ -77,9 +80,11 @@ public interface ControllerManagement { * * @param statusMessage * to add to the action + * + * @return create {@link ActionStatus} entity */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - void addInformationalActionStatus(@NotNull ActionStatus statusMessage); + ActionStatus addInformationalActionStatus(@NotNull ActionStatus statusMessage); /** * Adds an {@link ActionStatus} entry for an update {@link Action} including diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java index 9811b3c1a..6430eb7c9 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java @@ -29,12 +29,4 @@ public interface TenantStatsManagement { + SpringEvalExpressions.IS_SYSTEM_CODE) TenantUsage getStatsOfTenant(); - /** - * Resets {@link TenantUsage#getOverallArtifactTrafficInBytes()} to zero. - * - */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) - void resetTrafficStatsOfTenant(); - } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java index 76b2baaa0..933ca564b 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java @@ -19,7 +19,6 @@ public class TenantUsage { private long artifacts; private long actions; private long overallArtifactVolumeInBytes; - private long overallArtifactTrafficInBytes; /** * Constructor. @@ -106,28 +105,12 @@ public class TenantUsage { return this; } - /** - * @return the overallArtifactTrafficInBytes - */ - public long getOverallArtifactTrafficInBytes() { - return overallArtifactTrafficInBytes; - } - - /** - * @param overallArtifactTrafficInBytes - * the overallArtifactTrafficInBytes to set - */ - public void setOverallArtifactTrafficInBytes(final long overallArtifactTrafficInBytes) { - this.overallArtifactTrafficInBytes = overallArtifactTrafficInBytes; - } - @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (int) (actions ^ (actions >>> 32)); result = prime * result + (int) (artifacts ^ (artifacts >>> 32)); - result = prime * result + (int) (overallArtifactTrafficInBytes ^ (overallArtifactTrafficInBytes >>> 32)); result = prime * result + (int) (overallArtifactVolumeInBytes ^ (overallArtifactVolumeInBytes >>> 32)); result = prime * result + (int) (targets ^ (targets >>> 32)); result = prime * result + ((tenantName == null) ? 0 : tenantName.hashCode()); @@ -142,7 +125,7 @@ public class TenantUsage { if (obj == null) { return false; } - if (getClass() != obj.getClass()) { + if (!(obj instanceof TenantUsage)) { return false; } final TenantUsage other = (TenantUsage) obj; @@ -152,9 +135,6 @@ public class TenantUsage { if (artifacts != other.artifacts) { return false; } - if (overallArtifactTrafficInBytes != other.overallArtifactTrafficInBytes) { - return false; - } if (overallArtifactVolumeInBytes != other.overallArtifactVolumeInBytes) { return false; } @@ -174,8 +154,7 @@ public class TenantUsage { @Override public String toString() { return "TenantUsage [tenantName=" + tenantName + ", targets=" + targets + ", artifacts=" + artifacts - + ", actions=" + actions + ", overallArtifactVolumeInBytes=" + overallArtifactVolumeInBytes - + ", overallArtifactTrafficInBytes=" + overallArtifactTrafficInBytes + "]"; + + ", actions=" + actions + ", overallArtifactVolumeInBytes=" + overallArtifactVolumeInBytes + "]"; } } 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 eb494ab7a..f62335ec3 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 @@ -451,8 +451,8 @@ public class JpaControllerManagement implements ControllerManagement { @Override @Modifying @Transactional(isolation = Isolation.READ_UNCOMMITTED) - public void addInformationalActionStatus(final ActionStatus statusMessage) { - actionStatusRepository.save((JpaActionStatus) statusMessage); + public ActionStatus addInformationalActionStatus(final ActionStatus statusMessage) { + return actionStatusRepository.save((JpaActionStatus) statusMessage); } @Override @@ -469,8 +469,9 @@ public class JpaControllerManagement implements ControllerManagement { } @Override - public void downloadProgressPercent(final long statusId, final int progressPercent, final long shippedBytes) { - cacheWriteNotify.downloadProgressPercent(statusId, progressPercent, shippedBytes); + public void downloadProgressPercent(final long statusId, final int progressPercent, + final long shippedBytesSinceLast, final long shippedBytesOverall) { + cacheWriteNotify.downloadProgressPercent(statusId, progressPercent, shippedBytesSinceLast, shippedBytesOverall); } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java index ecae92c72..83f37304a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaTenantStatsManagement.java @@ -8,12 +8,8 @@ */ package org.eclipse.hawkbit.repository.jpa; -import java.util.Map; import java.util.Optional; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicLong; -import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.eclipse.hawkbit.repository.report.model.TenantUsage; import org.eclipse.hawkbit.tenancy.TenantAware; @@ -23,8 +19,6 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import com.google.common.eventbus.Subscribe; - /** * Management service for statistics of a single tenant. * @@ -44,8 +38,6 @@ public class JpaTenantStatsManagement implements TenantStatsManagement { @Autowired private TenantAware tenantAware; - private final Map traffic = new ConcurrentHashMap<>(); - @Override @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED) public TenantUsage getStatsOfTenant() { @@ -64,26 +56,9 @@ public class JpaTenantStatsManagement implements TenantStatsManagement { } result.setActions(actionRepository.count()); - if (traffic.containsKey(tenant)) { - result.setOverallArtifactTrafficInBytes(traffic.get(tenant).get()); - } return result; } - @Override - public void resetTrafficStatsOfTenant() { - traffic.remove(tenantAware.getCurrentTenant()); - } - - @Subscribe - public void listen(final DownloadProgressEvent event) { - if (traffic.containsKey(event.getTenant())) { - traffic.get(event.getTenant()).addAndGet(event.getShippedBytes()); - } else { - traffic.put(event.getTenant(), new AtomicLong(event.getShippedBytes())); - } - } - } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java index 1f186821c..3bcf8acc9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.repository.jpa.cache; import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupCreatedEvent; -import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.tenancy.TenantAware; @@ -54,12 +53,15 @@ public class CacheWriteNotify { * the ID of the {@link ActionStatus} * @param progressPercent * the progress in percentage which must be between 0-100 - * @param shippedBytes + * @param shippedBytesSinceLast * since last event + * @param shippedBytesOverall + * for the download request */ - public void downloadProgressPercent(final long statusId, final int progressPercent, final long shippedBytes) { + public void downloadProgressPercent(final long statusId, final int progressPercent, + final long shippedBytesSinceLast, final long shippedBytesOverall) { - final Cache cache = cacheManager.getCache(Action.class.getName()); + final Cache cache = cacheManager.getCache(ActionStatus.class.getName()); final String cacheKey = CacheKeys.entitySpecificCacheKey(String.valueOf(statusId), CacheKeys.DOWNLOAD_PROGRESS_PERCENT); if (progressPercent < DOWNLOAD_PROGRESS_MAX) { @@ -71,8 +73,8 @@ public class CacheWriteNotify { cache.evict(cacheKey); } - eventBus.post( - new DownloadProgressEvent(tenantAware.getCurrentTenant(), statusId, progressPercent, shippedBytes)); + eventBus.post(new DownloadProgressEvent(tenantAware.getCurrentTenant(), statusId, progressPercent, + shippedBytesSinceLast, shippedBytesOverall)); } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java index 37538086d..6a78852cb 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java @@ -14,7 +14,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; -import org.eclipse.hawkbit.repository.model.Action; +import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.tenancy.TenantAware; import org.junit.Before; import org.junit.Test; @@ -61,12 +61,12 @@ public class CacheWriteNotifyTest { final long knownStatusId = 1; final int knownPercentage = 23; - when(cacheManagerMock.getCache(Action.class.getName())).thenReturn(cacheMock); + when(cacheManagerMock.getCache(ActionStatus.class.getName())).thenReturn(cacheMock); when(tenantAwareMock.getCurrentTenant()).thenReturn("default"); - underTest.downloadProgressPercent(knownStatusId, knownPercentage, 100L); + underTest.downloadProgressPercent(knownStatusId, knownPercentage, 100L, 500L); - verify(cacheManagerMock).getCache(eq(Action.class.getName())); + verify(cacheManagerMock).getCache(eq(ActionStatus.class.getName())); verify(cacheMock).put(knownStatusId + "." + CacheKeys.DOWNLOAD_PROGRESS_PERCENT, knownPercentage); verify(eventBusMock).post(any(DownloadProgressEvent.class)); } diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java index 53ed28d40..bd0f8d007 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java @@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.repository.ControllerManagement; +import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -87,7 +88,7 @@ public final class RestResourceConversionHelper { * @param controllerManagement * to write progress updates to * @param statusId - * of the UpdateActionStatus + * of the {@link ActionStatus} * * @return http code * @@ -319,7 +320,8 @@ public final class RestResourceConversionHelper { // every 10 percent an event if (newPercent == 100 || newPercent > progressPercent + 10) { progressPercent = newPercent; - controllerManagement.downloadProgressPercent(statusId, progressPercent, shippedSinceLastEvent); + controllerManagement.downloadProgressPercent(statusId, progressPercent, shippedSinceLastEvent, + total); shippedSinceLastEvent = 0; } } From 21bd2c33ace92acc20056524b4d1cf0f8e7f62f7 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 7 Jul 2016 16:45:07 +0200 Subject: [PATCH 341/371] Add IS_SYSTEM_CODE to all springEvalExpr and remove explicit usage Signed-off-by: Michael Hirsch --- .../repository/DeploymentManagement.java | 6 +- .../hawkbit/repository/RolloutManagement.java | 15 +- .../hawkbit/repository/SystemManagement.java | 10 +- .../TenantConfigurationManagement.java | 12 +- .../im/authentication/SpPermission.java | 133 +++++++++++------- 5 files changed, 96 insertions(+), 80 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 9dc5f74c8..270de3e74 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java @@ -269,8 +269,7 @@ public interface DeploymentManagement { * @return the actions referring a specific rollout and a specific parent * rollout group in a specific status */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) List findActionsByRolloutGroupParentAndStatus(@NotNull Rollout rollout, @NotNull RolloutGroup rolloutGroupParent, @NotNull Action.Status actionStatus); @@ -496,8 +495,7 @@ public interface DeploymentManagement { * the action to start now. * @return the action which has been started */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) Action startScheduledAction(@NotNull Action action); /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java index 2c6e85dda..337475318 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RolloutManagement.java @@ -61,8 +61,7 @@ public interface RolloutManagement { * this check. This check is only applied if the last check is * less than (lastcheck-delay). */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) void checkRunningRollouts(long delayBetweenChecks); /** @@ -266,8 +265,7 @@ public interface RolloutManagement { * if given rollout is not in {@link RolloutStatus#RUNNING}. * Only running rollouts can be paused. */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) void pauseRollout(@NotNull Rollout rollout); /** @@ -281,8 +279,7 @@ public interface RolloutManagement { * if given rollout is not in {@link RolloutStatus#PAUSED}. Only * paused rollouts can be resumed. */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) void resumeRollout(@NotNull Rollout rollout); /** @@ -303,8 +300,7 @@ public interface RolloutManagement { * if given rollout is not in {@link RolloutStatus#READY}. Only * ready rollouts can be started. */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) Rollout startRollout(@NotNull Rollout rollout); /** @@ -326,8 +322,7 @@ public interface RolloutManagement { * if given rollout is not in {@link RolloutStatus#READY}. Only * ready rollouts can be started. */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) Rollout startRolloutAsync(@NotNull Rollout rollout); /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java index 039e4ae13..a44b13d92 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/SystemManagement.java @@ -39,16 +39,14 @@ public interface SystemManagement { * @param tenant * to delete */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) void deleteTenant(@NotNull String tenant); /** * * @return list of all tenant names in the system. */ - @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) List findTenants(); /** @@ -68,8 +66,8 @@ public interface SystemManagement { /** * Returns {@link TenantMetaData} of given and current tenant. Creates for * new tenants also two {@link SoftwareModuleType} (os and app) and - * {@link RepositoryConstants#DEFAULT_DS_TYPES_IN_TENANT} {@link DistributionSetType}s - * (os and os_app). + * {@link RepositoryConstants#DEFAULT_DS_TYPES_IN_TENANT} + * {@link DistributionSetType}s (os and os_app). * * DISCLAIMER: this variant is used during initial login (where the tenant * is not yet in the session). Please user {@link #getTenantMetadata()} for diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java index 734704f05..9c467f9dd 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationManagement.java @@ -54,8 +54,7 @@ public interface TenantConfigurationManagement { * @return if no default value is set and no database value available * or returns the tenant configuration value */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) TenantConfigurationValue buildTenantConfigurationValueByKey(TenantConfigurationKey configurationKey, Class propertyType, TenantConfiguration tenantConfiguration); @@ -87,8 +86,7 @@ public interface TenantConfigurationManagement { * if the property cannot be converted to the given * {@code propertyType} */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) TenantConfigurationValue getConfigurationValue(TenantConfigurationKey configurationKey); /** @@ -114,8 +112,7 @@ public interface TenantConfigurationManagement { * if the property cannot be converted to the given * {@code propertyType} */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) TenantConfigurationValue getConfigurationValue(TenantConfigurationKey configurationKey, Class propertyType); @@ -139,7 +136,6 @@ public interface TenantConfigurationManagement { * if the property cannot be converted to the given * {@code propertyType} */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_SYSTEM_CODE) + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) T getGlobalConfigurationValue(TenantConfigurationKey configurationKey, Class propertyType); } diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java index 139954538..aace01248 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java @@ -224,8 +224,10 @@ public final class SpPermission { /* * Spring security eval expressions. */ - private static final String HAS_AUTH_PREFIX = "hasAuthority('"; - private static final String HAS_AUTH_SUFFIX = "')"; + private static final String BRACKET_OPEN = "("; + private static final String BRACKET_CLOSE = ")"; + private static final String HAS_AUTH_PREFIX = "hasAuthority" + BRACKET_OPEN + "'"; + private static final String HAS_AUTH_SUFFIX = "'" + BRACKET_CLOSE; private static final String HAS_AUTH_AND = " and "; /** @@ -258,81 +260,109 @@ public final class SpPermission { public static final String HAS_AUTH_OR = " or "; /** - * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#UPDATE_TARGET}. + * Spring security eval hasAnyRole expression to check if the spring + * context contains system code role + * {@link SpringEvalExpressions#SYSTEM_ROLE}. */ - public static final String HAS_AUTH_UPDATE_TARGET = HAS_AUTH_PREFIX + UPDATE_TARGET + HAS_AUTH_SUFFIX; + public static final String IS_SYSTEM_CODE = HAS_AUTH_PREFIX + SYSTEM_ROLE + HAS_AUTH_SUFFIX; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#SYSTEM_ADMIN}. + * context contains {@link SpPermission#UPDATE_TARGET} or + * {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_SYSTEM_ADMIN = HAS_AUTH_PREFIX + SYSTEM_ADMIN + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_UPDATE_TARGET = HAS_AUTH_PREFIX + UPDATE_TARGET + HAS_AUTH_SUFFIX + + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#READ_TARGET}. + * context contains {@link SpPermission#SYSTEM_ADMIN} or + * {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_READ_TARGET = HAS_AUTH_PREFIX + READ_TARGET + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_SYSTEM_ADMIN = HAS_AUTH_PREFIX + SYSTEM_ADMIN + HAS_AUTH_SUFFIX + + HAS_AUTH_OR + IS_SYSTEM_CODE;; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#CREATE_TARGET}. + * context contains {@link SpPermission#READ_TARGET} or + * {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_CREATE_TARGET = HAS_AUTH_PREFIX + CREATE_TARGET + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_READ_TARGET = HAS_AUTH_PREFIX + READ_TARGET + HAS_AUTH_SUFFIX + HAS_AUTH_OR + + IS_SYSTEM_CODE;; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#DELETE_TARGET}. + * context contains {@link SpPermission#CREATE_TARGET} or + * {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_DELETE_TARGET = HAS_AUTH_PREFIX + DELETE_TARGET + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_CREATE_TARGET = HAS_AUTH_PREFIX + CREATE_TARGET + HAS_AUTH_SUFFIX + + HAS_AUTH_OR + IS_SYSTEM_CODE;; + + /** + * Spring security eval hasAuthority expression to check if spring + * context contains {@link SpPermission#DELETE_TARGET} or + * {@link #IS_SYSTEM_CODE}. + */ + public static final String HAS_AUTH_DELETE_TARGET = HAS_AUTH_PREFIX + DELETE_TARGET + HAS_AUTH_SUFFIX + + HAS_AUTH_OR + IS_SYSTEM_CODE;; /** * Spring security eval hasAuthority expression to check if spring * context contains {@link SpPermission#READ_REPOSITORY} and - * {@link SpPermission#UPDATE_TARGET}. + * {@link SpPermission#UPDATE_TARGET} or {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET = HAS_AUTH_PREFIX + READ_REPOSITORY - + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + UPDATE_TARGET + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET = BRACKET_OPEN + HAS_AUTH_PREFIX + + READ_REPOSITORY + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + UPDATE_TARGET + HAS_AUTH_SUFFIX + + BRACKET_CLOSE + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#CREATE_REPOSITORY}. + * context contains {@link SpPermission#CREATE_REPOSITORY} or + * {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_CREATE_REPOSITORY = HAS_AUTH_PREFIX + CREATE_REPOSITORY + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_CREATE_REPOSITORY = HAS_AUTH_PREFIX + CREATE_REPOSITORY + HAS_AUTH_SUFFIX + + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#DELETE_REPOSITORY}. + * context contains {@link SpPermission#DELETE_REPOSITORY} or + * {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_DELETE_REPOSITORY = HAS_AUTH_PREFIX + DELETE_REPOSITORY + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_DELETE_REPOSITORY = HAS_AUTH_PREFIX + DELETE_REPOSITORY + HAS_AUTH_SUFFIX + + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#READ_REPOSITORY}. + * context contains {@link SpPermission#READ_REPOSITORY} or + * {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_READ_REPOSITORY = HAS_AUTH_PREFIX + READ_REPOSITORY + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_READ_REPOSITORY = HAS_AUTH_PREFIX + READ_REPOSITORY + HAS_AUTH_SUFFIX + + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#UPDATE_REPOSITORY}. + * context contains {@link SpPermission#UPDATE_REPOSITORY} or + * {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_UPDATE_REPOSITORY = HAS_AUTH_PREFIX + UPDATE_REPOSITORY + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_UPDATE_REPOSITORY = HAS_AUTH_PREFIX + UPDATE_REPOSITORY + HAS_AUTH_SUFFIX + + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring * context contains {@link SpPermission#READ_REPOSITORY} and - * {@link SpPermission#READ_TARGET}. + * {@link SpPermission#READ_TARGET} or {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET = HAS_AUTH_PREFIX + READ_REPOSITORY - + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + READ_TARGET + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_READ_REPOSITORY_AND_READ_TARGET = BRACKET_OPEN + HAS_AUTH_PREFIX + + READ_REPOSITORY + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + READ_TARGET + HAS_AUTH_SUFFIX + + BRACKET_CLOSE + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#DOWNLOAD_REPOSITORY_ARTIFACT}. + * context contains {@link SpPermission#DOWNLOAD_REPOSITORY_ARTIFACT} or + * {@link #IS_SYSTEM_CODE}. */ public static final String HAS_AUTH_DOWNLOAD_ARTIFACT = HAS_AUTH_PREFIX + DOWNLOAD_REPOSITORY_ARTIFACT - + HAS_AUTH_SUFFIX; + + HAS_AUTH_SUFFIX + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAnyRole expression to check if the spring @@ -350,57 +380,56 @@ public final class SpPermission { public static final String HAS_CONTROLLER_DOWNLOAD = HAS_AUTH_PREFIX + CONTROLLER_DOWNLOAD_ROLE + HAS_AUTH_SUFFIX; - /** - * Spring security eval hasAnyRole expression to check if the spring - * context contains system code role - * {@link SpringEvalExpressions#SYSTEM_ROLE}. - */ - public static final String IS_SYSTEM_CODE = HAS_AUTH_PREFIX + SYSTEM_ROLE + HAS_AUTH_SUFFIX; - /** * Spring security eval hasAuthority expression to check if spring * context contains {@link SpPermission#CREATE_REPOSITORY} and - * {@link SpPermission#CREATE_TARGET}. + * {@link SpPermission#CREATE_TARGET} or {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_CREATE_REPOSITORY_AND_CREATE_TARGET = HAS_AUTH_PREFIX + CREATE_REPOSITORY - + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + CREATE_TARGET + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_CREATE_REPOSITORY_AND_CREATE_TARGET = BRACKET_OPEN + HAS_AUTH_PREFIX + + CREATE_REPOSITORY + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + CREATE_TARGET + HAS_AUTH_SUFFIX + + BRACKET_CLOSE + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#ROLLOUT_MANAGEMENT} + * context contains {@link SpPermission#ROLLOUT_MANAGEMENT} or + * {@link #IS_SYSTEM_CODE}. */ public static final String HAS_AUTH_ROLLOUT_MANAGEMENT_READ = HAS_AUTH_PREFIX + ROLLOUT_MANAGEMENT - + HAS_AUTH_SUFFIX; + + HAS_AUTH_SUFFIX + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring * context contains {@link SpPermission#ROLLOUT_MANAGEMENT} and - * {@link SpPermission#READ_TARGET} + * {@link SpPermission#READ_TARGET} or {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_ROLLOUT_MANAGEMENT_READ_AND_TARGET_READ = HAS_AUTH_PREFIX - + ROLLOUT_MANAGEMENT + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + READ_TARGET - + HAS_AUTH_SUFFIX;; + public static final String HAS_AUTH_ROLLOUT_MANAGEMENT_READ_AND_TARGET_READ = BRACKET_OPEN + HAS_AUTH_PREFIX + + ROLLOUT_MANAGEMENT + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + READ_TARGET + HAS_AUTH_SUFFIX + + BRACKET_CLOSE + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring * context contains {@link SpPermission#ROLLOUT_MANAGEMENT} and - * {@link SpPermission#UPDATE_TARGET}. + * {@link SpPermission#UPDATE_TARGET} or {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE = HAS_AUTH_PREFIX + ROLLOUT_MANAGEMENT - + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + UPDATE_TARGET + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE = BRACKET_OPEN + HAS_AUTH_PREFIX + + ROLLOUT_MANAGEMENT + HAS_AUTH_SUFFIX + HAS_AUTH_AND + HAS_AUTH_PREFIX + UPDATE_TARGET + + HAS_AUTH_SUFFIX + BRACKET_CLOSE + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#TENANT_CONFIGURATION} + * context contains {@link SpPermission#TENANT_CONFIGURATION} or + * {@link #IS_SYSTEM_CODE}. */ public static final String HAS_AUTH_TENANT_CONFIGURATION = HAS_AUTH_PREFIX + TENANT_CONFIGURATION - + HAS_AUTH_SUFFIX; + + HAS_AUTH_SUFFIX + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring - * context contains {@link SpPermission#SYSTEM_MONITOR} + * context contains {@link SpPermission#SYSTEM_MONITOR} or + * {@link #IS_SYSTEM_CODE}. */ - public static final String HAS_AUTH_SYSTEM_MONITOR = HAS_AUTH_PREFIX + SYSTEM_MONITOR + HAS_AUTH_SUFFIX; + public static final String HAS_AUTH_SYSTEM_MONITOR = HAS_AUTH_PREFIX + SYSTEM_MONITOR + HAS_AUTH_SUFFIX + + HAS_AUTH_OR + IS_SYSTEM_CODE; private SpringEvalExpressions() { // utility class From c3586b02303570306a15cacc0ac557522a3f7cfb Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 8 Jul 2016 10:20:37 +0200 Subject: [PATCH 342/371] remove double ended semicolon Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/im/authentication/SpPermission.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java index aace01248..7d52b7a01 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java @@ -280,7 +280,7 @@ public final class SpPermission { * {@link #IS_SYSTEM_CODE}. */ public static final String HAS_AUTH_SYSTEM_ADMIN = HAS_AUTH_PREFIX + SYSTEM_ADMIN + HAS_AUTH_SUFFIX - + HAS_AUTH_OR + IS_SYSTEM_CODE;; + + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring @@ -288,7 +288,7 @@ public final class SpPermission { * {@link #IS_SYSTEM_CODE}. */ public static final String HAS_AUTH_READ_TARGET = HAS_AUTH_PREFIX + READ_TARGET + HAS_AUTH_SUFFIX + HAS_AUTH_OR - + IS_SYSTEM_CODE;; + + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring @@ -296,7 +296,7 @@ public final class SpPermission { * {@link #IS_SYSTEM_CODE}. */ public static final String HAS_AUTH_CREATE_TARGET = HAS_AUTH_PREFIX + CREATE_TARGET + HAS_AUTH_SUFFIX - + HAS_AUTH_OR + IS_SYSTEM_CODE;; + + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring @@ -304,7 +304,7 @@ public final class SpPermission { * {@link #IS_SYSTEM_CODE}. */ public static final String HAS_AUTH_DELETE_TARGET = HAS_AUTH_PREFIX + DELETE_TARGET + HAS_AUTH_SUFFIX - + HAS_AUTH_OR + IS_SYSTEM_CODE;; + + HAS_AUTH_OR + IS_SYSTEM_CODE; /** * Spring security eval hasAuthority expression to check if spring From 9a4903526aacc5b271326f6d26cb897d87efbebc Mon Sep 17 00:00:00 2001 From: kaizimmerm Date: Fri, 8 Jul 2016 13:00:47 +0200 Subject: [PATCH 343/371] Removed percentage from the event. Moved event into the repo API. Signed-off-by: kaizimmerm --- hawkbit-cache-redis/pom.xml | 6 ++++ .../cache/eventbus/EventDistributorTest.java | 10 +++--- .../resource/DdiArtifactDownloadTest.java | 2 +- .../repository/ControllerManagement.java | 13 ++++---- .../repository/TenantStatsManagement.java | 3 +- .../eventbus/event/DownloadProgressEvent.java | 33 +++++++++---------- .../hawkbit/repository/model/Action.java | 6 ---- .../repository/model/ActionStatus.java | 6 ++++ .../jpa/JpaControllerManagement.java | 6 ++-- .../jpa/cache/CacheWriteNotify.java | 25 +++++++------- .../repository/jpa/model/JpaAction.java | 19 ----------- .../repository/jpa/model/JpaActionStatus.java | 15 +++++++++ .../jpa/cache/CacheWriteNotifyTest.java | 7 ++-- .../test/util/AbstractIntegrationTest.java | 4 --- .../util/RestResourceConversionHelper.java | 3 +- 15 files changed, 78 insertions(+), 80 deletions(-) rename {hawkbit-core/src/main/java/org/eclipse/hawkbit => hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository}/eventbus/event/DownloadProgressEvent.java (68%) diff --git a/hawkbit-cache-redis/pom.xml b/hawkbit-cache-redis/pom.xml index 09567291b..637a6b49f 100644 --- a/hawkbit-cache-redis/pom.xml +++ b/hawkbit-cache-redis/pom.xml @@ -45,6 +45,12 @@ + + org.eclipse.hawkbit + hawkbit-repository-api + ${project.version} + test + org.springframework.boot spring-boot-starter-test diff --git a/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java b/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java index 1f5b41581..bebd82484 100644 --- a/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java +++ b/hawkbit-cache-redis/src/test/java/org/eclipse/hawkbit/cache/eventbus/EventDistributorTest.java @@ -16,8 +16,8 @@ import static org.mockito.Mockito.verify; import java.util.Collection; -import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.eventbus.event.EntityEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DownloadProgressEvent; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -56,7 +56,7 @@ public class EventDistributorTest { @Test public void distributeDistributedEventSendsToRedis() { - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L, 200L); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 500L, 100L, 200L); underTest.distribute(event); // origin node ID should be set by distributing the event @@ -67,7 +67,7 @@ public class EventDistributorTest { @Test public void dontDistributeDistributedEventIfSameNode() { final String knownNodeId = EventDistributor.getNodeId(); - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L, 200L); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 500L, 100L, 200L); event.setNodeId(knownNodeId); // test @@ -79,7 +79,7 @@ public class EventDistributorTest { @Test public void handleDistributedMessageFromRedis() { - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L, 200L); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 500L, 100L, 200L); final String knownChannel = "someChannel"; underTest.handleMessage(event, knownChannel); @@ -90,7 +90,7 @@ public class EventDistributorTest { @Test public void handleDistributedMessageFilteredIfSameNodeId() { - final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 10, 100L, 200L); + final DownloadProgressEvent event = new DownloadProgressEvent("tenant", 123L, 500L, 100L, 200L); final String knownChannel = "someChannel"; event.setOriginNodeId(EventDistributor.getNodeId()); diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java index c878fa6a7..81be97b7c 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiArtifactDownloadTest.java @@ -26,7 +26,7 @@ import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.RandomUtils; -import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.Artifact; 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 1b20c3bf8..e5dcb8f74 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 @@ -14,8 +14,8 @@ import java.util.Map; import javax.validation.constraints.NotNull; -import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +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; @@ -58,21 +58,20 @@ public interface ControllerManagement { Action addCancelActionStatus(@NotNull ActionStatus actionStatus); /** - * Sends the download progress in percentage and notifies the - * {@link EventBus} with a {@link DownloadProgressEvent}. + * Sends the download progress and notifies the {@link EventBus} with a + * {@link DownloadProgressEvent}. * * @param statusId * the ID of the {@link ActionStatus} - * @param progressPercent - * the progress in percentage which must be between 0-100 + * @param requestedBytes + * requested bytes of the request * @param shippedBytesSinceLast * since the last report * @param shippedBytesOverall * for the {@link ActionStatus} */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) - void downloadProgressPercent(long statusId, int progressPercent, long shippedBytesSinceLast, - long shippedBytesOverall); + void downloadProgress(Long statusId, Long requestedBytes, Long shippedBytesSinceLast, Long shippedBytesOverall); /** * Simple addition of a new {@link ActionStatus} entry to the {@link Action} diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java index 6430eb7c9..f041bc45f 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/TenantStatsManagement.java @@ -16,10 +16,11 @@ import org.springframework.security.access.prepost.PreAuthorize; * Management service for statistics of a single tenant. * */ +@FunctionalInterface public interface TenantStatsManagement { /** - * Service for stats of a single tenant. + * Service for stats of the current tenant. * * @return collected statistics */ diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DownloadProgressEvent.java similarity index 68% rename from hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java rename to hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DownloadProgressEvent.java index 81ee0468a..6d145e0ae 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/eventbus/event/DownloadProgressEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/eventbus/event/DownloadProgressEvent.java @@ -6,13 +6,13 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.eventbus.event; +package org.eclipse.hawkbit.repository.eventbus.event; + +import org.eclipse.hawkbit.eventbus.event.AbstractDistributedEvent; /** - * Event that contains an updated download progress for a given Action. - * - * - * + * Event that contains an updated download progress for a given ActionStatus + * that was written for a download request. * */ public class DownloadProgressEvent extends AbstractDistributedEvent { @@ -20,7 +20,7 @@ public class DownloadProgressEvent extends AbstractDistributedEvent { private static final long serialVersionUID = 1L; private final Long statusId; - private final int progressPercent; + private final long requestedBytes; private final long shippedBytesSinceLast; private final long shippedBytesOverall; @@ -30,22 +30,21 @@ public class DownloadProgressEvent extends AbstractDistributedEvent { * @param tenant * the tenant for this event * @param statusId - * of {@link ActionStatus} - * @param progressPercent - * number (1-100) + * of ActionStatus that was written for the download request + * @param requestedBytes + * bytes requested * @param shippedBytesSinceLast * bytes since last event * @param shippedBytesOverall * on the download request */ - public DownloadProgressEvent(final String tenant, final Long statusId, final int progressPercent, - final long shippedBytesSinceLast, final long shippedBytesOverall) { + public DownloadProgressEvent(final String tenant, final Long statusId, final Long requestedBytes, + final Long shippedBytesSinceLast, final Long shippedBytesOverall) { // the revision of the DownloadProgressEvent is just equal the - // progressPercentage due the - // percentage is going from 0 to 100. - super(statusId, tenant); + // shippedBytesOverall as this is a growing number. + super(shippedBytesOverall, tenant); this.statusId = statusId; - this.progressPercent = progressPercent; + this.requestedBytes = requestedBytes; this.shippedBytesSinceLast = shippedBytesSinceLast; this.shippedBytesOverall = shippedBytesOverall; } @@ -54,8 +53,8 @@ public class DownloadProgressEvent extends AbstractDistributedEvent { return statusId; } - public int getProgressPercent() { - return progressPercent; + public long getRequestedBytes() { + return requestedBytes; } public long getShippedBytesSinceLast() { diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java index c2b96905e..98d101471 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Action.java @@ -39,12 +39,6 @@ public interface Action extends TenantAwareBaseEntity { return Status.CANCELING.equals(getStatus()) || Status.CANCELED.equals(getStatus()); } - /** - * @return current {@link Status#DOWNLOAD} progress if known by the update - * server. - */ - int getDownloadProgressPercent(); - /** * @return current {@link Status} of the {@link Action}. */ diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java index f3ca66887..e83108fe8 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/ActionStatus.java @@ -43,6 +43,12 @@ public interface ActionStatus extends TenantAwareBaseEntity { */ void addMessage(String message); + /** + * @return current {@link Status#DOWNLOAD} progress if known by the update + * server. + */ + int getDownloadProgressPercent(); + /** * @return list of message entries that can be added to the * {@link ActionStatus}. 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 f62335ec3..b574d1452 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 @@ -469,9 +469,9 @@ public class JpaControllerManagement implements ControllerManagement { } @Override - public void downloadProgressPercent(final long statusId, final int progressPercent, - final long shippedBytesSinceLast, final long shippedBytesOverall) { - cacheWriteNotify.downloadProgressPercent(statusId, progressPercent, shippedBytesSinceLast, shippedBytesOverall); + public void downloadProgress(final Long statusId, final Long requestedBytes, final Long shippedBytesSinceLast, + final Long shippedBytesOverall) { + cacheWriteNotify.downloadProgress(statusId, requestedBytes, shippedBytesSinceLast, shippedBytesOverall); } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java index 3bcf8acc9..6dfdf157f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotify.java @@ -8,7 +8,9 @@ */ package org.eclipse.hawkbit.repository.jpa.cache; -import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; +import java.math.RoundingMode; + +import org.eclipse.hawkbit.repository.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.repository.eventbus.event.RolloutGroupCreatedEvent; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.Rollout; @@ -19,6 +21,7 @@ import org.springframework.cache.CacheManager; import org.springframework.stereotype.Service; import com.google.common.eventbus.EventBus; +import com.google.common.math.DoubleMath; /** * An service which combines the functionality for functional use cases to write @@ -29,10 +32,6 @@ import com.google.common.eventbus.EventBus; */ @Service public class CacheWriteNotify { - - /** - * - */ private static final int DOWNLOAD_PROGRESS_MAX = 100; @Autowired @@ -45,25 +44,29 @@ public class CacheWriteNotify { private TenantAware tenantAware; /** - * writes the download progress in percentage into the cache + * writes the download progress into the cache * {@link CacheKeys#DOWNLOAD_PROGRESS_PERCENT} and notifies the * {@link EventBus} with a {@link DownloadProgressEvent}. * * @param statusId * the ID of the {@link ActionStatus} - * @param progressPercent - * the progress in percentage which must be between 0-100 + * @param requestedBytes + * requested bytes of the request * @param shippedBytesSinceLast * since last event * @param shippedBytesOverall * for the download request */ - public void downloadProgressPercent(final long statusId, final int progressPercent, - final long shippedBytesSinceLast, final long shippedBytesOverall) { + public void downloadProgress(final Long statusId, final Long requestedBytes, final Long shippedBytesSinceLast, + final Long shippedBytesOverall) { final Cache cache = cacheManager.getCache(ActionStatus.class.getName()); final String cacheKey = CacheKeys.entitySpecificCacheKey(String.valueOf(statusId), CacheKeys.DOWNLOAD_PROGRESS_PERCENT); + + final int progressPercent = DoubleMath.roundToInt(shippedBytesOverall * 100.0 / requestedBytes, + RoundingMode.DOWN); + if (progressPercent < DOWNLOAD_PROGRESS_MAX) { cache.put(cacheKey, progressPercent); } else { @@ -73,7 +76,7 @@ public class CacheWriteNotify { cache.evict(cacheKey); } - eventBus.post(new DownloadProgressEvent(tenantAware.getCurrentTenant(), statusId, progressPercent, + eventBus.post(new DownloadProgressEvent(tenantAware.getCurrentTenant(), statusId, requestedBytes, shippedBytesSinceLast, shippedBytesOverall)); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java index 2b8744618..5fa2c3bed 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java @@ -27,10 +27,7 @@ import javax.persistence.NamedEntityGraphs; import javax.persistence.NamedSubgraph; import javax.persistence.OneToMany; import javax.persistence.Table; -import javax.persistence.Transient; -import org.eclipse.hawkbit.repository.jpa.cache.CacheField; -import org.eclipse.hawkbit.repository.jpa.cache.CacheKeys; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -89,13 +86,6 @@ public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Actio @JoinColumn(name = "rollout", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_rollout")) private JpaRollout rollout; - /** - * Note: filled only in {@link Status#DOWNLOAD}. - */ - @Transient - @CacheField(key = CacheKeys.DOWNLOAD_PROGRESS_PERCENT) - private int downloadProgressPercent; - @Override public DistributionSet getDistributionSet() { return distributionSet; @@ -120,15 +110,6 @@ public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Actio this.status = status; } - @Override - public int getDownloadProgressPercent() { - return downloadProgressPercent; - } - - public void setDownloadProgressPercent(final int downloadProgressPercent) { - this.downloadProgressPercent = downloadProgressPercent; - } - @Override public boolean isActive() { return active; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java index ef1ad3d1e..3a8cb8683 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java @@ -24,7 +24,10 @@ import javax.persistence.ManyToOne; import javax.persistence.NamedAttributeNode; import javax.persistence.NamedEntityGraph; import javax.persistence.Table; +import javax.persistence.Transient; +import org.eclipse.hawkbit.repository.jpa.cache.CacheField; +import org.eclipse.hawkbit.repository.jpa.cache.CacheKeys; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; @@ -63,6 +66,13 @@ public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements @Column(name = "detail_message", length = 512) private final List messages = new ArrayList<>(); + /** + * Note: filled only in {@link Status#DOWNLOAD}. + */ + @Transient + @CacheField(key = CacheKeys.DOWNLOAD_PROGRESS_PERCENT) + private int downloadProgressPercent; + /** * Creates a new {@link ActionStatus} object. * @@ -105,6 +115,11 @@ public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements // JPA default constructor. } + @Override + public int getDownloadProgressPercent() { + return downloadProgressPercent; + } + @Override public Long getOccurredAt() { return occurredAt; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java index 6a78852cb..1f6fbca6f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/cache/CacheWriteNotifyTest.java @@ -13,7 +13,7 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import org.eclipse.hawkbit.eventbus.event.DownloadProgressEvent; +import org.eclipse.hawkbit.repository.eventbus.event.DownloadProgressEvent; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.tenancy.TenantAware; import org.junit.Before; @@ -59,15 +59,14 @@ public class CacheWriteNotifyTest { @Test public void downloadgProgressIsCachedAndEventSent() { final long knownStatusId = 1; - final int knownPercentage = 23; when(cacheManagerMock.getCache(ActionStatus.class.getName())).thenReturn(cacheMock); when(tenantAwareMock.getCurrentTenant()).thenReturn("default"); - underTest.downloadProgressPercent(knownStatusId, knownPercentage, 100L, 500L); + underTest.downloadProgress(knownStatusId, 500L, 100L, 100L); verify(cacheManagerMock).getCache(eq(ActionStatus.class.getName())); - verify(cacheMock).put(knownStatusId + "." + CacheKeys.DOWNLOAD_PROGRESS_PERCENT, knownPercentage); + verify(cacheMock).put(knownStatusId + "." + CacheKeys.DOWNLOAD_PROGRESS_PERCENT, 20); verify(eventBusMock).post(any(DownloadProgressEvent.class)); } diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java index 63dcfaad0..3d09fabc3 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java @@ -23,7 +23,6 @@ import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.TargetFilterQueryManagement; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.TenantStatsManagement; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.security.DosFilter; @@ -94,9 +93,6 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Autowired protected TargetManagement targetManagement; - @Autowired - protected TenantStatsManagement tenantStatsManagement; - @Autowired protected TargetFilterQueryManagement targetFilterQueryManagement; diff --git a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java index bd0f8d007..0c9dd39c5 100644 --- a/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java +++ b/hawkbit-rest-core/src/main/java/org/eclipse/hawkbit/rest/util/RestResourceConversionHelper.java @@ -320,8 +320,7 @@ public final class RestResourceConversionHelper { // every 10 percent an event if (newPercent == 100 || newPercent > progressPercent + 10) { progressPercent = newPercent; - controllerManagement.downloadProgressPercent(statusId, progressPercent, shippedSinceLastEvent, - total); + controllerManagement.downloadProgress(statusId, length, shippedSinceLastEvent, total); shippedSinceLastEvent = 0; } } From d0cf8a40bd3de778db14327c5416397526c1726d Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 8 Jul 2016 13:32:02 +0200 Subject: [PATCH 344/371] fix javadoc link Signed-off-by: Michael Hirsch --- .../org/eclipse/hawkbit/im/authentication/SpPermission.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java index 7d52b7a01..daf5f0dd9 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpPermission.java @@ -367,7 +367,7 @@ public final class SpPermission { /** * Spring security eval hasAnyRole expression to check if the spring * context contains the anoynmous role or the controller specific role - * {@link SpPermission#CONTROLLER_ROLE}. + * {@link SpringEvalExpressions#CONTROLLER_ROLE}. */ public static final String IS_CONTROLLER = "hasAnyRole('" + CONTROLLER_ROLE_ANONYMOUS + "', '" + CONTROLLER_ROLE + "')"; @@ -375,7 +375,7 @@ public final class SpPermission { /** * Spring security eval hasAuthority expression to check if the spring * context contains the role to allow controllers to download specific - * role {@link SpPermission#CONTROLLER_DOWNLOAD_ROLE}. + * role {@link SpringEvalExpressions#CONTROLLER_DOWNLOAD_ROLE} */ public static final String HAS_CONTROLLER_DOWNLOAD = HAS_AUTH_PREFIX + CONTROLLER_DOWNLOAD_ROLE + HAS_AUTH_SUFFIX; From 2f9a9b456d43ee9aec67286024e27b0e12a717bf Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 13 Jul 2016 08:41:59 +0200 Subject: [PATCH 345/371] fix sonar critical issues Signed-off-by: Michael Hirsch --- .../org/eclipse/hawkbit/ui/common/CommonDialogWindow.java | 2 +- .../filterlayout/AbstractFilterMultiButtonClick.java | 3 ++- .../eclipse/hawkbit/ui/common/table/AbstractTable.java | 3 --- .../hawkbit/ui/common/tagdetails/AbstractTagToken.java | 8 ++------ .../ui/distributions/dstable/DistributionSetDetails.java | 2 +- .../ui/management/targettable/TargetBeanQuery.java | 2 +- 6 files changed, 7 insertions(+), 13 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java index 725ff4b9b..a6b05e0a5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java @@ -96,7 +96,7 @@ public class CommonDialogWindow extends Window implements Serializable { private final ClickListener close = event -> close(); - private final Map orginalValues; + private final transient Map orginalValues; private final List> allComponents; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java index 8b3ac4cde..f7d3656b1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/filterlayout/AbstractFilterMultiButtonClick.java @@ -22,7 +22,8 @@ import com.vaadin.ui.Button.ClickEvent; */ public abstract class AbstractFilterMultiButtonClick extends AbstractFilterButtonClickBehaviour { - protected final Set